diff --git a/deploy/deploy.sh b/deploy/deploy.sh index 99a82f4..237f1cf 100644 --- a/deploy/deploy.sh +++ b/deploy/deploy.sh @@ -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. mkdir -p "$HOME/.hermes/skills/orchestrator" 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 → # 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 diff --git a/deploy/skills/pc-pfad-cache/SKILL.md b/deploy/skills/pc-pfad-cache/SKILL.md new file mode 100644 index 0000000..3fe1f7e --- /dev/null +++ b/deploy/skills/pc-pfad-cache/SKILL.md @@ -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 ""` — + 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 ` oder eine gezielte PowerShell-Suche in den üblichen Orten + (`%ProgramFiles%`, `%LOCALAPPDATA%\Programs`, Desktop, F:\). +3. **Fund merken:** `~/.hermes/scripts/pc_path_lookup.sh merken "" ""` — + 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`. diff --git a/deploy/skills/pc-pfad-cache/pc_path_lookup.sh b/deploy/skills/pc-pfad-cache/pc_path_lookup.sh new file mode 100644 index 0000000..36ffadd --- /dev/null +++ b/deploy/skills/pc-pfad-cache/pc_path_lookup.sh @@ -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 → Pfad auf stdout (exit 0) | exit 3 = Cache-Miss +# pc_path_lookup.sh merken → Eintrag anlegen/aktualisieren +# pc_path_lookup.sh liste → alle Einträge (keypfad) +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