refactor(brain): Auto-Magie raus — ARIA entscheidet selbst, Stefan fragt im Zweifel

Mut zur Luecke: -595 Zeilen Auto-Magie-Code raus, weil sie heute Abend
4 Bugs verursacht und 0 echten Mehrwert geliefert hat. Plus Stefan
hat zu Recht erkannt dass das System mit Pentest/Audit-Workflows
kollidieren wuerde (Whitelist-Pflege noetig).

Weg:
- aria-brain/api_heuristic.py geloescht (282 Zeilen Cross-Session-
  Tracking, Hint-Generation, Bypass-Detection)
- aria-brain/agent.py: Auto-Scaffold-Block, Bypass-Detection-Block,
  _upsert_bypass_lesson-Methode (-146 Zeilen)
- aria-brain/main.py: /skills/can-bash-host Endpoint
- aria-brain/prompts.py: api_heuristic_section-Parameter
- docker-compose.yml: managed-settings-Copy aus proxy-Command
- proxy-patches/pre-tool-bash-block.js (PreToolUse-Hook)
- proxy-patches/managed-settings.json (claude-CLI Hook-Config)

Bleibt (kostet nichts, hilft):
- Alle 18 seed_rules (sind in DB, machen keine Last)
- skill_scaffold Tool (ARIA kann es manuell nutzen)
- Anti-Friedhof + snake_case + Safe-Name-Mapping (passive Validierung)
- Versionierung + Rollback (P4, hat sich bei PATH-Bug bewaehrt)
- 50k stdout Truncate-Fix

scaffold-reflex seed_rule umgeschrieben: kein 'SOFORT scaffold'-
Reflex mehr, stattdessen 4-Punkte-Heuristik (parametrisierbar?
wiederkehrend? exploratory? im Zweifel: Stefan fragen). Pentest-
Workflows bleiben damit ad-hoc Bash ohne false-positive
Skill-Vorschlaege.

Existierende auto-feedback-Memories in der DB bleiben — sind nuetzliche
Lehren, werden nicht mehr automatisch erweitert. Stefan kann sie via
Diagnostic-Gehirn-Tab loeschen wenn sie nerven.

Dank git ist alles rueckholbar. Wenn doch wieder Auto-Magie gewuenscht:
git revert auf 8d5991f.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-30 02:47:32 +02:00
parent 8d5991f364
commit d12bfd0302
9 changed files with 30 additions and 625 deletions
-46
View File
@@ -805,52 +805,6 @@ class SkillScaffold(BaseModel):
author: str = "stefan"
class SkillCanBashHostIn(BaseModel):
command: str
@app.post("/skills/can-bash-host")
def skills_can_bash_host(body: SkillCanBashHostIn):
"""Prueft ob ein Bash-Command gegen einen Host laufen will fuer den
bereits ein matching Skill existiert. Wird vom claude-CLI PreToolUse-
Hook im aria-proxy gefragt — wenn block=True, weist der Hook den
Bash-Call mit Fehlermeldung zurueck und ARIA muss `run_<skill>` nehmen.
Antwort: {block: bool, host?: str, skill?: str, safe_tool?: str}
"""
import re as _re
cmd = (body.command or "").strip()
if not cmd:
return {"block": False}
skills = skills_mod.list_skills(active_only=False)
if not skills:
return {"block": False}
# Stem-Map: jeder Skill-Name als potentieller Hostname-Match
# (yt_dlp_download → 'yt_dlp_download', 'spotify' → 'spotify' etc.)
stem_to_skill = {}
for s in skills:
sname = (s.get("name") or "").lower()
if sname:
stem_to_skill[sname] = sname
# Underscore-Variante auch als Stem akzeptieren
stem_to_skill[sname.replace("_", "-")] = sname
# Alle https-URLs im Command einsammeln + matchen
for url_host in _re.findall(r'https?://([a-zA-Z0-9.\-]+)', cmd):
host_lower = url_host.lower()
for stem, skill_name in stem_to_skill.items():
if stem and stem in host_lower:
safe_tool = "run_" + _re.sub(r"[^a-zA-Z0-9_]", "_", skill_name)
return {
"block": True,
"host": url_host,
"skill": skill_name,
"safe_tool": safe_tool,
}
return {"block": False}
@app.get("/skills/templates")
def skills_templates_list():
"""Liste der verfuegbaren Templates — fuer UI und Dokumentation."""