kagenti-native RabbitMQ Architecture

πŸ’¬ Reply

Access Commands:

$ ipfs cat QmPq3ngb6iS9rxHb8juFowEncJSV68hLpjxj3QDmVo37cj
$ cat /data/pastebin/20260319_120039_kagenti_native_rabbitmq_architecture.txt
$ curl http://localhost:8090/raw/20260319_120039_kagenti_native_rabbitmq_architecture

Content:

```
kagenti-native RabbitMQ Architecture
=====================================

                          β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                          β”‚   RabbitMQ Broker    β”‚
                          β”‚  localhost:5672      β”‚
                          β”‚  vhost: /monster     β”‚
                          β”‚  user: kagenti       β”‚
                          β”‚                     β”‚
                          β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
                          β”‚  β”‚   Exchange     β”‚  β”‚
                          β”‚  β”‚ kagenti.events β”‚  β”‚
                          β”‚  β”‚  (fanout)      β”‚  β”‚
                          β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
                          β”‚          β”‚ bind     β”‚
                          β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
                          β”‚  β”‚     Queue       β”‚ β”‚
                          β”‚  β”‚ kagenti.agent   β”‚ β”‚
                          β”‚  β”‚   .events       β”‚ β”‚
                          β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
                          β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                     β”‚
              β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
              β”‚                      β”‚                      β”‚
     publish  β”‚             subscribeβ”‚              publish  β”‚
              β”‚                      β”‚                      β”‚
   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”          β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”
   β”‚ API Server  β”‚          β”‚   Reconciler    β”‚    β”‚  CLI / TUI    β”‚
   β”‚ (axum)      β”‚          β”‚   (daemon)      β”‚    β”‚  (Go client)  β”‚
   β”‚ :8480       β”‚          β”‚                 β”‚    β”‚               β”‚
   β”‚             β”‚          β”‚ on AgentEvent:  β”‚    β”‚ POST /deploy  β”‚
   β”‚ POST /deploy│─publish─▢│  Created β†’ nix  β”‚    β”‚ POST /start   β”‚
   β”‚ POST /start β”‚          β”‚    build +      β”‚    β”‚ POST /stop    β”‚
   β”‚ POST /stop  β”‚          β”‚    systemd      β”‚    β”‚ GET  /status  β”‚
   β”‚ GET /status β”‚          β”‚    install+startβ”‚    β”‚               β”‚
   β”‚ GET /agents β”‚          β”‚  Updated β†’      β”‚    β”‚ GET /agents   β”‚
   β”‚             β”‚          β”‚    restart unit  β”‚    β”‚               β”‚
   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜          β”‚  Deleted β†’      β”‚    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                            β”‚    stop+remove  β”‚
                            β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                     β”‚
                    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                    β”‚                β”‚                β”‚
           β”Œβ”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”
           β”‚ systemd       β”‚ β”‚ nix build    β”‚ β”‚ systemd      β”‚
           β”‚ --user        β”‚ β”‚              β”‚ β”‚ --user       β”‚
           β”‚               β”‚ β”‚ flake.nix    β”‚ β”‚              β”‚
           β”‚ kagenti-agent β”‚ β”‚ β†’ /nix/store β”‚ β”‚ kagenti-agentβ”‚
           β”‚ -hello.serviceβ”‚ β”‚   /...-agent β”‚ β”‚ -git.service β”‚
           β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Message Flow:
─────────────
1. Client POSTs AgentRuntime to API server
2. API server publishes AgentEvent::Created to RabbitMQ
3. Reconciler receives event via subscribe (mpsc channel)
4. Reconciler calls kagenti-nix::build_agent() β†’ nix build
5. Reconciler calls kagenti-daemon::systemd::install() + start()
6. Agent runs as systemd --user service

AgentEvent (JSON, serde tagged):
────────────────────────────────
  {"kind":"Created", "name":"...", "namespace":"...", ...}
  {"kind":"Updated", "name":"...", "namespace":"...", ...}
  {"kind":"Deleted", "name":"...", "namespace":"..."}

Crate Mapping:
──────────────
  kagenti-api   β†’ types + axum routes (k8s-compatible REST)
  kagenti-rmq   β†’ EventBus (lapin v2, fanout exchange)
  kagenti-nix   β†’ generate_flake() + build_agent()
  kagenti-daemon→ systemd.rs + main.rs (API + reconciler)
```


kagenti-native RabbitMQ Architecture