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.

HTTP API: worktree

Kam patří každý propojený git worktree tohoto repozitáře a kde který je. Kontejner je sourozenec primárního checkoutu pojmenovaný s `-wt`, cesta pod ním je název větve se zachovanou hierarchií a obojí se odvozuje z vlastní identity gitu — společného adresáře, registrovaných worktrees, větví — nikdy z registru, konfigurace nebo aktuálního adresáře. Worktree jinde je typovaná diagnostika s nápravou; migrace, která ji opraví, je operace příkazové řádky téže služby.

Vykresleno z docs/generated/openapi.json, který spustitelný soubor generuje ze svého registru schopností a CI jej odmítne, je-li zastaralý. Surový dokument je na /openapi.json; běžící server servíruje stejný dokument na vlastní /openapi.json a Swagger UI na /swagger.

worktree

Kam patří každý propojený git worktree tohoto repozitáře a kde který je. Kontejner je sourozenec primárního checkoutu pojmenovaný s `-wt`, cesta pod ním je název větve se zachovanou hierarchií a obojí se odvozuje z vlastní identity gitu — společného adresáře, registrovaných worktrees, větví — nikdy z registru, konfigurace nebo aktuálního adresáře. Worktree jinde je typovaná diagnostika s nápravou; migrace, která ji opraví, je operace příkazové řádky téže služby.

GET /api/v1/worktrees worktree.topology

Celá topologie

Repozitář, kontejner, trunk a jak bylo rozhodnuto, každý registrovaný worktree s jeho postavením (primary, canonical, misplaced, detached, missing), jeho necommitnutou prací, vzdáleností od upstreamu a úkolem, který jeho větev prokazatelně jmenuje, každá lokální větev s worktree nebo bez něj a zda je způsobilá k úklidu, každá diagnostika s kódem a nápravou a součty. Čte se z gitu při každém volání: topologie se mění mimo tento proces.

  • query
  • behaviorally_verified
  • vyžaduje se měření výkonu
  • cache vypnuta
  • nástroj MCP majordomus_worktrees
  • Zdroj MCP {"name": "worktrees", "uri": "majordomus://worktrees"}
  • $ worktree topology

Žádné parametry.

Vyzkoušejte

Port je ten, který server zalogoval; 8741 je ten, o který žádá jako první. Hodnoty jsou první příklad operace.

curl -s "http://127.0.0.1:8741/api/v1/worktrees"

Testováno v apps/majordomus-cli/tests/http_serve.rs, který přehrává routu s těmito hodnotami proti serveru na skutečném socketu.

Odpovědi

statustělovýznam
200 RepositoryTopology Celá topologie: výsledek.
400 ErrorBody invalid_input: Vstup neodpovídá schématu: parametr špatného typu, neznámý parametr nebo hodnota, kterou schopnost odmítne.
404 ErrorBody not_found: Vstup pojmenovává něco, co repozitář nemá.
500 ErrorBody internal: Schopnost selhala z vlastního důvodu; zpráva ho pojmenovává.
výchozí ErrorBody Jakékoli jiné selhání, které transport hlásí: 405 method_not_allowed pro jinou metodu na této cestě, 400 invalid_input pro tělo, které není objektem JSON.
GET /api/v1/worktrees/inspect worktree.inspect

Jedna větev: kam patří její worktree a co v něm je

Kanonická cesta větve, odvozená pouze z jejího názvu, zda větev existuje, zda tu cestu něco zabírá, worktree, které větev drží, když nějaké je, a co brání jeho vytvoření nebo migraci. Odpověď pro větev, která ještě neexistuje, je cesta, kterou by použilo `worktree create`.

  • query
  • behaviorally_verified
  • vyžaduje se měření výkonu
  • cache vypnuta
  • Nástroj MCP majordomus_worktree_inspect
  • $ worktree inspect

Parametry dotazu

názevtyppovinnépopispříklady
větev string ano Větev, plný název (`feature/improve-cli`). Nemusí existovat: kanonická cesta se odvozuje jen z názvu. feature-branch: "feature/example"

Vyzkoušejte

Port je ten, který server zalogoval; 8741 je ten, o který žádá jako první. Hodnoty jsou první příklad operace.

curl -s "http://127.0.0.1:8741/api/v1/worktrees/inspect?branch=feature%2Fexample"

Testováno v apps/majordomus-cli/tests/http_serve.rs, který přehrává routu s těmito hodnotami proti serveru na skutečném socketu.

Odpovědi

statustělovýznam
200 InspectReport Jedna větev: kam její worktree patří a co v něm je: výsledek.
400 ErrorBody invalid_input: Vstup neodpovídá schématu: parametr špatného typu, neznámý parametr nebo hodnota, kterou schopnost odmítne.
404 ErrorBody not_found: Vstup pojmenovává něco, co repozitář nemá.
500 ErrorBody internal: Schopnost selhala z vlastního důvodu; zpráva ho pojmenovává.
výchozí ErrorBody Jakékoli jiné selhání, které transport hlásí: 405 method_not_allowed pro jinou metodu na této cestě, 400 invalid_input pro tělo, které není objektem JSON.
GET /api/v1/worktrees/migration worktree.migration_plan

Co by bylo potřeba, aby se každý worktree vrátil domů

Jeden krok na každý špatně umístěný worktree s větví: kde je, kam patří, jak by se přesunul, necommitnutá práce, která se přesouvá s ním, a co ho blokuje; plus výjimky, které migrace z podstaty nemůže řešit — detached worktrees, zastaralé registrace, primární checkout mimo trunk — každá s tím, co s ní člověk udělá. Plánování nic nemění; `majordomus worktree migrate` jej aplikuje s otiskem pořízeným před každým přesunem i po něm.

  • query
  • behaviorally_verified
  • vyžaduje se měření výkonu
  • cache vypnuta
  • Nástroj MCP majordomus_worktree_migration_plan
  • $ worktree migrate

Žádné parametry.

Vyzkoušejte

Port je ten, který server zalogoval; 8741 je ten, o který žádá jako první. Hodnoty jsou první příklad operace.

curl -s "http://127.0.0.1:8741/api/v1/worktrees/migration"

Testováno v apps/majordomus-cli/tests/http_serve.rs, který přehrává routu s těmito hodnotami proti serveru na skutečném socketu.

Odpovědi

statustělovýznam
200 MigrationPlan Co by bylo třeba, aby se každý worktree vrátil domů: výsledek.
400 ErrorBody invalid_input: Vstup neodpovídá schématu: parametr špatného typu, neznámý parametr nebo hodnota, kterou schopnost odmítne.
404 ErrorBody not_found: Vstup pojmenovává něco, co repozitář nemá.
500 ErrorBody internal: Schopnost selhala z vlastního důvodu; zpráva ho pojmenovává.
výchozí ErrorBody Jakékoli jiné selhání, které transport hlásí: 405 method_not_allowed pro jinou metodu na této cestě, 400 invalid_input pro tělo, které není objektem JSON.
GET /api/v1/worktrees/status worktree.status

Kde to je a zda tam patří

Jeden worktree — vlastní repozitáře, nebo ten, který drží adresář jmenovaný volajícím — s jeho postavením, branchí, kanonickou cestou, spočtenou necommitnutou prací, informací, zda je tam, kam patří, a počtem chyb celé topologie. To, co agent čte, než začne, a podle čeho rozhoduje guard.

  • query
  • behaviorally_verified
  • vyžaduje se měření výkonu
  • cache vypnuta
  • Nástroj MCP majordomus_worktree_status
  • $ worktree status

Parametry dotazu

názevtyppovinnépopispříklady
path string ne Adresář uvnitř jednoho z worktree tohoto repozitáře; odpověď se týká onoho worktree. Při relativní cestě relativně k primárnímu checkoutu (`.` je samotný primární checkout). Výchozí: repozitář, pro který byl server spuštěn. Cesta v jiném repozitáři se odmítne: topologie odpovídá jen o sobě. primary-checkout: "."

Vyzkoušejte

Port je ten, který server zalogoval; 8741 je ten, o který žádá jako první. Hodnoty jsou první příklad operace.

curl -s "http://127.0.0.1:8741/api/v1/worktrees/status?path=."

Testováno v apps/majordomus-cli/tests/http_serve.rs, který přehrává routu s těmito hodnotami proti serveru na skutečném socketu.

Odpovědi

statustělovýznam
200 StatusReport Kde to je a zda je to tam, kam to patří: výsledek.
400 ErrorBody invalid_input: Vstup neodpovídá schématu: parametr špatného typu, neznámý parametr nebo hodnota, kterou schopnost odmítne.
404 ErrorBody not_found: Vstup pojmenovává něco, co repozitář nemá.
500 ErrorBody internal: Schopnost selhala z vlastního důvodu; zpráva ho pojmenovává.
výchozí ErrorBody Jakékoli jiné selhání, které transport hlásí: 405 method_not_allowed pro jinou metodu na této cestě, 400 invalid_input pro tělo, které není objektem JSON.
GET /api/v1/worktrees/trunk worktree.trunk

Jak daleko je checkout od vzdáleného trunku

`HEAD` checkoutu a lokální větev trunku, každé započítané proti vzdálenému sledovacímu trunku — commity pozadu a napřed, přičemž probíhající merge počítá, co přináší — k poslednímu fetchi, jehož čas je součástí odpovědi; posuzováno proti `checkout.trunk_distance` politiky jako `current`, `lagging`, `stale`, `unjudged` (není deklarován práh) nebo `unmeasured` (není vzdálený trunk), s příkazy, které ho aktualizují. Co vykresluje doctor a co o stromu, který server poskytuje, říkají `server.status` a instrukce MCP (`project.a-checkout-serves-the-current-trunk`). Nic nestahuje a nic nezapisuje.

  • query
  • behaviorally_verified
  • vyžaduje se měření výkonu
  • cache vypnuta
  • nástroj MCP majordomus_worktree_trunk
  • $ worktree trunk

Parametry dotazu

názevtyppovinnépopispříklady
path string ne Adresář uvnitř jednoho z worktree tohoto repozitáře; odpověď se týká onoho worktree. Při relativní cestě relativně k primárnímu checkoutu (`.` je samotný primární checkout). Výchozí: repozitář, pro který byl server spuštěn. Cesta v jiném repozitáři se odmítne: topologie odpovídá jen o sobě. primary-checkout: "."

Vyzkoušejte

Port je ten, který server zalogoval; 8741 je ten, o který žádá jako první. Hodnoty jsou první příklad operace.

curl -s "http://127.0.0.1:8741/api/v1/worktrees/trunk?path=."

Testováno v apps/majordomus-cli/tests/http_serve.rs, který přehrává routu s těmito hodnotami proti serveru na skutečném socketu.

Odpovědi

statustělovýznam
200 TrunkDistance Jak daleko je checkout od vzdáleného trunku: výsledek.
400 ErrorBody invalid_input: Vstup neodpovídá schématu: parametr špatného typu, neznámý parametr nebo hodnota, kterou schopnost odmítne.
404 ErrorBody not_found: Vstup pojmenovává něco, co repozitář nemá.
500 ErrorBody internal: Schopnost selhala z vlastního důvodu; zpráva ho pojmenovává.
výchozí ErrorBody Jakékoli jiné selhání, které transport hlásí: 405 method_not_allowed pro jinou metodu na této cestě, 400 invalid_input pro tělo, které není objektem JSON.
GET /api/v1/worktrees/uncommitted worktree.uncommitted

Necommitnutá práce v propojených worktree a co ji drží

Každý propojený worktree, jehož index nebo pracovní strom drží změny, které žádný commit nenese: kolik cest (staged, unstaged, untracked, conflicted), kdy byla provedena nejstarší změna (nejstarší čas úpravy mezi změněnými cestami, u smazané ho zastupuje stav souboru indexu) a co práci drží — záznam aktivní úlohy, otevřená epizoda, která není opuštěná, nebo proces, jehož pracovní adresář je uvnitř. Práce, kterou nic nedrží a která je starší než práh, je `abandoned`, s příkazem, který by ji dostal na vzdálený ref `rescue/`; ten se navrhuje, nikdy nespouští. Práh je `session.stranded_after` z politiky, pokud `older_than` nejmenuje jiný. Čte každý worktree a žádný nezapisuje: každý status běží bez volitelných zámků, takže se neobnovuje žádný index.

  • query
  • behaviorally_verified
  • vyžaduje se měření výkonu
  • cache vypnuta
  • Nástroj MCP majordomus_worktree_uncommitted
  • $ worktree uncommitted

Parametry dotazu

názevtyppovinnépopispříklady
older_than string ne Stáří, po jehož překročení je práce, kterou nic nedrží, opuštěná, tak jak je píše člověk (`90s`, `30m`, `12h`, `1d`). Výchozí: `session.stranded_after` z politiky, což je také doba, po kterou smí být otevřená epizoda němá a stále držet práci. one-hour: "1h"

Vyzkoušejte

Port je ten, který server zalogoval; 8741 je ten, o který žádá jako první. Hodnoty jsou první příklad operace.

curl -s "http://127.0.0.1:8741/api/v1/worktrees/uncommitted?older_than=1h"

Testováno v apps/majordomus-cli/tests/http_serve.rs, který přehrává routu s těmito hodnotami proti serveru na skutečném socketu.

Odpovědi

statustělovýznam
200 UncommittedReport Necommitnutá práce v propojených worktree a co ji drží: výsledek.
400 ErrorBody invalid_input: Vstup neodpovídá schématu: parametr špatného typu, neznámý parametr nebo hodnota, kterou schopnost odmítne.
404 ErrorBody not_found: Vstup pojmenovává něco, co repozitář nemá.
500 ErrorBody internal: Schopnost selhala z vlastního důvodu; zpráva ho pojmenovává.
výchozí ErrorBody Jakékoli jiné selhání, které transport hlásí: 405 method_not_allowed pro jinou metodu na této cestě, 400 invalid_input pro tělo, které není objektem JSON.

Schémata

Komponenty, které používají jen operace tohoto tagu. Každý řádek je pole daného typu, jeho doc komentář je popis; typ vlastněný jinou stránkou na ni odkazuje.

BranchState

object
Jedna lokální větev, s pracovním stromem nebo bez něj.
vlastnosttyppovinnépopis
název string ano Větev, krátce.
head string ano Commit, na který ukazuje.
trunk boolean ano Tato větev je trunk.
expected_path string | null ne Kam patří jeho pracovní strom.
worktree string | null ne Kde je checkoutován, pokud je.
upstream UpstreamState | null → UpstreamState ne Upstream a jeho vzdálenost.
merged_into_trunk boolean | null ne Dosažitelné z trunku. Chybí, když je trunk neznámý.
cleanup_eligible boolean ano Sloučeno do trunku, není to trunk a buď není vybaveno, nebo je vybaveno v work tree, o kterém se ví, že je čisté. Odvozený stav, nikdy se podle něj automaticky nejedná.
issue string | null ne Úkol, který tato větev prokazatelně jmenuje.

Používá RepositoryTopology

ContainerView

object
Kontejner, jak jej hlásí topologie.
vlastnosttyppovinnépopis
path string ano Odvozená cesta.
přípona string ano Přípona, s níž byl odvozen.
existuje boolean ano Existuje na disku. Vytvoří ho první worktree, který ho potřebuje.

Používá RepositoryTopology StatusReport

DiagnosticCode

"worktree.path_mismatch" | "worktree.container_occupied" | "worktree.nested" | "worktree.destination_conflict" | "worktree.missing" | "worktree.stale_registration" | "worktree.branch_already_checked_out" | "worktree.detached" | "worktree.ephemeral" | "worktree.primary_on_non_trunk" | "worktree.trunk_in_linked_worktree" | "worktree.path_escape" | "worktree.invalid_branch_name" | "worktree.locked" | "worktree.migration_verification_failed" | "worktree.trunk_unknown" | "worktree.case_collision" | "worktree.cross_device"
Stabilní strojový název všeho, co může být s topologií špatně. Jeden kód na podmínku, použitý příkazovou řádkou, API, MCP, Cockpitem, testy i dokumentací; próza vedle kódu se vykresluje z typovaného stavu.
  • worktree.path_mismatchPropojený pracovní strom není na kanonické cestě své větve.
  • worktree.container_occupiedPropojený pracovní strom zabírá samotnou cestu kontejneru.
  • worktree.nestedPropojený pracovní strom leží uvnitř primárního checkoutu nebo uvnitř jiného pracovního stromu.
  • worktree.destination_conflictKanonickou cestu branche zabírá něco, co není její pracovní strom.
  • worktree.missingAdresář registrovaného pracovního stromu neexistuje.
  • worktree.stale_registrationGit hlásí registraci jako prunable.
  • worktree.branch_already_checked_outVětev je checkoutnutá jinde než na své kanonické cestě.
  • worktree.detachedLinked worktree nemá větev.
  • worktree.ephemeralPropojený pracovní strom je odkládací checkout relace: pod dočasným adresářem nebo pod .claude/worktrees/ primárního checkoutu.
  • worktree.primary_on_non_trunkPrimární checkout drží větev, která není trunk.
  • worktree.trunk_in_linked_worktreeTrunk je checkoutnut v linked worktree, ne v primárním checkoutu.
  • worktree.path_escapeOdvozená cesta by opustila kontejner. U platného názvu větve nemůže nastat.
  • worktree.invalid_branch_nameNázev větve, který git přijal a pro který tento spustitelný soubor nedokáže odvodit cestu.
  • worktree.lockedPracovní strom je zamčený, takže jej nelze přesunout, dokud se neodemkne.
  • worktree.migration_verification_failedPřesun proběhl a otisk po něm se liší od otisku před ním.
  • worktree.trunk_unknownTrunk se nepodařilo určit.
  • worktree.case_collisionDvě jména větví se na souborovém systému nerozlišujícím velikost písmen mapují na jeden adresář.
  • worktree.cross_devicePřesun překročil zařízení a proběhl kopií, opravou a ověřením.

Používá TopologyDiagnostic

DirtyState

object
Nezapsaná práce v pracovním stromě, počítaná z git status --porcelain. Počítá se i nesledovaný obsah: přesně ten ztratí neopatrný přesun.
vlastnosttyppovinnépopis
připraveno k zapsání integer (uint) ano Položky se změnou v indexu.
unstaged integer (uint) ano Záznamy se změnou v pracovním stromu, která není v indexu.
nesledováno integer (uint) ano Nesledované, neignorované soubory.
v konfliktu integer (uint) ano Záznamy s nevyřešeným konfliktem při merge.
čisté boolean ano Nic z výše uvedeného není nenulové.
in_progress string | null ne Probíhá zde merge, rebase, cherry-pick, revert nebo bisect.

Používá MigrationStep UncommittedWorktree WorktreeState

EnvrcApproval

jedna ze 6 variant
Co se stalo s .envrc právě vytvořeného, nalezeného nebo přesunutého worktree.
varianta direnv ho přijal: další cd načte prostředí.
výsledek"approved"ano
varianta Worktree nemá .envrc; není co schvalovat a nic není blokováno.
výsledek"no_envrc"ano
variant direnv není na PATH; nic se neudělalo a nic ani není blokováno, protože nic by soubor nenačetlo.
výsledek"direnv_absent"ano
variant .envrc worktree není tím primárního checkoutu, takže tam udělené schválení se nepřenáší. direnv allow ve worktree, po přečtení, je věcí člověka.
výsledek"differs"ano
varianta .envrc primárního checkoutu není schválen, takže není co přenášet.
výsledek"not_approved_in_primary"ano
varianta direnv byl dotázán a odmítl, nebo ho nešlo spustit; zpráva je jeho vlastní.
zprávastringanostandardní chybový výstup direnv nebo chyba při jeho spuštění.
výsledek"failed"ano

Používá MigrationStep

HooksPath

jedna ze 6 variant
Co se stalo s adresářem hooků worktree, který byl právě vytvořen, nalezen nebo přesunut.

Putuje v JSON příkazů worktree create, ensure, migrate a repair, označené outcome, takže čtenář větví podle jednoho slova, místo aby parsoval řádek:

use majordomus_cli::worktree::HooksPath;

let set = HooksPath::Set {
    path: "/r-wt/fix/x/.githooks".into(),
    enabled: vec![],
};
let json = serde_json::to_value(&set).unwrap();
assert_eq!(json["outcome"], "set");
assert_eq!(json["path"], "/r-wt/fix/x/.githooks");
let back: HooksPath = serde_json::from_value(json).unwrap();
assert_eq!(back, set);
varianta Konfigurace repozitáře nenastavuje žádný core.hooksPath: vlastní adresář hooků gitu ve společném adresáři (nebo hodnota uživatele) slouží každému worktree a neexistuje žádný sledovaný adresář, který by se následoval.
výsledek"not_configured"ano
varianta Git už hooky tohoto worktree rozřešuje do jeho vlastního adresáře; nic se nenastavovalo.
pathstringanoAdresář, z něhož git spouští hooky.
výsledek"own"ano
variant core.hooksPath tohoto worktree byl nastaven, pro každý worktree, na jeho vlastní adresář.
pathstringanoAdresář, ze kterého nyní běží hooky.
zapnutoarray of stringanoNastavení repozitáře zapnutá tak, aby se respektovala hodnota pro každý worktree, jako key=value; prázdné, pokud už byla zapnutá.
výsledek"set"ano
varianta Adresář hooků je mimo primární checkout — jeden adresář sdílený záměrně — a běží z něj každý worktree; nic nebylo nastaveno.
pathstringanoAdresář, ze kterého každý worktree spouští háčky.
výsledek"shared"ano
variant Adresář hooků primárního checkoutu nemá v tomto stromu worktree protějšek, takže worktree dál spouští hooky primárního: nasměrovat ho na neexistující adresář by hooky vypnulo.
chybístringanoAdresář, který by byl vlastním adresářem worktree, a není tam.
runsstringanoAdresář, z něhož worktree místo toho spouští hooky.
výsledek"untracked"ano
variant Git byl dotázán a odmítl, nebo jej nešlo spustit; zpráva je jeho vlastní.
zprávastringanoCo se pokazilo.
výsledek"failed"ano

Používá MigrationStep

InspectReport

object
Jedna větev, prohlédnutá: kam patří její pracovní strom a co v něm je.
vlastnosttyppovinnépopis
větev string ano Větev, na kterou se ptá.
branch_exists boolean ano Větev existuje lokálně.
expected_path string ano Kam patří jeho pracovní strom.
destination_exists boolean ano Na té cestě něco existuje.
worktree WorktreeState | null → WorktreeState ne Pracovní strom, který drží větev, pokud nějaký existuje.
kanonické boolean ano Větev je checkoutnuta na své kanonické cestě.
diagnostika pole TopologyDiagnostic → TopologyDiagnostic ano Co stojí v cestě, pokud něco.

Používá worktree.inspect

MigrationAction

"move" | "move_via_staging" | "copy_and_repair" | "none"
Jak krok přesouvá svůj worktree.
  • moveJeden git worktree move.
  • move_via_stagingWorktree je samotný kontejner: ven na pracovní cestu, pak dovnitř kontejneru.
  • copy_and_repairPřesun překročil zařízení: zkopírovat, git worktree repair, ověřit, odstranit originál.
  • noneNic: krok je blokován.

Používá MigrationStep

MigrationPlan

object
Migrace, plánovaná nebo aplikovaná.
vlastnosttyppovinnépopis
schema string ano SCHEMA.
kontejner string ano Kontejner, do kterého se vše přesouvá.
kroky pole MigrationStep → MigrationStep ano Jeden krok na každý špatně umístěný worktree s větví, nejdřív obyvatelé kontejneru.
výjimky pole TopologyDiagnostic → TopologyDiagnostic ano Worktree, které migrace z principu nemůže adresovat: detached, chybějící, primární checkout mimo trunk. Každý říká, co s tím člověk udělá.
přesunutelné integer (uint) ano Kroky, které lze za současného stavu provést.
blokováno integer (uint) ano Kroky, které nemohou.
přesunuto integer (uint) ano Provedené a ověřené kroky.
selhalo integer (uint) ano Kroky, které byly zkoušeny a nebyly ověřeny.
aplikováno boolean ano Zda se cokoli změnilo.
moved_current string | null ne Nová cesta worktree, ze kterého byl příkaz spuštěn, když se přesunul.

Používá worktree.migration_plan

MigrationStep

object
Jeden worktree k přenesení domů.
vlastnosttyppovinnépopis
větev string ano Větev, kterou drží.
z string ano Kde to je.
do string ano Kam patří.
head string | null ne Commit, který je vyčerpán.
akce MigrationAction → MigrationAction ano Jak se pohybuje.
špinavé DirtyState → DirtyState ano Jeho necommitnutá práce, která se s ním přesouvá.
blockers pole TopologyDiagnostic → TopologyDiagnostic ano Proč se nemůže pohnout, když se nemůže.
výsledek StepOutcome → StepOutcome ano Co se stalo.
zpráva string | null ne Co se stalo, slovy, když to nebyl prostý přesun.
před WorktreeFingerprint | null → WorktreeFingerprint ne Otisk před přesunem.
po WorktreeFingerprint | null → WorktreeFingerprint ne Otisk po něm.
rozdíly array of string ano Čím se obě liší; prázdné, když je ověřeno.
envrc EnvrcApproval | null → EnvrcApproval ne Co se stalo s jeho .envrc pod direnv, jakmile byl na nové cestě: zda se tam přenesl souhlas primárního checkoutu, nebo proč ne. Jen u kroku přesunu.
hooky HooksPath | null → HooksPath ne Které hooky spouští na své nové cestě: core.hooksPath pro worktree pojmenovává starý, takže přesunuté worktree se znovu naváže na hooky vlastního stromu (I2718). Jen na přesunutém kroku.

Používá MigrationPlan

OpenEpisode

object
Otevřená epizoda v pracovním stromu, pokud jde o držení její práce: práci drží, jen dokud je stranded Some(false); opuštěná nebo nerozsouditelná nedrží nic.

use majordomus_cli::worktree::OpenEpisode;
let unjudged = OpenEpisode {
    id: "s-20260101000000-0a0a".into(),
    last_sign_of_life: None,
    stranded: None,
};
let wire = serde_json::to_value(&unjudged).unwrap();
assert!(wire.get("stranded").is_none(), "what could not be judged is absent, not false");
let back: OpenEpisode = serde_json::from_value(wire).unwrap();
assert_eq!(back, unjudged);
vlastnosttyppovinnépopis
id string ano Epizoda.
last_sign_of_life string | null ne Jeho nejnovější známka života, RFC 3339 v UTC.
uvízlé boolean | null ne Mlčí déle než práh. Chybí, když to nelze posoudit — žádný práh nebo žádný čitelný znak života — a pak nic nedrží.

Používá UncommittedWorktree

RepositoryTopology

object
Celá topologie: co čtou worktree list, zdroj MCP, routa HTTP i Cockpit.
vlastnosttyppovinnépopis
schema string ano SCHEMA.
repozitář RepositoryView → RepositoryView ano Repozitář.
kontejner ContainerView → ContainerView ano Kontejner, pod který patří každý propojený pracovní strom.
trunk TrunkView → TrunkView ano Trunk.
observed_from string ano Pracovní strom, z něhož bylo na volání odpovězeno.
worktrees pole WorktreeState → WorktreeState ano Každý registrovaný pracovní strom, primární první.
branches pole BranchState → BranchState ano Každá místní větev, podle jména.
diagnostika pole TopologyDiagnostic → TopologyDiagnostic ano Vše, co je s topologií špatně, nejdřív pracovní stromy, pak celý repozitář.
součty TopologyTallies → TopologyTallies ano Počty.
platné boolean ano Nestojí žádná diagnostika úrovně error.

Používá worktree.topology

RepositoryView

object
Identita repozitáře, jak ji hlásí topologie.
vlastnosttyppovinnépopis
primary_worktree string ano Primární checkout: podle čeho je kontejner pojmenován.
git_common_dir string ano Společný git adresář: identita repozitáře.
název string ano Název adresáře primárního checkoutu.

Používá RepositoryTopology StatusReport

Postavení

"primary" | "canonical" | "misplaced" | "detached" | "ephemeral" | "missing"
Kde pracovní strom stojí vůči topologii.
  • primaryPrimární checkout: osvobozen od pravidla cesty, vázán pravidlem trunku.
  • canonicalLinked worktree přesně na kanonické cestě své větve.
  • misplacedPropojený pracovní strom jinde. Migrace jej přivede domů.
  • detachedPropojený work tree bez větve. Nemá kanonickou cestu a nikdy se nepřesouvá.
  • ephemeralLinked worktree pod dočasným adresářem operačního systému nebo pod .claude/worktrees/ primárního checkoutu: pracovní checkout relace, vlastněný a odstraňovaný harnessem, který ho vytvořil. Hlásí se; migruje se jen na žádost.
  • missingRegistrace, jejíž adresář zmizel. Oprava ji zahodí.

Používá WorktreeState

StatusReport

object
Odpověď na otázku „kde jsem a je to tam, kam patřím“.
vlastnosttyppovinnépopis
schema string ano SCHEMA.
repozitář RepositoryView → RepositoryView ano Repozitář.
kontejner ContainerView → ContainerView ano Kontejner.
trunk TrunkView → TrunkView ano Trunk.
worktree WorktreeState → WorktreeState ano Pracovní strom, z něhož volání přišlo, s počtem jeho necommitnuté práce.
kanonické boolean ano Zda je tento pracovní strom tam, kam patří: kanonický, nebo primární checkout na trunku, nebo detached.
repository_errors integer (uint) ano Kolik diagnostik úrovně error nese celá topologie.
trunk_distance TrunkDistance → TrunkDistance ano Jak daleko je tento pracovní strom a lokální trunk od vzdáleného trunku, posouzeno podle checkout.trunk_distance z politiky: co by obsloužil a jak je to staré.

Používá worktree.status

StepOutcome

"planned" | "blocked" | "moved" | "failed"
Co se z kroku stalo.
  • plannedNaplánováno a neaplikováno.
  • blockedNeprovedeno, s blokátory u kroku.
  • movedPřesunuto a otisk po se rovná otisku před.
  • failedPokusilo se a nedokončilo, nebo dokončilo a neověřilo; zpráva říká, které z toho.

Používá MigrationStep

Práh

object
Stáří, po jehož překročení je necommitnutá práce, kterou nic nedrží, opuštěná, a odkud pochází.

Uvádí se u každého čtení, aby čtenář viděl, vůči čemu byly verdikty posuzovány; práh, který nic nedeklaruje, se nese jako chybějící, nedoplňuje se.

use majordomus_cli::worktree::Threshold;
let declared = Threshold::resolve(Some("12h"), None).unwrap();
let wire = serde_json::to_value(&declared).unwrap();
assert_eq!(wire["declared"], "12h");
assert_eq!(wire["seconds"], 43_200);
let absent: Threshold =
    serde_json::from_value(serde_json::json!({"source": "absent"})).unwrap();
assert_eq!((absent.declared, absent.seconds), (None, None), "absent is not a default");
vlastnosttyppovinnépopis
deklarováno string | null ne Hodnota, jak je zapsána (12h). Chybí, pokud ji nic nedeklaruje.
sekundy integer | null ne Stejná hodnota, v sekundách.
zdroj string ano THRESHOLD_KEY, older_than, když ho volající uvedl, nebo absent.

Používá UncommittedReport

TopologyDiagnostic

object
Jedna věc, která je na topologii špatně nebo stojí za to vědět.
vlastnosttyppovinnépopis
kód DiagnosticCode → DiagnosticCode ano Stabilní kód.
závažnost Závažnost → Závažnost ano Jak je to závažné.
path string | null ne Dotčený pracovní strom.
větev string | null ne Dotčená větev.
očekáváno string | null ne Kam pracovní strom patří.
zpráva string ano Co je špatně, jedním řádkem.
náprava string ano Příkaz, který to oslovuje.

Používají InspectReport MigrationPlan MigrationStep RepositoryTopology WorktreeState

TopologyTallies

object
Kolik work trees a větví je v kterém stavu.
vlastnosttyppovinnépopis
worktrees integer (uint) ano Každý registrovaný pracovní strom, včetně primárního.
kanonické integer (uint) ano Propojené work trees na své kanonické cestě.
špatně umístěno integer (uint) ano Propojené worktree jinde.
detached integer (uint) ano Propojené work trees bez větve.
dočasný integer (uint) ano Dočasné checkouty relace.
chybí integer (uint) ano Registrace, jejichž adresář zmizel.
uzamčeno integer (uint) ano Pracovní stromy, které git hlásí jako zamčené.
špinavé integer (uint) ano Pracovní stromy s necommitnutou prací, když o ně bylo požádáno.
branches integer (uint) ano Lokální větve.
branches_without_worktree integer (uint) ano Lokální větve bez pracovního stromu.
cleanup_eligible integer (uint) ano Větve způsobilé k úklidu.
chyby integer (uint) ano Diagnostika na úrovni chyb.
varování integer (uint) ano Diagnostika úrovně varování.

Používá RepositoryTopology

TrunkSource

"remote_head" | "default_branch_config" | "conventional_name" | "primary_checkout" | "unknown"
Odkud se trunk zjistil, v pořadí, v jakém se hledá.
  • remote_headrefs/remotes/<remote>/HEAD: jak remote nazývá svou výchozí větev.
  • default_branch_configinit.defaultBranch v konfiguraci gitu a ta branch existuje lokálně.
  • conventional_namePrávě jeden z main a master existuje lokálně.
  • primary_checkoutVětev, kterou drží primární checkout, protože nic jiného neřeklo.
  • unknownNic neřekl; trunk je neznámý a každá kontrola, která ho potřebuje, to říká.

Používá TrunkView

TrunkView

object
Trunk, jak ho hlásí topologie.
vlastnosttyppovinnépopis
větev string | null ne Větev, pokud je známa.
zdroj TrunkSource → TrunkSource ano Jak bylo rozhodnuto.
checked_out_at string | null ne Kde je checkoutnut.

Používá RepositoryTopology StatusReport

UncommittedReport

object
Každý propojený pracovní strom držící necommitnutou práci a co ji drží: odpověď worktree.uncommitted na každém povrchu a to, co vykresluje doctor.

use majordomus_cli::worktree::uncommitted::UNCOMMITTED_SCHEMA;
use majordomus_cli::worktree::{Threshold, UncommittedReport, WorktreeService};
let dir = tempfile::tempdir().unwrap();
let init = std::process::Command::new("git")
    .args(["init", "-q"])
    .current_dir(dir.path())
    .status()
    .unwrap();
assert!(init.success());
// a repository with no linked work tree, and a policy that declares no threshold
let threshold = Threshold::resolve(None, None).unwrap();
let report: UncommittedReport =
    WorktreeService::open(dir.path()).unwrap().uncommitted(&threshold).unwrap();
assert_eq!(report.schema, UNCOMMITTED_SCHEMA);
assert!(report.worktrees.is_empty());
assert_eq!(report.tallies.measured, 0);
assert_eq!(report.findings.len(), 1, "a missing threshold is said, not assumed");
vlastnosttyppovinnépopis
schema string ano UNCOMMITTED_SCHEMA.
observed_at string ano Kdy bylo čtení pořízeno, RFC 3339 v UTC.
práh Threshold → Threshold ano Práh, vůči kterému se posuzovalo.
worktrees pole UncommittedWorktree → UncommittedWorktree ano Každý propojený pracovní strom s necommitnutou prací, nejprve opuštěné, pak od nejstaršího.
součty UncommittedTallies → UncommittedTallies ano Počty.
zjištění array of string ano Co nešlo přečíst ani posoudit, slovy.

Používá worktree.uncommitted

UncommittedTallies

object
Počty UncommittedReport: kolik linked worktrees bylo přečteno, kolik jich drží necommitnutou práci a jak se dělí na držené, nedávné a opuštěné. Tato tři postavení se vždy sečtou na uncommitted; doctor čte abandoned, aby rozhodlo, zda má před čím varovat.

use majordomus_cli::worktree::UncommittedTallies;
let wire = serde_json::json!(
    {"measured": 4, "uncommitted": 3, "held": 1, "recent": 1, "abandoned": 1}
);
let t: UncommittedTallies = serde_json::from_value(wire.clone()).unwrap();
assert_eq!(t.held + t.recent + t.abandoned, t.uncommitted);
assert_eq!(serde_json::to_value(&t).unwrap(), wire, "the shape doctor's jq reads");
assert_eq!(UncommittedTallies::default().abandoned, 0, "nothing read, nothing abandoned");
vlastnosttyppovinnépopis
naměřeno integer (uint) ano Linked worktrees, jejichž stav byl přečten.
uncommitted integer (uint) ano Z nich ty, které drží necommitnutou práci: každá položka výpisu.
držené integer (uint) ano Drženo úlohou, epizodou nebo procesem.
nedávné integer (uint) ano Nedrženo ničím, mladší než práh.
opuštěno integer (uint) ano Nikým nedržený, starší než práh.

Používá UncommittedReport

UncommittedWorktree

object
Jeden linked worktree držící necommitnutou práci: kolik, jak starou, co ji drží, verdikt a příkaz, který by ji zachoval. Výpis je v kanonickém pořadí — opuštěné první, pak nedávné, pak držené, uvnitř každé nejstarší první.

use majordomus_cli::worktree::{DirtyState, UncommittedWorktree, WorkStanding};
let entry = |path: &str, standing: WorkStanding, age: u64| UncommittedWorktree {
    path: path.into(),
    branch: None,
    label: path.into(),
    work: DirtyState { staged: 1, ..DirtyState::default() },
    paths: 1,
    oldest_change: None,
    age_seconds: Some(age),
    age: None,
    task: None,
    episodes: Vec::new(),
    process_inside: None,
    held_by: Vec::new(),
    standing,
    remedy: String::new(),
};
let mut listing = vec![
    entry("/wt/held-old", WorkStanding::Held, 900_000),
    entry("/wt/young", WorkStanding::Abandoned, 50_000),
    entry("/wt/older", WorkStanding::Abandoned, 90_000),
];
majordomus_cli::order::canonical(&mut listing);
let paths: Vec<&str> = listing.iter().map(|w| w.path.as_str()).collect();
assert_eq!(paths, ["/wt/older", "/wt/young", "/wt/held-old"]);
vlastnosttyppovinnépopis
path string ano Absolutní, tak jak ji drží git.
větev string | null ne Tam checkoutnutá větev. Chybí při detached.
popisek string ano Branch, nebo detached/<short commit>.
práce DirtyState → DirtyState ano Počty tak, jak je dává worktree status.
cesty integer (uint) ano Každá změněná cesta: staged, unstaged, untracked a konfliktní dohromady.
oldest_change string | null ne Kdy byla provedena nejstarší změna: nejstarší čas úpravy mezi změněnými cestami, u cesty, která už neexistuje, čas souboru indexu. RFC 3339.
age_seconds integer | null ne Sekundy od té doby.
stáří string | null ne Totéž pro člověka (3d, 5h, 40m).
úloha string | null ne Aktivní úloha tam zaznamenaná.
epizody pole OpenEpisode → OpenEpisode ano Epizody tam otevřené.
process_inside boolean | null ne Proces má v něm svůj pracovní adresář. Chybí, když to nešlo přečíst.
held_by array of string ano Co to drží, slovy; prázdné, když to nedrží nic.
postavení WorkStanding → WorkStanding ano Verdikt.
náprava string ano Příkaz, který by dal tuto práci na remote ref. Navrhuje se, nikdy nespouští.

Používá UncommittedReport

UpstreamState

object
Upstream větve a jak daleko se obě rozešly, z for-each-ref v jediném podprocesu pro všechny větve, nikdy fetch.
vlastnosttyppovinnépopis
název string ano Upstream ref, zkráceně (origin/master).
napřed integer | null ne Zdejší commity, které upstream nemá.
pozadu integer | null ne Upstream commity, které této větvi chybí.
pryč boolean ano Upstream ref už neexistuje.

Používá BranchState WorktreeState

WorkStanding

"held" | "recent" | "abandoned"
Čím je nezacommitovaná práce pracovního stromu, posouzeno: drží ji něco, je čerstvá, nebo opuštěná. judge je jediné místo, kde se to rozhoduje, a doctor varuje jen při abandoned.

use majordomus_cli::worktree::uncommitted::{judge, WorkStanding};
let standing = judge(false, Some(90_000), Some(43_200));
assert_eq!(standing, WorkStanding::Abandoned);
assert_eq!(serde_json::to_value(standing).unwrap(), "abandoned");
  • heldDrží ho úloha, epizoda nebo proces.
  • recentNic ho nedrží a je mladší než práh.
  • abandonedNic ho nedrží a je starší než práh — nebo jeho stáří nelze přečíst.

Používá UncommittedWorktree

WorktreeFingerprint

object
Co pracovní strom obsahoval v jednom okamžiku, zredukováno na digesty.
vlastnosttyppovinnépopis
větev string | null ne Větev, nebo žádná, když je HEAD odpojený.
head string | null ne Commit.
index_digest string ano Digest indexu: každá sledovaná cesta s režimem, blobem a stagem.
staged_diff_digest string ano Souhrn staged diffu proti HEAD.
unstaged_diff_digest string ano Přehled neindexovaného diffu proti indexu.
untracked_manifest_digest string ano Souhrn každého nesledovaného souboru: cesta, druh, velikost a obsah.
untracked_files integer (uint) ano Kolik nesledovaných souborů manifest drží.
ignored_manifest_digest string ano Digest každé ignorované položky: cesta, druh a velikost, nikdy obsah.
in_progress string | null ne Probíhající operace, pokud nějaká je.
tree_manifest_digest string | null ne Digest každé položky adresářového stromu, včetně ignorovaných: cesta, druh, velikost a cíl odkazu. Pořizuje se jen u přesunu kopírováním, kde záruka přejmenování neplatí.

Používá MigrationStep

WorktreeKind

"primary" | "linked"
Zda je worktree vlastním checkoutem repozitáře, nebo s ním jen propojený.
  • primaryHlavní pracovní strom. Hostí kmen, nikdy se nepřesouvá a nikdy se neodstraňuje.
  • linkedPropojený work tree. Patří na kanonickou cestu své větve.

Používá WorktreeState

WorktreeState

object
Jeden pracovní strom, jak jej vidí topologie.
vlastnosttyppovinnépopis
path string ano Absolutní, tak jak ji drží git.
druh WorktreeKind → WorktreeKind ano Primární nebo linked.
postavení Standing → Standing ano Kde stojí vůči topologii.
větev string | null ne Zde vybavená větev, zkráceně. Chybí při detached HEAD.
popisek string ano Název, pod kterým se zobrazuje: větev, nebo detached/<short commit>.
head string | null ne Zde checkoutnutý commit.
detached boolean ano HEAD je zde odpojen.
expected_path string | null ne Kam patří pracovní strom této větve. Chybí při odpojení, nebo u primárního checkoutu na trunku.
existuje boolean ano Adresář, který git zaregistroval, stále existuje na disku.
aktuální boolean ano Volání přišlo zevnitř tohoto work tree.
uzamčeno string | null ne Zamčeno, s důvodem gitu; prázdný řetězec, když žádný nezaznamenal.
k odstranění string | null ne K vyčištění, s důvodem od gitu.
špinavé DirtyState | null → DirtyState ne Zde necommitnutá práce. Chybí, když o ni nebylo požádáno: stojí jeden podproces na pracovní strom a kontrola topologie ji nepotřebuje.
upstream UpstreamState | null → UpstreamState ne Upstream větve a její vzdálenost od něj.
issue string | null ne Úkol, který tato větev prokazatelně jmenuje: komponenta cesty větve rovná id úkolu z .ai/repo/project/issues/, nebo s ním začínající a následovaná pomlčkou. Nic se neodvozuje z podobnosti.
diagnostika pole TopologyDiagnostic → TopologyDiagnostic ano Co je s tímto pracovním stromem špatně, pokud něco.

Používá InspectReport RepositoryTopology StatusReport

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