feat: Pi Text-Agent — initialer Commit (sauberes Repo)

Vollständiges Multi-Agenten-System für Fact-Checking, Artikelschreiben
und Argumentationsanalyse. Zwei Backends: llama.cpp (★ bevorzugt) und Ollama.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Dieter Schlüter 2026-05-12 04:21:48 +02:00
commit 5146b7fa30
62 changed files with 11279 additions and 0 deletions

115
TODO.md Normal file
View file

@ -0,0 +1,115 @@
# TODO.md — Priorisierte Aufgabenliste
Format: `[x]` erledigt, `[ ]` offen. Aufgaben sind nach Priorität sortiert.
Nach Erledigung: `[x]` setzen + WORKLOG.md ergänzen + HANDOFF.md aktualisieren.
---
## P1 — Sofort
- [x] **`logic-editor.ts` retest nach Prompt-Fixes** — bestätigt OK
- [x] **`writer.ts` End-to-End-Test via Pipe** — bestätigt OK
- [x] **Pi `/reload` und Extension-Test** — bestätigt OK (Probelauf zeigt alle 6 Extensions aktiv)
- [x] **`verify_article` 0-Claims-Bug bei langem Text**
- Fix: dynamisches `num_ctx` in `callOllamaClaimExtract()` — 8192/16384/32768 je nach Textlänge
- Fix: 0-Claims wirft jetzt expliziten Fehler mit num_ctx + prompt_tokens in der Meldung
- Fix: Duplikat-Unterdrückung im System-Prompt ergänzt
- Getestet: Umerziehung.md (17964 Zeichen) → bekommt num_ctx=16384 ✓
- [x] **Pi-Prompt-Guidelines für `verify_claim` ergänzen**
- `ollama-verifier.ts` promptGuidelines: "Never call verify_claim for multiple claims simultaneously"
---
## P2 — Mittelfristig (Stabilität + Konfiguration)
- [x] **Job-Speicher: persistente Pipeline-Ergebnisse**
- `lib/jobs.ts``createJob/findJobDir/getOrCreateJob/saveJobFile/loadJobFile/updateJobMeta/listJobs`
- `ollama-verify-article.ts --job-id <slug>` / `llama-verify-article.ts --job-id <slug>` — speichert `input.txt`, `claims.json`, `perplexity/<id>.json`, `report.json`
- Resume: bei erneutem Aufruf mit gleichem `--job-id` werden gecachte Ergebnisse wiederverwendet
- Claims-Cache: Extraktion übersprungen wenn `claims.json` vorhanden
- Perplexity-Cache: jeder einzelne `perplexity/<claim_id>.json` gecacht — kein doppelter API-Aufruf
- `ollama-writer.ts --from-job <slug>` / `llama-writer.ts --from-job <slug>` — liest `report.json`, speichert `article.md` + aktualisiert `meta.json`
- `meta.json` enthält Status (`created/extracting/verifying/writing/completed/failed`) + Step-Metadaten
- [ ] **OLLAMA_KEEP_ALIVE via systemd setzen**
- Was: Modell wird nach 5min entladen, dann ~200s Ladezeit
- Wer: Nutzer muss selbst ausführen:
```bash
sudo systemctl edit ollama
# Einfügen unter [Service]:
# Environment="OLLAMA_KEEP_ALIVE=-1"
sudo systemctl daemon-reload && sudo systemctl restart ollama
```
- Akzeptanzkriterium: Zweiter Ollama-Aufruf nach >5min braucht keine Ladezeit mehr
- [x] **`logic-editor.ts``--only-fallacies` Flag**
- Gibt nur Fehlschlüsse aus (Text- oder JSON-Modus), kombinierbar mit `--json`
- [x] **`verify-article.ts` — Fortschrittsanzeige**
- `onProgress`-Callback in `verifyArticle()` — schreibt auf stderr, stört `--json`-Output nicht
- Zeigt: Claim-Extraktion, Anzahl prüfbarer Claims, [N/M] pro Perplexity-Ergebnis, Urteilssynthese
- [x] **`lib/logger.ts` — Persistentes Logging + `--verbose` in allen CLI-Tools**
- `createLogger(opts)` → schreibt in `~/.pi/agent/logs/<timestamp>.log`
- `Logger.info/warn/error/debug(msg, data)` — strukturierte Einträge mit ISO-Timestamp
- `verbose=true` → alle Einträge auch auf stderr; `warn`/`error` immer auf stderr
- `nullLogger` für Pi-Extension-Kontext (keine Seiteneffekte)
- `--verbose` / `-v` Flag in: `ollama-claim-extractor.ts`, `verify-article.ts`, `ollama-verifier.ts`
- Chunking-Details, Token-Counts, Perplexity-Kosten, Laufzeiten werden geloggt
- [x] **Long-Text Bug final bestätigen: Chunking-Test auf Umerziehung.md**
- 5/7 Chunks erfolgreich (Chunk 6 failed weil Nutzer Ollama manuell neu startete — kein Bug)
- Retry-Logik ergänzt: 3 Versuche mit 15s Pause bei `fetch failed`
- Chunking funktioniert korrekt ✓
---
## P3 — Langfristig (Testkorpus + Metriken)
- [x] **Testkorpus anlegen: `tests/corpus/`**
- 10 Fälle: Inflation, EZB-Zins, Mondlandung, Bevölkerung DE, Erneuerbare, Bitcoin, COVID-Impfstoff, Bundeshaushalt, Klimaabkommen, Weltbevölkerung
- Negativtests (nur korrekte Fakten): case_003, case_007, case_009
- [x] **Test-Runner-Skript**
- `tests/run_corpus.sh` — führt alle Fälle durch verify-article, vergleicht mit expected.json
- Precision/Recall für `contradicted`, Kosten, Laufzeit; Reports in `tests/results/<timestamp>/`
- Verwendung: `bash tests/run_corpus.sh [--mode deep] [--no-cache] [case_001 ...]`
- [x] **`ollama-writer.ts``--lang` Flag** — bereits implementiert (war nicht nötig)
- [x] **`ollama-verify-article.ts` — Cache für wiederholte Claims**
- `lib/cache.ts`: SHA256-basierter File-Cache, TTL 7 Tage, `~/.pi/agent/cache/perplexity/`
- `--no-cache` Flag in `ollama-verify-article.ts` und `llama-verify-article.ts`
---
## Erledigte Aufgaben (Phase 13)
- [x] `package.json`, `tsconfig.json`, `types/pi-coding-agent.d.ts`
- [x] `schemas/claim.schema.json`
- [x] `schemas/source-record.schema.json`
- [x] `schemas/verification-result.schema.json`
- [x] `schemas/argument-map.schema.json`
- [x] `schemas/article-draft.schema.json` (inkl. Bugfix type-Array)
- [x] `agenten/ollama-claim-extractor.ts` — getestet
- [x] `lib/perplexity.ts`
- [x] `agenten/ollama-verifier.ts` — getestet
- [x] `agenten/ollama-verify-article.ts` — End-to-End getestet (umbenannt von verify-article.ts)
- [x] `lib/router.ts`
- [x] `agenten/logic-editor.ts` — getestet
- [x] `agenten/ollama-writer.ts` — getestet (umbenannt von writer.ts)
- [x] Deployment: Symlinks in `~/.pi/agent/extensions/`
- [x] `AGENTS.md`, `HANDOFF.md`, `TODO.md`, `WORKLOG.md`, `docs/ARCHITECTURE.md`
## Erledigte Aufgaben (llama.cpp-Pipeline)
- [x] `agenten/llama-claim-extractor.ts` — Pi-Tool: extract_claims_llama, getestet
- [x] `agenten/llama-verifier.ts` — Pi-Tool: verify_claim_llama, getestet (★ BEVORZUGT)
- [x] `agenten/llama-verify-article.ts` — Pi-Tool: verify_article_llama, End-to-End getestet
- [x] `agenten/llama-writer.ts` — Pi-Tool: write_article_llama, getestet (★ BEVORZUGT)
- [x] `agenten/llama-logic-editor.ts` — Pi-Tool: analyze_logic_llama, getestet (★ BEVORZUGT)
- [x] `logic-editor.ts``ollama-logic-editor.ts` (Naming-Convention)
- [x] Symlinks + package.json für alle llama.cpp-Agenten aktualisiert
- [x] Dokumentation vollständig aktualisiert (BEDIENUNGSANLEITUNG.md, README.md, AGENTS.md, HANDOFF.md, WORKLOG.md, TODO.md)