0f13a4f18d
Kategorie-Skills (z. B. autonomous-ai-agents/hermes-agent) haben einen
Schraegstrich in der ID. Die Route /api/eigenleben/skill/{skill_id} nahm nur
EIN Pfadsegment -> Request fiel in den SPA-Fallback (index.html, Status 200),
die UI zeigte "(Konnte den Skill-Text nicht laden.)". Live bewiesen:
skill/wartung = JSON, skill/autonomous-ai-agents%2Fhermes-agent = HTML.
Fix: :path-Konverter in der Route; dazu im Service "."/".."-Segmente
explizit abweisen (das Zeichen-Set der bestehenden Validierung liesse
".." als Segment durch, bisher irrelevant, mit :path sauber dicht).
Backend-only, kein dist-Rebuild noetig.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
26 lines
934 B
Python
26 lines
934 B
Python
"""Eigenleben-Endpoints — „Von allein"-Ansicht (Skills + Vorschlags-Bilanz), read-only."""
|
|
|
|
from fastapi import APIRouter, HTTPException
|
|
|
|
from services import eigenleben
|
|
|
|
router = APIRouter(prefix="/api")
|
|
|
|
|
|
@router.get("/eigenleben")
|
|
def get_overview() -> dict:
|
|
return eigenleben.overview()
|
|
|
|
|
|
# :path — Kategorie-Skills haben einen Schrägstrich in der ID (autonomous-ai-agents/
|
|
# hermes-agent). Als normales {skill_id}-Segment matcht die Route dann nicht, der Request
|
|
# fällt in den SPA-Fallback (index.html, Status 200) und die UI zeigt „Konnte den
|
|
# Skill-Text nicht laden". Die Pfad-Validierung (max. eine Ebene, keine . /..) macht
|
|
# services.eigenleben.skill_text.
|
|
@router.get("/eigenleben/skill/{skill_id:path}")
|
|
def get_skill(skill_id: str) -> dict:
|
|
text = eigenleben.skill_text(skill_id)
|
|
if text is None:
|
|
raise HTTPException(404, "Skill nicht gefunden.")
|
|
return {"id": skill_id, "text": text}
|