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.
BenchmarkPolicy
jedna ze 3 variant
Zda je schopnost cílem měření výkonu. Required je výchozí a norma: každá spustitelná schopnost se měří přímo i přes každý transport, na němž je vystavena, s případy, které poskytuje její vstupní typ.
variant Měřeno přímo i přes každou expozici; pokrytí bez případu selže.
variant Vyžadováno přesně jako Required v repozitáři, kde platí předpoklad, a hlášeno jako nepoužitelné — nikdy pokryté, nikdy prominuté — kde neplatí. Není to prominutí: když je předpoklad splněn a není případ, požadavek chybí.
| předpoklad | BenchmarkPrecondition → BenchmarkPrecondition | ano | Co musí repozitář obsahovat. |
| policy | "required_when" | ano | |
variant Neměřeno z typovaného důvodu; pokrytí to hlásí jako prominuté, nikdy jako pokryté.
Používá Capability CapabilitySummary
BenchmarkPrecondition
"plan_holds_an_issue"
Co musí repozitář obsahovat, než se na něj vztáhne podmíněný požadavek na benchmark. Typované, jako důvod výjimky, aby podmínka byla přezkoumatelným tvrzením na deskriptoru a nikdy poskytovatelem, který tiše nic nevrátí.
use majordomus_cli::capability::BenchmarkPrecondition;
let p: BenchmarkPrecondition = serde_json::from_str(r#""plan_holds_an_issue""#).unwrap();
assert_eq!(p, BenchmarkPrecondition::PlanHoldsAnIssue);
plan_holds_an_issuePlán obsahuje alespoň jeden úkol. Příkaz, jehož každý poctivý případ je odmítnutí zvolené podle stavu úkolu, nemá v plánu bez úkolu žádné takové odmítnutí: jediná odpověď je minutí při vyhledání, které měří chybovou cestu a není operací.
Používá BenchmarkPolicy
CachePolicy
jedna ze 4 variant
Zda a jak executor uchovává výsledky této schopnosti. Cache žije v executoru a nikde jinde, takže MCP, HTTP i příkazová řádka sdílejí jednu; klíčem je kanonické id, normalizovaný vstup a otisk registru, takže změněný repozitář nikdy neodpoví ze staré položky. Dvě užší politiky přidávají ke klíči to, co otisk registru nevidí: vlastní čtení repozitáře kontextem (CachePolicy::Generation) a stav samotného checkoutu (CachePolicy::Checkout).
varianta Každé volání spustí handler.
variant Výsledky se pro shodné vstupy drží v paměti tohoto procesu, omezené.
| max_entries | integer (uint) | ano | Nejvyšší počet záznamů uchovávaných pro tuto schopnost; nejstarší se vyřadí první. |
| ttl_seconds | integer | null | ne | Sekundy, po které položka zůstává platná; None po dobu života procesu. |
| policy | "process" | ano | |
varianta Výsledky se uchovávají pro shodné vstupy, dokud je kontext, který je vypočetl, ten, na který se ptáme: u schopnosti, která je funkcí samotného indexu a registru, včetně stavu gitu, ve kterém se index četl, což otisk registru nepokrývá. Znovunačtení repozitáře je nový kontext, a tedy nový klíč.
| max_entries | integer (uint) | ano | Nejvyšší počet záznamů uchovávaných pro tuto schopnost; nejstarší se vyřadí první. |
| policy | "generation" | ano | |
variant Výsledky se uchovávají pro stejné vstupy, dokud je kontext stejný a checkout je takový, jaký byl: HEAD, staging index, refs a každá změněná či nesledovaná cesta pracovního stromu, při každém volání znovu otisknuté (capability::checkout). Pro schopnost, která čte git, index a soubory pracovního stromu, a nic, co ten otisk nevidí: žádný ignorovaný soubor, žádný jiný proces, žádná síť, žádné hodiny. Checkout, který git nedokáže otisknout, se necachuje.
| max_entries | integer (uint) | ano | Nejvyšší počet záznamů uchovávaných pro tuto schopnost; nejstarší se vyřadí první. |
| policy | "checkout" | ano | |
Používá Capability CapabilitySummary
CanonicalSchema
object
JSON Schema se stabilním názvem komponenty (titulkem typu), pokud ho typ má.
| vlastnost | typ | povinné | popis |
| název |
string | null |
ne |
Název komponenty, který používají projekce (RepositoryInfo); None pro anonymní schéma, například prázdný vstup. |
| schema |
libovolný |
ano |
Samotné schéma, bez $schema; vnořené typy jsou pod $defs. |
Používá Capability
Schopnost
object
Kanonický deskriptor. Vše, co může projekce o schopnosti říct, je tady.
| vlastnost | typ | povinné | popis |
| id |
CapabilityId → CapabilityId |
ano |
Kanonická identita. |
| modul |
ModuleId → ModuleId |
ano |
Modul, který ji skládá: jmenný prostor id pro vestavěnou, druh pro deklarativní objekt. |
| druh |
CapabilityKind → CapabilityKind |
ano |
Dotaz, příkaz nebo zdroj. |
| název |
string |
ano |
Krátké jméno, které ukazuje každá projekce. |
| popis |
string |
ano |
Popis o jednom odstavci, který ukazuje každá projekce. |
| vstup |
CanonicalSchema → CanonicalSchema |
ano |
Kanonické schéma vstupu; prázdný objekt pro resource. |
| výstup |
CanonicalSchema → CanonicalSchema |
ano |
Kanonické schéma výstupu; pohled objektu pro zdroj. |
| provenance |
CapabilityProvenance → CapabilityProvenance |
ano |
Odkud pochází. |
| exposure |
Exposure → Exposure |
ano |
Kam se promítá; absence je explicitní. |
| dostupnost |
CapabilityAvailability → CapabilityAvailability |
ano |
Kde to něco znamená: klasifikováno z druhu a transportů výše, aby projekce četla pole, místo aby si rozhodovala sama. |
| viditelnost |
CapabilityVisibility → CapabilityVisibility |
ano |
Pro koho je: klasifikováno ze stejných transportů. |
| stabilita |
Stability → Stability |
ano |
Jak to stojí. |
| štítky |
array of string |
ne |
Volné tagy z tags deklarativního objektu nebo z deskriptoru. |
| benchmark |
BenchmarkPolicy → BenchmarkPolicy |
ano |
Zda je cílem měření výkonu; případy pocházejí ze vstupního typu. |
| cache |
CachePolicy → CachePolicy |
ano |
Zda executor uchovává své výsledky. |
| provádění |
ExecutionPolicy → ExecutionPolicy |
ano |
Co znamená spustit to jako provedení: klasifikováno podle druhu, aby klient četl fakt, místo aby se rozhodoval sám. |
| dovednost |
SkillExposure | null → SkillExposure |
ne |
Krátký název, kterým ji člověk vyvolá z promptu agenta, pokud ho má. |
Používá capabilities.describe
CapabilityAvailability
"always" | "runtime" | "build_time" | "authenticated"
Kde schopnost něco znamená: prostředí, v němž musí volající být, aby vůbec odpověděla.
Publikovaný web a běžící server jsou skutečně různá místa. Bez toho na modelu si každá šablona vyvine vlastní představu o tom, co kde funguje — a obvyklá podoba je podmínka na vlastní adresu stránky, což je pravidlo schované tam, kde ho nikdo nenajde a nic ho nemůže otestovat. To je jediná věc, na kterou se projekce smí ptát.
Je klasifikováno, ne deklarováno: fakta, která o tom rozhodují — jaký druh věci to je a jakými transporty se promítá — už jsou na deskriptoru a žádat každou deklaraci, aby je opakovala, by znamenalo psát tutéž znalost dvakrát. Availability::classify je jediné místo, kde pravidlo žije.
alwaysPlatí v každém prostředí, včetně publikované stránky bez serveru: vlastní obsah vrstvy, který sestavení vykresluje a proces obsluhuje ze stejného indexu.runtimeAby šlo odpovědět, musí běžet proces: vše, co má handler, ať se k němu dostaneme přes HTTP, přes MCP nebo z příkazové řádky.build_timeHodnota zachycená při generování webu, později vykreslená jako zachycená. Zatím se do této třídy nic nezařazuje; deklarovat ji bude statická projekce grafu a je v modelu proto, aby zachycenou hodnotu šlo označit jako zachycenou, místo aby se zobrazovala jako aktuální.authenticatedProces musí běžet a volající musí být ten, kterého ověřil. Nic v tomto repozitáři zatím volajícího neověřuje; povrch, který ano, to řekne zde, ne v šabloně, která vykresluje jeho odkaz.
Používá Capability
CapabilityList
object
Odpověď capabilities.list: odpovídající schopnosti, shrnuté, a spočítaný registr.
| vlastnost | typ | povinné | popis |
| počet |
integer (uint) |
ano |
Kolik schopností odpovídalo filtrům. |
| summary |
Souhrn → Summary |
ano |
Celý registr, spočítaný podle druhu, stability a projekce. |
| capabilities |
pole CapabilitySummary → CapabilitySummary |
ano |
Odpovídající schopnosti, podle id, bez jejich schémat. |
Používá capabilities.list
CapabilitySummary
object
Jedna schopnost, jak ji ukazuje výpis: vše, co deskriptor říká, kromě jejích dvou schémat, na která odpovídá capabilities.describe pro jednu schopnost. Výpis registru repozitáře čítá stovky položek; jejich schémata by byla megabajty téhož objektového pohledu opakovaného dokola.
| vlastnost | typ | povinné | popis |
| id |
CapabilityId → CapabilityId |
ano |
Kanonická identita. |
| modul |
ModuleId → ModuleId |
ano |
Modul, který jej skládá. |
| druh |
CapabilityKind → CapabilityKind |
ano |
Dotaz, příkaz nebo zdroj. |
| název |
string |
ano |
Krátký název. |
| popis |
string |
ano |
Popis o jednom odstavci. |
| provenance |
CapabilityProvenance → CapabilityProvenance |
ano |
Odkud pochází. |
| exposure |
Exposure → Exposure |
ano |
Kde se promítá. |
| stabilita |
Stability → Stability |
ano |
Jak to stojí. |
| štítky |
array of string |
ne |
Volné štítky. |
| benchmark |
BenchmarkPolicy → BenchmarkPolicy |
ano |
Zda je cílem měření výkonu. |
| cache |
CachePolicy → CachePolicy |
ano |
Zda executor uchovává své výsledky. |
Používá CapabilityList
CapabilityVisibility
"public" | "developer" | "internal"
Pro koho schopnost je a zda ji něco nabízí.
Internal je výrok, ne opomenutí: schopnost, kterou nic nepromítá, je neviditelná tak či tak a rozdíl mezi záměrným a zapomenutým je přesně to, co tento záznam zachycuje.
publicNabízeno každému, kdo se dostane k procesu: trasa HTTP nebo položka MCP.developerNabízeno tomu, kdo spouští spustitelný soubor, a nikomu po síti.internalNepromítáno nikam. Existuje, je uvedeno jako existující a žádný povrch ho nenabízí.
Používá Capability
CliExposure
object
Jak se schopnost zobrazí na příkazové řádce: slova za majordomus.
| vlastnost | typ | povinné | popis |
| path |
array of string |
ano |
Slova za majordomus, např. ["capabilities", "list"]. |
Používá Exposure
ClosureMatrix
object
Celá matice s nálezy a dluhem vedle sebe: jedna hodnota, která odpovídá na "kde se každá schopnost objevuje a je nějaké tvrzení nesplněno".
| vlastnost | typ | povinné | popis |
| řádky |
pole Row → Row |
ano |
Jeden řádek na schopnost, v pořadí podle id. |
| nepodloženo |
array of string |
ano |
Spustitelné příkazy příkazové řádky, které si nenárokuje žádná schopnost, v pořadí příkazů. |
| nezařazeno |
array of string |
ano |
Z nich ty, které nevysvětluje ani crate::cli::local::LOCAL: příkaz, který není projekcí schopnosti ani deklarovaným příkazem jen pro příkazovou řádku s důvodem. Prázdné je uzavření, které pravidlo žádá; cokoli tu je, je operace, která opustila API omylem, a ne rozhodnutím. |
Používá capabilities.projections
ExecutionConcurrency
"unrestricted" | "serial"
Zda se dvě provedení jedné schopnosti smějí překrývat.
unrestrictedLibovolný počet najednou. Každé čtení je jedním z nich: index a registr jsou po dobu života procesu neměnné, takže souběžní čtenáři se nemohou rušit.serialPo jednom. Druhé provedení téže schopnosti čeká na první, což je to, co schopnost, která cokoli mění — včetně paměti tohoto procesu — potřebuje, aby se o ní vůbec dalo uvažovat.
Používá ExecutionPolicy
ExecutionPolicy
object
Co znamená spuštění schopnosti jako provedení: co mění, zda žádost o zastavení něčeho dosáhne a zda se dvě z nich smějí překrývat.
Efekt a souběžnost se klasifikují z druhu pomocí ExecutionPolicy::classify, ze stejného důvodu jako Availability: fakta už jsou na deklaraci a žádat po každém bloku capability!, aby je znovu uvedl, by byla další věc, která si může sama odporovat.
Zrušitelnost je jediná věc, kterou druh nemůže rozhodnout, protože je to fakt o handleru: zda se dívá na svůj příznak zrušení a zastaví se. Handler, který to dělá, to říká pomocí crate::capability::Executable::cancellable a klient se pak dozví, zda tlačítko Zrušit něčeho dosáhne, místo aby dostal takové, které lže.
| vlastnost | typ | povinné | popis |
| účinek |
ExecutionEffect → ExecutionEffect |
ano |
Co mění. |
| zrušitelné |
boolean |
ano |
Zda žádost o zastavení něco udělá. Úloha sleduje svůj příznak zrušení; dotaz a příkaz ne, a klient se to dozví, místo aby dostal tlačítko, které lže. |
| souběžnost |
ExecutionConcurrency → ExecutionConcurrency |
ano |
Zda se dva z nich smějí překrývat. |
| signed_input |
boolean |
ne |
Zda vstup autentizuje svého volajícího.
Handler, jehož vstupem je podepsaná zpráva a který před jakoukoli změnou ověří podpis vůči politice důvěry, pouští volajícího dovnitř na základě tohoto podpisu, a ne podle adresy, ze které požadavek přišel. Jen takový handler mění stav pro volajícího na jiném hostiteli; viz ExecutionPolicy::admits_remote. |
Používá Capability
Zpřístupnění
object
Projekce, které schopnost deklaruje. Absence je explicitní: None znamená, že tam není vystavena, a nic nedovozuje vystavení, které deskriptor nedeklaroval.
| vlastnost | typ | povinné | popis |
| mcp |
McpExposure | null → McpExposure |
ne |
Projekce MCP, pokud je deklarována. |
| http |
HttpExposure | null → HttpExposure |
ne |
Projekce HTTP, pokud je deklarována. |
| cli |
CliExposure | null → CliExposure |
ne |
Projekce příkazové řádky, když je deklarována. |
Používá Capability CapabilitySummary
HttpExposure
object
Jak se schopnost zobrazuje přes HTTP. GET váže každou vlastnost vstupu nejvyšší úrovně jako parametr dotazu; POST váže vstup jako tělo požadavku JSON. Cesty jsou absolutní a leží pod HttpExposure::PREFIX.
| vlastnost | typ | povinné | popis |
| metoda |
HttpMethod → HttpMethod |
ano |
Metoda. |
| path |
string |
ano |
Absolutní cesta, pod HttpExposure::PREFIX. |
Používá Exposure
HttpMethod
"GET" | "POST"
Metody HTTP, na které může být schopnost navázána.
GETJen pro čtení; vstup se váže z query stringu.POSTVstup se váže z těla JSON. Používá ho každá mutující schopnost.
Používá HttpExposure
McpExposure
object
Jak se schopnost případně jeví klientovi MCP.
| vlastnost | typ | povinné | popis |
| nástroj |
string | null |
ne |
Jako nástroj s tímto jménem ([a-z0-9_]+). |
| zdroj |
McpResource | null → McpResource |
ne |
Jako čitelný zdroj. |
Používá Exposure
McpResource
object
Zdroj MCP: jeho URI a krátké jméno, pod kterým ho klient vypisuje.
| vlastnost | typ | povinné | popis |
| uri |
string |
ano |
majordomus://<kind>/<identity> nebo majordomus://repository. |
| název |
string |
ano |
Krátké jméno, které klient vypisuje; identita pro deklarativní objekt. |
Používá McpExposure
ModuleId
string
Identita modulu: jmenný prostor každé schopnosti, kterou modul skládá, odpovídající [a-z][a-z0-9_-]*. Vestavěné moduly deklarují svůj v module!; modul deklarativního objektu je jeho druh.
Používá Capability CapabilitySummary
Řádek
object
Kde je jedna schopnost promítnuta a kde není.
Toto je matice pokrytí pravidla: řádek na schopnost, sloupec na rozhraní. Odvozuje se, nikdy nezapisuje — schopnost, která nedosáhne nikam, se ukáže jako řádek samých false, což je přesně případ „existuje, ale je neviditelná“, který stojí za to vidět.
| vlastnost | typ | povinné | popis |
| id |
string |
ano |
Kanonické id. |
| modul |
string |
ano |
Modul, který jej skládá. |
| druh |
string |
ano |
Dotaz, příkaz nebo zdroj. |
| stabilita |
string |
ano |
Jak to stojí. |
| účinek |
ExecutionEffect → ExecutionEffect |
ano |
Co volání mění: nic, paměť tohoto procesu, nebo repozitář. Stejná klasifikace, kterou čtou všechny projekce, takže matice odpovídá na „kde je to dosažitelné“ i „čím riskuje dosažení“ v jediném řádku. |
| cli |
string | null |
ne |
Příkazový řádek, pokud jej deklaruje a clap jej má. |
| http |
string | null |
ne |
Trasa HTTP, když ji deklaruje. |
| mcp_tool |
string | null |
ne |
Název nástroje MCP, když jej deklaruje. |
| mcp_resource |
string | null |
ne |
URI zdroje MCP, pokud ho deklaruje. |
| uzavřeno |
boolean |
ano |
Zda je každá expozice, kterou tento řádek deklaruje, zodpovězena jeho povrchem. |
| zdroj |
string |
ano |
Kde je schopnost deklarována; relativně k repozitáři. |
Používá ClosureMatrix
SkillExposure
object
Schopnost jako dovednost, kterou člověk vyvolá krátkým jménem z promptu agenta:
/intent <sentence> v Claude Code. Jméno a jediné vstupní pole, které vyplní napsaný text, se deklarují zde, jednou; soubor, který čte produkt agenta, se z nich generuje (modul
editors) a nenese žádný popis toho, co schopnost dělá, kromě popisu samotné schopnosti.
use majordomus_cli::capability::SkillExposure;
let s = SkillExposure { alias: "intent".into(), argument: "statement".into() };
assert!(s.validate().is_ok());
// a name an agent product already owns is refused, and so is one that is not a name
let taken = SkillExposure { alias: "review".into(), argument: "x".into() };
assert!(taken.validate().unwrap_err().contains("reserved"));
let shouted = SkillExposure { alias: "Intent".into(), argument: "x".into() };
assert!(shouted.validate().is_err());
| vlastnost | typ | povinné | popis |
| alias |
string |
ano |
Název zadaný za lomítkem: malá písmena, číslice a pomlčky, nejvýše 64. |
| argument |
string |
ano |
Vstupní pole, které doslovně vyplní text zadaný za názvem. |
Používá Capability
WaiverReason
"not_executable" | "destructive" | "external_dependency" | "transient_state" | "published_history"
Proč se spustitelná schopnost neměří. Typované, aby prominutí bylo přezkoumatelné prohlášení a nikdy pohodlí; not_executable je vlastní důvod registru pro zdroje a nikdy se nepíše ručně.
not_executableZdroj: čte se, nikdy nespouští; není co měřit kromě objects.get, které se měří.destructiveSchopnost mění něco mimo tento proces a nelze ji pouštět ve smyčce.external_dependencySchopnost komunikuje s něčím, co hostitel měření výkonu nemůže poskytnout.transient_stateSchopnost spouští práci, která existuje, jen dokud běží, nebo o ní odpovídá. Hostitel měření výkonu nemůže připravit provedení ke čtení a spouštění operace ve smyčce by měřilo práci, ne operaci.published_historySchopnost odpovídá na to, co tento repozitář publikoval, takže jejím vstupem je release: tag verze, commit, na který ukazuje, a projekce commitnutá tam. Testovací repozitář pro měření je repozitář, který nic nepublikoval, a poctivou odpovědí v něm je odmítnutí — případ by tedy měřil chybovou cestu a nazval to pokrytím. Odlišné od WaiverReason::ExternalDependency: nic mimo tento proces se nekonzultuje, a odlišné od WaiverReason::TransientState: historie je trvalá, jen tam, kde měření běží, ještě neexistuje.
Používá BenchmarkPolicy