# shirokaproject/shirobot architecture

> Architecture diagram of the GitHub repository shirokaproject/shirobot, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-10). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/shirokaproject/shirobot
- Repository: https://github.com/shirokaproject/shirobot

## Overview

ShiroBot is a .NET bot framework for running platform adapters and plugins, with a local dashboard for host management. The principal workflow is: an operator starts the host, adapters connect to messaging platforms and publish platform-neutral events, the host dispatches events to plugins, and adapters provide platform-specific messaging services. The repository also includes configuration, component lifecycle and package updates, logging, and dashboard capabilities. Relationships below are limited to those supported by the README or the supplied source index and excerpts; several dashboard and update details are documented only at subsystem level.

Main entry points: [`Core/Adapters/AdapterManager.cs`](https://github.com/shirokaproject/shirobot/blob/master/Core/Adapters/AdapterManager.cs) (Adapter lifecycle), [`Core/Plugins/PluginManager.cs`](https://github.com/shirokaproject/shirobot/blob/master/Core/Plugins/PluginManager.cs) (Plugin lifecycle), [`Core/Hosting/Http`](https://github.com/shirokaproject/shirobot/tree/master/Core/Hosting/Http) (HTTP dashboard), [`Core/Hosting/Commands/HostCommandHandler.cs`](https://github.com/shirokaproject/shirobot/blob/master/Core/Hosting/Commands/HostCommandHandler.cs) (Host commands)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_host["Host runtime"]
  node_program["Host startup<br/>[Program.cs]"]
  node_http["HTTP dashboard"]
  node_commands["Host commands"]
  node_config["Configuration<br/>[ConfigManager.cs]"]
  node_runtime["Runtime status"]
  node_logs["Logging<br/>[HostLogHub.cs]"]
  node_console["Console UI<br/>[ConsoleOutput.cs]"]
end

subgraph group_components["Components"]
  node_adapters["Adapter lifecycle<br/>[AdapterManager.cs]"]
  node_adapter_packages["Adapter packages"]
  node_plugins["Plugin lifecycle<br/>[PluginManager.cs]"]
  node_plugin_handle["Loaded plugin"]
  node_assembly["Assembly loading"]
  node_staged["Staged updates"]
  node_updater["Update services<br/>[Updater.cs]"]
end

subgraph group_messaging["Messaging"]
  node_adapter_sdk["Adapter SDK<br/>[IMessageService.cs]"]
  node_event_bridge["Adapter event bridge"]
  node_events["Event dispatcher"]
  node_message_model["Message model<br/>[Message.cs]"]
  node_plugin_sdk["Plugin SDK<br/>[PluginBase.cs]"]
end

subgraph group_management["Management"]
  node_marketplace["Component marketplace"]
  node_avalonia["Avalonia integration<br/>[AxamlRenderer.cs]"]
end

node_operator(("Operator"))
node_platform(("Messaging platform"))

node_operator -->|"starts"| node_program
node_program -->|"initializes"| node_plugins
node_program -.->|"initializes"| node_adapters
node_program -->|"initializes"| node_config
node_operator -->|"opens dashboard"| node_http
node_http -.->|"manages"| node_plugins
node_http -.->|"manages"| node_adapters
node_commands -->|"manages"| node_plugins
node_commands -->|"manages"| node_adapters
node_commands -->|"invokes"| node_updater
node_commands -->|"writes output"| node_console
node_adapters -->|"publishes events"| node_event_bridge
node_event_bridge -.->|"dispatches events"| node_events
node_events -->|"invokes handlers"| node_plugin_handle
node_events -->|"dispatches"| node_message_model
node_plugin_handle -.->|"implements"| node_plugin_sdk
node_adapters -->|"loads adapters"| node_adapter_sdk
node_adapter_sdk -.->|"sends messages"| node_platform
node_platform -.->|"provides events"| node_adapters
node_plugins -->|"resolves assemblies"| node_assembly
node_plugins -.->|"loads and unloads"| node_plugin_handle
node_plugins -->|"stages replacements"| node_staged
node_adapters -->|"stages replacements"| node_staged
node_updater -->|"stages updates"| node_staged
node_config -.->|"configures"| node_adapters
node_config -.->|"configures"| node_plugins
node_runtime -.->|"reports status"| node_http
node_logs -.->|"streams logs"| node_http
node_operator -.->|"finds components"| node_marketplace
node_avalonia -.->|"renders UI"| node_plugin_sdk

click node_program "https://github.com/shirokaproject/shirobot/blob/master/Core/Program.cs"
click node_http "https://github.com/shirokaproject/shirobot/tree/master/Core/Hosting/Http"
click node_commands "https://github.com/shirokaproject/shirobot/blob/master/Core/Hosting/Commands/HostCommandHandler.cs"
click node_config "https://github.com/shirokaproject/shirobot/blob/master/Core/Configuration/ConfigManager.cs"
click node_runtime "https://github.com/shirokaproject/shirobot/blob/master/Core/Hosting/Runtime/HostRuntimeState.cs"
click node_logs "https://github.com/shirokaproject/shirobot/blob/master/Core/Hosting/Logging/HostLogHub.cs"
click node_console "https://github.com/shirokaproject/shirobot/blob/master/Core/Terminal/ConsoleOutput.cs"
click node_adapters "https://github.com/shirokaproject/shirobot/blob/master/Core/Adapters/AdapterManager.cs"
click node_adapter_packages "https://github.com/shirokaproject/shirobot/blob/master/Core/Adapters/AdapterPackageManager.cs"
click node_plugins "https://github.com/shirokaproject/shirobot/blob/master/Core/Plugins/PluginManager.cs"
click node_plugin_handle "https://github.com/shirokaproject/shirobot/blob/master/Core/Plugins/LoadedPluginHandle.cs"
click node_assembly "https://github.com/shirokaproject/shirobot/blob/master/Core/Plugins/Loading/SharedAssemblyResolver.cs"
click node_staged "https://github.com/shirokaproject/shirobot/blob/master/Core/Components/Updates/StagedComponentUpdates.cs"
click node_updater "https://github.com/shirokaproject/shirobot/blob/master/Core/Update/Updater.cs"
click node_adapter_sdk "https://github.com/shirokaproject/shirobot/blob/master/SDK/Adapter/IMessageService.cs"
click node_event_bridge "https://github.com/shirokaproject/shirobot/blob/master/Core/Adapters/AdapterEventBridge.cs"
click node_events "https://github.com/shirokaproject/shirobot/blob/master/Core/Hosting/Events/HostEventDispatcher.cs"
click node_message_model "https://github.com/shirokaproject/shirobot/blob/master/SDK/Models/Message.cs"
click node_plugin_sdk "https://github.com/shirokaproject/shirobot/blob/master/SDK/Plugin/PluginBase.cs"
click node_marketplace "https://github.com/shirokaproject/shirobot/blob/master/Core/Plugins/Marketplace/PluginMarketplaceCache.cs"
click node_avalonia "https://github.com/shirokaproject/shirobot/blob/master/Core/Integrations/Avalonia/AxamlRenderer.cs"

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_http,node_commands,node_config,node_runtime,node_logs,node_console toneBlue
class node_adapters,node_adapter_packages,node_plugins,node_plugin_handle,node_assembly,node_staged,node_updater toneAmber
class node_adapter_sdk,node_event_bridge,node_events,node_message_model,node_plugin_sdk toneMint
class node_marketplace,node_avalonia toneRose
class node_operator,node_platform toneIndigo
```

## Components

### Host runtime

- [Host startup](https://github.com/shirokaproject/shirobot/blob/master/Core/Program.cs): `Core/Program.cs`
- [HTTP dashboard](https://github.com/shirokaproject/shirobot/tree/master/Core/Hosting/Http): `Core/Hosting/Http`
- [Host commands](https://github.com/shirokaproject/shirobot/blob/master/Core/Hosting/Commands/HostCommandHandler.cs): `Core/Hosting/Commands/HostCommandHandler.cs`
- [Configuration](https://github.com/shirokaproject/shirobot/blob/master/Core/Configuration/ConfigManager.cs): `Core/Configuration/ConfigManager.cs`
- [Runtime status](https://github.com/shirokaproject/shirobot/blob/master/Core/Hosting/Runtime/HostRuntimeState.cs): `Core/Hosting/Runtime/HostRuntimeState.cs`
- [Logging](https://github.com/shirokaproject/shirobot/blob/master/Core/Hosting/Logging/HostLogHub.cs): `Core/Hosting/Logging/HostLogHub.cs`
- [Console UI](https://github.com/shirokaproject/shirobot/blob/master/Core/Terminal/ConsoleOutput.cs): `Core/Terminal/ConsoleOutput.cs`

### Components

- [Adapter lifecycle](https://github.com/shirokaproject/shirobot/blob/master/Core/Adapters/AdapterManager.cs): `Core/Adapters/AdapterManager.cs`
- [Adapter packages](https://github.com/shirokaproject/shirobot/blob/master/Core/Adapters/AdapterPackageManager.cs): `Core/Adapters/AdapterPackageManager.cs`
- [Plugin lifecycle](https://github.com/shirokaproject/shirobot/blob/master/Core/Plugins/PluginManager.cs): `Core/Plugins/PluginManager.cs`
- [Loaded plugin](https://github.com/shirokaproject/shirobot/blob/master/Core/Plugins/LoadedPluginHandle.cs): `Core/Plugins/LoadedPluginHandle.cs`
- [Assembly loading](https://github.com/shirokaproject/shirobot/blob/master/Core/Plugins/Loading/SharedAssemblyResolver.cs): `Core/Plugins/Loading/SharedAssemblyResolver.cs`
- [Staged updates](https://github.com/shirokaproject/shirobot/blob/master/Core/Components/Updates/StagedComponentUpdates.cs): `Core/Components/Updates/StagedComponentUpdates.cs`
- [Update services](https://github.com/shirokaproject/shirobot/blob/master/Core/Update/Updater.cs): `Core/Update/Updater.cs`

### Messaging

- [Adapter SDK](https://github.com/shirokaproject/shirobot/blob/master/SDK/Adapter/IMessageService.cs): `SDK/Adapter/IMessageService.cs`
- [Adapter event bridge](https://github.com/shirokaproject/shirobot/blob/master/Core/Adapters/AdapterEventBridge.cs): `Core/Adapters/AdapterEventBridge.cs`
- [Event dispatcher](https://github.com/shirokaproject/shirobot/blob/master/Core/Hosting/Events/HostEventDispatcher.cs): `Core/Hosting/Events/HostEventDispatcher.cs`
- [Message model](https://github.com/shirokaproject/shirobot/blob/master/SDK/Models/Message.cs): `SDK/Models/Message.cs`
- [Plugin SDK](https://github.com/shirokaproject/shirobot/blob/master/SDK/Plugin/PluginBase.cs): `SDK/Plugin/PluginBase.cs`

### Management

- [Component marketplace](https://github.com/shirokaproject/shirobot/blob/master/Core/Plugins/Marketplace/PluginMarketplaceCache.cs): `Core/Plugins/Marketplace/PluginMarketplaceCache.cs`
- [Avalonia integration](https://github.com/shirokaproject/shirobot/blob/master/Core/Integrations/Avalonia/AxamlRenderer.cs): `Core/Integrations/Avalonia/AxamlRenderer.cs`

### Other components

- **Operator**
- **Messaging platform**

## Connections

- Operator → Host startup: starts
- Host startup → Plugin lifecycle: initializes (evidence: `Core/Program.cs`)
- Host startup → Adapter lifecycle: initializes (evidence: `Core/Program.cs`)
- Host startup → Configuration: initializes (evidence: `Core/Program.cs`)
- Operator → HTTP dashboard: opens dashboard
- HTTP dashboard → Plugin lifecycle: manages
- HTTP dashboard → Adapter lifecycle: manages
- Host commands → Plugin lifecycle: manages (evidence: `Core/Hosting/Commands/HostCommandHandler.cs`)
- Host commands → Adapter lifecycle: manages (evidence: `Core/Hosting/Commands/HostCommandHandler.cs`)
- Host commands → Update services: invokes (evidence: `Core/Hosting/Commands/HostCommandHandler.cs`)
- Host commands → Console UI: writes output (evidence: `Core/Hosting/Commands/HostCommandHandler.cs`)
- Adapter lifecycle → Adapter event bridge: publishes events (evidence: `Core/Adapters/AdapterManager.cs`)
- Adapter event bridge → Event dispatcher: dispatches events
- Event dispatcher → Loaded plugin: invokes handlers (evidence: `Core/Hosting/Events/HostEventDispatcher.cs`)
- Event dispatcher → Message model: dispatches (evidence: `Core/Hosting/Events/HostEventDispatcher.cs`)
- Loaded plugin → Plugin SDK: implements (evidence: `Core/Plugins/LoadedPluginHandle.cs`)
- Adapter lifecycle → Adapter SDK: loads adapters (evidence: `Core/Adapters/AdapterManager.cs`)
- Adapter SDK → Messaging platform: sends messages
- Messaging platform → Adapter lifecycle: provides events
- Plugin lifecycle → Assembly loading: resolves assemblies (evidence: `Core/Plugins/PluginManager.cs`)
- Plugin lifecycle → Loaded plugin: loads and unloads (evidence: `Core/Plugins/PluginManager.cs`)
- Plugin lifecycle → Staged updates: stages replacements (evidence: `Core/Plugins/PluginManager.cs`)
- Adapter lifecycle → Staged updates: stages replacements (evidence: `Core/Adapters/AdapterManager.cs`)
- Update services → Staged updates: stages updates (evidence: `Core/Update/PluginUpdateService.cs`)
- Configuration → Adapter lifecycle: configures
- Configuration → Plugin lifecycle: configures
- Runtime status → HTTP dashboard: reports status
- Logging → HTTP dashboard: streams logs
- Operator → Component marketplace: finds components
- Avalonia integration → Plugin SDK: renders UI
