docs(sl): translate wiki group 2 — deployment, operator-cli, terminal, tui, headroom-sidecar
This commit is contained in:
parent
3ec68ff860
commit
8f84eb51c2
5 changed files with 387 additions and 0 deletions
171
docs/wiki/sl/deployment.md
Normal file
171
docs/wiki/sl/deployment.md
Normal file
|
|
@ -0,0 +1,171 @@
|
|||
---
|
||||
title: Namestitev
|
||||
description: Nameščevalnik gostitelja clawdie — odkrije ZFS, pripravi podatkovne zbirke, ustvari uporabnika storitve in namesti enoto rc.d/systemd.
|
||||
---
|
||||
|
||||
← [kazalo](./index.md)
|
||||
|
||||
Zaboj `clawdie` je Colibrijev nameščevalnik gostitelja. Odkrije postavitev
|
||||
ZFS na napravi in pripravi storitev `clawdie`. Na FreeBSD to pomeni storitev
|
||||
rc.d, podatkovne zbirke ZFS in neprivilegiranega uporabnika. Na Linuxu lahko
|
||||
uporablja systemd in bodisi ZFS bodisi navadne imenike.
|
||||
|
||||
→ `crates/clawdie/src/main.rs` | `crates/clawdie/src/plan.rs`
|
||||
→ `docs/ISO-SERVICE-LAYOUT.md` | `docs/CLAWDIE-INSTALLER-HANDOFF.md`
|
||||
|
||||
## Odločitve
|
||||
|
||||
### ZFS je obvezen na FreeBSD, priporočen na Linuxu
|
||||
|
||||
FreeBSD ne podpira postavitve z navadnimi imeniki. Če ZFS uporabniški prostor
|
||||
manjka, načrt takoj sporoči napako. Linux lahko pade na navadne imenike, če
|
||||
ni imenovan noben bazen in ZFS ni na voljo, na zahtevo pa lahko ustvari svež
|
||||
bazen na prostem disku.
|
||||
|
||||
To ustreza produkcijskemu cilju: goli FreeBSD na zrcalnem polju ZFS RAID1.
|
||||
Podpora za Linux omogoča razvoj in CI brez gostitelja ZFS.
|
||||
|
||||
### Shramba je razrešena, ne nastavljena
|
||||
|
||||
`clawdie plan` razreši shrambo v tem vrstnem redu:
|
||||
|
||||
1. Če je podano `--pool NAME --create-pool DEVICE`, ustvari ta bazen.
|
||||
2. Če je podano `--pool NAME`, uporabi ta obstoječi bazen.
|
||||
3. Če ni podan noben bazen in obstaja natanko en bazen, ga uporabi.
|
||||
4. Če obstaja več bazenov in noben ni imenovan, napaka.
|
||||
5. Na Linuxu brez ZFS padec na navadne imenike.
|
||||
|
||||
To odpravlja potrebo po ročno napisani topološki datoteki na tipičnih
|
||||
enobazenskih gostiteljih, hkrati pa omogoča ekspliciten nadzor, ko je
|
||||
potreben.
|
||||
|
||||
→ `crates/clawdie/src/main.rs` (`pick_pool`, `validate_storage`)
|
||||
|
||||
### Podatkovne zbirke ločujejo stanje od dnevnikov
|
||||
|
||||
Ko je ZFS uporabljen, nameščevalnik ustvari:
|
||||
|
||||
- `<pool>/clawdie` kot vsebniško podatkovno zbirko z `canmount=off`
|
||||
- `<pool>/clawdie/db` priklopljeno na `/var/db/clawdie`
|
||||
- `<pool>/clawdie/log` priklopljeno na `/var/log/clawdie`
|
||||
|
||||
Hramba podatkovne zbirke in dnevnikov v ločenih podatkovnih zbirkah omogoča,
|
||||
da posnetki, kvote in pravilniki vrtenja dnevnikov veljajo neodvisno.
|
||||
|
||||
→ `crates/clawdie/src/plan.rs` (`zfs_dataset_steps`)
|
||||
|
||||
### Privzeto suhi tek
|
||||
|
||||
`clawdie apply` izpiše načrt in konča, razen če je podano `--yes`. `discover`
|
||||
in `plan` sta samo za branje. To ščiti produkcijske gostitelje pred nenamernim
|
||||
pripravljanjem.
|
||||
|
||||
→ `crates/clawdie/src/main.rs` (`Cmd::Apply`)
|
||||
|
||||
### Ustvarjanje bazena je varovano pred zasedenimi diski
|
||||
|
||||
`--create-pool` na nepraznem disku je zavrnjeno, razen če je podano tudi
|
||||
`--force`. Nameščevalnik uporablja `lsblk` na Linuxu za zaznavanje particij,
|
||||
datotečnih sistemov, priklopnih točk in korenskega diska. Varovalo je
|
||||
konzervativno: če je disk dvoumen, ga je treba eksplicitno vsiliti.
|
||||
|
||||
→ `crates/clawdie/src/disk.rs` | `crates/clawdie/src/main.rs` (`validate_create_device`)
|
||||
|
||||
### En sam neprivilegiran uporabnik storitve
|
||||
|
||||
Storitev teče kot `_clawdie` na obeh platformah. Na FreeBSD je uporabnik
|
||||
ustvarjen z `pw useradd -s /usr/sbin/nologin -d /var/db/clawdie`, izhodna koda
|
||||
`65` (že obstaja) pa se obravnava kot preskok. Na Linuxu se uporabi `useradd
|
||||
--system`. Imeniki stanja se nato chownajo temu uporabniku.
|
||||
|
||||
→ `crates/clawdie/src/platform.rs`
|
||||
|
||||
### Upravitelji storitev, specifični za platformo, ista specifikacija
|
||||
|
||||
`Platform` je notranji trait. Izvedbi se razlikujeta samo v tem, kako
|
||||
namestita in omogočita enoto:
|
||||
|
||||
- FreeBSD: zapiše `/usr/local/etc/rc.d/clawdie`, uporabi `sysrc clawdie_enable=YES`.
|
||||
- Linux: zapiše `/etc/systemd/system/clawdie.service`, zažene `systemctl enable --now clawdie`.
|
||||
|
||||
Obe uporabljata isto `ServiceSpec` (binarna datoteka, uporabnik, podatkovni
|
||||
imenik, ime storitve). Zagon `apply` na različnih platformah zato ustvari
|
||||
enako postavitev datotečnega sistema in se razlikuje samo v ovoju upravitelja
|
||||
storitev.
|
||||
|
||||
→ `crates/clawdie/src/platform.rs` (`FreeBsd`, `Linux`)
|
||||
|
||||
### Demon teče skozi nadzornika platforme
|
||||
|
||||
Ustvarjeni skript rc.d za FreeBSD izvede `/usr/local/bin/colibri-daemon` skozi
|
||||
`/usr/sbin/daemon -u _clawdie`, tako da nadzornik ob zrušitvi ponovno zažene
|
||||
in proces pade na neprivilegiranega uporabnika. Enota systemd je preprosta
|
||||
storitev z `Restart=on-failure`.
|
||||
|
||||
Nameščevalnik sam ne zažene demona ali ne pripravi binarne datoteke; samo
|
||||
ustvari okolje. Operater ali paketna gradnja pripravi `colibri-daemon` in nato
|
||||
`service clawdie start`.
|
||||
|
||||
→ `docs/ISO-SERVICE-LAYOUT.md` (rc.d prek daemon(8))
|
||||
|
||||
### Skrivnosti ne piše nameščevalnik
|
||||
|
||||
Nameščevalnik se ne dotika ključev API ponudnika. Ločena datoteka — običajno
|
||||
`/usr/local/etc/colibri/provider` — hrani skrivnosti in jo pred zagonom
|
||||
demona prebere rc.d. To ohranja domet nameščevalnika omejen na ZFS, imenike,
|
||||
uporabnike in datoteke storitev.
|
||||
|
||||
→ [vault-provision](./vault-provision.md)
|
||||
|
||||
### Koraki se izvajajo zaporedno in se ustavijo ob napaki
|
||||
|
||||
`deploy::apply` zažene vsak `Step` po vrsti. Koraki `Run` pokličejo lupino in
|
||||
padejo ob neničelnem izhodu, razen če korak navede dovoljene izhodne kode.
|
||||
Koraki `WriteFile` ustvarijo starševske imenike, zapišejo datoteko in jo
|
||||
chmodajo. Če katerikoli korak pade, se apply takoj ustavi in sporoči ukaz, ki
|
||||
je padel, ter stderr.
|
||||
|
||||
→ `crates/clawdie/src/deploy.rs`
|
||||
|
||||
## Oblika načrta
|
||||
|
||||
```text
|
||||
clawdie plan
|
||||
├── ZFS layout (ali navadni imeniki)
|
||||
│ ├── create <pool>/clawdie container
|
||||
│ ├── create <pool>/clawdie/db -> /var/db/clawdie
|
||||
│ └── create <pool>/clawdie/log -> /var/log/clawdie
|
||||
└── service install
|
||||
├── create user _clawdie
|
||||
├── chown state dirs
|
||||
├── write service unit (rc.d / systemd)
|
||||
├── enable service (sysrc / systemctl)
|
||||
└── [systemd] daemon-reload + start
|
||||
```
|
||||
|
||||
## Tipična namestitev FreeBSD
|
||||
|
||||
```sh
|
||||
# odkrij
|
||||
clawdie discover
|
||||
|
||||
# predogled
|
||||
clawdie plan
|
||||
|
||||
# pripravi podatkovne zbirke, uporabnika in storitev rc.d
|
||||
sudo clawdie apply --yes
|
||||
|
||||
# zaženi, ko je binarna datoteka colibri-daemon pripravljena
|
||||
sudo service clawdie start
|
||||
```
|
||||
|
||||
## Navzkrižne povezave na izvajalne poti
|
||||
|
||||
Po namestitvi ima storitev te poti:
|
||||
|
||||
- `/var/db/clawdie/colibri.sqlite` — koordinacijska shramba SQLite
|
||||
- `/var/run/clawdie/clawdie.sock` — Unix vtičnica demona
|
||||
- `/var/log/clawdie/daemon.log` — dnevnik stdout/stderr
|
||||
- `/usr/local/etc/colibri/` — konfiguracija in skrivnosti ponudnika
|
||||
|
||||
→ [store-schema](./store-schema.md) | [operator-cli](./operator-cli.md)
|
||||
49
docs/wiki/sl/headroom-sidecar.md
Normal file
49
docs/wiki/sl/headroom-sidecar.md
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
---
|
||||
title: Stranski vagon Headroom
|
||||
description: Colibri lahko neobvezno prosi krajevni stranski vagon headroom-ai, da stisne rezultate orodij, preden dosežejo proračun žetonov.
|
||||
---
|
||||
|
||||
← [kazalo](./index.md)
|
||||
|
||||
Colibri lahko neobvezno prosi krajevni stranski vagon `headroom-ai`, da stisne
|
||||
rezultate orodij, preden dosežejo proračun žetonov. Je ločen proces Python, ki
|
||||
posluša na drugi vtičnici Unix, in je privzeto izklopljen.
|
||||
|
||||
→ `crates/colibri-daemon/src/session.rs` (klicatelj)
|
||||
→ `headroom-ai/` (izvedba stranskega vagona)
|
||||
|
||||
## Odločitve
|
||||
|
||||
### Kompresija, gnana s proračunom, ne vedno vklopljena
|
||||
|
||||
Stranski vagon se pokliče samo, ko seja tvega, da bo presegla svoj proračun
|
||||
— ne ob vsakem rezultatu orodja. Sprožilec je prag v sledilcu stroškov: če
|
||||
bi naslednji korak presegel proračun, najprej stisni, nato obreži. Brez
|
||||
stranskega vagona je zasilni izhod preprosto krajšanje.
|
||||
|
||||
→ [cost-model](./cost-model.md) (stiskanje T14)
|
||||
|
||||
### Unix vtičnica, ne HTTP
|
||||
|
||||
Komunikacija poteka prek druge vtičnice Unix (`/var/run/headroom/headroom.sock`).
|
||||
Stranski vagon sprejme surovo besedilo, vrne povzetek. Brez avtentikacije —
|
||||
zaupa meji vtičnice Unix in temu, da oba procesa tečeta kot isti uporabnik.
|
||||
|
||||
### Enostaven protokol — besedilo noter, besedilo ven
|
||||
|
||||
Stranski vagon prejme eno vrstico JSON `{"text": "..."}`, vrne eno vrstico
|
||||
JSON `{"summary": "..."}`. Brez sej, brez konteksta, brez zgodovine. Vsak
|
||||
klic je brez stanja.
|
||||
|
||||
### Ločen proces, ne knjižnica
|
||||
|
||||
Stranski vagon teče kot neodvisen proces Python, ne kot uvoz Rust. To ga
|
||||
izolira od zrušitev (če stranski vagon pade, demon nadaljuje brez njega),
|
||||
izolira njegov pomnilnik (model Python je lačen) in omogoča neodvisno
|
||||
posodabljanje.
|
||||
|
||||
→ `headroom-ai/src/server.py`
|
||||
|
||||
## Glej tudi
|
||||
|
||||
- [cost-model](./cost-model.md) — kdaj se sproži stranski vagon
|
||||
62
docs/wiki/sl/operator-cli.md
Normal file
62
docs/wiki/sl/operator-cli.md
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
---
|
||||
title: Operaterski CLI (`colibri`)
|
||||
description: Binarna datoteka `colibri` je operaterski vmesnik ukazne vrstice do demona — tanek tipiziran odjemalec Unix vtičnice.
|
||||
---
|
||||
|
||||
← [kazalo](./index.md)
|
||||
|
||||
Binarna datoteka `colibri` je operaterski vmesnik ukazne vrstice do demona.
|
||||
Je tanek odjemalec — pošilja ukaze JSON po vtičnici Unix, razčlenjuje odgovore
|
||||
in jih izpisuje. Vsak podukaz CLI se preslika v en ukaz demona. Vmesnik CLI
|
||||
dodaja priročnost (barvni izpis, privzetki, oblikovalci), ne poslovne logike.
|
||||
|
||||
→ `crates/colibri-client/src/bin/colibri.rs`
|
||||
|
||||
## Odločitve
|
||||
|
||||
### Ena binarna datoteka, ena vtičnica
|
||||
|
||||
Obstaja ena binarna datoteka `colibri`, ki se poveže na eno vtičnico
|
||||
(`/var/run/colibri/colibri.sock` ali `COLIBRI_SOCKET`). Ni podukazov za
|
||||
izbiro demona — večgostiteljske operacije gredo skozi most krmilne ravnine.
|
||||
Operater izrecno usmeri na drug gostitelj (`nc <tailnet-ip> 9190`), ne da bi
|
||||
CLI podpiral več končnih točk.
|
||||
|
||||
**Zakaj ne več profilov demona**: en demon na gostitelja je zadosten. Več
|
||||
končnih točk bi v CLI vneslo stanje (`colibri --host osa status`), ki ga most
|
||||
že rešuje na omrežni plasti.
|
||||
|
||||
### CLI je generičen odjemalec JSON-RPC
|
||||
|
||||
Vsak podukaz zgradi objekt `ColibriCommand`, pokliče
|
||||
`client.request(command).await` in izpiše rezultat. Odjemalec ne ve ničesar o
|
||||
pomenu kateregakoli ukaza — samo serializira in razčlenjuje.
|
||||
|
||||
Oblikovalci izhodov (`print_json`, `print_table`, `print_key_value`) so čiste
|
||||
funkcije nad `serde_json::Value`. Če demon doda novo polje, se samodejno
|
||||
prikaže v izhodu JSON brez spremembe v CLI.
|
||||
|
||||
### En ukaz na zagon, ne interaktivno
|
||||
|
||||
Vsak zagon `colibri` izvede natanko en ukaz in konča. Brez lupine REPL, brez
|
||||
več ukazov v eni seji. To ohranja CLI brez stanja in varnega za skriptanje:
|
||||
`colibri status | jq '.data.agents'` je enako zanesljiv v cronu kot v
|
||||
terminalu.
|
||||
|
||||
→ `crates/colibri-client/src/bin/colibri.rs` (`main`)
|
||||
|
||||
### Podukazi, specifični za tablo opravil, sledijo istemu vzorcu
|
||||
|
||||
Ukazi za opravila (`create-task`, `intake-task`, `claim-task`,
|
||||
`transition-task`) sprejemajo argumente CLI, ki se preslikajo v polja ukaza
|
||||
JSON. Izhod je bodisi celoten objekt opravila (za `create-task`,
|
||||
`intake-task`) bodisi potrditev (`claim-task`, `transition-task`). Noben
|
||||
podukaz ne zahteva več kot ~3 argumentov — opravilna tabla je namenjena
|
||||
dodeljevanju s strani agenta, ne ročnemu upravljanju.
|
||||
|
||||
→ `crates/colibri-client/src/bin/colibri.rs`
|
||||
|
||||
## Glej tudi
|
||||
|
||||
- [task-board](./task-board.md) — ukazi, ki jih CLI zrcali
|
||||
- [deployment](./deployment.md) — kako je nameščena binarna datoteka demona
|
||||
49
docs/wiki/sl/terminal.md
Normal file
49
docs/wiki/sl/terminal.md
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
---
|
||||
title: Terminal — zmožnost, ne znamka
|
||||
description: Zmožnost terminala kot ozka, prenosljiva abstrakcija — Kitty, ne iTerm2; ANSI, ne lastniški protokoli.
|
||||
---
|
||||
|
||||
← [kazalo](./index.md)
|
||||
|
||||
Colibrijeva zmožnost terminala je namenoma ozka: zajemi zaslon tmux, pošlji
|
||||
tipke, beri izhod. Ne vključuje večpredstavnosti, brskalnika ali obogatenega
|
||||
besedila. Izbira terminalskega odjemalca temelji na enem kriteriju: ali
|
||||
protokol podpira **razširjeno poročanje tipk**, tako da lahko Glasspane
|
||||
razlikuje `Enter` od `Ctrl+Enter`?
|
||||
|
||||
## Odločitve
|
||||
|
||||
### Kitty kot terminalski odjemalec (protokol, ne GUI)
|
||||
|
||||
Colibri cilja na terminalski odjemalec Kitty zaradi njegovega protokola
|
||||
razširjenega poročanja tipk — brez tega Glasspane ne more razlikovati
|
||||
modifikatorskih tipk (`Ctrl+Enter` proti `Enter`), ne da bi zajel vnosno
|
||||
plast. To ni predpis GUI — vsak terminalski odjemalec, ki izvaja protokol
|
||||
Kitty (WezTerm, foot, Ghostty), deluje enako dobro.
|
||||
|
||||
### tmux kot terminalski multiplekser (ne alternativni terminal)
|
||||
|
||||
Agentske seje se izvajajo znotraj sej tmux, ker tmux zagotavlja obstojnost
|
||||
seje (preživi odklop), več oken na agenta in programski vmesnik `capture-pane`,
|
||||
ki ga Glasspane uporablja za zajem terminala. Tmux se vstavi med terminalski
|
||||
odjemalec in agenta, ne nadomesti terminalskega odjemalca.
|
||||
|
||||
### SSH terminfo — `tmux-256color`, ne `xterm-256color`
|
||||
|
||||
`tmux-256color` je edina vrednost `TERM`, podprta za SSH povezave do agentov.
|
||||
Ne podpira `xterm-256color`, ker zunaj tmux ta vrednost ne more poročati
|
||||
razširjenih zaporedij Kitty. Terminfo se uveljavi v zanki demona za vse
|
||||
povezave.
|
||||
|
||||
### ANSI, ne lastniški — vendar s prehodom Kitty
|
||||
|
||||
Izhod agenta uporablja ANSI ubežna zaporedja za barve in pozicioniranje
|
||||
kazalke. To je univerzalno. Edina razširitev onkraj ANSI je stiskanje vnosa
|
||||
tipk, kjer Glasspane potrebuje protokol Kitty za razlikovanje modifikatorjev.
|
||||
|
||||
→ `crates/colibri-daemon/src/terminal.rs`
|
||||
|
||||
## Glej tudi
|
||||
|
||||
- [tui](./tui.md) — nadzorna plošča TUI, ki se upodablja v tem terminalu
|
||||
- [operator-attention](./operator-attention.md) — zajem terminala kot signal
|
||||
56
docs/wiki/sl/tui.md
Normal file
56
docs/wiki/sl/tui.md
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
---
|
||||
title: Terminalska nadzorna plošča (colibri-tui)
|
||||
description: Colibrijeva živa terminalska nadzorna plošča — povezuje se na Unix vtičnico demona in prikazuje agente, stanja ter pozornostna opozorila.
|
||||
---
|
||||
|
||||
← [kazalo](./index.md)
|
||||
|
||||
TUI je Colibrijeva živa terminalska nadzorna plošča. Poveže se na Unix
|
||||
vtičnico demona, poizveduje API posnetkov (`glasspane-snapshot`) in ga
|
||||
upodablja kot tabelo podoken s stanjem. Zgrajena z ratatui + crossterm za
|
||||
barvni terminalski izhod.
|
||||
|
||||
→ `crates/colibri-glasspane-tui/src/main.rs`
|
||||
|
||||
## Odločitve
|
||||
|
||||
### En zaslon, en pogled — ni navigacije po zavihkih
|
||||
|
||||
TUI upodablja eno glavno tabelo s podokni in neobvezno pozornostno vrstico na
|
||||
vrhu. Brez zavihkov, brez stranskih plošč, brez oken. Operater filtrira z
|
||||
vnosom s tipkami (`/` za sejo, `a` za pozornost), ne s klikanjem.
|
||||
|
||||
### Razporeditev glede na stanje
|
||||
|
||||
Vsako podokno dobi barvo glede na `AgentState`: zelena (Working), rumena
|
||||
(Blocked), modra (Done), rdeča (Error), siva (Idle). Podokna z napako že
|
||||
prikazujejo rdeče besedilo. Pozornostna vrstica, tipke za skok in filter
|
||||
dodajajo rdečo obrobo in inverzno ozadje na vrstice, ki potrebujejo pozornost.
|
||||
|
||||
→ [operator-attention](./operator-attention.md)
|
||||
|
||||
### Enovrstične vrstice podoken po meri agentov
|
||||
|
||||
Vsaka vrstica podokna vsebuje: ime agenta, stanje, ID seje (skrajšan),
|
||||
časovni žig zadnjega dogodka in zastavico stalled. To je minimalen nabor, ki
|
||||
ga operater potrebuje za oceno agenta na prvi pogled. Prihodnje delo: površina
|
||||
metapodatkov podokna za bogatejše vrstice.
|
||||
|
||||
### Osveževanje — poizvedovanje, ne potiskanje
|
||||
|
||||
TUI poizveduje demonov API posnetkov (`glasspane-snapshot`) vsakih 250 ms.
|
||||
Brez WebSocket, brez SSE, brez potisnih obvestil med TUI in demonom.
|
||||
Poizvedovanje ohranja vtičnico demona brez stanja.
|
||||
|
||||
### Barve so nosilne
|
||||
|
||||
`NO_COLOR=1`, ki uhaja iz sej Hermesa, bi naredil TUI neberljiv brez barv.
|
||||
`main()` vsili `crossterm::style::force_color_output(true)`, da to prepreči.
|
||||
To je nadzorna plošča, ne orodje za cevovod.
|
||||
|
||||
→ `crates/colibri-glasspane-tui/src/main.rs`
|
||||
|
||||
## Glej tudi
|
||||
|
||||
- [glasspane](./glasspane.md) — avtomat stanj, ki ga TUI upodablja
|
||||
- [operator-attention](./operator-attention.md) — pozornostna vrstica in tipke za skok
|
||||
Loading…
Add table
Reference in a new issue