Přeskočit na obsah

Tato stránka byla automaticky přeložena z angličtiny, jediného jazyka, ve kterém se tento web píše. Číst originál.

Monitor

monitor: vše, co se kolem repozitáře děje, v jednom proudu — relace meshe, tvrzení, předávky a revize, výsledky exekutoru, pull requesty a běhy GitHubu — s odfiltrovaným šumem, tím, co jmenuje vás, na prvním místě, jedním kurzorem napříč všemi zdroji a povrchy příkazu, MCP, HTTP a Cockpitu

Vykresleno z docs/MONITOR.md — stejný Markdown, jaký ukazuje GitHub.

majordomus monitor je všechno, co se kolem repozitáře děje, v jednom proudu: relace, claimy, předávky a review na každém propojeném stroji, merge a selhání executoru a pull requesty a běhy workflow z GitHubu. Co pojmenovává vás, je první, šum je sbalen a spočítán. Rozhodnutí je ADR 0133 (.ai/repo/adrs/0133-everything-is-followed-in-one-stream.md).

Proč existuje

Worker, který chtěl vědět, co se děje, četl několik povrchů, každý s vlastním kurzorem:

  • žurnál mesh (majordomus mesh events);
  • nástěnka tohoto checkoutu (majordomus_peers);
  • stopa executoru (majordomus prs events);
  • GitHub, přes gh pr list a gh run list.

Většina žurnálu je šum. Server při každém heartbeatu znovu promítá každého připojeného peera nástěnky jako relaci meshe: ve vzorku 1000 událostí z 2026-10-10 bylo 954 relací, která znovu říkala, co už řekla. Nic neříkalo, které události jsou adresovány čtenáři. Relace zameškávaly revize a předávky, o které byly hodiny žádány, a každá si ručně napsala stejnou smyčku jq.

Rychlý start

majordomus monitor                         # the newest signals of the last hour
majordomus monitor --for 1b,cd             # ... with what names 1b or cd listed first
majordomus monitor --follow                # keep printing what is new
majordomus monitor --follow --match '#885' --until merged --timeout 1h
                                           # wait for one pull request to merge, then go on

Nastavte MAJORDOMUS_MONITOR_FOR jednou místo předávání --for pokaždé. Briefing při startu relace a majordomus context používají pro své řádky monitoru stejnou proměnnou.

Proud žije ve sdíleném serveru, protože žurnál meshe tam žije, takže příkaz se ptá běžícího serveru tohoto checkoutu. Bez serveru příkaz vypíše důvod a skončí kódem 0; majordomus serve ensure jeden spustí.

Co je signál

polevýznam
atkdy se to stalo, v sekundách Unixu, na hodinách toho, kdo to zaznamenal
sourcemesh, executor nebo github
kindco se stalo (níže)
severityinfo; attention, když něco selhalo nebo čeká; action, když čeká na vás
machine, session, actorkde a kým; stroj jménem v meshi, když je znám
pr, branch, issue, pathso čem to je
summaryjeden řádek, nejvýše 200 znaků
for_youzda pojmenovává čtenáře
linkkde číst dál, když pro to existuje stránka

Druhy podle zdroje:

  • mesh: session_joined, session_changed, session_left, claimed, released, handover, handover_taken, review_requested, review_answered, review_withdrawn.
  • executor: merged, merge_failed, verification_failed, refreshed, refresh_failed, closed, close_failed, repaired, repair_refused, lane_taken, lane_released, observe_failed.
  • github: pr_opened, pr_merged, pr_closed; run_failed a run_succeeded, nebo deploy_* a release_*, když to říká název workflow.

Sloučení: co se nezobrazuje

Sbalení je ta funkce. Proud, který ukazuje všechno, je stejně nepřečtený jako šest proudů, z nichž každý ukazuje své. Čte se každý záznam; záznam, který není novinkou, se započítá do suppressed.

  • Relace se zobrazí, když poprvé řekne, co dělá, a znovu jen když se změní její worker, intent, úloha, úkol, milník, větev nebo klient. Pohyb headu zprávou není.
  • Spojení, které nikdy neřekne, co dělá, není novinka. Jeho příchod i odchod jsou potlačeny. To platí pro klienta, který se připojuje každou minutu bez záměru.
  • Claim není novinka, když jeho relace už drží stejný claim (stejný rozsah, záměr a režim).
  • Uvolnění nároku, o kterém nikdo neviděl, že byl převzat, není novinka.
  • Krok executoru, který nic nerozhodl, není zpráva: pozorování, výběr, pokus před svým výsledkem, nečinný tik.
  • Zelený běh na jiné větvi než master není novinka; úspěšné CI pull requestu je očekávaný výsledek. Neúspěšný běh je novinka vždy, stejně jako zelený běh na master (kontroly masteru, deploy, release).

Pro vás

Signál je for_you, když platí cokoli z toho:

  • review vás jmenuje jako slovo v předmětu nebo těle, nebo je adresováno tomuto runtime;
  • revize, o kterou jste byli požádáni nebo na kterou jste odpověděli, je stažena;
  • odpověď reaguje na review, o které jste požádali;
  • tělo nebo větev předávky vás jmenuje;
  • záměr tvrzení pojmenovává vás;
  • detail události exekutoru vás jmenuje;
  • název nebo větev pull requestu pojmenovává vás;
  • neúspěšný běh je na větvi, která nese vaše jméno.

Názvy se porovnávají jako celá slova bez ohledu na velikost písmen: 1b odpovídá „ask 1b“ a fix/1b-hello, ale ne p1b.

Volající MCP je také svou vlastní relací nástěnky (board-<peer>). Textová stránka vám signály vypíše jako první, pod For you (N).

Kurzor

Každá stránka končí cursor. Opětovný dotaz s after nastaveným na něj vrátí jen to, co přišlo potom, a nic z předchozí stránky se nevrátí. Kurzor nese vlastní pozici každého zdroje:

  • pro mesh úplný kauzální klíč (Lamportovo razítko, proud, pořadí), aby události sdílející razítko nikdy nerozdělila hranice stránky;
  • pro executor, kolik řádků jeho stopy bylo přečteno;
  • pro GitHub poslední přečtená sekunda. Signály jedné sekundy se nikdy nerozdělují mezi stránky.

Kurzor, který nelze přečíst, se odmítne s exit 10; nikdy tiše nerestartuje proud. Bez kurzoru stránka drží nejnovějších limit signálů za posledních since sekund a její kurzor stojí za vším přečteným.

Zdroje a jejich stavy

Každá stránka uvádí každý zdroj s jeho stavem:

  • ok;
  • absent, s důvodem: mesh neběží, executor nic nezaznamenal, gh nešlo spustit;
  • error, s důvodem: gh selhalo nebo trvalo déle než jeho rozpočet;
  • skipped: nevyžádáno v sources.

Chybějící zdroj je odpověď, nikdy prázdný seznam. Ticho musí znamenat, že se nic nestalo, nikoli že se nikdo nezeptal.

GitHub je síť. Jeden fetch přečte 40 nejnovějších pull requestů a běhů. Je omezen na 4 sekundy na volání gh a sdílen každým čtenářem po dobu 30 sekund. Briefing na začátku relace a majordomus context čtou jen lokální zdroje.

Provedení (executions.events) zatím nejsou zdrojem. Jejich pořadová čísla patří jednomu provedení jednoho procesu a nic je nespojuje do jednoho feedu.

Příkaz

majordomus monitor [--follow] [--for NAMES] [--sources mesh,executor,github] [--since 30m]
                   [--limit N] [--after CURSOR] [--match TEXT] [--count N] [--until KIND]
                   [--timeout 1h] [--interval SECONDS] [--format text|json]
  • --follow se ptá znovu každých --interval sekund (výchozí 2) s posledním kurzorem a vytiskne jen to, co je nové. Chybějící nebo restartovaný server se ohlásí jednou a sledování pokračuje.
  • --count N ukončí sledování po N signálech.
  • --until KIND ukončí sledování u prvního signálu tohoto druhu.
  • --timeout to vzdá s kódem 10.
  • --match ponechá jen signály, jejichž shrnutí obsahuje text.
  • --format json vypíše stránku tak, jak ji schopnost zodpověděla. Při sledování vypisuje jeden signál na řádek (NDJSON).
  • Doby trvání jsou sekundy, nebo číslo s s, m, h nebo d.
  • Výstupní kódy: 0, když je zodpovězeno nebo když sledování končí --count či --until; 10, když se vstup odmítne (špatný kurzor, neznámý zdroj) nebo sledování dosáhne --timeout.

Další povrchy

  • MCP: majordomus_monitor, se stejným vstupem (after, limit, sources, for, since). Vlastní relace agenta na nástěnce se počítá jako jedno z jeho jmen.
  • HTTP: GET /api/v1/monitor?after=&limit=&sources=&for=&since=. Dokument OpenAPI popisuje MonitorPage a MonitorSignal.
  • Cockpit: /cockpit/monitor[?for=NAMES] ukazuje nejnovější signály a dokud je viditelný, každých pět sekund přidává nahoru, co je nové. Odkazuje na něj přehled i stránka meshe.
  • Začátek relace: briefing vytiskne řádek Monitor: pod Mesh: s počtem za poslední hodinu, signály pro vás a těmi, které žádají o pozornost.
  • majordomus context: sekce WHAT HAPPENED nese tytéž řádky.

Čím není

  • Nic nezapisuje a nevede žádné úložiště. Každý signál je odvozen ze záznamu, který už existuje.
  • Je to pozorování, ne autorita. Merge, tvrzení nebo odpověď zůstává u schopnosti, která akt vlastní.
  • Není to notifikátor. Slack, e-mail nebo push by se k tomuto streamu později přihlásily, místo aby přidaly sedmou smyčku.

Důkaz

  • Unit testy:
    • src/monitor pokrývá kurzor, merge přes zdroje, sloučení každého zdroje a pro-vás;
    • src/commands/monitor.rs pokrývá vykreslení a cíl požadavku;
    • src/cockpit/monitor.rs pokrývá řádek.
  • Cases:
    • 1050_the_monitor_folds_the_noise: jeden server, skládání, for-you, odmítnutí a obnovení;
    • 1051_a_followed_stream_can_be_waited_on: --count, --until, --match, --timeout a NDJSON;
    • 1052_an_absent_source_is_reported: GitHub přes fixture gh.

Prohledává názvy a popisy všech stránek, které tento web publikuje.