Operaterska pozornost — ali ta agent potrebuje mene zdaj?

kazalo

Kaj je to

Nadzorna hrbtenica Glasspana odgovarja na vprašanje _"v kakšnem stanju je ta

agent?"_. Pozornost je plast nad njo, ki odgovarja na vprašanje, ki si ga

operater dejansko zastavi najprej: _"ali katerikoli agent potrebuje mene

zdaj?"_ Je izpeljan pogled nad avtomatom stanj in terminalom,

prikazan v TUI in podprt z robno sproženimi opozorili — ne šesto stanje, ne

nov podsistem.

Odločitve

Pozornost je pogled, ne stanje

AgentState ostaja majhen (Idle, Working, Blocked, Done, Error).

"Potrebuje operaterja" je prost predikat nad njim, ne dodatna različica:

fn needs_attention(pane: &Pane) -> bool {

pane.state == AgentState::Error

|| pane.state == AgentState::Blocked

|| pane.stalled

}

Blocked je vključen, ker dokumentacijski komentar avtomata stanj pravi, da

pomeni "čaka na usmerjanje / odobritev / vnos" — tj. agent je parkiran na

operaterju. En predikat, ki ga uporabljajo pozornostna vrstica, filter in

tipke za skok, zato se definicija spremeni na enem mestu.

stalled je tudi sam izpeljan — podokno je stalled, ko v DEFAULT_STALL_AFTER (4 ure) ni prispel noben dogodek. Namenoma je redek:

pozornost so večinoma podokna v stanju Error in Blocked; Stalled je stopnjevanje

"nekaj je globoko narobe", ne pogost pojav.

crates/colibri-glasspane/src/lib.rs

(AgentState, SupervisedPane::is_stalled_at, DEFAULT_STALL_AFTER)

TUI naredi pozornost nemogoče spregledati

Ko katerokoli podokno v trenutnem pogledu potrebuje pozornost, se običajna

glava zamenja z rdeče obrobljeno pozornostno vrstico, ki navaja zadevna

podokna. Vrstice, ki potrebujejo pozornost, dobijo obrnjeno ozadje; kazalka se

obrne znova, da operater še vedno vidi, katera je izbrana. Dve tipki za skok

(n / N) krožita naprej/nazaj skozi pozornostna podokna z ovijanjem, a

pa preklaplja filter samo za pozornost. Vsi trije delujejo nad že filtriranim

naborom podoken.

Sestavljanje filtrov je IN. Pozornostni filter se sestavlja s filtrom

seje, zato vrstica odraža samo tisto, kar operater gleda. Junija 2026 je bil

dostavljen hrošč, kjer je bil has_attention izračunan iz _nefiltriranega_

posnetka: napaka v seji s2 je prižgala vrstico med gledanjem seje s1,

lastni filtered_panes() vrstice pa je nato zgodaj vrnil prazen izris —

operater je tako izgubil glavo zaradi praznega rdečega okvirja. Popravljeno z

izračunom pozornosti iz filtered_panes(); pokrito s preskusom upodabljanja

med sejami.

Past NO_COLOR. Seje Hermesa puščajo NO_COLOR=1 v okolja podprocesov

in crossterm to konvencijo upošteva. Brez force_color_output(true) ob zagonu

se colibri-tui, zagnan iz seje Hermesa, upodablja brez barv — rdeča

pozornostna vrstica postane nevidna. Funkcija main() vsili barve ne glede na

starševsko okolje; to je nadzorna plošča TUI, barve so nosilne.

Prihodnja izboljšava: prikaz pozornostne vrstice in glave hkrati (dvojni

pogled) namesto zamenjave ene z drugo, da operater na en pogled vidi število

podoken in pozornostna podokna, brez preklapljanja.

crates/colibri-glasspane-tui/src/main.rs

(needs_attention, render_attention_bar, attention_indices)

Zajem terminala je dopolnilni signal

Avtomat stanj je _"kar agent pove"_ (strukturirani dogodki JSONL). Zajem

terminala je _"kar prikazuje zaslon"_ — dejansko besedilo podokna, razvrščeno

po znanih okvarjenih vzorcih. Podokno je lahko Working, medtem ko njegov

zaslon kaže Active: failed (Result: exit-code). Pozornost je pogled nad

obema. TerminalRecorder hrani omejeno zgodovino okvirjev (DEFAULT_HISTORY_CAPACITY

= 256 okvirjev). Identiteta okvirja je SHA-256 očiščenega besedila, zato

se poizvedovanje skoraj statičnega podokna vsako sekundo strne v zgoščen

dnevnik dejanskih prehodov stanja namesto tisočev podvojenih okvirjev.

capture_tmux_pane za zajem pokliče tmux, toda observe() sprejme surovo

besedilo neposredno — logika razpoznavanja in triaže je v celoti preizkusljiva

brez priključenega terminala.

crates/colibri-glasspane/src/terminal.rs

(TerminalRecorder, Observation, capture_tmux_pane)

Triaža prepoznav, podatkovno gnana po OS

SignatureSet pregleda očiščeno besedilo terminala in razvrsti zaslon v failures / warnings / info / healthy (Severity::{Error, Warn, Info, Ok}).

Vzorci se ujemajo kot podnizi brez razlikovanja velikosti črk; prvi zadetek

zabeleži prepoznavo in ni poročan dvakrat. Vsak zadetek nosi človeški

next_action in neobvezni invoke (veščino, ki jo agent lahko zažene za

odpravo) — zadetek ni "nekaj se je zgodilo", ampak "tukaj je, kaj to pomeni

in kaj storiti".

Mehanizem zaznavanja je podatkovno gnan: gostitelj FreeBSD in gostitelj

Linux naložita različne nabore Signature, a si delita isti ujemalnik.

SignatureSet::linux_default prinaša majhen začetni nabor; klicatelji

zgradijo svojega z SignatureSet::new. To je gumb na OS, na katerega se

opira Colibrjevo usmerjanje po zmožnostih.

crates/colibri-glasspane/src/signatures.rs

(SignatureSet, Severity, Signature, Detection::alertable)

Opozorila so robno sprožena, ne nivojsko

Prepoznava napake/opozorila se sporoči samo ob okvirju, kjer se prvič

pojavi, ne ob vsakem naslednjem okvirju, ki jo še prikazuje — vrnjeno kot

Observation::Recorded { uuid, new_alerts } samo z novimi sproženimi

zadetki. Ko se stanje počisti in pozneje ponovi, se sproži znova. Nivojsko

sprožena opozorila ob 1s poizvedovanju bi ponovno obveščala vsako sekundo za

čas trajanja zataknjenega podokna; robno sproženje pomeni, da vsako opozorilo

pomeni "to se je pravkar začelo".

crates/colibri-glasspane/src/terminal.rs

(TerminalRecorder::observe, Observation::new_alerts)

Kaj je še odprto

poudarjanje). Operater nadzoruje brezglave gostitelje prek Tailscale, ne z

gledanjem TUI. Potiskanje pozornosti navzven — namizno obvestilo na živi

sliki in sporočilo Telegram — je najpomembnejši nedokončan kos. Žeton je že

pripravljen; prenos (colibri notify proti dogodku glasspane, ki ga sproži

kljuka harnessa) je neodločen.

namenoma bralno usmerjen. Pisalna pot ("pošlji vnos v podokno N" prek

vtičnice demona) bi operaterju omogočila, da se odzove na Blocked podokno

iz TUI. Spremeni vtičnico iz nadzora v interaktivno upravljanje — lasten

načrtovalski prehod.

Glej tudi