Diagram shows connections that do not exist in the scanned code

Author: Andrea-BrunoCreated Sep 8, 2026Updated Sep 8, 2026

I want to give you enough detail to reproduce and fix this, so please read the whole report. I generated a diagram with gitdiagram for the public repository Graphene-Lab/AgentBridge at https://github.com/Graphene-Lab/AgentBridge (default branch master, repository name alone is ambiguous because other projects are also called AgentBridge) and then verified the output by reading the actual source files. Several arrows in the generated diagram do not exist in the code and look invented, so the result is misleading for anyone trying to understand the project. The complete original diagram output is reproduced below so you can run the same input and compare.

mermaid
flowchart TD

subgraph group_host["Host runtime"]
  node_program["Application host<br/>startup<br/>[Program.cs]"]
  node_config["Host configuration<br/>settings<br/>[AppConfig.cs]"]
  node_agent{{"AIOrchestrator runtime<br/>agent runtime<br/>[Program.cs]"}}
  node_tools["In-process tool plugins<br/>tool boundary<br/>[AgentTools.cs]"]
  node_toolplugins["Plugin integration<br/>tool plugins<br/>[ToolPlugins.cs]"]
  node_sessions[("Shared session store<br/>conversation state<br/>[SessionStore.cs]")]
  node_stateless["Stateless conversations<br/>request conversations"]
end

subgraph group_interfaces["User interfaces"]
  node_tui["Terminal GUI<br/>TUI<br/>[Tui.cs]"]
  node_http["OpenAI-compatible API<br/>localhost HTTP API<br/>[OfficeBridge.cs]"]
  node_api_models["API contracts<br/>HTTP models<br/>[ApiModels.cs]"]
  node_office["OfficeManager<br/>browser visualization<br/>[index.html]"]
end

subgraph group_channels["Channel bridges"]
  node_telegram["Telegram bridge<br/>MTProto adapter<br/>[TelegramBridge.cs]"]
  node_sip["SIP voice orchestration<br/>SIP adapter<br/>[SipBridge.cs]"]
  node_voice["Voice processing<br/>voice adapter<br/>[VoiceBridge.cs]"]
  node_tts["Speech synthesis<br/>TTS engine<br/>[TtsEngine.cs]"]
end

subgraph group_delivery["Distribution"]
  node_updater["Update services<br/>update orchestration<br/>[AutoUpdate.cs]"]
  node_web_updater["Browser client updater<br/>web client delivery"]
  node_release["Release automation<br/>CI release pipeline<br/>[release.yml]"]
end

node_providers{{"LLM providers<br/>external inference"}}
node_telegram_net(("Telegram network<br/>external service"))
node_sip_net(("SIP/RTP network<br/>external network<br/>[kamailio.cfg]"))

node_program -->|"loads"| node_config
node_program -->|"configures"| node_agent
node_program -->|"owns"| node_sessions
node_agent -->|"selects"| node_providers
node_agent -->|"invokes"| node_tools
node_tools -->|"loads"| node_toolplugins
node_tui -->|"conversations"| node_agent
node_tui -->|"uses"| node_sessions
node_http -->|"uses"| node_api_models
node_http -->|"conversations"| node_agent
node_http -->|"uses"| node_sessions
node_http -->|"request mode"| node_stateless
node_telegram -->|"messages"| node_agent
node_telegram -->|"MTProto"| node_telegram_net
node_sip -->|"calls"| node_agent
node_sip -->|"audio flow"| node_voice
node_sip -->|"signaling and RTP"| node_sip_net
node_voice -->|"speech responses"| node_tts
node_office -.->|"activity/status"| node_agent
node_updater -->|"consumes releases"| node_release
node_web_updater -->|"installs/updates"| node_office

click node_program "https://github.com/graphene-lab/agentbridge/blob/master/Program.cs"
click node_config "https://github.com/graphene-lab/agentbridge/blob/master/AppConfig.cs"
click node_agent "https://github.com/graphene-lab/agentbridge/blob/master/Program.cs"
click node_tools "https://github.com/graphene-lab/agentbridge/blob/master/AgentTools.cs"
click node_toolplugins "https://github.com/graphene-lab/agentbridge/blob/master/ToolPlugins.cs"
click node_sessions "https://github.com/graphene-lab/agentbridge/blob/master/SessionStore.cs"
click node_stateless "https://github.com/graphene-lab/agentbridge/blob/master/StatelessConversation.cs"
click node_tui "https://github.com/graphene-lab/agentbridge/blob/master/Tui.cs"
click node_http "https://github.com/graphene-lab/agentbridge/blob/master/OfficeBridge.cs"
click node_api_models "https://github.com/graphene-lab/agentbridge/blob/master/ApiModels.cs"
click node_telegram "https://github.com/graphene-lab/agentbridge/blob/master/TelegramBridge.cs"
click node_sip "https://github.com/graphene-lab/agentbridge/blob/master/SipBridge.cs"
click node_voice "https://github.com/graphene-lab/agentbridge/blob/master/VoiceBridge.cs"
click node_tts "https://github.com/graphene-lab/agentbridge/blob/master/TtsEngine.cs"
click node_office "https://github.com/graphene-lab/agentbridge/blob/master/OfficeManager/index.html"
click node_sip_net "https://github.com/graphene-lab/agentbridge/blob/master/docs/sip-entry/kamailio.cfg"
click node_updater "https://github.com/graphene-lab/agentbridge/blob/master/AutoUpdate.cs"
click node_web_updater "https://github.com/graphene-lab/agentbridge/blob/master/WebClientUpdater.cs"
click node_release "https://github.com/graphene-lab/agentbridge/blob/master/.github/workflows/release.yml"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_program,node_config,node_agent,node_tools,node_toolplugins,node_sessions,node_stateless toneBlue
class node_tui,node_http,node_api_models,node_office toneAmber
class node_telegram,node_sip,node_voice,node_tts toneMint
class node_updater,node_web_updater,node_release toneRose
class node_providers,node_telegram_net,node_sip_net toneNeutral

The clearest example is the arrow labeled installs/updates that goes from the node named WebClientUpdater.cs to the node named OfficeManager/index.html. In the actual repository WebClientUpdater.cs installs and updates a different web client called Giraffe AI, which is not part of the AgentBridge repository at all; the file header says it is downloaded from the releases of another repository, Graphene-Lab/GiraffeAI, into a folder named GiraffeAIWebClient next to the executable. There is no reference from WebClientUpdater to the OfficeManager folder anywhere in the code. OfficeManager is itself part of the AgentBridge repository and is served by the host in Program.cs at the path /OfficeManager, so it can only change together with the whole application and is never touched by WebClientUpdater.

The second problem is that the node named OfficeBridge.cs is labeled as the OpenAI-compatible localhost HTTP API. OfficeBridge.cs is actually a duplex WebSocket hub, exposed at the route /ws/office, plus an agent-lifecycle tracker that serves the browser office visualization; all of the OpenAI-compatible HTTP endpoints such as /v1/chat/completions, /v1/files, /v1/models, /v1/audio/speech, /v1/control, /mcp and /health are registered directly in Program.cs, which is the ASP.NET minimal host of the whole application.

The third problem is the voice chain drawn from the SIP bridge through VoiceBridge.cs to TtsEngine.cs. In the code the SIP bridge in SipBridge.cs runs its calls through a separate pipe class SipVoiceAgent.cs that talks to an external helper process for speech recognition and speech synthesis, and it never uses VoiceBridge or TtsEngine. VoiceBridge.cs is only a one-shot server-microphone speech recognizer used by the endpoint POST /v1/voice/listen, and TtsEngine.cs is the in-process Kokoro synthesizer used only by the endpoint POST /v1/audio/speech. Several smaller labels are also wrong: the terminal UI in Tui.cs does not talk to the agent or the session store directly, it is an HTTP client of the local server and sends its conversations to /v1/chat/completions; ApiModels.cs is not a user interface but the request contracts consumed by the HTTP endpoints; AgentTools.cs is only a preset table of tool names while tool execution happens inside the engine, and the plugin file ToolPlugins.cs is a dynamic loader of plugin assemblies from a Tools folder next to the executable.

It would help a lot if the diagram were produced deterministically from the code, for example by tracing which files actually reference which files and which classes actually call which methods, so that every arrow reflects a real dependency, or if the tool at least validated each arrow against the repository before drawing it. The output currently looks plausible at first sight, but someone who reads the project can disprove most of the meaningful edges, which makes the diagram actively misleading. I have produced a corrected version by hand from the source code and I can share it if that helps your debugging.

Source: ahmedkhaleel2004/gitdiagram