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: knowledge_base

Co odvozovač znalostí nechal k revizi a zda stále zapisuje: kandidátní záznamy čekající na povýšení s větví epizody, ze které každý pochází, jeden záznam podle id se všemi referencemi, které pojmenovává, vyřešenými proti indexu, ledgeru a gitu, a stav odvozování tohoto checkoutu posuzovaný podle prahů čerstvosti politiky. Čteno z indexu a ledgeru; nic zde nezapisuje — odvozovač patří shellovému nástroji a povyšuje člověk.

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.

knowledge_base

Co odvozovač znalostí nechal k revizi a zda stále zapisuje: kandidátní záznamy čekající na povýšení s větví epizody, ze které každý pochází, jeden záznam podle id se všemi referencemi, které pojmenovává, vyřešenými proti indexu, ledgeru a gitu, a stav odvozování tohoto checkoutu posuzovaný podle prahů čerstvosti politiky. Čteno z indexu a ledgeru; nic zde nezapisuje — odvozovač patří shellovému nástroji a povyšuje člověk.

GET /api/v1/knowledge/candidates knowledge_base.candidates

Kandidáti čekající na review

Každý znalostní záznam se stavem candidate ve zdrojové třídě kandidátů: jeho třída, tvrzení, epizoda, ze které vznikl, a branch této epizody a jak dlouho čeká — měřeno od derivace, která ho zapsala, pak od commitu, který ho přidal, a nakonec od jeho vlastního data — posuzováno podle session.freshness; proti limitu politiky. Kandidát, jehož epizodu tento checkout nezná, je uveden bez branche, nikoli skryt. Řazeno podle id.

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

Žá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/knowledge/candidates"

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 KnowledgeCandidates Kandidáti čekající na review: 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/knowledge/record knowledge_base.record

Jeden záznam znalostí

Jeden záznam znalostí podle id — kandidát nebo schválený — s rozlišeným každým odkazem, který jmenuje: relace vůči sledovaným záznamům relací a ledgeru, úloha nebo rozhodnutí vůči ledgeru a úložišti úloh, commit vůči gitu, soubor nebo test vůči indexu a stromu, pravidlo, ADR, úkol nebo jiný záznam vůči indexu. Které odkazy visí, je otázka, kterou si recenzent klade před povýšením, a kterou klade validátor integrity každému záznamu. Odkaz `task:none` nebo `decision:none` se odmítne jménem.

  • query
  • behaviorally_verified
  • vyžaduje se měření výkonu
  • cache vypnuta
  • nástroj MCP majordomus_knowledge_record
  • $ knowledge record

Parametry dotazu

názevtyppovinnépopispříklady
id string ano Id záznamu, jak jej nese název souboru a `majordomus://knowledge/<id>`. first-record: "a-brief-is-reconciled-not-transcribed"

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/knowledge/record?id=a-brief-is-reconciled-not-transcribed"

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 KnowledgeRecord Jeden záznam znalostí: 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/knowledge/status knowledge_base.status

Zda deriver ještě zapisuje

Polovina úsudku o zastaveném zapisovači týkající se čerstvosti (ADR 0052, aplikováno na deriver znalostí ADR 0091): nejnovější řádek knowledge.derived, nejnovější řádek session.closed, kolik uzavřených epizod nejmenuje žádné odvození, počty kandidátů a — jakmile se v tomto checkoutu odvození spustilo a přepínač je zapnutý — zda nejnovější uzavřená epizoda zůstala neodvozená déle než session.freshness.stale_minutes. Id epizod se porovnávají, nikdy pořadí řádků. Zda cesta uzavření stále volá deriver, čte z kódu shellový validátor, ne zde.

  • query
  • behaviorally_verified
  • vyžaduje se měření výkonu
  • cache process (max_entries=2, ttl_seconds=2)
  • Nástroj MCP majordomus_knowledge_status
  • Zdroj MCP {"name": "knowledge-status", "uri": "majordomus://knowledge-status"}
  • $ knowledge status

Žá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/knowledge/status"

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 KnowledgeStatus Zda deriver ještě zapisuje: 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.

AgeSource

"derivation" | "commit" | "date"
Odkud bylo čteno stáří kandidáta ve frontě review. date kandidáta je záměrně den důkazu, z něhož pochází, aby stejný důkaz dával stejné bajty; den, kdy vstoupil do fronty, je jiný fakt a čte se nejprve z ledgeru, pak z gitu a teprve potom ze záznamu.

use majordomus_cli::capability::builtin::knowledge_base::AgeSource;
let from_ledger: AgeSource = serde_json::from_str(r#""derivation""#).unwrap();
assert_eq!(from_ledger, AgeSource::Derivation);
assert!(AgeSource::Derivation < AgeSource::Date, "the ledger is asked before the record");
  • derivationNejstarší řádek knowledge.derived v knize tohoto checkoutu, jehož cesty ho jmenují.
  • commitCommit, který soubor do této historie přidal.
  • dateVlastní date záznamu o půlnoci UTC: den důkazu, ne den fronty.

Používá KnowledgeCandidate

KnowledgeCandidate

object
Jeden záznam kandidáta čekající na posouzení: co čtenář potřebuje, aby se rozhodl, zda ho otevře.

use majordomus_cli::capability::builtin::knowledge_base::KnowledgeCandidate;
let c: KnowledgeCandidate = serde_json::from_str(r#"{
  "id": "e1-0123456789ab", "uri": "majordomus://knowledge/e1-0123456789ab",
  "path": ".ai/repo/knowledge/candidates/e1-0123456789ab.md", "class": "convention",
  "status": "candidate", "epistemics": "decided", "title": "Tests run in disposable repositories",
  "date": "2026-09-12", "derived_from": ["session:e1"], "episode": "e1",
  "freshness": "unknown", "freshness_reason": "no timestamp", "age_source": "date"
}"#).unwrap();
assert_eq!(c.episode, "e1");
assert_eq!(c.branch, None, "an episode this checkout never saw has no branch, and says so");
vlastnosttyppovinnépopis
id string ano Id záznamu, které je zároveň názvem jeho souboru.
uri string ano majordomus://knowledge/<id>.
path string ano Cesta relativní k repozitáři.
třída string ano fact, convention, constraint, memory nebo lesson.
status string ano Zde vždy candidate; nese se proto, aby čtenář viděl stejný tvar záznamu jako u record.
epistemika string ano observed, inferred nebo decided.
název string ano Tvrzení na jednom řádku.
datum string ano Den důkazu, YYYY-MM-DD.
derived_from array of string ne Typované odkazy, které záznam jmenuje jako svůj důkaz, tak jak byly deklarovány.
epizoda string ne Epizoda, ze které záznam pochází: reference session:, nebo prázdné, když nejmenuje žádnou.
větev string | null ne Větev, na které epizoda běžela, spojená se sledovaným záznamem relace nebo, dokud není zapsán, s řádkem session.started knihy. None, když tento checkout o epizodě nic neví — pojmenováno, ne skryto, aby čtenář rozlišil „ne tato větev“ od „zde neznámo“. V tom případě se serializuje jako null, nikdy se nevynechá.
čerstvost Čerstvost → Freshness ano Jak dlouho čekal, posuzováno proti session.freshness.
age_minutes integer | null ne Čekání v celých minutách, když šlo změřit.
freshness_reason string ano Proč bylo takto posouzeno, jednou frází. Nikdy prázdné.
age_source AgeSource → AgeSource ano Odkud bylo čekání přečteno.
about string ne O čem je pozorování, z něhož byl odvozen (ADR 0118); prázdné pro záznam odvozený z čehokoli jiného.
route string ne Který vlastník by se měl podívat první, odvozeno ze struktury about; bez ní prázdné.

Používá KnowledgeCandidates

KnowledgeCandidates

object
Kandidáti čekající na revizi proti stropu politiky.

use majordomus_cli::capability::builtin::knowledge_base::KnowledgeCandidates;
let empty: KnowledgeCandidates = serde_json::from_str(
    r#"{"total":0,"on_this_branch":0,"unattributed":0,"branch":"master","candidates":[],"over_cap":false}"#,
).unwrap();
assert_eq!(empty.total, 0, "an empty queue is an answer");
assert_eq!(empty.cap, None, "and a policy without the key declares no cap");
vlastnosttyppovinnépopis
celkem integer (uint) ano Kolik záznamů nese status: candidate ve třídě kandidátů.
on_this_branch integer (uint) ano Kolik z nich pochází z epizody na větvi tohoto checkoutu.
nepřiřazeno integer (uint) ano Kolik jich jmenuje epizodu, o které tento checkout nic neví.
větev string ano Větev, jíž se tato odpověď týká, nebo DETACHED.
candidates pole KnowledgeCandidate → KnowledgeCandidate ne Každý kandidát v kanonickém pořadí podle id.
skupiny pole KnowledgeGroup → KnowledgeGroup ne Kandidáti a zamítnuté záznamy odvozené z pozorování, seskupené podle toho, čeho se týkají, v pořadí podle předmětu.
cap integer | null ne knowledge.candidates_max_files, když to politika deklaruje.
over_cap boolean ano Pravda, když total překročí cap. Nepravda, když není deklarován žádný strop: nikdo žádný nezapsal.
zjištění array of string ne Co by měl čtenář vědět, než předchozímu uvěří: poškozený záznam, který byl přeskočen, překročený limit, politika, která žádný nedeklaruje. Prázdné je dobrý případ.

Používá knowledge_base.candidates

KnowledgeGroup

object
Záznamy pod jedním předmětem: každý kandidát čekající na review a každý odmítnutý, s epizodami za nimi (ADR 0118). Opakování se tu čte, nikdy nezapisuje: každý záznam zůstává souborem jedné epizody a skupina je způsob, jak se jich několik čte jako jedna věc.

use majordomus_cli::capability::builtin::knowledge_base::KnowledgeGroup;
let g: KnowledgeGroup = serde_json::from_str(
    r#"{"about":"lib/a.sh","route":"project","candidates":["e1-a","e2-b"],"episodes":["e1","e2"]}"#,
).unwrap();
assert_eq!(g.episodes.len(), 2, "two episodes observed it");
assert!(g.rejected.is_empty(), "and nobody rejected it");
vlastnosttyppovinnépopis
about string ano Předmět, jak byl napsán.
route string ano Trasa jeho záznamů.
candidates array of string ne Kandidáti čekající na revizi, podle id.
zamítnuto array of string ne Záznamy odmítnuté a ponechané, podle id.
epizody array of string ne Epizody za všemi z nich, každá jednou, v pořadí.

Používá KnowledgeCandidates

KnowledgeRecord

object
Jeden záznam znalosti, s vyřešeným každým odkazem, který jmenuje.

objects.get už servíruje stejný soubor jako metadata i obsah. Tohle přidává rozlišení: které odkazy záznamu odpovídají, kterým čtečem a které visí — otázku, kterou si revizor klade před povýšením kandidáta, a otázku, kterou klade validátor integrity každému záznamu.

use majordomus_cli::capability::builtin::knowledge_base::KnowledgeRecord;
let r: KnowledgeRecord = serde_json::from_str(r#"{
  "id": "e1-0123456789ab", "uri": "majordomus://knowledge/e1-0123456789ab",
  "path": ".ai/repo/knowledge/candidates/e1-0123456789ab.md", "source_class": "candidates",
  "class": "convention", "status": "candidate", "epistemics": "decided", "origin": "extracted",
  "date": "2026-09-12", "title": "An assertion", "resolved": true, "content": "---\n---\n"
}"#).unwrap();
assert!(r.derived_from.is_empty(), "a record that names nothing has nothing to resolve");
assert_eq!(r.superseded_by, None, "and is not superseded");
vlastnosttyppovinnépopis
id string ano Id záznamu.
uri string ano majordomus://knowledge/<id>.
path string ano Cesta relativní k repozitáři.
source_class string ano Třída zdrojů, která jej objevila: candidates nebo curated.
třída string ano fact, convention, constraint, memory nebo lesson.
status string ano candidate, verified nebo superseded.
epistemika string ano observed, inferred nebo decided.
původ string ne authored nebo extracted; prázdné, pokud záznam nenese žádný původ.
datum string ano Den, kdy záznam dosáhl svého stavu.
název string ano Tvrzení.
derived_from pole ResolvedReference → ResolvedReference ne Každý odkaz provenance.derived_from, vyřešený, v pořadí záznamu.
vztahy pole ResolvedRelation → ResolvedRelation ne Každý záznam relations, rozřešený, v pořadí záznamu.
superseded_by string | null ne Záznam, který tento nahradil, když je stav superseded.
vyřešeno boolean ne Pravda, když se rozřešil každý odkaz výše. Jediný bit, který recenzent čte jako první.
obsah string ano Celý soubor, front matter i tělo.

Používá knowledge_base.record

KnowledgeStatus

object
Zda deriver stále zapisuje a co naposledy zapsal.

Úsudek patří ADR 0052 a je aplikován na tohoto zapisovatele: dokud se epizody zavírají, odvození následuje po každém zavření. Porovnává ID epizod, nikdy pořadí řádků ani časová razítka mezi oběma událostmi, protože zavření odvozuje dřív, než připojí session.closed. Je to jen polovina úsudku o aktuálnosti; zda cesta zavření a adaptér komprimace stále volají odvozovač, čte ze zdroje shellový validátor, což je místo, kde zdroj je.

use majordomus_cli::capability::builtin::knowledge_base::KnowledgeStatus;
let fresh: KnowledgeStatus = serde_json::from_str(r#"{
  "present": false, "branch": "master", "closed_without_derivation": 0, "candidates": 0,
  "on_this_branch": 0, "freshness": "unknown", "freshness_reason": "no episode has closed here",
  "judged": false, "stopped_writer": false, "knowledge_on_end": true, "knowledge_on_compact": true
}"#).unwrap();
assert!(!fresh.present, "a fresh clone has no ledger, and that is not a fault");
assert!(!fresh.stopped_writer);
vlastnosttyppovinnépopis
přítomno boolean ano Zda je zde něco k posouzení: řádek ledgeru nebo kandidát. False v čerstvém klonu.
větev string ano Branch, na kterém tento checkout je, nebo DETACHED.
last_derived LedgerMark | null → LedgerMark ne Nejnovější řádek knowledge.derived, nebo None, když deriver tady nikdy neběžel.
last_closed LedgerMark | null → LedgerMark ne Nejnovější řádek session.closed, nebo None, když se tady dosud žádná epizoda neuzavřela.
closed_without_derivation integer (uint) ano Kolik uzavřených epizod v tomto ledgeru nejmenuje žádný řádek knowledge.derived.
candidates integer (uint) ano Kolik záznamů nese status: candidate ve třídě kandidátů.
on_this_branch integer (uint) ano Kolik z nich pochází z epizody na této větvi.
čerstvost Čerstvost → Freshness ano Jak stará je nejnovější uzavřená epizoda, posouzeno podle session.freshness.
age_minutes integer | null ne Toto stáří v celých minutách, když šlo změřit.
freshness_reason string ano Proč bylo posouzeno takto. Nikdy prázdné.
posouzeno boolean ano Zda se posouzení zastaveného zapisovatele vůbec provedlo. False, s důvodem mezi findings, dokud se tady neuzavřela žádná epizoda, dokud je přepínač vypnutý nebo dokud v tomto checkoutu neproběhlo žádné odvozování.
stopped_writer boolean ano Nález: epizody se tu uzavírají a do prahu zastarání nenásledovalo žádné odvození po nejnovější z nich. Pravda jen když judged.
knowledge_on_end boolean ano session.knowledge_on_end, jak ho deklaruje politika; chybějící znamená zapnuto.
knowledge_on_compact boolean ano session.knowledge_on_compact, stejně.
zjištění array of string ne Co by měl čtenář vědět: proč bylo posouzení zadrženo, nebo co zjistilo.

Používá knowledge_base.status

LedgerMark

object
Jeden řádek účetní knihy, na kterém záleží při posouzení: kdy a která epizoda.

use majordomus_cli::capability::builtin::knowledge_base::LedgerMark;
let m: LedgerMark = serde_json::from_str(r#"{"ts":"2026-09-12T10:00:00Z","episode":"e1"}"#).unwrap();
assert_eq!(m.episode, "e1");
vlastnosttyppovinnépopis
ts string ano Časové razítko řádku, RFC 3339 v UTC.
epizoda string ne Epizoda, o které řádek je; prázdné, pokud řádek žádnou nejmenuje.

Používá KnowledgeStatus

ReferenceResolution

"object" | "external" | "historical" | "missing"
Jak se typovaný odkaz vyřešil.

Čtyři slova a žádné páté: reference pojmenovává objekt indexu, nebo něco, za co může ručit jen ledger a git, nebo soubor, který strom už nedrží a historie gitu ano, nebo nic. external není slabší object — commit nebo úloha jsou stejně skutečné jako pravidlo — říká, který čtenář odpověděl; historical se rozřeší také a je pojmenováno zvlášť, aby čtenář viděl, který původ přežil svůj soubor (I1987).

use majordomus_cli::capability::builtin::knowledge_base::ReferenceResolution;
let r: ReferenceResolution = serde_json::from_str(r#""external""#).unwrap();
assert_eq!(r, ReferenceResolution::External);
assert!(r.resolves(), "vouched for by the ledger or git is resolved");
assert!(!ReferenceResolution::Missing.resolves());
  • objectObjekt indexu: target je jeho URI, nebo u souboru jeho cesta.
  • externalRučí za to účetní kniha, úložiště úloh nebo git: relace, úloha, rozhodnutí, commit.
  • historicalfile: nebo test:, které strom už nedrží a historie gitu ano: citované před smazáním souboru, nebo připnuté jako file:<path>@<commit>. target je blob, který odpovídá, <commit>:<path>, který čte git show.
  • missingNic se k němu nehlásí. Visící odkaz je zjištění validátoru integrity.

Používá ResolvedReference ResolvedRelation

ResolvedReference

object
Jeden odkaz derived_from záznamu, s tím, jak se vyřešil a vůči čemu.

use majordomus_cli::capability::builtin::knowledge_base::{ReferenceResolution, ResolvedReference};
let r: ResolvedReference = serde_json::from_str(
    r#"{"reference":"task:none","resolution":"missing","reason":"`none` is not a task"}"#,
).unwrap();
assert_eq!(r.resolution, ReferenceResolution::Missing);
assert_eq!(r.target, None);
vlastnosttyppovinnépopis
reference string ano Odkaz tak, jak byl zapsán: <prefix>:<value>.
rozlišení ReferenceResolution → ReferenceResolution ano Jak se rozřešilo.
cíl string | null ne Na co se vyřešilo: URI objektu, cesta souboru, čtečka, která se zaručila za externí odkaz. Chybí, když se nevyřešilo nic.
důvod string ne Proč se nevyřešilo, pokud se nevyřešilo.

Používá KnowledgeRecord

ResolvedRelation

object
Jedna položka relations, rozlišená stejným způsobem.

use majordomus_cli::capability::builtin::knowledge_base::{ReferenceResolution, ResolvedRelation};
let r: ResolvedRelation = serde_json::from_str(
    r#"{"relation_type":"relates_to","reference":"file:docs/CLI.md","resolution":"object","target":"docs/CLI.md"}"#,
).unwrap();
assert_eq!(r.relation_type, "relates_to");
assert!(r.resolution.resolves());
vlastnosttyppovinnépopis
relation_type string ano relates_to, depends_on, documents, supports, contradicts, supersedes nebo derived_from.
reference string ano Cíl tak, jak je zapsán.
rozlišení ReferenceResolution → ReferenceResolution ano Jak se rozřešilo.
cíl string | null ne Na co se vyřešilo, když se něco vyřešilo.
důvod string ne Proč se nevyřešilo, pokud se nevyřešilo.

Používá KnowledgeRecord

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