fix(skills): skill_get-Tool nachgereicht — kein Blind-Rewrite mehr
Skandal-Ursache: die skill_update-Anleitung sagt "erst skill_get lesen, dann updaten" — aber skill_get existierte GAR NICHT als Tool. ARIA/Claude konnte einen Skill also nie LESEN vor dem Aendern → Blind-Rewrite aus Beschreibung + Gedaechtnis. (Claude sagte korrekt "skill_get steht mir nicht zur Verfuegung" und hat den Spotify-Skill trotzdem komplett neu geschrieben.) Neu: skill_get(name) liefert Manifest (args/fast_patterns/speak/converse) + kompletten entry_code (echter Python) + README. skills.read_skill_source(). So sieht ARIA den Ist-Code und aendert gezielt statt blind zu ueberschreiben. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -139,6 +139,26 @@ def read_manifest(name: str) -> Optional[dict]:
|
||||
return None
|
||||
|
||||
|
||||
def read_skill_source(name: str) -> Optional[dict]:
|
||||
"""Manifest + kompletter entry_code + README eines Skills. Damit ARIA einen
|
||||
Skill LESEN kann bevor sie ihn per skill_update aendert (sonst Blind-Rewrite,
|
||||
der bestehende Funktionen killt)."""
|
||||
m = read_manifest(name)
|
||||
if m is None:
|
||||
return None
|
||||
d = _skill_dir(name)
|
||||
entry = m.get("entry", "run.sh")
|
||||
try:
|
||||
code = (d / entry).read_text(encoding="utf-8")
|
||||
except Exception as exc:
|
||||
code = f"(entry-Datei '{entry}' nicht lesbar: {exc})"
|
||||
try:
|
||||
readme = (d / "README.md").read_text(encoding="utf-8")
|
||||
except Exception:
|
||||
readme = ""
|
||||
return {"manifest": m, "entry": entry, "entry_code": code, "readme": readme}
|
||||
|
||||
|
||||
def write_manifest(name: str, manifest: dict) -> None:
|
||||
d = _skill_dir(name)
|
||||
d.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
Reference in New Issue
Block a user