- .vault-tools/plan-kopie/LIESMICH.md - .vault-tools/plan-kopie/rot_nachweis.py - .vault-tools/plan-kopie/welle_vergleich.py - .vault-tools/plan-kopie/welle_vergleich_treiber.py - .vault-tools/trading-plattform-pruefung/LIESMICH.md - .vault-tools/trading-plattform-pruefung/angriffe.py - .vault-tools/trading-plattform-pruefung/browserlauf.py - .vault-tools/trading-plattform-pruefung/browserlauf_zugang.py - .vault-tools/trading-plattform-pruefung/c_eigenlauf.py - .vault-tools/trading-plattform-pruefung/d_eigenlauf.py - .vault-tools/trading-plattform-pruefung/handelstag_auswertung.py - .vault-tools/trading-plattform-pruefung/ntfy_probe_server.py - … und 7 weitere Erzeugt vom PostToolUse-Hook .vault-tools/auto-push/auto_push.py. Co-Authored-By: Claude Opus 5 <[email protected]>
53 lines
2.1 KiB
Python
53 lines
2.1 KiB
Python
"""Zeigt den Stand des laufenden Paper-Runners aus seinem Protokoll: Zeilen je Art, letzter Takt, Phase, Killswitch.
|
|
|
|
Liest nur. Gibt keine Kontowerte aus, nur Zaehler, Zeiten, Phase, Zustand und Stueckzahl der Position.
|
|
Aufruf: python runner_stand.py [<protokoll.jsonl>] (ohne Angabe das neueste *-paper.jsonl im echten Projektordner)
|
|
"""
|
|
|
|
import json
|
|
import sys
|
|
from collections import Counter
|
|
from pathlib import Path
|
|
|
|
ORDNER = Path("/mnt/d/Claude/Code Projekte/active - Trading Plattform/artifacts/paper")
|
|
ZEIGEN = ("zeit", "phase", "killswitch", "zustand", "position", "frisch", "letzte_kerze", "aktion", "stufe", "grund", "exit_code")
|
|
|
|
|
|
def main() -> int:
|
|
if len(sys.argv) > 1:
|
|
pfad = Path(sys.argv[1])
|
|
else:
|
|
kandidaten = sorted(ORDNER.glob("*-paper.jsonl"), key=lambda p: p.stat().st_mtime)
|
|
if not kandidaten:
|
|
print("kein Protokoll gefunden")
|
|
return 3
|
|
pfad = kandidaten[-1]
|
|
zeilen = []
|
|
with open(pfad, encoding="utf-8") as datei:
|
|
for zeile in datei:
|
|
if zeile.strip():
|
|
try:
|
|
zeilen.append(json.loads(zeile))
|
|
except ValueError:
|
|
pass
|
|
print(f"protokoll: {pfad.name}, {len(zeilen)} Zeilen")
|
|
arten = Counter(str(z.get("art")) for z in zeilen)
|
|
print("zeilen je art:", dict(arten))
|
|
if zeilen:
|
|
print("schluessel der ersten zeile:", sorted(zeilen[0]))
|
|
takte = [z for z in zeilen if z.get("art") == "takt"]
|
|
if takte:
|
|
print("schluessel einer taktzeile:", sorted(takte[-1]))
|
|
print("phasen:", dict(Counter(str(z.get("phase")) for z in takte)))
|
|
print("killswitch:", dict(Counter(str(z.get("killswitch")) for z in takte)))
|
|
letzter = takte[-1]
|
|
print("letzter takt:", {k: letzter[k] for k in ZEIGEN if k in letzter})
|
|
for z in zeilen:
|
|
if z.get("art") in ("order", "ende", "stoerung", "abbruch", "grenze"):
|
|
print(z.get("art"), {k: z[k] for k in ZEIGEN + ("seite", "menge", "status") if k in z})
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
raise SystemExit(main())
|