Rules und Grants
Du musst Entscheidungen über Requests nicht immer wieder neu treffen. OpenBot speichert sie in zwei Formen:
| Form | Sieht so aus | Wer sie prüft |
|---|---|---|
| Grant | apps.call auf conn-7/search_orders, erlauben, für diese Session |
OpenBot, durch genauen Vergleich |
| Rule | “Der Programmer darf jedes Repository der Organisation openbot lesen, fragt aber vor einem Push.” | Ein Prüf-Modell |
Ein Grant ist schnell und genau. Eine Rule (Regel) deckt eine ganze Art von Requests ab.
Grants
Ein Grant ist eine gespeicherte Entscheidung über eine Fähigkeit eines Agent. Der Agent sieht seine Grants nie. Er sieht nur, dass manche Aufrufe laufen und manche abgelehnt werden.
| Feld | Bedeutung |
|---|---|
capability |
action, target (* für jedes Ziel) und optional genaue arguments. |
effect |
allow oder deny. Ein Ablehnen gewinnt. |
scope |
once (durch einen Aufruf verbraucht), session oder lifetime. |
grantedBy |
Die Person, der Agent oder die Rule, die entschieden hat. |
parent |
Der Grant des Entscheiders, aus dem dieser Grant entstanden ist. |
status |
active, used oder revoked. |
OpenBot erstellt Grants, wenn ein Entscheider einen Request beantwortet. Du kannst auch selbst einen erstellen:
curl -H "Authorization: Bearer $OPENBOT_TOKEN" \ -H "Content-Type: application/json" \ -d '{"capability":{"action":"agents.spawn","target":"*"},"effect":"allow","scope":"lifetime"}' \ https://api.example.com/v1/agents/$AGENT/grantsGET /v1/agents/:agentId/grants listet Grants auf. Füge ?status=active hinzu, um nur aktive Grants zu sehen.
DELETE /v1/agents/:agentId/grants/:grantId nimmt einen Grant zurück. OpenBot nimmt auch jeden Grant zurück, der aus ihm entstanden ist. So verlieren Agents weiter unten, was sie dadurch bekommen haben.
Rules
Eine Rule ist ein Satz in normaler Sprache für einen Agent. Wenn kein Grant über einen Request entscheidet, liest ein Prüf-Modell die aktiven Rules des Agent.
- Das Prüf-Modell erlaubt nur, wenn eine Rule diesen Request klar erlaubt. Es lehnt nur ab, wenn eine Rule ihn klar verbietet. In allen anderen Fällen geht der Request an den Entscheider.
- Jedes Erlauben oder Ablehnen muss den Text einer Rule zitieren. OpenBot prüft das Zitat. Ohne echtes Zitat gibt es keine Entscheidung.
- Ein Ablehnen gewinnt gegen ein Erlauben.
- Wenn das Prüf-Modell einen Fehler hat oder zu langsam ist, gibt es keine Entscheidung.
Eine Rule, die ein Agent geschrieben hat, zählt nur unter zwei Bedingungen: Dieser Agent steht in der Besitzer-Kette über dem Agent, und er darf die Fähigkeit selbst nutzen.
curl -H "Authorization: Bearer $OPENBOT_TOKEN" \ -H "Content-Type: application/json" \ -d '{"text":"The Programmer may read any repository of the openbot organization, but must ask before it pushes to main."}' \ https://api.example.com/v1/agents/$AGENT/rules| Feld | Bedeutung |
|---|---|
author |
Die Person oder der Agent, die die Rule geschrieben hat. |
status |
active, proposed oder retired. Nur aktive Rules zählen. |
version |
Steigt mit jeder Änderung. |
Eine Rule von einer Person ist sofort aktiv. Ein Agent kann in einer Prüfung eine Rule vorschlagen. Eine vorgeschlagene Rule zählt erst, wenn eine Person sie aktiv macht:
curl -X PATCH -H "Authorization: Bearer $OPENBOT_TOKEN" \ -H "Content-Type: application/json" \ -d '{"expected":0,"status":"active"}' \ https://api.example.com/v1/agents/$AGENT/rules/$RULEDu kannst auch eine Rule speichern, wenn du einen Request beantwortest: Schicke rule mit der Antwort. Siehe Einen Request beantworten.
Das Prüf-Modell
Das Prüf-Modell nutzt das Rules-Model. Es ist rulesModel in den Einstellungen der Organization. Es hat keinen Standardwert. Wenn es null ist, gibt das Prüf-Modell keine Antwort. Dann entscheidet eine Person oder ein Agent. OpenBot speichert jede Antwort des Prüf-Modells für dieselben Rules und dieselbe Fähigkeit. So läuft das Prüf-Modell für dieselbe Frage nicht noch einmal.