diff --git a/scripts/pve_mapper.py b/scripts/pve_mapper.py new file mode 100644 index 0000000..1483015 --- /dev/null +++ b/scripts/pve_mapper.py @@ -0,0 +1,227 @@ +#!/usr/bin/env python3 +# pve_mapper.py +# Frägt die Proxmox-Cluster-Infrastruktur sowie Docker-Container ab +# und generiert einen strukturierten digitalen Zwilling (JSON). + +import json +import subprocess +import os +import sys + +HOST = "80.90.43.178" +SSH_KEY = os.path.expanduser("~/.ssh/id_rsa") + +def run_ssh(host, command, user="root"): + """Führt einen Befehl über SSH aus und gibt das Ergebnis zurück.""" + ssh_cmd = [ + "ssh", + "-i", SSH_KEY, + "-o", "StrictHostKeyChecking=no", + "-o", "UserKnownHostsFile=/dev/null", + f"{user}@{host}", + command + ] + try: + res = subprocess.run(ssh_cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, timeout=15) + if res.returncode == 0: + return res.stdout.strip() + else: + return None + except subprocess.TimeoutExpired: + return None + except Exception: + return None + +def main(): + print("=== 1. Fräge Proxmox Cluster-Ressourcen ab ===") + pve_raw = run_ssh(HOST, "pvesh get /cluster/resources --output-format json") + if not pve_raw: + print("Fehler: Konnte keine Verbindung zum Proxmox-Host herstellen oder pvesh ausführen.") + sys.exit(1) + + try: + resources = json.loads(pve_raw) + except Exception as e: + print(f"Fehler beim Parsen der Proxmox-Ressourcen: {e}") + sys.exit(1) + + twin = { + "nodes": [], + "vms": [], + "lxcs": [], + "docker_hosts": {} + } + + # Bekannte Docker-Hosts für tiefere Inspektion + known_docker_hosts = { + "80.90.43.178": "pve-host", + "10.190.20.10": "venus-traefik", + "10.190.20.50": "venus-rustdesk" + } + + for res in resources: + res_type = res.get("type") + res_name = res.get("name") + res_node = res.get("node") + vmid = res.get("vmid") + status = res.get("status") + + if res_type == "node": + twin["nodes"].append({ + "name": res.get("node"), + "status": res.get("status"), + "cpu_cores": res.get("maxcpu"), + "memory_max_gb": round(res.get("maxmem", 0) / (1024**3), 2) if res.get("maxmem") else 0 + }) + continue + + if res_type not in ["qemu", "lxc"]: + continue + + item = { + "vmid": vmid, + "name": res_name, + "node": res_node, + "status": status, + "cpu_cores": res.get("maxcpu"), + "memory_max_gb": round(res.get("maxmem", 0) / (1024**3), 2) if res.get("maxmem") else 0, + "ips": [] + } + + if status == "running": + # IP-Adressen ermitteln + if res_type == "qemu": + ip_raw = run_ssh(HOST, f"pvesh get /nodes/{res_node}/qemu/{vmid}/agent/network-get-interfaces --output-format json") + if ip_raw: + try: + interfaces = json.loads(ip_raw).get("result", []) + for iface in interfaces: + for addr in iface.get("ip-addresses", []): + ip = addr.get("ip-address") + if ip and not ip.startswith("127.") and not ip.startswith("172.") and ":" not in ip: + item["ips"].append(ip) + except Exception: + pass + elif res_type == "lxc": + ip_raw = run_ssh(HOST, f"pvesh get /nodes/{res_node}/lxc/{vmid}/interfaces --output-format json") + if ip_raw: + try: + interfaces = json.loads(ip_raw) + for iface in interfaces: + for addr in iface.get("ip-addresses", []): + ip = addr.get("ip-address") + if ip and not ip.startswith("127.") and not ip.startswith("172.") and ":" not in ip: + item["ips"].append(ip) + except Exception: + pass + + if res_type == "qemu": + twin["vms"].append(item) + else: + twin["lxcs"].append(item) + + print("=== 2. Fräge Docker-Container auf aktiven Hosts ab ===") + for ip, label in known_docker_hosts.items(): + print(f"Inspektion von Docker-Host: {label} ({ip})") + # Port 22 oder ProxyJump-Auswertung + # PVE-Host direkt, VMs über SSH-Routing (das lokale ssh-config kümmert sich um das Proxy-Routing) + target = ip + if label == "pve-host": + docker_cmd = "docker ps --format '{{json .}}'" + else: + # Wir verwenden die in ~/.ssh/config definierten Host-Namen (venus-traefik, venus-rustdesk) + target = label + docker_cmd = "docker ps --format '{{json .}}'" + + docker_raw = run_ssh(target, docker_cmd) + if docker_raw: + twin["docker_hosts"][label] = { + "ip": ip, + "containers": [] + } + # Mehrere JSON-Objekte zeilenweise parsen + for line in docker_raw.split("\n"): + if not line.strip(): + continue + try: + c = json.loads(line) + twin["docker_hosts"][label]["containers"].append({ + "id": c.get("ID"), + "name": c.get("Names"), + "image": c.get("Image"), + "status": c.get("Status"), + "ports": c.get("Ports") + }) + except Exception: + pass + + # Speicherpfad definieren + state_dir = "/Volumes/omv-150/MayaDO/Infrastruktur/agent-bootstrap/state" + os.makedirs(state_dir, exist_ok=True) + out_path = os.path.join(state_dir, "digital_twin.json") + + with open(out_path, "w", encoding="utf-8") as f: + json.dump(twin, f, indent=2, ensure_ascii=False) + + print(f"=== 3. Digitaler Zwilling erfolgreich geschrieben nach: {out_path} ===") + + # Generiere Markdown-Zusammenfassung für Graphify + md_lines = [ + "# Digitaler Zwilling: Proxmox & Docker Cluster-Topologie", + "", + "Dieses Dokument beschreibt die physische und virtuelle Infrastruktur von MayaDO.", + "" + ] + + md_lines.append("## Physische Cluster-Nodes") + for n in twin["nodes"]: + md_lines.append(f"### Node: {n['name']}") + md_lines.append(f"- **Status**: {n['status']}") + md_lines.append(f"- **CPU Kerne**: {n['cpu_cores']}") + md_lines.append(f"- **Maximaler Arbeitsspeicher**: {n['memory_max_gb']} GB") + md_lines.append("") + + md_lines.append("## Virtuelle Maschinen (Qemu/VM)") + for vm in twin["vms"]: + md_lines.append(f"### VM {vm['vmid']}: {vm['name']}") + md_lines.append(f"- **Node**: {vm['node']}") + md_lines.append(f"- **Status**: {vm['status']}") + md_lines.append(f"- **CPU Kerne**: {vm['cpu_cores']}") + md_lines.append(f"- **RAM Limit**: {vm['memory_max_gb']} GB") + if vm["ips"]: + md_lines.append(f"- **IP-Adressen**: {', '.join(vm['ips'])}") + md_lines.append("") + + md_lines.append("## LXC-Container") + for lxc in twin["lxcs"]: + md_lines.append(f"### LXC {lxc['vmid']}: {lxc['name']}") + md_lines.append(f"- **Node**: {lxc['node']}") + md_lines.append(f"- **Status**: {lxc['status']}") + md_lines.append(f"- **CPU Kerne**: {lxc['cpu_cores']}") + md_lines.append(f"- **RAM Limit**: {lxc['memory_max_gb']} GB") + if lxc["ips"]: + md_lines.append(f"- **IP-Adressen**: {', '.join(lxc['ips'])}") + md_lines.append("") + + md_lines.append("## Docker-Dienste und -Container") + for host_label, host_info in twin["docker_hosts"].items(): + md_lines.append(f"### Docker-Host: {host_label} (IP: {host_info['ip']})") + if not host_info["containers"]: + md_lines.append("- *Keine laufenden Container gefunden*") + for c in host_info["containers"]: + md_lines.append(f"#### Container: {c['name']}") + md_lines.append(f" - **ID**: `{c['id']}`") + md_lines.append(f" - **Image**: `{c['image']}`") + md_lines.append(f" - **Status**: {c['status']}") + if c['ports']: + md_lines.append(f" - **Ports**: `{c['ports']}`") + md_lines.append("") + + md_path = os.path.join(state_dir, "digital_twin.md") + with open(md_path, "w", encoding="utf-8") as f: + f.write("\n".join(md_lines)) + + print(f"=== 4. Markdown-Zusammenfassung geschrieben nach: {md_path} ===") + +if __name__ == "__main__": + main() diff --git a/state/.graphifyignore b/state/.graphifyignore new file mode 100644 index 0000000..d055ec7 --- /dev/null +++ b/state/.graphifyignore @@ -0,0 +1,2 @@ +digital_twin.json +*.json diff --git a/state/digital_twin.json b/state/digital_twin.json new file mode 100644 index 0000000..183554f --- /dev/null +++ b/state/digital_twin.json @@ -0,0 +1,282 @@ +{ + "nodes": [ + { + "name": "pve-venus", + "status": "online", + "cpu_cores": 4, + "memory_max_gb": 15.45 + } + ], + "vms": [ + { + "vmid": 10190100, + "name": "Router190", + "node": "pve-venus", + "status": "running", + "cpu_cores": 1, + "memory_max_gb": 2.0, + "ips": [ + "10.255.255.2", + "10.190.10.1", + "10.190.20.1", + "10.190.30.1", + "10.190.40.1", + "10.190.50.1", + "100.64.1.4" + ] + }, + { + "vmid": 10190129, + "name": "Traefik190-01", + "node": "pve-venus", + "status": "running", + "cpu_cores": 1, + "memory_max_gb": 1.0, + "ips": [ + "10.190.20.10" + ] + }, + { + "vmid": 10190130, + "name": "fc190", + "node": "pve-venus", + "status": "running", + "cpu_cores": 1, + "memory_max_gb": 4.0, + "ips": [ + "10.190.30.10" + ] + }, + { + "vmid": 10190150, + "name": "RustDesk-WWW", + "node": "pve-venus", + "status": "running", + "cpu_cores": 1, + "memory_max_gb": 4.0, + "ips": [ + "10.190.20.50" + ] + } + ], + "lxcs": [ + { + "vmid": 10190120, + "name": "db19001200", + "node": "pve-venus", + "status": "running", + "cpu_cores": 1, + "memory_max_gb": 1.0, + "ips": [ + "10.190.10.20" + ] + }, + { + "vmid": 10190121, + "name": "crawler19001210", + "node": "pve-venus", + "status": "running", + "cpu_cores": 1, + "memory_max_gb": 1.0, + "ips": [ + "10.190.50.20" + ] + }, + { + "vmid": 10190180, + "name": "web19001180", + "node": "pve-venus", + "status": "running", + "cpu_cores": 1, + "memory_max_gb": 1.0, + "ips": [ + "10.190.20.20" + ] + } + ], + "docker_hosts": { + "pve-host": { + "ip": "80.90.43.178", + "containers": [ + { + "id": "0b9d8273fb5b", + "name": "jmap-proxy", + "image": "jmap-proxy-jmap-proxy", + "status": "Up 21 minutes", + "ports": "0.0.0.0:20129->20129/tcp, [::]:20129->20129/tcp" + }, + { + "id": "4e758b086b20", + "name": "agent-reach", + "image": "agent-reach-agent-reach", + "status": "Up 9 hours", + "ports": "" + }, + { + "id": "acc06fbb53f8", + "name": "omniroute", + "image": "omniroute-omniroute", + "status": "Up 21 minutes", + "ports": "0.0.0.0:20128->20128/tcp" + }, + { + "id": "534df33e6588", + "name": "phoenix_onboarding", + "image": "phoenix-onboarding", + "status": "Up 6 days", + "ports": "0.0.0.0:8090->80/tcp, [::]:8090->80/tcp" + }, + { + "id": "1d414d575995", + "name": "ram_graph_general", + "image": "ram-graphs-deploy-ram-graph-general", + "status": "Up 8 days", + "ports": "0.0.0.0:8081->80/tcp, [::]:8081->80/tcp" + }, + { + "id": "7f2a8ee43467", + "name": "ram_graph_sovereign", + "image": "ram-graphs-deploy-ram-graph-sovereign", + "status": "Up 8 days", + "ports": "0.0.0.0:8082->80/tcp, [::]:8082->80/tcp" + }, + { + "id": "5d98afbaf52d", + "name": "bernados_app", + "image": "bernados-app", + "status": "Up 3 weeks", + "ports": "0.0.0.0:80->5001/tcp, [::]:80->5001/tcp" + } + ] + }, + "venus-traefik": { + "ip": "10.190.20.10", + "containers": [ + { + "id": "514cdd54baa2", + "name": "traefik", + "image": "traefik:v3", + "status": "Up About an hour", + "ports": "0.0.0.0:80->80/tcp, [::]:80->80/tcp, 0.0.0.0:443->443/tcp, [::]:443->443/tcp, 0.0.0.0:8080->8080/tcp, [::]:8080->8080/tcp" + }, + { + "id": "f6cd66c87de1", + "name": "oauth2-proxy", + "image": "quay.io/oauth2-proxy/oauth2-proxy:v7.6.0", + "status": "Up 2 weeks", + "ports": "0.0.0.0:4180->4180/tcp, [::]:4180->4180/tcp" + } + ] + }, + "venus-rustdesk": { + "ip": "10.190.20.50", + "containers": [ + { + "id": "cb81a05e861d", + "name": "lp-manager-worker", + "image": "lp-manager-worker", + "status": "Up 46 hours", + "ports": "" + }, + { + "id": "9db022e0de8b", + "name": "lp-manager-app", + "image": "lp-manager-app", + "status": "Up 45 hours", + "ports": "0.0.0.0:8000->8000/tcp, [::]:8000->8000/tcp" + }, + { + "id": "e5d40a093981", + "name": "lp-onboarding-service", + "image": "lp-manager-onboarding", + "status": "Up 6 days", + "ports": "0.0.0.0:8026->8026/tcp, [::]:8026->8026/tcp" + }, + { + "id": "bc9e663754d4", + "name": "dev-widget-nginx", + "image": "nginx:alpine", + "status": "Up 6 days", + "ports": "0.0.0.0:8025->80/tcp, [::]:8025->80/tcp" + }, + { + "id": "0a6a1ea97c9e", + "name": "lp-manager-ui-control", + "image": "lp-manager-ui-control", + "status": "Up 6 days", + "ports": "0.0.0.0:8020->8010/tcp, [::]:8020->8010/tcp" + }, + { + "id": "fe1c1068921c", + "name": "lp-manager-postgres-leads", + "image": "postgres:16-alpine", + "status": "Up 6 days", + "ports": "0.0.0.0:5433->5432/tcp, [::]:5433->5432/tcp" + }, + { + "id": "c8446921b15a", + "name": "lp-manager-postgres-platform", + "image": "postgres:16-alpine", + "status": "Up 6 days", + "ports": "0.0.0.0:5432->5432/tcp, [::]:5432->5432/tcp" + }, + { + "id": "1e0ed06280f5", + "name": "lp-manager-minio", + "image": "minio/minio:latest", + "status": "Up 6 days", + "ports": "0.0.0.0:9000-9001->9000-9001/tcp, [::]:9000-9001->9000-9001/tcp" + }, + { + "id": "921ad465ed8e", + "name": "forgejo", + "image": "codeberg.org/forgejo/forgejo:8", + "status": "Up 6 days", + "ports": "0.0.0.0:2222->22/tcp, [::]:2222->22/tcp, 0.0.0.0:8095->3000/tcp, [::]:8095->3000/tcp" + }, + { + "id": "7261dfe38d83", + "name": "space-agent-ui", + "image": "space-agent-image:latest", + "status": "Up 6 days", + "ports": "0.0.0.0:3000->3000/tcp, [::]:3000->3000/tcp" + }, + { + "id": "244da8aba77d", + "name": "lp-manager-redis", + "image": "redis:7-alpine", + "status": "Up 6 days", + "ports": "0.0.0.0:6379->6379/tcp, [::]:6379->6379/tcp" + }, + { + "id": "d3d8ed3bd56f", + "name": "quotes-app", + "image": "infisical/infisical:latest", + "status": "Up 6 days", + "ports": "443/tcp, 0.0.0.0:8080->8080/tcp, [::]:8080->8080/tcp" + }, + { + "id": "5fa5fd299d0c", + "name": "quotes-db", + "image": "postgres:15-alpine", + "status": "Up 6 days", + "ports": "5432/tcp" + }, + { + "id": "078f16f124d0", + "name": "quotes-cache", + "image": "redis:7-alpine", + "status": "Up 6 days", + "ports": "6379/tcp" + }, + { + "id": "fa2b6c8fc25f", + "name": "fti-app", + "image": "mcp-registry-policy-fti-app", + "status": "Up 6 days", + "ports": "0.0.0.0:3030->3030/tcp, [::]:3030->3030/tcp" + } + ] + } + } +} \ No newline at end of file diff --git a/state/digital_twin.md b/state/digital_twin.md new file mode 100644 index 0000000..dc835fa --- /dev/null +++ b/state/digital_twin.md @@ -0,0 +1,206 @@ +# Digitaler Zwilling: Proxmox & Docker Cluster-Topologie + +Dieses Dokument beschreibt die physische und virtuelle Infrastruktur von MayaDO. + +## Physische Cluster-Nodes +### Node: pve-venus +- **Status**: online +- **CPU Kerne**: 4 +- **Maximaler Arbeitsspeicher**: 15.45 GB + +## Virtuelle Maschinen (Qemu/VM) +### VM 10190100: Router190 +- **Node**: pve-venus +- **Status**: running +- **CPU Kerne**: 1 +- **RAM Limit**: 2.0 GB +- **IP-Adressen**: 10.255.255.2, 10.190.10.1, 10.190.20.1, 10.190.30.1, 10.190.40.1, 10.190.50.1, 100.64.1.4 + +### VM 10190129: Traefik190-01 +- **Node**: pve-venus +- **Status**: running +- **CPU Kerne**: 1 +- **RAM Limit**: 1.0 GB +- **IP-Adressen**: 10.190.20.10 + +### VM 10190130: fc190 +- **Node**: pve-venus +- **Status**: running +- **CPU Kerne**: 1 +- **RAM Limit**: 4.0 GB +- **IP-Adressen**: 10.190.30.10 + +### VM 10190150: RustDesk-WWW +- **Node**: pve-venus +- **Status**: running +- **CPU Kerne**: 1 +- **RAM Limit**: 4.0 GB +- **IP-Adressen**: 10.190.20.50 + +## LXC-Container +### LXC 10190120: db19001200 +- **Node**: pve-venus +- **Status**: running +- **CPU Kerne**: 1 +- **RAM Limit**: 1.0 GB +- **IP-Adressen**: 10.190.10.20 + +### LXC 10190121: crawler19001210 +- **Node**: pve-venus +- **Status**: running +- **CPU Kerne**: 1 +- **RAM Limit**: 1.0 GB +- **IP-Adressen**: 10.190.50.20 + +### LXC 10190180: web19001180 +- **Node**: pve-venus +- **Status**: running +- **CPU Kerne**: 1 +- **RAM Limit**: 1.0 GB +- **IP-Adressen**: 10.190.20.20 + +## Docker-Dienste und -Container +### Docker-Host: pve-host (IP: 80.90.43.178) +#### Container: jmap-proxy + - **ID**: `0b9d8273fb5b` + - **Image**: `jmap-proxy-jmap-proxy` + - **Status**: Up 21 minutes + - **Ports**: `0.0.0.0:20129->20129/tcp, [::]:20129->20129/tcp` + +#### Container: agent-reach + - **ID**: `4e758b086b20` + - **Image**: `agent-reach-agent-reach` + - **Status**: Up 9 hours + +#### Container: omniroute + - **ID**: `acc06fbb53f8` + - **Image**: `omniroute-omniroute` + - **Status**: Up 21 minutes + - **Ports**: `0.0.0.0:20128->20128/tcp` + +#### Container: phoenix_onboarding + - **ID**: `534df33e6588` + - **Image**: `phoenix-onboarding` + - **Status**: Up 6 days + - **Ports**: `0.0.0.0:8090->80/tcp, [::]:8090->80/tcp` + +#### Container: ram_graph_general + - **ID**: `1d414d575995` + - **Image**: `ram-graphs-deploy-ram-graph-general` + - **Status**: Up 8 days + - **Ports**: `0.0.0.0:8081->80/tcp, [::]:8081->80/tcp` + +#### Container: ram_graph_sovereign + - **ID**: `7f2a8ee43467` + - **Image**: `ram-graphs-deploy-ram-graph-sovereign` + - **Status**: Up 8 days + - **Ports**: `0.0.0.0:8082->80/tcp, [::]:8082->80/tcp` + +#### Container: bernados_app + - **ID**: `5d98afbaf52d` + - **Image**: `bernados-app` + - **Status**: Up 3 weeks + - **Ports**: `0.0.0.0:80->5001/tcp, [::]:80->5001/tcp` + +### Docker-Host: venus-traefik (IP: 10.190.20.10) +#### Container: traefik + - **ID**: `514cdd54baa2` + - **Image**: `traefik:v3` + - **Status**: Up About an hour + - **Ports**: `0.0.0.0:80->80/tcp, [::]:80->80/tcp, 0.0.0.0:443->443/tcp, [::]:443->443/tcp, 0.0.0.0:8080->8080/tcp, [::]:8080->8080/tcp` + +#### Container: oauth2-proxy + - **ID**: `f6cd66c87de1` + - **Image**: `quay.io/oauth2-proxy/oauth2-proxy:v7.6.0` + - **Status**: Up 2 weeks + - **Ports**: `0.0.0.0:4180->4180/tcp, [::]:4180->4180/tcp` + +### Docker-Host: venus-rustdesk (IP: 10.190.20.50) +#### Container: lp-manager-worker + - **ID**: `cb81a05e861d` + - **Image**: `lp-manager-worker` + - **Status**: Up 46 hours + +#### Container: lp-manager-app + - **ID**: `9db022e0de8b` + - **Image**: `lp-manager-app` + - **Status**: Up 45 hours + - **Ports**: `0.0.0.0:8000->8000/tcp, [::]:8000->8000/tcp` + +#### Container: lp-onboarding-service + - **ID**: `e5d40a093981` + - **Image**: `lp-manager-onboarding` + - **Status**: Up 6 days + - **Ports**: `0.0.0.0:8026->8026/tcp, [::]:8026->8026/tcp` + +#### Container: dev-widget-nginx + - **ID**: `bc9e663754d4` + - **Image**: `nginx:alpine` + - **Status**: Up 6 days + - **Ports**: `0.0.0.0:8025->80/tcp, [::]:8025->80/tcp` + +#### Container: lp-manager-ui-control + - **ID**: `0a6a1ea97c9e` + - **Image**: `lp-manager-ui-control` + - **Status**: Up 6 days + - **Ports**: `0.0.0.0:8020->8010/tcp, [::]:8020->8010/tcp` + +#### Container: lp-manager-postgres-leads + - **ID**: `fe1c1068921c` + - **Image**: `postgres:16-alpine` + - **Status**: Up 6 days + - **Ports**: `0.0.0.0:5433->5432/tcp, [::]:5433->5432/tcp` + +#### Container: lp-manager-postgres-platform + - **ID**: `c8446921b15a` + - **Image**: `postgres:16-alpine` + - **Status**: Up 6 days + - **Ports**: `0.0.0.0:5432->5432/tcp, [::]:5432->5432/tcp` + +#### Container: lp-manager-minio + - **ID**: `1e0ed06280f5` + - **Image**: `minio/minio:latest` + - **Status**: Up 6 days + - **Ports**: `0.0.0.0:9000-9001->9000-9001/tcp, [::]:9000-9001->9000-9001/tcp` + +#### Container: forgejo + - **ID**: `921ad465ed8e` + - **Image**: `codeberg.org/forgejo/forgejo:8` + - **Status**: Up 6 days + - **Ports**: `0.0.0.0:2222->22/tcp, [::]:2222->22/tcp, 0.0.0.0:8095->3000/tcp, [::]:8095->3000/tcp` + +#### Container: space-agent-ui + - **ID**: `7261dfe38d83` + - **Image**: `space-agent-image:latest` + - **Status**: Up 6 days + - **Ports**: `0.0.0.0:3000->3000/tcp, [::]:3000->3000/tcp` + +#### Container: lp-manager-redis + - **ID**: `244da8aba77d` + - **Image**: `redis:7-alpine` + - **Status**: Up 6 days + - **Ports**: `0.0.0.0:6379->6379/tcp, [::]:6379->6379/tcp` + +#### Container: quotes-app + - **ID**: `d3d8ed3bd56f` + - **Image**: `infisical/infisical:latest` + - **Status**: Up 6 days + - **Ports**: `443/tcp, 0.0.0.0:8080->8080/tcp, [::]:8080->8080/tcp` + +#### Container: quotes-db + - **ID**: `5fa5fd299d0c` + - **Image**: `postgres:15-alpine` + - **Status**: Up 6 days + - **Ports**: `5432/tcp` + +#### Container: quotes-cache + - **ID**: `078f16f124d0` + - **Image**: `redis:7-alpine` + - **Status**: Up 6 days + - **Ports**: `6379/tcp` + +#### Container: fti-app + - **ID**: `fa2b6c8fc25f` + - **Image**: `mcp-registry-policy-fti-app` + - **Status**: Up 6 days + - **Ports**: `0.0.0.0:3030->3030/tcp, [::]:3030->3030/tcp` diff --git a/state/graphify-out/.graphify_analysis.json b/state/graphify-out/.graphify_analysis.json new file mode 100644 index 0000000..0ef5f8d --- /dev/null +++ b/state/graphify-out/.graphify_analysis.json @@ -0,0 +1,159 @@ +{ + "communities": { + "0": [ + "digital_twin_dev_widget_nginx", + "digital_twin_forgejo", + "digital_twin_fti_app", + "digital_twin_lp_manager_app", + "digital_twin_lp_manager_minio", + "digital_twin_lp_manager_postgres_leads", + "digital_twin_lp_manager_postgres_platform", + "digital_twin_lp_manager_redis", + "digital_twin_lp_manager_ui_control", + "digital_twin_lp_manager_worker", + "digital_twin_lp_onboarding_service", + "digital_twin_quotes_app", + "digital_twin_quotes_db", + "digital_twin_space_agent_ui", + "digital_twin_venus_rustdesk" + ], + "1": [ + "digital_twin_agent_reach", + "digital_twin_bernados_app", + "digital_twin_jmap_proxy", + "digital_twin_omniroute", + "digital_twin_phoenix_onboarding", + "digital_twin_pve_host", + "digital_twin_ram_graph_general", + "digital_twin_ram_graph_sovereign" + ], + "2": [ + "digital_twin_crawler19001210", + "digital_twin_db19001200", + "digital_twin_fc190", + "digital_twin_pve_venus", + "digital_twin_router190", + "digital_twin_rustdesk_www", + "digital_twin_web19001180" + ], + "3": [ + "digital_twin_oauth2_proxy", + "digital_twin_traefik", + "digital_twin_traefik190_01", + "digital_twin_venus_traefik" + ], + "4": [ + "digital_twin" + ] + }, + "cohesion": { + "0": 0.13333333333333333, + "1": 0.25, + "2": 0.2857142857142857, + "3": 0.5, + "4": 1.0 + }, + "gods": [ + { + "id": "digital_twin_venus_rustdesk", + "label": "Docker-Host: venus-rustdesk", + "degree": 15 + }, + { + "id": "digital_twin_pve_venus", + "label": "Node: pve-venus", + "degree": 7 + }, + { + "id": "digital_twin_pve_host", + "label": "Docker-Host: pve-host", + "degree": 7 + }, + { + "id": "digital_twin_venus_traefik", + "label": "Docker-Host: venus-traefik", + "degree": 3 + }, + { + "id": "digital_twin_traefik190_01", + "label": "VM 10190129: Traefik190-01", + "degree": 2 + }, + { + "id": "digital_twin_rustdesk_www", + "label": "VM 10190150: RustDesk-WWW", + "degree": 2 + }, + { + "id": "digital_twin_router190", + "label": "VM 10190100: Router190", + "degree": 1 + }, + { + "id": "digital_twin_fc190", + "label": "VM 10190130: fc190", + "degree": 1 + }, + { + "id": "digital_twin_db19001200", + "label": "LXC 10190120: db19001200", + "degree": 1 + }, + { + "id": "digital_twin_crawler19001210", + "label": "LXC 10190121: crawler19001210", + "degree": 1 + } + ], + "surprises": [ + { + "source": "Docker-Host: venus-rustdesk", + "target": "VM 10190150: RustDesk-WWW", + "source_files": [ + "digital_twin.md", + "digital_twin.md" + ], + "confidence": "INFERRED", + "relation": "runs_on", + "note": "Bridges community 2 → community 0" + }, + { + "source": "VM 10190129: Traefik190-01", + "target": "Node: pve-venus", + "source_files": [ + "digital_twin.md", + "digital_twin.md" + ], + "confidence": "EXTRACTED", + "relation": "runs_on", + "note": "Bridges community 2 → community 3" + } + ], + "questions": [ + { + "type": "bridge_node", + "question": "Why does `Docker-Host: venus-rustdesk` connect `Docker-Host: venus-rustdesk` to `Node: pve-venus`?", + "why": "High betweenness centrality (0.437) - this node is a cross-community bridge." + }, + { + "type": "bridge_node", + "question": "Why does `Node: pve-venus` connect `Node: pve-venus` to `Docker-Host: venus-traefik`?", + "why": "High betweenness centrality (0.310) - this node is a cross-community bridge." + }, + { + "type": "bridge_node", + "question": "Why does `VM 10190150: RustDesk-WWW` connect `Node: pve-venus` to `Docker-Host: venus-rustdesk`?", + "why": "High betweenness centrality (0.267) - this node is a cross-community bridge." + }, + { + "type": "isolated_nodes", + "question": "What connects `Digitaler Zwilling: Proxmox & Docker Cluster-Topologie`, `VM 10190100: Router190`, `VM 10190130: fc190` to the rest of the system?", + "why": "29 weakly-connected nodes found - possible documentation gaps or missing edges." + }, + { + "type": "low_cohesion", + "question": "Should `Docker-Host: venus-rustdesk` be split into smaller, more focused modules?", + "why": "Cohesion score 0.13333333333333333 - nodes in this community are weakly interconnected." + } + ] +} \ No newline at end of file diff --git a/state/graphify-out/.graphify_labels.json b/state/graphify-out/.graphify_labels.json new file mode 100644 index 0000000..d0c815b --- /dev/null +++ b/state/graphify-out/.graphify_labels.json @@ -0,0 +1 @@ +{"0": "Docker-Host: venus-rustdesk", "1": "Docker-Host: pve-host", "2": "Node: pve-venus", "3": "Docker-Host: venus-traefik", "4": "Digitaler Zwilling: Proxmox & Docker Cluster-Topologie"} \ No newline at end of file diff --git a/state/graphify-out/.graphify_labels.json.sig b/state/graphify-out/.graphify_labels.json.sig new file mode 100644 index 0000000..eee583d --- /dev/null +++ b/state/graphify-out/.graphify_labels.json.sig @@ -0,0 +1 @@ +{"0": "02d4b3e42c040002", "1": "30b3814779335f2f", "2": "f9fe4c149b0b3fe4", "3": "60296882db71693b", "4": "0d00146556ee1eaa"} \ No newline at end of file diff --git a/state/graphify-out/.graphify_root b/state/graphify-out/.graphify_root new file mode 100644 index 0000000..fdcb001 --- /dev/null +++ b/state/graphify-out/.graphify_root @@ -0,0 +1 @@ +/Volumes/omv-150/MayaDO/Infrastruktur/agent-bootstrap/state \ No newline at end of file diff --git a/state/graphify-out/.graphify_semantic_marker b/state/graphify-out/.graphify_semantic_marker new file mode 100644 index 0000000..788fdb0 --- /dev/null +++ b/state/graphify-out/.graphify_semantic_marker @@ -0,0 +1 @@ +{"output_tokens": 4768} \ No newline at end of file diff --git a/state/graphify-out/2026-08-08/.graphify_analysis.json b/state/graphify-out/2026-08-08/.graphify_analysis.json new file mode 100644 index 0000000..0ef5f8d --- /dev/null +++ b/state/graphify-out/2026-08-08/.graphify_analysis.json @@ -0,0 +1,159 @@ +{ + "communities": { + "0": [ + "digital_twin_dev_widget_nginx", + "digital_twin_forgejo", + "digital_twin_fti_app", + "digital_twin_lp_manager_app", + "digital_twin_lp_manager_minio", + "digital_twin_lp_manager_postgres_leads", + "digital_twin_lp_manager_postgres_platform", + "digital_twin_lp_manager_redis", + "digital_twin_lp_manager_ui_control", + "digital_twin_lp_manager_worker", + "digital_twin_lp_onboarding_service", + "digital_twin_quotes_app", + "digital_twin_quotes_db", + "digital_twin_space_agent_ui", + "digital_twin_venus_rustdesk" + ], + "1": [ + "digital_twin_agent_reach", + "digital_twin_bernados_app", + "digital_twin_jmap_proxy", + "digital_twin_omniroute", + "digital_twin_phoenix_onboarding", + "digital_twin_pve_host", + "digital_twin_ram_graph_general", + "digital_twin_ram_graph_sovereign" + ], + "2": [ + "digital_twin_crawler19001210", + "digital_twin_db19001200", + "digital_twin_fc190", + "digital_twin_pve_venus", + "digital_twin_router190", + "digital_twin_rustdesk_www", + "digital_twin_web19001180" + ], + "3": [ + "digital_twin_oauth2_proxy", + "digital_twin_traefik", + "digital_twin_traefik190_01", + "digital_twin_venus_traefik" + ], + "4": [ + "digital_twin" + ] + }, + "cohesion": { + "0": 0.13333333333333333, + "1": 0.25, + "2": 0.2857142857142857, + "3": 0.5, + "4": 1.0 + }, + "gods": [ + { + "id": "digital_twin_venus_rustdesk", + "label": "Docker-Host: venus-rustdesk", + "degree": 15 + }, + { + "id": "digital_twin_pve_venus", + "label": "Node: pve-venus", + "degree": 7 + }, + { + "id": "digital_twin_pve_host", + "label": "Docker-Host: pve-host", + "degree": 7 + }, + { + "id": "digital_twin_venus_traefik", + "label": "Docker-Host: venus-traefik", + "degree": 3 + }, + { + "id": "digital_twin_traefik190_01", + "label": "VM 10190129: Traefik190-01", + "degree": 2 + }, + { + "id": "digital_twin_rustdesk_www", + "label": "VM 10190150: RustDesk-WWW", + "degree": 2 + }, + { + "id": "digital_twin_router190", + "label": "VM 10190100: Router190", + "degree": 1 + }, + { + "id": "digital_twin_fc190", + "label": "VM 10190130: fc190", + "degree": 1 + }, + { + "id": "digital_twin_db19001200", + "label": "LXC 10190120: db19001200", + "degree": 1 + }, + { + "id": "digital_twin_crawler19001210", + "label": "LXC 10190121: crawler19001210", + "degree": 1 + } + ], + "surprises": [ + { + "source": "Docker-Host: venus-rustdesk", + "target": "VM 10190150: RustDesk-WWW", + "source_files": [ + "digital_twin.md", + "digital_twin.md" + ], + "confidence": "INFERRED", + "relation": "runs_on", + "note": "Bridges community 2 → community 0" + }, + { + "source": "VM 10190129: Traefik190-01", + "target": "Node: pve-venus", + "source_files": [ + "digital_twin.md", + "digital_twin.md" + ], + "confidence": "EXTRACTED", + "relation": "runs_on", + "note": "Bridges community 2 → community 3" + } + ], + "questions": [ + { + "type": "bridge_node", + "question": "Why does `Docker-Host: venus-rustdesk` connect `Docker-Host: venus-rustdesk` to `Node: pve-venus`?", + "why": "High betweenness centrality (0.437) - this node is a cross-community bridge." + }, + { + "type": "bridge_node", + "question": "Why does `Node: pve-venus` connect `Node: pve-venus` to `Docker-Host: venus-traefik`?", + "why": "High betweenness centrality (0.310) - this node is a cross-community bridge." + }, + { + "type": "bridge_node", + "question": "Why does `VM 10190150: RustDesk-WWW` connect `Node: pve-venus` to `Docker-Host: venus-rustdesk`?", + "why": "High betweenness centrality (0.267) - this node is a cross-community bridge." + }, + { + "type": "isolated_nodes", + "question": "What connects `Digitaler Zwilling: Proxmox & Docker Cluster-Topologie`, `VM 10190100: Router190`, `VM 10190130: fc190` to the rest of the system?", + "why": "29 weakly-connected nodes found - possible documentation gaps or missing edges." + }, + { + "type": "low_cohesion", + "question": "Should `Docker-Host: venus-rustdesk` be split into smaller, more focused modules?", + "why": "Cohesion score 0.13333333333333333 - nodes in this community are weakly interconnected." + } + ] +} \ No newline at end of file diff --git a/state/graphify-out/2026-08-08/.graphify_labels.json b/state/graphify-out/2026-08-08/.graphify_labels.json new file mode 100644 index 0000000..d0c815b --- /dev/null +++ b/state/graphify-out/2026-08-08/.graphify_labels.json @@ -0,0 +1 @@ +{"0": "Docker-Host: venus-rustdesk", "1": "Docker-Host: pve-host", "2": "Node: pve-venus", "3": "Docker-Host: venus-traefik", "4": "Digitaler Zwilling: Proxmox & Docker Cluster-Topologie"} \ No newline at end of file diff --git a/state/graphify-out/2026-08-08/.graphify_semantic_marker b/state/graphify-out/2026-08-08/.graphify_semantic_marker new file mode 100644 index 0000000..788fdb0 --- /dev/null +++ b/state/graphify-out/2026-08-08/.graphify_semantic_marker @@ -0,0 +1 @@ +{"output_tokens": 4768} \ No newline at end of file diff --git a/state/graphify-out/2026-08-08/GRAPH_REPORT.md b/state/graphify-out/2026-08-08/GRAPH_REPORT.md new file mode 100644 index 0000000..0e1a8a2 --- /dev/null +++ b/state/graphify-out/2026-08-08/GRAPH_REPORT.md @@ -0,0 +1,71 @@ +# Graph Report - /Volumes/omv-150/MayaDO/Infrastruktur/agent-bootstrap/state (2026-08-08) + +## Corpus Check +- cluster-only mode — file stats not available + +## Summary +- 35 nodes · 32 edges · 5 communities (4 shown, 1 thin omitted) +- Extraction: 94% EXTRACTED · 6% INFERRED · 0% AMBIGUOUS · INFERRED: 2 edges (avg confidence: 0.8) +- Token cost: 0 input · 0 output + +## Community Hubs (Navigation) +- Docker-Host: venus-rustdesk +- Docker-Host: pve-host +- Node: pve-venus +- Docker-Host: venus-traefik +- Digitaler Zwilling: Proxmox & Docker Cluster-Topologie + +## God Nodes (most connected - your core abstractions) +1. `Docker-Host: venus-rustdesk` - 15 edges +2. `Node: pve-venus` - 7 edges +3. `Docker-Host: pve-host` - 7 edges +4. `Docker-Host: venus-traefik` - 3 edges +5. `VM 10190129: Traefik190-01` - 2 edges +6. `VM 10190150: RustDesk-WWW` - 2 edges +7. `VM 10190100: Router190` - 1 edges +8. `VM 10190130: fc190` - 1 edges +9. `LXC 10190120: db19001200` - 1 edges +10. `LXC 10190121: crawler19001210` - 1 edges + +## Surprising Connections (you probably didn't know these) +- `Docker-Host: venus-rustdesk` --runs_on--> `VM 10190150: RustDesk-WWW` [INFERRED] + digital_twin.md → digital_twin.md _Bridges community 2 → community 0_ +- `VM 10190129: Traefik190-01` --runs_on--> `Node: pve-venus` [EXTRACTED] + digital_twin.md → digital_twin.md _Bridges community 2 → community 3_ + +## Communities (5 total, 1 thin omitted) + +### Community 0 - "Docker-Host: venus-rustdesk" +Cohesion: 0.13 +Nodes (15): Container: dev-widget-nginx, Container: forgejo, Container: fti-app, Container: lp-manager-app, Container: lp-manager-minio, Container: lp-manager-postgres-leads, Container: lp-manager-postgres-platform, Container: lp-manager-redis (+7 more) + +### Community 1 - "Docker-Host: pve-host" +Cohesion: 0.25 +Nodes (8): Container: agent-reach, Container: bernados_app, Container: jmap-proxy, Container: omniroute, Container: phoenix_onboarding, Docker-Host: pve-host, Container: ram_graph_general, Container: ram_graph_sovereign + +### Community 2 - "Node: pve-venus" +Cohesion: 0.29 +Nodes (7): LXC 10190121: crawler19001210, LXC 10190120: db19001200, VM 10190130: fc190, Node: pve-venus, VM 10190100: Router190, VM 10190150: RustDesk-WWW, LXC 10190180: web19001180 + +### Community 3 - "Docker-Host: venus-traefik" +Cohesion: 0.50 +Nodes (4): Container: oauth2-proxy, Container: traefik, VM 10190129: Traefik190-01, Docker-Host: venus-traefik + +## Knowledge Gaps +- **29 isolated node(s):** `Digitaler Zwilling: Proxmox & Docker Cluster-Topologie`, `VM 10190100: Router190`, `VM 10190130: fc190`, `LXC 10190120: db19001200`, `LXC 10190121: crawler19001210` (+24 more) + These have ≤1 connection - possible missing edges or undocumented components. +- **1 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes. + +## Suggested Questions +_Questions this graph is uniquely positioned to answer:_ + +- **Why does `Docker-Host: venus-rustdesk` connect `Docker-Host: venus-rustdesk` to `Node: pve-venus`?** + _High betweenness centrality (0.437) - this node is a cross-community bridge._ +- **Why does `Node: pve-venus` connect `Node: pve-venus` to `Docker-Host: venus-traefik`?** + _High betweenness centrality (0.310) - this node is a cross-community bridge._ +- **Why does `VM 10190150: RustDesk-WWW` connect `Node: pve-venus` to `Docker-Host: venus-rustdesk`?** + _High betweenness centrality (0.267) - this node is a cross-community bridge._ +- **What connects `Digitaler Zwilling: Proxmox & Docker Cluster-Topologie`, `VM 10190100: Router190`, `VM 10190130: fc190` to the rest of the system?** + _29 weakly-connected nodes found - possible documentation gaps or missing edges._ +- **Should `Docker-Host: venus-rustdesk` be split into smaller, more focused modules?** + _Cohesion score 0.13333333333333333 - nodes in this community are weakly interconnected._ \ No newline at end of file diff --git a/state/graphify-out/2026-08-08/graph.json b/state/graphify-out/2026-08-08/graph.json new file mode 100644 index 0000000..ceef36b --- /dev/null +++ b/state/graphify-out/2026-08-08/graph.json @@ -0,0 +1,616 @@ +{ + "directed": false, + "multigraph": false, + "graph": {}, + "nodes": [ + { + "label": "Digitaler Zwilling: Proxmox & Docker Cluster-Topologie", + "file_type": "document", + "source_file": "digital_twin.md", + "source_location": null, + "community": 4, + "norm_label": "digitaler zwilling: proxmox & docker cluster-topologie", + "id": "digital_twin", + "community_name": "Digitaler Zwilling: Proxmox & Docker Cluster-Topologie" + }, + { + "label": "Node: pve-venus", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 2, + "norm_label": "node: pve-venus", + "id": "digital_twin_pve_venus", + "community_name": "Node: pve-venus" + }, + { + "label": "VM 10190100: Router190", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 2, + "norm_label": "vm 10190100: router190", + "id": "digital_twin_router190", + "community_name": "Node: pve-venus" + }, + { + "label": "VM 10190129: Traefik190-01", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 3, + "norm_label": "vm 10190129: traefik190-01", + "id": "digital_twin_traefik190_01", + "community_name": "Docker-Host: venus-traefik" + }, + { + "label": "VM 10190130: fc190", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 2, + "norm_label": "vm 10190130: fc190", + "id": "digital_twin_fc190", + "community_name": "Node: pve-venus" + }, + { + "label": "VM 10190150: RustDesk-WWW", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 2, + "norm_label": "vm 10190150: rustdesk-www", + "id": "digital_twin_rustdesk_www", + "community_name": "Node: pve-venus" + }, + { + "label": "LXC 10190120: db19001200", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 2, + "norm_label": "lxc 10190120: db19001200", + "id": "digital_twin_db19001200", + "community_name": "Node: pve-venus" + }, + { + "label": "LXC 10190121: crawler19001210", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 2, + "norm_label": "lxc 10190121: crawler19001210", + "id": "digital_twin_crawler19001210", + "community_name": "Node: pve-venus" + }, + { + "label": "LXC 10190180: web19001180", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 2, + "norm_label": "lxc 10190180: web19001180", + "id": "digital_twin_web19001180", + "community_name": "Node: pve-venus" + }, + { + "label": "Docker-Host: pve-host", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 1, + "norm_label": "docker-host: pve-host", + "id": "digital_twin_pve_host", + "community_name": "Docker-Host: pve-host" + }, + { + "label": "Container: jmap-proxy", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 1, + "norm_label": "container: jmap-proxy", + "id": "digital_twin_jmap_proxy", + "community_name": "Docker-Host: pve-host" + }, + { + "label": "Container: agent-reach", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 1, + "norm_label": "container: agent-reach", + "id": "digital_twin_agent_reach", + "community_name": "Docker-Host: pve-host" + }, + { + "label": "Container: omniroute", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 1, + "norm_label": "container: omniroute", + "id": "digital_twin_omniroute", + "community_name": "Docker-Host: pve-host" + }, + { + "label": "Container: phoenix_onboarding", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 1, + "norm_label": "container: phoenix_onboarding", + "id": "digital_twin_phoenix_onboarding", + "community_name": "Docker-Host: pve-host" + }, + { + "label": "Container: ram_graph_general", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 1, + "norm_label": "container: ram_graph_general", + "id": "digital_twin_ram_graph_general", + "community_name": "Docker-Host: pve-host" + }, + { + "label": "Container: ram_graph_sovereign", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 1, + "norm_label": "container: ram_graph_sovereign", + "id": "digital_twin_ram_graph_sovereign", + "community_name": "Docker-Host: pve-host" + }, + { + "label": "Container: bernados_app", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 1, + "norm_label": "container: bernados_app", + "id": "digital_twin_bernados_app", + "community_name": "Docker-Host: pve-host" + }, + { + "label": "Docker-Host: venus-traefik", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 3, + "norm_label": "docker-host: venus-traefik", + "id": "digital_twin_venus_traefik", + "community_name": "Docker-Host: venus-traefik" + }, + { + "label": "Container: traefik", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 3, + "norm_label": "container: traefik", + "id": "digital_twin_traefik", + "community_name": "Docker-Host: venus-traefik" + }, + { + "label": "Container: oauth2-proxy", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 3, + "norm_label": "container: oauth2-proxy", + "id": "digital_twin_oauth2_proxy", + "community_name": "Docker-Host: venus-traefik" + }, + { + "label": "Docker-Host: venus-rustdesk", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 0, + "norm_label": "docker-host: venus-rustdesk", + "id": "digital_twin_venus_rustdesk", + "community_name": "Docker-Host: venus-rustdesk" + }, + { + "label": "Container: lp-manager-worker", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 0, + "norm_label": "container: lp-manager-worker", + "id": "digital_twin_lp_manager_worker", + "community_name": "Docker-Host: venus-rustdesk" + }, + { + "label": "Container: lp-manager-app", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 0, + "norm_label": "container: lp-manager-app", + "id": "digital_twin_lp_manager_app", + "community_name": "Docker-Host: venus-rustdesk" + }, + { + "label": "Container: lp-onboarding-service", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 0, + "norm_label": "container: lp-onboarding-service", + "id": "digital_twin_lp_onboarding_service", + "community_name": "Docker-Host: venus-rustdesk" + }, + { + "label": "Container: dev-widget-nginx", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 0, + "norm_label": "container: dev-widget-nginx", + "id": "digital_twin_dev_widget_nginx", + "community_name": "Docker-Host: venus-rustdesk" + }, + { + "label": "Container: lp-manager-ui-control", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 0, + "norm_label": "container: lp-manager-ui-control", + "id": "digital_twin_lp_manager_ui_control", + "community_name": "Docker-Host: venus-rustdesk" + }, + { + "label": "Container: lp-manager-postgres-leads", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 0, + "norm_label": "container: lp-manager-postgres-leads", + "id": "digital_twin_lp_manager_postgres_leads", + "community_name": "Docker-Host: venus-rustdesk" + }, + { + "label": "Container: lp-manager-postgres-platform", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 0, + "norm_label": "container: lp-manager-postgres-platform", + "id": "digital_twin_lp_manager_postgres_platform", + "community_name": "Docker-Host: venus-rustdesk" + }, + { + "label": "Container: lp-manager-minio", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 0, + "norm_label": "container: lp-manager-minio", + "id": "digital_twin_lp_manager_minio", + "community_name": "Docker-Host: venus-rustdesk" + }, + { + "label": "Container: forgejo", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 0, + "norm_label": "container: forgejo", + "id": "digital_twin_forgejo", + "community_name": "Docker-Host: venus-rustdesk" + }, + { + "label": "Container: space-agent-ui", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 0, + "norm_label": "container: space-agent-ui", + "id": "digital_twin_space_agent_ui", + "community_name": "Docker-Host: venus-rustdesk" + }, + { + "label": "Container: lp-manager-redis", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 0, + "norm_label": "container: lp-manager-redis", + "id": "digital_twin_lp_manager_redis", + "community_name": "Docker-Host: venus-rustdesk" + }, + { + "label": "Container: quotes-app", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 0, + "norm_label": "container: quotes-app", + "id": "digital_twin_quotes_app", + "community_name": "Docker-Host: venus-rustdesk" + }, + { + "label": "Container: quotes-db", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 0, + "norm_label": "container: quotes-db", + "id": "digital_twin_quotes_db", + "community_name": "Docker-Host: venus-rustdesk" + }, + { + "label": "Container: fti-app", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 0, + "norm_label": "container: fti-app", + "id": "digital_twin_fti_app", + "community_name": "Docker-Host: venus-rustdesk" + } + ], + "links": [ + { + "relation": "runs_on", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "digital_twin.md", + "source": "digital_twin_crawler19001210", + "target": "digital_twin_pve_venus" + }, + { + "relation": "runs_on", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "digital_twin.md", + "source": "digital_twin_db19001200", + "target": "digital_twin_pve_venus" + }, + { + "relation": "runs_on", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "digital_twin.md", + "source": "digital_twin_fc190", + "target": "digital_twin_pve_venus" + }, + { + "relation": "runs_on", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "digital_twin.md", + "source": "digital_twin_router190", + "target": "digital_twin_pve_venus" + }, + { + "relation": "runs_on", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "digital_twin.md", + "source": "digital_twin_rustdesk_www", + "target": "digital_twin_pve_venus" + }, + { + "relation": "runs_on", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "digital_twin.md", + "source": "digital_twin_traefik190_01", + "target": "digital_twin_pve_venus" + }, + { + "relation": "runs_on", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "digital_twin.md", + "source": "digital_twin_web19001180", + "target": "digital_twin_pve_venus" + }, + { + "relation": "runs_on", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "digital_twin.md", + "source": "digital_twin_venus_traefik", + "target": "digital_twin_traefik190_01" + }, + { + "relation": "runs_on", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "digital_twin.md", + "source": "digital_twin_venus_rustdesk", + "target": "digital_twin_rustdesk_www" + }, + { + "relation": "runs_on", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "digital_twin.md", + "source": "digital_twin_agent_reach", + "target": "digital_twin_pve_host" + }, + { + "relation": "runs_on", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "digital_twin.md", + "source": "digital_twin_bernados_app", + "target": "digital_twin_pve_host" + }, + { + "relation": "runs_on", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "digital_twin.md", + "source": "digital_twin_jmap_proxy", + "target": "digital_twin_pve_host" + }, + { + "relation": "runs_on", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "digital_twin.md", + "source": "digital_twin_omniroute", + "target": "digital_twin_pve_host" + }, + { + "relation": "runs_on", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "digital_twin.md", + "source": "digital_twin_phoenix_onboarding", + "target": "digital_twin_pve_host" + }, + { + "relation": "runs_on", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "digital_twin.md", + "source": "digital_twin_ram_graph_general", + "target": "digital_twin_pve_host" + }, + { + "relation": "runs_on", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "digital_twin.md", + "source": "digital_twin_ram_graph_sovereign", + "target": "digital_twin_pve_host" + }, + { + "relation": "runs_on", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "digital_twin.md", + "source": "digital_twin_oauth2_proxy", + "target": "digital_twin_venus_traefik" + }, + { + "relation": "runs_on", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "digital_twin.md", + "source": "digital_twin_traefik", + "target": "digital_twin_venus_traefik" + }, + { + "relation": "runs_on", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "digital_twin.md", + "source": "digital_twin_dev_widget_nginx", + "target": "digital_twin_venus_rustdesk" + }, + { + "relation": "runs_on", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "digital_twin.md", + "source": "digital_twin_forgejo", + "target": "digital_twin_venus_rustdesk" + }, + { + "relation": "runs_on", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "digital_twin.md", + "source": "digital_twin_fti_app", + "target": "digital_twin_venus_rustdesk" + }, + { + "relation": "runs_on", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "digital_twin.md", + "source": "digital_twin_lp_manager_app", + "target": "digital_twin_venus_rustdesk" + }, + { + "relation": "runs_on", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "digital_twin.md", + "source": "digital_twin_lp_manager_minio", + "target": "digital_twin_venus_rustdesk" + }, + { + "relation": "runs_on", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "digital_twin.md", + "source": "digital_twin_lp_manager_postgres_leads", + "target": "digital_twin_venus_rustdesk" + }, + { + "relation": "runs_on", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "digital_twin.md", + "source": "digital_twin_lp_manager_postgres_platform", + "target": "digital_twin_venus_rustdesk" + }, + { + "relation": "runs_on", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "digital_twin.md", + "source": "digital_twin_lp_manager_redis", + "target": "digital_twin_venus_rustdesk" + }, + { + "relation": "runs_on", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "digital_twin.md", + "source": "digital_twin_lp_manager_ui_control", + "target": "digital_twin_venus_rustdesk" + }, + { + "relation": "runs_on", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "digital_twin.md", + "source": "digital_twin_lp_manager_worker", + "target": "digital_twin_venus_rustdesk" + }, + { + "relation": "runs_on", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "digital_twin.md", + "source": "digital_twin_lp_onboarding_service", + "target": "digital_twin_venus_rustdesk" + }, + { + "relation": "runs_on", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "digital_twin.md", + "source": "digital_twin_quotes_app", + "target": "digital_twin_venus_rustdesk" + }, + { + "relation": "runs_on", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "digital_twin.md", + "source": "digital_twin_quotes_db", + "target": "digital_twin_venus_rustdesk" + }, + { + "relation": "runs_on", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "digital_twin.md", + "source": "digital_twin_space_agent_ui", + "target": "digital_twin_venus_rustdesk" + } + ], + "hyperedges": [] +} \ No newline at end of file diff --git a/state/graphify-out/2026-08-08/manifest.json b/state/graphify-out/2026-08-08/manifest.json new file mode 100644 index 0000000..360407b --- /dev/null +++ b/state/graphify-out/2026-08-08/manifest.json @@ -0,0 +1,7 @@ +{ + "digital_twin.md": { + "mtime": 1786179392.3292885, + "ast_hash": "4cabb774622ad1285edd64b7ec788db3", + "semantic_hash": "4cabb774622ad1285edd64b7ec788db3" + } +} \ No newline at end of file diff --git a/state/graphify-out/GRAPH_REPORT.md b/state/graphify-out/GRAPH_REPORT.md new file mode 100644 index 0000000..0e1a8a2 --- /dev/null +++ b/state/graphify-out/GRAPH_REPORT.md @@ -0,0 +1,71 @@ +# Graph Report - /Volumes/omv-150/MayaDO/Infrastruktur/agent-bootstrap/state (2026-08-08) + +## Corpus Check +- cluster-only mode — file stats not available + +## Summary +- 35 nodes · 32 edges · 5 communities (4 shown, 1 thin omitted) +- Extraction: 94% EXTRACTED · 6% INFERRED · 0% AMBIGUOUS · INFERRED: 2 edges (avg confidence: 0.8) +- Token cost: 0 input · 0 output + +## Community Hubs (Navigation) +- Docker-Host: venus-rustdesk +- Docker-Host: pve-host +- Node: pve-venus +- Docker-Host: venus-traefik +- Digitaler Zwilling: Proxmox & Docker Cluster-Topologie + +## God Nodes (most connected - your core abstractions) +1. `Docker-Host: venus-rustdesk` - 15 edges +2. `Node: pve-venus` - 7 edges +3. `Docker-Host: pve-host` - 7 edges +4. `Docker-Host: venus-traefik` - 3 edges +5. `VM 10190129: Traefik190-01` - 2 edges +6. `VM 10190150: RustDesk-WWW` - 2 edges +7. `VM 10190100: Router190` - 1 edges +8. `VM 10190130: fc190` - 1 edges +9. `LXC 10190120: db19001200` - 1 edges +10. `LXC 10190121: crawler19001210` - 1 edges + +## Surprising Connections (you probably didn't know these) +- `Docker-Host: venus-rustdesk` --runs_on--> `VM 10190150: RustDesk-WWW` [INFERRED] + digital_twin.md → digital_twin.md _Bridges community 2 → community 0_ +- `VM 10190129: Traefik190-01` --runs_on--> `Node: pve-venus` [EXTRACTED] + digital_twin.md → digital_twin.md _Bridges community 2 → community 3_ + +## Communities (5 total, 1 thin omitted) + +### Community 0 - "Docker-Host: venus-rustdesk" +Cohesion: 0.13 +Nodes (15): Container: dev-widget-nginx, Container: forgejo, Container: fti-app, Container: lp-manager-app, Container: lp-manager-minio, Container: lp-manager-postgres-leads, Container: lp-manager-postgres-platform, Container: lp-manager-redis (+7 more) + +### Community 1 - "Docker-Host: pve-host" +Cohesion: 0.25 +Nodes (8): Container: agent-reach, Container: bernados_app, Container: jmap-proxy, Container: omniroute, Container: phoenix_onboarding, Docker-Host: pve-host, Container: ram_graph_general, Container: ram_graph_sovereign + +### Community 2 - "Node: pve-venus" +Cohesion: 0.29 +Nodes (7): LXC 10190121: crawler19001210, LXC 10190120: db19001200, VM 10190130: fc190, Node: pve-venus, VM 10190100: Router190, VM 10190150: RustDesk-WWW, LXC 10190180: web19001180 + +### Community 3 - "Docker-Host: venus-traefik" +Cohesion: 0.50 +Nodes (4): Container: oauth2-proxy, Container: traefik, VM 10190129: Traefik190-01, Docker-Host: venus-traefik + +## Knowledge Gaps +- **29 isolated node(s):** `Digitaler Zwilling: Proxmox & Docker Cluster-Topologie`, `VM 10190100: Router190`, `VM 10190130: fc190`, `LXC 10190120: db19001200`, `LXC 10190121: crawler19001210` (+24 more) + These have ≤1 connection - possible missing edges or undocumented components. +- **1 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes. + +## Suggested Questions +_Questions this graph is uniquely positioned to answer:_ + +- **Why does `Docker-Host: venus-rustdesk` connect `Docker-Host: venus-rustdesk` to `Node: pve-venus`?** + _High betweenness centrality (0.437) - this node is a cross-community bridge._ +- **Why does `Node: pve-venus` connect `Node: pve-venus` to `Docker-Host: venus-traefik`?** + _High betweenness centrality (0.310) - this node is a cross-community bridge._ +- **Why does `VM 10190150: RustDesk-WWW` connect `Node: pve-venus` to `Docker-Host: venus-rustdesk`?** + _High betweenness centrality (0.267) - this node is a cross-community bridge._ +- **What connects `Digitaler Zwilling: Proxmox & Docker Cluster-Topologie`, `VM 10190100: Router190`, `VM 10190130: fc190` to the rest of the system?** + _29 weakly-connected nodes found - possible documentation gaps or missing edges._ +- **Should `Docker-Host: venus-rustdesk` be split into smaller, more focused modules?** + _Cohesion score 0.13333333333333333 - nodes in this community are weakly interconnected._ \ No newline at end of file diff --git a/state/graphify-out/cache/semantic/pf33081f95084/f266a8238c8a2bd9f2559c4374e13e9910385c9dda6eaed985d0d769f23d3e32.json b/state/graphify-out/cache/semantic/pf33081f95084/f266a8238c8a2bd9f2559c4374e13e9910385c9dda6eaed985d0d769f23d3e32.json new file mode 100644 index 0000000..a217545 --- /dev/null +++ b/state/graphify-out/cache/semantic/pf33081f95084/f266a8238c8a2bd9f2559c4374e13e9910385c9dda6eaed985d0d769f23d3e32.json @@ -0,0 +1 @@ +{"nodes": [{"id": "digital_twin", "label": "Digitaler Zwilling: Proxmox & Docker Cluster-Topologie", "file_type": "document", "source_file": "digital_twin.md", "source_location": null}, {"id": "digital_twin_pve_venus", "label": "Node: pve-venus", "file_type": "concept", "source_file": "digital_twin.md", "source_location": null}, {"id": "digital_twin_router190", "label": "VM 10190100: Router190", "file_type": "concept", "source_file": "digital_twin.md", "source_location": null}, {"id": "digital_twin_traefik190_01", "label": "VM 10190129: Traefik190-01", "file_type": "concept", "source_file": "digital_twin.md", "source_location": null}, {"id": "digital_twin_fc190", "label": "VM 10190130: fc190", "file_type": "concept", "source_file": "digital_twin.md", "source_location": null}, {"id": "digital_twin_rustdesk_www", "label": "VM 10190150: RustDesk-WWW", "file_type": "concept", "source_file": "digital_twin.md", "source_location": null}, {"id": "digital_twin_db19001200", "label": "LXC 10190120: db19001200", "file_type": "concept", "source_file": "digital_twin.md", "source_location": null}, {"id": "digital_twin_crawler19001210", "label": "LXC 10190121: crawler19001210", "file_type": "concept", "source_file": "digital_twin.md", "source_location": null}, {"id": "digital_twin_web19001180", "label": "LXC 10190180: web19001180", "file_type": "concept", "source_file": "digital_twin.md", "source_location": null}, {"id": "digital_twin_pve_host", "label": "Docker-Host: pve-host", "file_type": "concept", "source_file": "digital_twin.md", "source_location": null}, {"id": "digital_twin_jmap_proxy", "label": "Container: jmap-proxy", "file_type": "concept", "source_file": "digital_twin.md", "source_location": null}, {"id": "digital_twin_agent_reach", "label": "Container: agent-reach", "file_type": "concept", "source_file": "digital_twin.md", "source_location": null}, {"id": "digital_twin_omniroute", "label": "Container: omniroute", "file_type": "concept", "source_file": "digital_twin.md", "source_location": null}, {"id": "digital_twin_phoenix_onboarding", "label": "Container: phoenix_onboarding", "file_type": "concept", "source_file": "digital_twin.md", "source_location": null}, {"id": "digital_twin_ram_graph_general", "label": "Container: ram_graph_general", "file_type": "concept", "source_file": "digital_twin.md", "source_location": null}, {"id": "digital_twin_ram_graph_sovereign", "label": "Container: ram_graph_sovereign", "file_type": "concept", "source_file": "digital_twin.md", "source_location": null}, {"id": "digital_twin_bernados_app", "label": "Container: bernados_app", "file_type": "concept", "source_file": "digital_twin.md", "source_location": null}, {"id": "digital_twin_venus_traefik", "label": "Docker-Host: venus-traefik", "file_type": "concept", "source_file": "digital_twin.md", "source_location": null}, {"id": "digital_twin_traefik", "label": "Container: traefik", "file_type": "concept", "source_file": "digital_twin.md", "source_location": null}, {"id": "digital_twin_oauth2_proxy", "label": "Container: oauth2-proxy", "file_type": "concept", "source_file": "digital_twin.md", "source_location": null}, {"id": "digital_twin_venus_rustdesk", "label": "Docker-Host: venus-rustdesk", "file_type": "concept", "source_file": "digital_twin.md", "source_location": null}, {"id": "digital_twin_lp_manager_worker", "label": "Container: lp-manager-worker", "file_type": "concept", "source_file": "digital_twin.md", "source_location": null}, {"id": "digital_twin_lp_manager_app", "label": "Container: lp-manager-app", "file_type": "concept", "source_file": "digital_twin.md", "source_location": null}, {"id": "digital_twin_lp_onboarding_service", "label": "Container: lp-onboarding-service", "file_type": "concept", "source_file": "digital_twin.md", "source_location": null}, {"id": "digital_twin_dev_widget_nginx", "label": "Container: dev-widget-nginx", "file_type": "concept", "source_file": "digital_twin.md", "source_location": null}, {"id": "digital_twin_lp_manager_ui_control", "label": "Container: lp-manager-ui-control", "file_type": "concept", "source_file": "digital_twin.md", "source_location": null}, {"id": "digital_twin_lp_manager_postgres_leads", "label": "Container: lp-manager-postgres-leads", "file_type": "concept", "source_file": "digital_twin.md", "source_location": null}, {"id": "digital_twin_lp_manager_postgres_platform", "label": "Container: lp-manager-postgres-platform", "file_type": "concept", "source_file": "digital_twin.md", "source_location": null}, {"id": "digital_twin_lp_manager_minio", "label": "Container: lp-manager-minio", "file_type": "concept", "source_file": "digital_twin.md", "source_location": null}, {"id": "digital_twin_forgejo", "label": "Container: forgejo", "file_type": "concept", "source_file": "digital_twin.md", "source_location": null}, {"id": "digital_twin_space_agent_ui", "label": "Container: space-agent-ui", "file_type": "concept", "source_file": "digital_twin.md", "source_location": null}, {"id": "digital_twin_lp_manager_redis", "label": "Container: lp-manager-redis", "file_type": "concept", "source_file": "digital_twin.md", "source_location": null}, {"id": "digital_twin_quotes_app", "label": "Container: quotes-app", "file_type": "concept", "source_file": "digital_twin.md", "source_location": null}, {"id": "digital_twin_quotes_db", "label": "Container: quotes-db", "file_type": "concept", "source_file": "digital_twin.md", "source_location": null}, {"id": "digital_twin_quotes_cache", "label": "Container: quotes-cache", "file_type": "concept", "source_file": "digital_twin.md", "source_location": null}, {"id": "digital_twin_fti_app", "label": "Container: fti-app", "file_type": "concept", "source_file": "digital_twin.md", "source_location": null}], "edges": [], "hyperedges": []} \ No newline at end of file diff --git a/state/graphify-out/cache/stat-index.json b/state/graphify-out/cache/stat-index.json new file mode 100644 index 0000000..2b73dde --- /dev/null +++ b/state/graphify-out/cache/stat-index.json @@ -0,0 +1 @@ +{"/Volumes/omv-150/MayaDO/Infrastruktur/agent-bootstrap/state/digital_twin.json":{"size":7633,"mtime_ns":1786179201467079100,"word_count":543,"hashes":{"digital_twin.json":"8f1c2341282db81db16bb3583628767c910ae57a3110a9d5be42e557fbffc84b"}},"/Volumes/omv-150/MayaDO/Infrastruktur/agent-bootstrap/state/digital_twin.md":{"size":6017,"mtime_ns":1786179392329288600,"word_count":649,"hashes":{"digital_twin.md":"f266a8238c8a2bd9f2559c4374e13e9910385c9dda6eaed985d0d769f23d3e32"}}} \ No newline at end of file diff --git a/state/graphify-out/graph.html b/state/graphify-out/graph.html new file mode 100644 index 0000000..c6e824c --- /dev/null +++ b/state/graphify-out/graph.html @@ -0,0 +1,320 @@ + + + + +graphify - /Volumes/omv-150/MayaDO/Infrastruktur/agent-bootstrap/state/graphify-out/graph.html + + + + +
+ + + + + \ No newline at end of file diff --git a/state/graphify-out/graph.json b/state/graphify-out/graph.json new file mode 100644 index 0000000..c771fde --- /dev/null +++ b/state/graphify-out/graph.json @@ -0,0 +1,616 @@ +{ + "directed": false, + "multigraph": false, + "graph": {}, + "nodes": [ + { + "label": "Digitaler Zwilling: Proxmox & Docker Cluster-Topologie", + "file_type": "document", + "source_file": "digital_twin.md", + "source_location": null, + "community": 4, + "norm_label": "digitaler zwilling: proxmox & docker cluster-topologie", + "community_name": "Digitaler Zwilling: Proxmox & Docker Cluster-Topologie", + "id": "digital_twin" + }, + { + "label": "Node: pve-venus", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 2, + "norm_label": "node: pve-venus", + "community_name": "Node: pve-venus", + "id": "digital_twin_pve_venus" + }, + { + "label": "VM 10190100: Router190", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 2, + "norm_label": "vm 10190100: router190", + "community_name": "Node: pve-venus", + "id": "digital_twin_router190" + }, + { + "label": "VM 10190129: Traefik190-01", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 3, + "norm_label": "vm 10190129: traefik190-01", + "community_name": "Docker-Host: venus-traefik", + "id": "digital_twin_traefik190_01" + }, + { + "label": "VM 10190130: fc190", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 2, + "norm_label": "vm 10190130: fc190", + "community_name": "Node: pve-venus", + "id": "digital_twin_fc190" + }, + { + "label": "VM 10190150: RustDesk-WWW", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 2, + "norm_label": "vm 10190150: rustdesk-www", + "community_name": "Node: pve-venus", + "id": "digital_twin_rustdesk_www" + }, + { + "label": "LXC 10190120: db19001200", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 2, + "norm_label": "lxc 10190120: db19001200", + "community_name": "Node: pve-venus", + "id": "digital_twin_db19001200" + }, + { + "label": "LXC 10190121: crawler19001210", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 2, + "norm_label": "lxc 10190121: crawler19001210", + "community_name": "Node: pve-venus", + "id": "digital_twin_crawler19001210" + }, + { + "label": "LXC 10190180: web19001180", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 2, + "norm_label": "lxc 10190180: web19001180", + "community_name": "Node: pve-venus", + "id": "digital_twin_web19001180" + }, + { + "label": "Docker-Host: pve-host", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 1, + "norm_label": "docker-host: pve-host", + "community_name": "Docker-Host: pve-host", + "id": "digital_twin_pve_host" + }, + { + "label": "Container: jmap-proxy", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 1, + "norm_label": "container: jmap-proxy", + "community_name": "Docker-Host: pve-host", + "id": "digital_twin_jmap_proxy" + }, + { + "label": "Container: agent-reach", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 1, + "norm_label": "container: agent-reach", + "community_name": "Docker-Host: pve-host", + "id": "digital_twin_agent_reach" + }, + { + "label": "Container: omniroute", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 1, + "norm_label": "container: omniroute", + "community_name": "Docker-Host: pve-host", + "id": "digital_twin_omniroute" + }, + { + "label": "Container: phoenix_onboarding", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 1, + "norm_label": "container: phoenix_onboarding", + "community_name": "Docker-Host: pve-host", + "id": "digital_twin_phoenix_onboarding" + }, + { + "label": "Container: ram_graph_general", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 1, + "norm_label": "container: ram_graph_general", + "community_name": "Docker-Host: pve-host", + "id": "digital_twin_ram_graph_general" + }, + { + "label": "Container: ram_graph_sovereign", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 1, + "norm_label": "container: ram_graph_sovereign", + "community_name": "Docker-Host: pve-host", + "id": "digital_twin_ram_graph_sovereign" + }, + { + "label": "Container: bernados_app", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 1, + "norm_label": "container: bernados_app", + "community_name": "Docker-Host: pve-host", + "id": "digital_twin_bernados_app" + }, + { + "label": "Docker-Host: venus-traefik", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 3, + "norm_label": "docker-host: venus-traefik", + "community_name": "Docker-Host: venus-traefik", + "id": "digital_twin_venus_traefik" + }, + { + "label": "Container: traefik", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 3, + "norm_label": "container: traefik", + "community_name": "Docker-Host: venus-traefik", + "id": "digital_twin_traefik" + }, + { + "label": "Container: oauth2-proxy", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 3, + "norm_label": "container: oauth2-proxy", + "community_name": "Docker-Host: venus-traefik", + "id": "digital_twin_oauth2_proxy" + }, + { + "label": "Docker-Host: venus-rustdesk", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 0, + "norm_label": "docker-host: venus-rustdesk", + "community_name": "Docker-Host: venus-rustdesk", + "id": "digital_twin_venus_rustdesk" + }, + { + "label": "Container: lp-manager-worker", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 0, + "norm_label": "container: lp-manager-worker", + "community_name": "Docker-Host: venus-rustdesk", + "id": "digital_twin_lp_manager_worker" + }, + { + "label": "Container: lp-manager-app", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 0, + "norm_label": "container: lp-manager-app", + "community_name": "Docker-Host: venus-rustdesk", + "id": "digital_twin_lp_manager_app" + }, + { + "label": "Container: lp-onboarding-service", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 0, + "norm_label": "container: lp-onboarding-service", + "community_name": "Docker-Host: venus-rustdesk", + "id": "digital_twin_lp_onboarding_service" + }, + { + "label": "Container: dev-widget-nginx", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 0, + "norm_label": "container: dev-widget-nginx", + "community_name": "Docker-Host: venus-rustdesk", + "id": "digital_twin_dev_widget_nginx" + }, + { + "label": "Container: lp-manager-ui-control", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 0, + "norm_label": "container: lp-manager-ui-control", + "community_name": "Docker-Host: venus-rustdesk", + "id": "digital_twin_lp_manager_ui_control" + }, + { + "label": "Container: lp-manager-postgres-leads", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 0, + "norm_label": "container: lp-manager-postgres-leads", + "community_name": "Docker-Host: venus-rustdesk", + "id": "digital_twin_lp_manager_postgres_leads" + }, + { + "label": "Container: lp-manager-postgres-platform", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 0, + "norm_label": "container: lp-manager-postgres-platform", + "community_name": "Docker-Host: venus-rustdesk", + "id": "digital_twin_lp_manager_postgres_platform" + }, + { + "label": "Container: lp-manager-minio", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 0, + "norm_label": "container: lp-manager-minio", + "community_name": "Docker-Host: venus-rustdesk", + "id": "digital_twin_lp_manager_minio" + }, + { + "label": "Container: forgejo", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 0, + "norm_label": "container: forgejo", + "community_name": "Docker-Host: venus-rustdesk", + "id": "digital_twin_forgejo" + }, + { + "label": "Container: space-agent-ui", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 0, + "norm_label": "container: space-agent-ui", + "community_name": "Docker-Host: venus-rustdesk", + "id": "digital_twin_space_agent_ui" + }, + { + "label": "Container: lp-manager-redis", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 0, + "norm_label": "container: lp-manager-redis", + "community_name": "Docker-Host: venus-rustdesk", + "id": "digital_twin_lp_manager_redis" + }, + { + "label": "Container: quotes-app", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 0, + "norm_label": "container: quotes-app", + "community_name": "Docker-Host: venus-rustdesk", + "id": "digital_twin_quotes_app" + }, + { + "label": "Container: quotes-db", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 0, + "norm_label": "container: quotes-db", + "community_name": "Docker-Host: venus-rustdesk", + "id": "digital_twin_quotes_db" + }, + { + "label": "Container: fti-app", + "file_type": "concept", + "source_file": "digital_twin.md", + "source_location": null, + "community": 0, + "norm_label": "container: fti-app", + "community_name": "Docker-Host: venus-rustdesk", + "id": "digital_twin_fti_app" + } + ], + "links": [ + { + "relation": "runs_on", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "digital_twin.md", + "source": "digital_twin_crawler19001210", + "target": "digital_twin_pve_venus" + }, + { + "relation": "runs_on", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "digital_twin.md", + "source": "digital_twin_db19001200", + "target": "digital_twin_pve_venus" + }, + { + "relation": "runs_on", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "digital_twin.md", + "source": "digital_twin_fc190", + "target": "digital_twin_pve_venus" + }, + { + "relation": "runs_on", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "digital_twin.md", + "source": "digital_twin_router190", + "target": "digital_twin_pve_venus" + }, + { + "relation": "runs_on", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "digital_twin.md", + "source": "digital_twin_rustdesk_www", + "target": "digital_twin_pve_venus" + }, + { + "relation": "runs_on", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "digital_twin.md", + "source": "digital_twin_traefik190_01", + "target": "digital_twin_pve_venus" + }, + { + "relation": "runs_on", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "digital_twin.md", + "source": "digital_twin_web19001180", + "target": "digital_twin_pve_venus" + }, + { + "relation": "runs_on", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "digital_twin.md", + "source": "digital_twin_venus_traefik", + "target": "digital_twin_traefik190_01" + }, + { + "relation": "runs_on", + "confidence": "INFERRED", + "confidence_score": 0.8, + "source_file": "digital_twin.md", + "source": "digital_twin_venus_rustdesk", + "target": "digital_twin_rustdesk_www" + }, + { + "relation": "runs_on", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "digital_twin.md", + "source": "digital_twin_agent_reach", + "target": "digital_twin_pve_host" + }, + { + "relation": "runs_on", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "digital_twin.md", + "source": "digital_twin_bernados_app", + "target": "digital_twin_pve_host" + }, + { + "relation": "runs_on", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "digital_twin.md", + "source": "digital_twin_jmap_proxy", + "target": "digital_twin_pve_host" + }, + { + "relation": "runs_on", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "digital_twin.md", + "source": "digital_twin_omniroute", + "target": "digital_twin_pve_host" + }, + { + "relation": "runs_on", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "digital_twin.md", + "source": "digital_twin_phoenix_onboarding", + "target": "digital_twin_pve_host" + }, + { + "relation": "runs_on", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "digital_twin.md", + "source": "digital_twin_ram_graph_general", + "target": "digital_twin_pve_host" + }, + { + "relation": "runs_on", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "digital_twin.md", + "source": "digital_twin_ram_graph_sovereign", + "target": "digital_twin_pve_host" + }, + { + "relation": "runs_on", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "digital_twin.md", + "source": "digital_twin_oauth2_proxy", + "target": "digital_twin_venus_traefik" + }, + { + "relation": "runs_on", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "digital_twin.md", + "source": "digital_twin_traefik", + "target": "digital_twin_venus_traefik" + }, + { + "relation": "runs_on", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "digital_twin.md", + "source": "digital_twin_dev_widget_nginx", + "target": "digital_twin_venus_rustdesk" + }, + { + "relation": "runs_on", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "digital_twin.md", + "source": "digital_twin_forgejo", + "target": "digital_twin_venus_rustdesk" + }, + { + "relation": "runs_on", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "digital_twin.md", + "source": "digital_twin_fti_app", + "target": "digital_twin_venus_rustdesk" + }, + { + "relation": "runs_on", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "digital_twin.md", + "source": "digital_twin_lp_manager_app", + "target": "digital_twin_venus_rustdesk" + }, + { + "relation": "runs_on", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "digital_twin.md", + "source": "digital_twin_lp_manager_minio", + "target": "digital_twin_venus_rustdesk" + }, + { + "relation": "runs_on", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "digital_twin.md", + "source": "digital_twin_lp_manager_postgres_leads", + "target": "digital_twin_venus_rustdesk" + }, + { + "relation": "runs_on", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "digital_twin.md", + "source": "digital_twin_lp_manager_postgres_platform", + "target": "digital_twin_venus_rustdesk" + }, + { + "relation": "runs_on", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "digital_twin.md", + "source": "digital_twin_lp_manager_redis", + "target": "digital_twin_venus_rustdesk" + }, + { + "relation": "runs_on", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "digital_twin.md", + "source": "digital_twin_lp_manager_ui_control", + "target": "digital_twin_venus_rustdesk" + }, + { + "relation": "runs_on", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "digital_twin.md", + "source": "digital_twin_lp_manager_worker", + "target": "digital_twin_venus_rustdesk" + }, + { + "relation": "runs_on", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "digital_twin.md", + "source": "digital_twin_lp_onboarding_service", + "target": "digital_twin_venus_rustdesk" + }, + { + "relation": "runs_on", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "digital_twin.md", + "source": "digital_twin_quotes_app", + "target": "digital_twin_venus_rustdesk" + }, + { + "relation": "runs_on", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "digital_twin.md", + "source": "digital_twin_quotes_db", + "target": "digital_twin_venus_rustdesk" + }, + { + "relation": "runs_on", + "confidence": "EXTRACTED", + "confidence_score": 1.0, + "source_file": "digital_twin.md", + "source": "digital_twin_space_agent_ui", + "target": "digital_twin_venus_rustdesk" + } + ], + "hyperedges": [] +} \ No newline at end of file diff --git a/state/graphify-out/manifest.json b/state/graphify-out/manifest.json new file mode 100644 index 0000000..360407b --- /dev/null +++ b/state/graphify-out/manifest.json @@ -0,0 +1,7 @@ +{ + "digital_twin.md": { + "mtime": 1786179392.3292885, + "ast_hash": "4cabb774622ad1285edd64b7ec788db3", + "semantic_hash": "4cabb774622ad1285edd64b7ec788db3" + } +} \ No newline at end of file