1570b2fc71
User-Auftrag 12.07. ("bau das alles ein im Sinne der Autonomie. Auch muss
Lucy selbst bemerken wenn sich etwas aendert"):
- deploy/selbst-inventur.sh (Cron 03:35): SELBST-STECKBRIEF wird LIVE aus
der Realitaet GENERIERT (Versionen, Dienste, Timer, Modelle, Crons,
Queue, Karten -> ~/.hermes/state/selbst-steckbrief.md) statt von Hand
gepflegt. Diff gegen gestern => die Box BEMERKT SELBST Aenderungen an
sich (stille Chronik-Karte + kurze Telegram-Zeile; sonst still).
- deploy/karten-gutachter.sh (Cron 04:00): stempelt jede neue Karte mit
"Empfehlung: ANNEHMEN/ABLEHNEN/UNKLAR + ein ehrlicher Satz" (prueft
Redundanz gegen den Steckbrief, Risiko, Nutzen; Ein-Schuss-Richter
gpt-oss/GLM; Stempel = Meinung, kein Gate; neuer Commit entwertet den
alten Stempel). Backend mischt den Stempel in /api/auftragsbuch,
UI zeigt ihn farbig auf der Karte.
- Ablehnen mit Grund (Lern-Klick): UI-Inline-Feld beim Ablehnen ->
/srv/models/mc2-ablehnungen.jsonl -> Idle-Radar bekommt die Gruende
als "NIE wieder vorschlagen"-Material vorgelegt.
- idle-radar-feed.sh: Material + Raster erweitert um Selbst-Steckbrief,
Inventur-Diff und Ablehn-Gruende (Fehlerfall 12.07.: redundanter
Gateway-Restart-Vorschlag waere damit gestorben).
- werkstatt-SOUL Regel 7 + wartung-Skill: REALITAETS-CHECK - existiert es
schon? Dann kanban_block statt Branch (ein Branch fuer Ueberfluessiges
ist ein gescheiterter Lauf).
- hermes-release-radar-feed.sh: echter Treffer legt zusaetzlich EINE rohe
Idee in die Queue (idempotent je Release-Tag) - der Blick nach draussen
fuettert denselben Kreislauf.
- deploy.sh: kopiert beide neuen Skripte; Doku AUFTRAGSBUCH.md +
wissen/OFFENE-FAEDEN.md; frontend/dist frisch gebaut (tsc+vite gruen,
UI gegen Live-Box verifiziert).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
65 lines
1.9 KiB
Python
65 lines
1.9 KiB
Python
"""Auftragsbuch-Endpoints (Vorschlags-Inbox) — dünner REST-Layer über services/auftragsbuch.py.
|
|
LAN-only wie alle MC2-Endpoints; das Gate ist der Klick des Commanders."""
|
|
|
|
from fastapi import APIRouter, HTTPException
|
|
from pydantic import BaseModel
|
|
|
|
from services import auftragsbuch
|
|
|
|
router = APIRouter(prefix="/api")
|
|
|
|
|
|
class BranchIn(BaseModel):
|
|
branch: str
|
|
repo: str = "mc2" # "mc2" (Box-Stack) oder "lucy" (Desktop-App, Annahme baut am PC)
|
|
grund: str = "" # nur beim Ablehnen: optionaler Grund → Lern-Gedächtnis des Kreislaufs
|
|
|
|
|
|
class KandidatIn(BaseModel):
|
|
file: str
|
|
|
|
|
|
@router.get("/auftragsbuch")
|
|
def list_proposals() -> dict:
|
|
return auftragsbuch.list_proposals()
|
|
|
|
|
|
@router.get("/auftragsbuch/diff")
|
|
def diff(branch: str, repo: str = "mc2") -> dict:
|
|
res = auftragsbuch.diff_of(branch, repo)
|
|
if not res.get("ok"):
|
|
raise HTTPException(400, res.get("error", "Diff nicht verfügbar."))
|
|
return res
|
|
|
|
|
|
@router.post("/auftragsbuch/annehmen")
|
|
def accept(body: BranchIn) -> dict:
|
|
res = auftragsbuch.accept(body.branch, body.repo)
|
|
if not res.get("ok"):
|
|
raise HTTPException(400, res.get("error", "Annehmen fehlgeschlagen."))
|
|
return res
|
|
|
|
|
|
@router.post("/auftragsbuch/ablehnen")
|
|
def reject(body: BranchIn) -> dict:
|
|
res = auftragsbuch.reject(body.branch, body.repo, body.grund)
|
|
if not res.get("ok"):
|
|
raise HTTPException(400, res.get("error", "Ablehnen fehlgeschlagen."))
|
|
return res
|
|
|
|
|
|
@router.post("/auftragsbuch/skill/annehmen")
|
|
def skill_accept(body: KandidatIn) -> dict:
|
|
res = auftragsbuch.skill_accept(body.file)
|
|
if not res.get("ok"):
|
|
raise HTTPException(400, res.get("error", "Beauftragen fehlgeschlagen."))
|
|
return res
|
|
|
|
|
|
@router.post("/auftragsbuch/skill/ablehnen")
|
|
def skill_reject(body: KandidatIn) -> dict:
|
|
res = auftragsbuch.skill_reject(body.file)
|
|
if not res.get("ok"):
|
|
raise HTTPException(400, res.get("error", "Verwerfen fehlgeschlagen."))
|
|
return res
|