Skill pc-pfad-cache: Traum-Entwurf aufbereitet (Cache + pc_shell-Tool-Suche)
Übernimmt den unproponierten Entwurf aus /tmp/orch-pc-pfad-cache (Users Orchestrator-Läufe 09.07. früh) mit einem konstruktiven Fix: der Entwurf rief pc_shell als Shell-Befehl auf — das ist aber ein Agent-Tool, kein Binary, der Fallback konnte nie funktionieren (der untracked .py-Rest war ein angefangener Reparaturversuch via MCP-stdio, unnötig kompliziert). Neues Design: pc_path_lookup.sh = reiner YAML-Cache (lookup/merken/liste, exit 3 = Miss); die PC-Suche bei Cache-Miss macht der Agent selbst mit seinem pc_shell-TOOL und merkt den Fund. SKILL.md im Hausstandard, deploy.sh installiert Skill + Skript. Getestet auf der Box: merken/lookup-Roundtrip inkl. Umlaut- Normalisierung (Ä→ae, dabei tr-Umlaut-Falle gefixt), Miss=exit 3, bash -n grün. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -91,6 +91,11 @@ cp "$SRC/deploy/skills/wartung/SKILL.md" "$HOME/.hermes/skills/wartung/SKILL.md"
|
|||||||
# Orchestrator-Skill (Autonomie): Werkstatt verallgemeinert — zerlegen → an Worker delegieren → gaten.
|
# Orchestrator-Skill (Autonomie): Werkstatt verallgemeinert — zerlegen → an Worker delegieren → gaten.
|
||||||
mkdir -p "$HOME/.hermes/skills/orchestrator"
|
mkdir -p "$HOME/.hermes/skills/orchestrator"
|
||||||
cp "$SRC/deploy/skills/orchestrator/SKILL.md" "$HOME/.hermes/skills/orchestrator/SKILL.md"
|
cp "$SRC/deploy/skills/orchestrator/SKILL.md" "$HOME/.hermes/skills/orchestrator/SKILL.md"
|
||||||
|
# PC-Pfad-Cache-Skill (Traum-Entwurf 09.07.2026, aufbereitet): Cache lesen → bei Miss pc_shell-Tool → merken.
|
||||||
|
mkdir -p "$HOME/.hermes/skills/pc-pfad-cache"
|
||||||
|
cp "$SRC/deploy/skills/pc-pfad-cache/SKILL.md" "$HOME/.hermes/skills/pc-pfad-cache/SKILL.md"
|
||||||
|
cp "$SRC/deploy/skills/pc-pfad-cache/pc_path_lookup.sh" "$HOME/.hermes/scripts/pc_path_lookup.sh"
|
||||||
|
chmod +x "$HOME/.hermes/scripts/pc_path_lookup.sh"
|
||||||
# Eingebaute Hermes-Web-GUI (`hermes serve`) für die Einbettung in MC2 (routers/hermes_ui.py →
|
# Eingebaute Hermes-Web-GUI (`hermes serve`) für die Einbettung in MC2 (routers/hermes_ui.py →
|
||||||
# same-origin /hermes-ui/) vorbereiten: das SPA-Bundle mit Vite-base=/hermes-ui/ (neu) bauen, sonst
|
# same-origin /hermes-ui/) vorbereiten: das SPA-Bundle mit Vite-base=/hermes-ui/ (neu) bauen, sonst
|
||||||
# kollidieren seine absoluten Pfade (/assets, /api) mit MC2s eigenen. Läuft auch nach jedem
|
# kollidieren seine absoluten Pfade (/assets, /api) mit MC2s eigenen. Läuft auch nach jedem
|
||||||
|
|||||||
@@ -0,0 +1,44 @@
|
|||||||
|
---
|
||||||
|
name: pc-pfad-cache
|
||||||
|
description: "Cache für häufig gesuchte Windows-PC-Pfade — erst Cache lesen, bei Miss selbst per pc_shell suchen, Fund merken."
|
||||||
|
version: 1.1.0
|
||||||
|
author: Tobi & Hermes Agent (Traum-Entwurf 09.07.2026, aufbereitet)
|
||||||
|
license: MIT
|
||||||
|
metadata:
|
||||||
|
hermes:
|
||||||
|
tags: [pc-paths, cache, pc-control, windows]
|
||||||
|
---
|
||||||
|
|
||||||
|
# pc-pfad-cache — PC-Pfade blitzschnell statt jedes Mal suchen
|
||||||
|
|
||||||
|
Häufig gefragte Pfade auf Tobis Windows-PC (Apps, Ordner, Dateien) liegen in einem
|
||||||
|
YAML-Cache (`~/.hermes/pc-paths.yaml`). Erst nachschlagen, nur bei Miss wirklich auf
|
||||||
|
dem PC suchen — und den Fund sofort merken, damit die nächste Frage in <1 s beantwortet ist.
|
||||||
|
|
||||||
|
## Wann nutzen
|
||||||
|
- Tobi fragt nach dem Pfad/Ort einer Anwendung, Datei oder eines Ordners auf seinem PC
|
||||||
|
(„Wo ist Spotify?", „Pfad zu Chrome?", „wo liegt der Lucy-Ordner?").
|
||||||
|
- Tobi will einen Pfad im Cache ergänzen/korrigieren („merk dir: X liegt unter Y").
|
||||||
|
|
||||||
|
## Schritte
|
||||||
|
1. **Cache zuerst:** `~/.hermes/scripts/pc_path_lookup.sh lookup "<begriff>"` —
|
||||||
|
Treffer (exit 0) → Pfad direkt liefern, FERTIG. (Das Skript normalisiert selbst:
|
||||||
|
klein, Umlaute ausgeschrieben, Leerzeichen→Bindestrich.)
|
||||||
|
2. **Nur bei Cache-Miss (exit 3):** selbst auf dem PC suchen — mit deinem
|
||||||
|
**`pc_shell`-Tool** (NICHT als Shell-Befehl — `pc_shell` existiert nur als Tool),
|
||||||
|
z. B. `where <name>` oder eine gezielte PowerShell-Suche in den üblichen Orten
|
||||||
|
(`%ProgramFiles%`, `%LOCALAPPDATA%\Programs`, Desktop, F:\).
|
||||||
|
3. **Fund merken:** `~/.hermes/scripts/pc_path_lookup.sh merken "<begriff>" "<pfad>"` —
|
||||||
|
dann den Pfad liefern.
|
||||||
|
4. **Pflege:** `pc_path_lookup.sh liste` zeigt alle Einträge; „merken" überschreibt.
|
||||||
|
|
||||||
|
## Stolperfallen
|
||||||
|
- Schritt 2 NIE im Terminal versuchen — `pc_shell` ist ein Agent-Tool; im Terminal
|
||||||
|
gibt es den Befehl nicht (genau dieser Fehler steckte im ersten Entwurf).
|
||||||
|
- Der PC muss an sein (PC-Executor erreichbar), sonst ehrlich sagen statt raten.
|
||||||
|
- Cache ist Key→Pfad, bewusst flach — keine Patterns, keine Mehrfach-Treffer.
|
||||||
|
|
||||||
|
## Verifikation
|
||||||
|
- [ ] `pc_path_lookup.sh merken test-eintrag "C:\\Test"` → `lookup test-eintrag` liefert ihn.
|
||||||
|
- [ ] `lookup nie-gesehen` → exit 3 (Cache-Miss, keine Fehlermeldung).
|
||||||
|
- [ ] Nach echtem pc_shell-Fund: Eintrag steht in `~/.hermes/pc-paths.yaml`.
|
||||||
@@ -0,0 +1,71 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# pc_path_lookup.sh — YAML-Cache für Windows-PC-Pfade (~/.hermes/pc-paths.yaml).
|
||||||
|
#
|
||||||
|
# REINER Cache, bewusst OHNE PC-Suche: `pc_shell` ist ein Agent-Tool, kein Binary —
|
||||||
|
# der ursprüngliche Entwurf rief es als Shell-Befehl auf und konnte nie funktionieren.
|
||||||
|
# Die Suche bei Cache-Miss macht der AGENT selbst (pc_shell-Tool) und legt den Fund
|
||||||
|
# danach hier per `merken` ab. Siehe deploy/skills/pc-pfad-cache/SKILL.md.
|
||||||
|
#
|
||||||
|
# Aufrufe:
|
||||||
|
# pc_path_lookup.sh lookup <key> → Pfad auf stdout (exit 0) | exit 3 = Cache-Miss
|
||||||
|
# pc_path_lookup.sh merken <key> <pfad> → Eintrag anlegen/aktualisieren
|
||||||
|
# pc_path_lookup.sh liste → alle Einträge (key<TAB>pfad)
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
MODUS="${1:?FEHLT: lookup|merken|liste}"
|
||||||
|
YAML_FILE="$HOME/.hermes/pc-paths.yaml"
|
||||||
|
PY="$HOME/.hermes/hermes-agent/venv/bin/python"
|
||||||
|
[ -x "$PY" ] || PY=python3
|
||||||
|
|
||||||
|
normalize() {
|
||||||
|
# Umlaute ZUERST ausschreiben (beide Fälle — tr lowercased kein Ä/Ö/Ü), dann klein,
|
||||||
|
# Leerzeichen → Bindestrich
|
||||||
|
printf '%s' "$1" \
|
||||||
|
| sed 's/Ä/ae/g; s/Ö/oe/g; s/Ü/ue/g; s/ä/ae/g; s/ö/oe/g; s/ü/ue/g; s/ß/ss/g' \
|
||||||
|
| tr '[:upper:]' '[:lower:]' | sed 's/ /-/g'
|
||||||
|
}
|
||||||
|
|
||||||
|
case "$MODUS" in
|
||||||
|
lookup)
|
||||||
|
KEY=$(normalize "${2:?FEHLT: key}")
|
||||||
|
"$PY" - "$YAML_FILE" "$KEY" <<'PYEOF'
|
||||||
|
import sys, yaml
|
||||||
|
try:
|
||||||
|
data = yaml.safe_load(open(sys.argv[1])) or {}
|
||||||
|
except FileNotFoundError:
|
||||||
|
data = {}
|
||||||
|
apps = data.get("apps") or {}
|
||||||
|
if sys.argv[2] in apps:
|
||||||
|
print(apps[sys.argv[2]])
|
||||||
|
else:
|
||||||
|
sys.exit(3)
|
||||||
|
PYEOF
|
||||||
|
;;
|
||||||
|
merken)
|
||||||
|
KEY=$(normalize "${2:?FEHLT: key}")
|
||||||
|
PFAD="${3:?FEHLT: pfad}"
|
||||||
|
"$PY" - "$YAML_FILE" "$KEY" "$PFAD" <<'PYEOF'
|
||||||
|
import sys, yaml
|
||||||
|
try:
|
||||||
|
data = yaml.safe_load(open(sys.argv[1])) or {}
|
||||||
|
except FileNotFoundError:
|
||||||
|
data = {}
|
||||||
|
data.setdefault("apps", {})[sys.argv[2]] = sys.argv[3]
|
||||||
|
yaml.safe_dump(data, open(sys.argv[1], "w"), allow_unicode=True, default_flow_style=False)
|
||||||
|
print(f"gemerkt: {sys.argv[2]} -> {sys.argv[3]}")
|
||||||
|
PYEOF
|
||||||
|
;;
|
||||||
|
liste)
|
||||||
|
"$PY" - "$YAML_FILE" <<'PYEOF'
|
||||||
|
import sys, yaml
|
||||||
|
try:
|
||||||
|
data = yaml.safe_load(open(sys.argv[1])) or {}
|
||||||
|
except FileNotFoundError:
|
||||||
|
data = {}
|
||||||
|
for k, v in sorted((data.get("apps") or {}).items()):
|
||||||
|
print(f"{k}\t{v}")
|
||||||
|
PYEOF
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "FEHLT: lookup|merken|liste" >&2; exit 2 ;;
|
||||||
|
esac
|
||||||
Reference in New Issue
Block a user