From 4c6fd1331cfd9853343e2247bec71449c169f064 Mon Sep 17 00:00:00 2001 From: Conrad Schulz Date: Tue, 2 Jun 2026 09:26:32 +0000 Subject: [PATCH] =?UTF-8?q?feat:=20post-commit=20h=C3=A4ngt=20git-block=20?= =?UTF-8?q?an=20session-datei=20an?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Hook erkennt *_session.md Dateien (vom Agent via /history erstellt) - Modus A: Git-Block an bestehende Konversations-Datei anhängen - Modus B: Nur Git-Stub wenn kein Agent-Log vorhanden (Hinweis ausgeben) - history.prompt.md: Dateinamen-Konvention _session.md dokumentiert --- git-templates/hooks/post-commit | 56 +++++++++++++++++++++++---------- prompts/history.prompt.md | 17 ++++++---- 2 files changed, 51 insertions(+), 22 deletions(-) diff --git a/git-templates/hooks/post-commit b/git-templates/hooks/post-commit index 1348b8e..76641f2 100644 --- a/git-templates/hooks/post-commit +++ b/git-templates/hooks/post-commit @@ -2,9 +2,14 @@ # post-commit – Automatischer History-Log # # Läuft nach jedem erfolgreichen Commit. -# Schreibt einen faktischen Eintrag in history/prompts/ mit: -# - Commit-Hash, Branch, Datum, Message -# - Liste der geänderten Dateien +# Zwei Modi: +# +# A) Session-Datei gefunden (Agent hat /history ausgeführt): +# → Git-Block wird an die bestehende Konversations-Datei ANGEHÄNGT. +# Session-Dateien werden vom Agent mit dem Suffix "_session.md" erstellt. +# +# B) Keine Session-Datei für heute: +# → Neuer Git-Stub (nur Metadaten, kein KI-Inhalt). # # Die Datei wird NICHT automatisch committed (kein Rekursionsrisiko). # Sie wird beim nächsten regulären Commit mit erfasst (history/ ist tracked). @@ -22,16 +27,15 @@ if [ ! -d "history/prompts" ]; then exit 0 fi -# Dateiname: Datum + Branch (bereinigt) + Hash -BRANCH_CLEAN=$(printf '%s' "$BRANCH" | tr '/' '-' | tr ' ' '-') -OUTFILE="history/prompts/${DATE}_${BRANCH_CLEAN}_${HASH}.md" - # Geänderte Dateien dieses Commits CHANGED_FILES=$(git diff-tree --no-commit-id -r --name-status "$FULL_HASH" 2>/dev/null \ | awk '{printf "| %-1s | %s |\n", $1, $2}') -cat > "$OUTFILE" << EOF -# Auto-Log: $MSG +GIT_BLOCK=$(cat << EOF + +--- + +## Git Commit | Feld | Wert | |---|---| @@ -40,24 +44,44 @@ cat > "$OUTFILE" << EOF | Commit | \`$FULL_HASH\` | | Autor | $AUTHOR | -## Commit Message +### Commit Message \`\`\` $MSG \`\`\` -## Geänderte Dateien +### Geänderte Dateien | Status | Datei | |---|---| $CHANGED_FILES --- -*Automatisch generiert durch post-commit hook – kein KI-Inhalt.* -*Für KI-generierte Zusammenfassung: Copilot Chat → \`/history\`* +*Git-Block automatisch generiert durch post-commit hook.* EOF +) + +# Modus A: Session-Datei vom Agent für heute suchen (Suffix: _session.md) +SESSION_FILE=$(ls "history/prompts/${DATE}_"*"_session.md" 2>/dev/null | tail -1) + +if [ -n "$SESSION_FILE" ]; then + printf '%s\n' "$GIT_BLOCK" >> "$SESSION_FILE" + echo "" + echo " ✓ history: Git-Block angehängt an $(basename "$SESSION_FILE")" + echo " → Konversation + Commit in einer Datei" +else + # Modus B: Kein Agent-Log – reinen Git-Stub anlegen + BRANCH_CLEAN=$(printf '%s' "$BRANCH" | tr '/' '-' | tr ' ' '-') + OUTFILE="history/prompts/${DATE}_${BRANCH_CLEAN}_${HASH}.md" + cat > "$OUTFILE" << STUB +# Auto-Log: $MSG +$GIT_BLOCK + +*Kein Agent-Log vorhanden. Für vollständige Konversation: Copilot Chat → \`/history\` vor dem Commit ausführen.* +STUB + echo "" + echo " ✓ history: $(basename "$OUTFILE") geschrieben (nur Git-Metadaten)" + echo " → Tipp: '/history' vor dem Commit für vollständige Konversation" +fi -# Staging-Info ausgeben (nicht automatisch stagen – vermeidet Komplikationen) -echo "" -echo " ✓ history: $(basename "$OUTFILE") geschrieben" echo " → wird beim nächsten Commit automatisch erfasst" diff --git a/prompts/history.prompt.md b/prompts/history.prompt.md index d76c1e7..222011f 100644 --- a/prompts/history.prompt.md +++ b/prompts/history.prompt.md @@ -9,10 +9,14 @@ Du hilfst dabei die Projekt-History zu pflegen. Es gibt zwei Aufgaben: ## Aufgabe A: Konversation loggen -Erstelle eine neue Datei `history/prompts/{{DATUM}}_{{TITEL}}.md` mit folgendem Inhalt: -- Alle Fragen, Antworten, Entscheidungen aus dieser Sitzung -- Datum und Aufgabentitel im Dateinamen (Format: `YYYY-MM-DD_kurz-beschreibung.md`) -- Vollständig – nichts weglassen +Erstelle eine neue Datei `history/prompts/{{DATUM}}_{{TITEL}}_session.md` mit der vollständigen Konversation. Exsistiert die Datei nicht wird sie angelegt. Wenn Sie bereits wird nur der neue inhalt hinzugefügt. + +**Wichtig zum Dateinamen:** Das Suffix `_session.md` ist zwingend — der post-commit Hook erkennt daran, dass ein Agent-Log existiert und hängt den Git-Block automatisch an statt eine neue Datei zu erstellen. + +Format: `YYYY-MM-DD_kurz-beschreibung_session.md` +Beispiel: `2026-06-02_tile-server-martin-setup_session.md` + +Inhalt: **vollständig** – alle Prompts, Antworten, ausgeführte Befehle, Fehlermeldungen und Entscheidungen dieser Sitzung. Struktur: ```markdown @@ -22,11 +26,12 @@ Struktur: [Was sollte erreicht werden] ## Verlauf + ### Prompt 1 -[Frage/Anweisung] +[Frage/Anweisung des Users] ### Antwort 1 -[Was der Agent geantwortet / getan hat] +[Was der Agent geantwortet / getan hat, inkl. ausgeführter Befehle und deren Output] ### Prompt 2 …