Co to znamená
Žádné rozhraní spustitelného souboru v Rustu nedeklaruje nic vlastního. Nástroje a zdroje MCP, routy HTTP a operace OpenAPI, stránka Swagger UI, majordomus capabilities list a describe i docs/generated/capabilities.md se staví z registru na požádání. Změňte popis nebo typ vstupu schopnosti v jejím deskriptoru nebo přidejte do vrstvy deklarativní objekt a každé rozhraní změnu ukáže při dalším startu; nic jiného se needituje.
Princip
mcp/surface.rs mapuje položky registru s expozicí MCP na nástroje a zdroje a volá registr kanonickým id; http/router.rs mapuje položky s expozicí HTTP na trasy a váže vstup z dotazu nebo těla; http/openapi.rs vykresluje tytéž položky jako dokument OpenAPI 3.1, jehož operationId je kanonické id; http/swagger.rs servíruje stránku, která načítá /openapi.json; příkazy capabilities se odbavují přes expozici CLI registru; generate.rs zapisuje referenci z týchž položek.
Jak to vidět
apps/majordomus-cli/target/debug/majordomus capabilities describe objects.get --format json # exposure: mcp tool, http route
printf '{"jsonrpc":"2.0","id":1,"method":"tools/list"}\n' | apps/majordomus-cli/target/debug/majordomus mcp 2>/dev/null # the same id under _meta
apps/majordomus-cli/target/debug/majordomus serve --port 0 # GET /openapi.json: operationId objects.get, x-majordomus-mcp majordomus_getCo nepokrývá
Ostatní příkazy příkazového řádku (schema, validate, mcp, serve, generate) jsou pohledy na registr nebo jeho servery, ne schopnosti; strom clap je psán ručně a přes registr se dispatchují jen introspektivní příkazy. Aktiva Swagger UI jsou připnutá distribuce na unpkg; stránka nevkládá žádnou specifikaci, ale pro samotný prohlížeč potřebuje síť.
Proč existuje
Invariant, který operátor požadoval, a pravidlo project.interfaces-are-projections: schopnost definovaná jednou, každé rozhraní odvozené. apps/majordomus-cli/tests/projections.rs dokazuje, že každá deklarovaná projekce je přítomna, žádná není osiřelá a změněný typ vstupu i popis dosáhnou schématu MCP, operace OpenAPI i reference; tests/http_serve.rs dokazuje, že MCP a HTTP odpovídají stejným handlerem se stejným JSON; test/cases/76_capabilities_projections.sh čte jednu schopnost zpět přes každé rozhraní z repozitáře, který zapsal init.