⎇ b3feaf667ca5f34292ea23c0c70ae4895962491f
crates/core/brahman-admin/examples/brahman-status.rs
Ñawpa willay
Pi imata llamkarqan
ch'uya
feat: Crossreferencia — Card.references como grafo del fractal
1//! `brahman-status` — CLI para inspeccionar el estado del Init.
2//!
3//! Conecta al socket admin (default `$XDG_RUNTIME_DIR/brahman-admin.sock`,
4//! override con `$BRAHMAN_ADMIN_SOCKET`), recibe el snapshot, y lo imprime.
5
6use brahman_admin::{client, transport};
7
8#[tokio::main(flavor = "current_thread")]
9async fn main() -> anyhow::Result<()> {
10 let path = transport::default_socket_path();
11 let snap = client::query(&path).await?;
12
13 println!(
14 "Init: server={} protocol={} attached={}",
15 snap.server_version, snap.protocol_version, snap.init_attached
16 );
17 if let Some(ctx) = &snap.current_context {
18 println!("Context: {}", ctx);
19 }
20 println!();
21 println!("Sessions ({}):", snap.sessions.len());
22 if snap.sessions.is_empty() {
23 println!(" (ninguna)");
24 } else {
25 for s in &snap.sessions {
26 let conscious_marker = if s.wit.is_some() { " 🧠" } else { "" };
27 let kind_marker = match s.kind {
28 brahman_card::CardKind::Ente => "ente",
29 brahman_card::CardKind::Data => "data",
30 };
31 println!(
32 " [{}] {} {}{} lifecycle={:?} priority={:?}",
33 kind_marker, s.session, s.label, conscious_marker, s.lifecycle, s.priority
34 );
35 if let Some(sock) = &s.service_socket {
36 println!(" socket: {}", sock.display());
37 }
38 for r in &s.references {
39 println!(
40 " ref {:?} → {} ({})",
41 r.kind, r.target_label, r.target_id
42 );
43 }
44 if let Some(data) = &s.data {
45 if !data.summary.is_empty() {
46 println!(" summary: {}", data.summary);
47 }
48 if data.member_count > 0 {
49 println!(
50 " members: {} (dispersion={:.2})",
51 data.member_count, data.dispersion
52 );
53 }
54 if !data.keywords.is_empty() {
55 println!(" keywords: {}", data.keywords.join(", "));
56 }
57 if !data.presentation_hint.is_empty() {
58 println!(" lens hint: {}", data.presentation_hint);
59 }
60 }
61 if let Some(wit) = &s.wit {
62 println!(" wit: {} / {}", wit.package, wit.world);
63 if !wit.imports.is_empty() {
64 println!(" imports: {}", wit.imports.join(", "));
65 }
66 if !wit.exports.is_empty() {
67 println!(" exports: {}", wit.exports.join(", "));
68 }
69 }
70 for f in &s.inputs {
71 println!(" in {}: {:?}", f.name, f.ty);
72 }
73 for f in &s.outputs {
74 println!(" out {}: {:?}", f.name, f.ty);
75 }
76 }
77 }
78 println!();
79 println!("Matches ({}):", snap.matches.len());
80 if snap.matches.is_empty() {
81 println!(" (ninguno)");
82 } else {
83 for m in &snap.matches {
84 let pin_marker = if m.pinned { "📌" } else { " " };
85 println!(
86 " {} {}.{} ← {}.{} via {:?}",
87 pin_marker,
88 m.consumer_label,
89 m.consumer.flow_name,
90 m.producer_label,
91 m.producer.flow_name,
92 m.via
93 );
94 }
95 }
96
97 Ok(())
98}