colibri/docs/wiki/sl/glasspane.md
Sam & Claude aa377faf95
Some checks are pending
CI / rust (pull_request) Waiting to run
CI / markdown (pull_request) Waiting to run
CI / port (pull_request) Waiting to run
CI / agent-jail-pkgs (pull_request) Waiting to run
fix(sl): ozadnji proces→proces v ozadju + wiki: daemon-not-demon
Two fixes in one commit:

1. Terminology: ozadnji proces → proces v ozadju
   - More natural Slovenian — noun inflects, prepositional phrase stays fixed
   - 60 replacements across 19 sl/ files
   - Glossary header updated to match
   - Reverts the bad merge that restored "demon" in glasspane.md and
     task-board.md (including enouporabniški→enonajemniški fix)
   - Forms: proces v ozadju / procesa v ozadju / procesu v ozadju /
     procesom v ozadju / procesov v ozadju

2. New wiki page: daemon-not-demon (EN + SL)
   - Explains the FreeBSD daemon (Beastie mascot, helper spirit) vs
     Slovenian demon (devil, bad spirit)
   - Documents the decision to use proces v ozadju in Slovenian
   - Confirms daemon (with a) is the only English spelling in Colibri
   - Linked from both EN and SL wiki indexes
2026-06-26 15:21:24 +02:00

6.9 KiB

title description
Glasspane — nadzor stanja agentov Colibrijeva plast za opazovanje agentov. Gleda podprocese agentov prek JSONL, zlaga tok v semantični avtomat stanj in izpostavlja API posnetkov.

kazalo

Kaj je to

Glasspane je Colibrijeva plast za opazovanje agentov. Opazuje podprocese agentov prek njihovega stdout JSONL, zlaga tok v semantični avtomat stanj (Idle → Working → Done) in izpostavlja API posnetkov za nadzorne plošče in koordinacijo procesa v ozadju. Vsak zagnani agent — Pi, zot ali lokalni sample — se pretaka skozi isti vnosnik in konča v isti taksonomiji.

Odločitve

Stanje agenta kot avtomat stanj, ne surovi dnevnik dogodkov

Glasspane ne posreduje samo surovih agentskih dogodkov. Zaužije vrstice JSONL in prehaja poimenovano podokno skozi končno množico stanj:

Idle → Working → Blocked → Done
         ↳ Error

Enum AgentState (Idle, Working, Blocked, Done, Error) je namenoma majhen. Zajame tisto, kar nadzornik potrebuje vedeti — "ali agent dela? je blokiran? je končal?" — brez kodiranja agentsko-specifične semantike. Dogodki, ki ne spremenijo stanja (npr. poročilo o uporabi iz zot), so zabeleženi v metapodatkih podokna, vendar ne vplivajo na avtomat stanj.

Stalled ni šesta različica — je izpeljana zastavica: podokno je stalled, ko v DEFAULT_STALL_AFTER (4 ure) ni prispel noben dogodek. Izpeljano pozornost (Error / Blocked / Stalled) pokriva operator-attention.

Zakaj ne preprosto slediti dnevniku: surovi dnevniki dogodkov so agentsko-specifični in se sčasoma spreminjajo (zot dodaja nove vrste dogodkov). Avtomat stanj je stabilna pogodba, na katero se lahko zanesejo proces v ozadju, TUI in odjemalski CLI.

crates/colibri-glasspane/src/lib.rs

Pretakanje JSONL (ena vrstica = en dogodek)

Agenti oddajajo strukturirane dogodke kot JSON, ločen z novimi vrsticami, na stdout. Glasspane bere vrstico za vrstico z BufReader, deserializira vsako vrstico in jo poda v PiJsonlIngestor (ime je podedovano — obdeluje tudi zot dogodke).

Bralnik teče v eni sami nalogi ozadja na podokno (pane_reader_loop). Nikoli ne blokira glavne zanke procesa v ozadju — vnosnik je sinhrono zlaganje, ki posodablja stanje podokna v pomnilniku, API posnetkov pa bere iz Arc<RwLock<...>> brez sporov na vroči poti bralnika.

Napačno oblikovane vrstice so preskočene s povečanjem števca, ne kot napaka — izpadi v JSONL agenta ne smejo zrušiti opazovalca.

Zakaj JSONL, ne vtičnica ali gRPC: agent je podproces, ne storitev. stdout je univerzalni vmesnik — vsak jezik, vsaka vprega, brez nastavitve. JSONL je trivialno pisati iz bash, Go, Python, Rust. Strukturiran žični format bi dodal odvisnost in rokovanje vsakemu agentu.

crates/colibri-glasspane/src/lib.rs (PiJsonlIngestor, pane_reader_loop)

AgentRuntime { Pi, Zot, Local } — ena taksonomija za dve opremi

Pi in zot oddajata različne surove vrste dogodkov: Pi uporablja agent_start / turn_end, zot uporablja turn_start / done. Glasspane preslika oba v iste prehode AgentState prek zot_event_type(). Enum AgentRuntime označi vsako podokno z njegovo opremo, da funkcija preslikave ve, kateri besednjak dogodkov naj razčleni.

Polje session_id v strukturi Pane uporablja #[serde(alias = "pi_session_id")] za povratno združljivost s pred-nevtralnostnimi serializiranimi posnetki.

Zakaj ne dva ločena avtomata stanj: TUI, razporejevalnik procesa v ozadju in odjemalski CLI morajo vsi vprašati "v kakšnem stanju je ta agent?" — vseeno jim je, ali je zot ali Pi. Ena taksonomija, en API. Preslikava je ~50-vrstična funkcija, ne podsistem.

crates/colibri-glasspane/src/lib.rs (zot_event_type, AgentRuntime)

API posnetkov (bralno usmerjen, ne pisalno)

Glasspane izpostavlja objekt posnetka (celoten nabor podoken s trenutnim stanjem, ID seje, časovnim žigom in metapodatki) prek Arc<RwLock<...>>. Demon ga streže prek svoje Unix vtičnice bralcem odjemalcev. Pisanja se zgodijo enkrat na dogodek; branja so pogosta (pogledi TUI, statusna preverjanja CLI).

Zakaj RwLock, ne kanali: pisalna pot je nizkofrekvenčna (agentski JSONL s hitrostjo človeškega branja), bralna pot pa v običajnem primeru brez zaklepa. Zasnova, osnovana na kanalih, bi dodala medpomnjenje in semantiko dostave za problem, ki je v osnovi o trenutnem stanju, ne o dostavi dogodkov.

crates/colibri-glasspane/src/lib.rs (Supervisor, snapshot)

Načrt uporabnosti (TODO)

Pozornostna polovica tega načrta je dostavljena: izpeljan predikat pozornosti, pozornostna vrstica TUI / tipke za skok / filter / poudarjanje vrstic in robno sprožena opozorila zajema terminala. Glej operator-attention za dostavljen sistem. Kar ostaja tukaj, je resnično nezgrajena smer.

Potisna obvestila navzven, ne samo na zaslonu

Operater nadzoruje brezglave gostitelje prek Tailscale, ne z buljenjem v TUI. Ko podokno sproži pozornost (ali doseže Done), jo potisni navzven: namizno obvestilo na živi sliki (XFCE) in sporočilo Telegram (žeton je že pripravljen). Eksplicitna pot v slogu colibri notify — ali vrsta dogodka glasspane, ki jo sproži kljuka zot/Pi — omogoča agentu reči "blokiran sem", namesto da se zanašamo samo na izpeljano stanje. Največji učinek v resničnem svetu.

Bogatejše vrstice podoken (kontekst na prvi pogled)

Glasspane že shranjuje dogodke, ki ne spreminjajo stanja, v metapodatkih podokna. Prikaži jih v vrstici TUI: trenutni repo/veja, zadnja vrstica/povzetek naloge, ječa, v kateri agent teče, neobvezno vhodna vrata. Spremeni "Working" v "Working on fix/x v ječi cms, zadnje: running tests".

Ohrani zgodovino podoken med ponovnimi zagoni procesa v ozadju

Nadzornik je v pomnilniku (Arc<RwLock<...>>); ponovni zagon procesa v ozadju izgubi časovnico. Ohrani prehode/zgodovino podoken, da vrnitev po urah (ali ponovnem zagonu) ohrani "kaj se je zgodilo, ko me ni bilo". Lahka trajnost, ne nov podsistem.

Odgovori blokiranemu agentu z nadzorne plošče (večji dvig)

API posnetkov je namenoma bralno usmerjen. Prihodnja pisalna pot — "pošlji vnos v podokno N" prek vtičnice procesa v ozadju — bi operaterju omogočila odziv blokiranemu agentu iz colibri-tui, ne samo opazovanje/zagon/uboj. To je smer, ne hitra zmaga; spremeni vtičnico iz bralnega nadzora v interaktivno upravljanje in potrebuje lasten načrtovalski prehod.

Glej tudi