Commit graph

5488 commits

Author SHA1 Message Date
f7ed0918fd tmp: Cleanup SSH-Key-File (nicht mehr benoetigt) 2026-05-13 10:40:32 +00:00
675fe62a42 tmp: Setup-Script fuer Cursor-SSH-Zugang 2026-05-13 10:37:52 +00:00
ac11f1649d tmp: SSH-Key fuer KI-Server Setup 2026-05-13 10:32:54 +00:00
25c58b0147 Arakava: MU-Plugin blockiert Kommentare mit shorturl.fm (Spam, Filter erweiterbar). 2026-05-03 16:30:15 +00:00
Homelab Cursor
97c2dae082 chatlog_mcp: sharper tool descriptions to stop Gemini halting after list_chats
- list_chats output now ends with an explicit instruction to call
  chatlog_recent / chatlog_since next (Gemini 2.5 Flash tends to answer
  after a single tool call otherwise)
- list_chats description: clarify it only returns metadata, never content
- recent description: marked as PREFERRED for reading actual messages
2026-05-01 12:58:12 +02:00
Homelab Cursor
2fa011fa2a chatlogger: add tailscale-only HTTP API + Hermes MCP wrapper
- chatlogger/api.py — read-only HTTP API (stdlib http.server, bearer-token
  auth, bound to 100.123.47.7:8770) with /list_chats, /recent, /search,
  /since, /stats, /healthz
- chatlogger/chatlogger-api.service — hardened systemd unit
- chatlogger/api.env.example — env template (token + bind + db)
- mac-clients/chatlog_mcp.py — stdio MCP wrapper for Hermes Agent on the
  Mac (4 tools: chatlog_list_chats / recent / search / since), uses only
  Python stdlib, talks to the REST API via Tailscale.

Hermes registers as 4th MCP server (chatlog) — verified live with
76 tool(s) from 4 server(s) in gateway.log.
2026-05-01 12:55:38 +02:00
Homelab Cursor
2c8eeb9e8d fix(chatlog): remove 'pink elephant' negative example from prompt
The earlier prompt explicitly named 'mychatarchive' / 'search_brain' as
forbidden, which planted the term in the LLM's memory. Now only the four
real tool names are mentioned positively, plus an instruction to ignore
old session-history that may contain hallucinated tool names.
2026-05-01 12:27:15 +02:00
Homelab Cursor
83fe700bac fix(chatlog): aggressive anti-hallucination prompts and tool descriptions
Live-test showed Grok 4.1 Fast inventing 'mcp_mychatarchive_search_brain'
when asked about Telegram chat history. Fix:
- Tool descriptions explicitly say 'TELEGRAM' and 'NICHT ChatGPT/Memory/RAG'
- SYSTEM_PROMPT_EXTRA lists all 4 exact tool names and forbids inventing
  alternatives like 'mychatarchive' or 'search_brain'
- Forbids using rag_search/openmemory_search/web_search for Telegram-
  related queries
- Demands honest 'no data' over hallucination
2026-05-01 12:24:12 +02:00
Homelab Cursor
d0cda4691d fix(llm): add chatlogger triggers to _LOCAL_OVERRIDES
Prevents 'aktueller Stand zur G2010B-Vermietung?' from being routed to
perplexity/sonar (which can't tool-call) just because 'aktuelle' is in
_WEB_TRIGGERS. New triggers: concierge, listing, vermietung, kaution,
G2010B/D1603 apartment codes, etc.
2026-05-01 12:20:40 +02:00
Homelab Cursor
bd771a5213 fix(chatlog): explicit routing hints for ARAKAWA apartment codes
Grok 4.1 Fast was eskaliereing 'Stand zur G2010B-Vermietung?' to
perplexity/sonar instead of using chatlog_*. Strengthened
SYSTEM_PROMPT_EXTRA with explicit triggers (G2010B, D1603, ARAKAWA,
Concierge, Bnb, Kaution, Mieter) and a 'NO web search for this' rule.
2026-05-01 12:18:35 +02:00
Homelab Cursor
d82b6f97ef feat(chatlogger): multi-tenant + Jarvis tool integration
Phase 2 of the chatlogger feature.

Multi-tenant:
- chatlogger-bot.service -> chatlogger-bot@.service (systemd template)
- /opt/chatlogger/<instance>.env per bot, all share /opt/chatlogger/chats.db
- existing bot migrated: chatlogger-bot@arakawa.service
- adding a second group bot is now: cp arakawa.env <name>.env, edit token+chats,
  systemctl enable --now chatlogger-bot@<name>

Jarvis (hausmeister-bot) tool:
- homelab-ai-bot/tools/chatlog.py (autodiscovered by tool_loader.py)
- 4 tools: chatlog_list_chats, chatlog_recent, chatlog_search, chatlog_since
- Reads SQLite directly via sys.path += /opt/homelab-brain/chatlogger
- SYSTEM_PROMPT_EXTRA tells the LLM when to use these (Concierge, Airbnb,
  Listing, 'aktueller Stand', 'wer hat zugesagt', 'muss ich reagieren').

Tested live: hausmeister-bot loads 48 tools (44 + 4 new), all chatlog
handlers callable, returns real messages from the @arakawa_concierge_bot
recording of -1003924901022.
2026-05-01 12:13:00 +02:00
Homelab Cursor
e1be45399e feat(chatlogger): Arakawa Concierge — passive Telegram group chat logger
Standalone bot @arakawa_concierge_bot that silently records configured
group chats into SQLite (FTS5). Phase 1 — capture only, no LLM, no
auto-replies. Reads token + chat allowlist from /opt/chatlogger/env
(NOT in git). Runs as systemd unit chatlogger-bot.service on CT 116
sharing /opt/bot-venv with the hausmeister-bot.

- chatlogger_bot.py: telegram polling, message/edit handlers, admin cmds
  (/whichchat, /log_status, /recent, /search) — silent in groups
- store.py: SQLite schema + FTS5 search + edit audit
- query.py: CLI (recent, search, stats, chats, since, export JSONL)
- chatlogger-bot.service: systemd unit, hardened (ProtectSystem=strict)
- env.example, README.md

Tested live: message 'hallo' from -1003924901022 stored, retrieved
via CLI within seconds. Group privacy must be off in BotFather.
2026-05-01 12:03:22 +02:00
root
74c2dbfa88 docs(hardware): M5 Max als lokale KI-Maschine, Lehre aus Beratungsfehler 2026-04-26 19:53:23 +02:00
root
93c601dfa3 feat(savetv): erweitere Wunschfilm-Liste
Made-with: Cursor
2026-04-26 19:53:23 +02:00
root
196f36372e feat(savetv): Der Clou als geschuetzten Wunschfilm aufnehmen 2026-04-26 19:53:23 +02:00
root
c7250a7ff7 fix(savetv): entferne zu breite Anna-Kinoausnahme 2026-04-26 19:53:23 +02:00
root
9731068a01 fix(savetv): verhindere parallele NAS-Syncs 2026-04-26 19:53:23 +02:00
root
ba9c55a916 fix(savetv): auto-download nur fuer Kino-Profil erlauben 2026-04-26 19:53:23 +02:00
Homelab Cursor
d0b2c182de fix(ops): dokumentiere Smart-Home-Alert-Fixes und Matomo-Check
- Hausmeister-Bot Matomo-HTTP-Check korrigiert: Matomo laeuft in CT109
  (10.10.10.109), nicht in CT113.
- Smart-Home-Doku ergaenzt: CT143/raspi-broker Error-Rate war durch
  /tmp-tmpfs-Backups, vollen Swap und Telegraf-Noise verursacht.
- Cleanup-Script fuer alte raspi-broker-TARs versioniert, damit /tmp
  im CT143 nicht erneut RAM/Swap fuellt.
2026-04-25 14:50:16 +02:00
Homelab Cursor
50b493c224 feat(hausmeister): pve-pp-1 und pve-pp-2 in Alert-Suppression
- homelab.conf: ALERT_SUPPRESS_HOSTS um pve-pp-1 und pve-pp-2 erweitert
  (Phnom-Penh-Kondo-Cluster: zu instabil, nicht betriebskritisch)
- monitor.py: HTTP_HEALTH_CHECKS bekommen optionalen 'host'-Key.
  Check 'Flugscanner-Agent (pve-pp-1)' wird jetzt uebersprungen, solange
  pve-pp-1 in der Suppress-Liste steht.
2026-04-24 16:01:59 +02:00
Homelab Cursor
0a153457e6 feat(hausmeister): Host-Suppression via ALERT_SUPPRESS_HOSTS
Neue zentrale Moeglichkeit, ganze Proxmox-Hosts temporaer aus allen
Hausmeister-Alerts herauszunehmen, gesteuert ueber homelab.conf.

- homelab.conf: ALERT_SUPPRESS_HOSTS Variable (Komma-Liste)
  initial gesetzt auf pve-ka-1,pve-ka-2,pve-ka-3 (Kambodscha
  ohne Internet seit 2026-04-04)
- core/config.py: Helper get_suppressed_hosts + get_suppressed_container_names
  (letztere mappt Host -> Container-Namen fuer Loki/Silence-Filter)
- tools/predict.py: Filter in _gather_prometheus, _gather_loki, _gather_proxmox
  + sichtbarer Hinweis 'Unterdrueckt: ...' im taeglichen Forecast-Report
- monitor.py: Filter in check_all + format_report (Container, panic,
  error_rate, silence, service_restarts)

Beim naechsten Mal Kambodscha-Internet-Comeback: einfach die drei Eintraege
in ALERT_SUPPRESS_HOSTS entfernen und hausmeister-bot neu starten.
2026-04-24 15:57:14 +02:00
root
f401e89958 chore(hardware): Hardware-Zukunft konsolidiert — nur EINE KI-Maschine
Klarstellungen (Stand 2026-04-20):

- ki-tower wird Jellyfin-Ersatz, NICHT zweite KI-Maschine.
  Alte "Chef/Orchestrator/vLLM/ComfyUI"-Rolle gestrichen.
- MSI B550 Gaming Plus Build = Test-Rig fuer die alten 3080er/AMD-Karten
  vor Verkauf. Kein produktiver Einsatz, keine Dual-GPU-Eignung.
- 4x RTX 3080 Rig: Verkauf bestaetigt.
- 8x RX 6600 XT AMD-Rig: Tendenz Verkauf.
- Dedizierte zweite KI-Maschine: NICHT geplant. Falls jemals ein
  Dual-GPU-/Upgrade-Setup kommt, waere das ein separater neuer Build,
  weder ki-tower noch B550 noch Umbau des KI-Servers.

Aktualisiert: homelab.conf, MASTER_INDEX.md, ki-video/PLAN.md
Made-with: Cursor
2026-04-20 23:24:57 +02:00
root
52d7e1d930 chore(hardware): 4x RTX 3080 Plan gestrichen — Karten werden verkauft
- homelab.conf: gpu-worker Block entfernt, AMD-Rig Verweise auf 3080-Abhaengigkeit
  bereinigt
- MASTER_INDEX.md: gpu-worker Zeile entfernt
- ki-video/PLAN.md: Disclaimer oben, dass die konkreten 3080-GPU-Zuordnungen
  (#0 XTTS, #1/#2 SDXL, #3 Whisper) hinfaellig sind; Pipeline-Konzept bleibt gueltig

Made-with: Cursor
2026-04-20 22:45:37 +02:00
root
b61ac66367 docs(smart-home): dokumentiere Heizung/Brenner komplett, alle Zugänge in homelab.conf
- smart-home/HEIZUNG.md: komplette Doku zur Ölbrenner-Erkennung (brennerstarts.py),
  Schwellwerte, Rekonstruktion, Dashboard-Panels, Troubleshooting
- smart-home/STATE.md: klare Tabelle mit allen Dienst-URLs (public+intern) und
  Logins — Grafana/ioBroker/InfluxDB laufen ALLE in CT 143 auf pve-mu-3
- homelab.conf: CT_143_MU3 Beschreibung korrigiert (war "Raspi-Broker"),
  neue Variablen GRAFANA_URL_*/IOBROKER_URL_*/INFLUX_URL_INTERN + User/Pass
  (=PW_DEFAULT) damit beim nächsten Mal keine Fragen aufkommen
- smart-home/scripts/: alle relevanten Skripte ins Repo:
  grafana_shot.js (Puppeteer-Login mit admin/astral66)
  add_month_panel.py (idempotente Monatskacheln im Heizung-Dashboard)
  brenner_rekonstruktion.py + cleanup_reconstruct.py + check_april.py
  patch_brenner.sh (Anpassung der Schwellwerte nach Regelkurven-Änderung)
- MASTER_INDEX.md: Verweis auf HEIZUNG.md

Made-with: Cursor
2026-04-20 22:31:32 +02:00
cursor-agent
9889b2df76 fix(savetv): /api/filelist returns dict {files,count} as documented and expected by Jellyfin-Server sync client 2026-04-20 19:21:54 +02:00
Homelab Cursor
73171d0cf7 AGENTS.md: Regel 4 fuer OpenMemory-Duplikate (results:[] != Erfolg)
Refs #82. mem0 dedupliziert semantisch und verwirft zu aehnliche
Eintraege still. Agents interpretierten das faelschlich als Erfolg
und meldeten Erfolgreich dokumentiert, obwohl nichts gespeichert wurde.
Neue Regel: bei results:[] einmal spezifischer retryen, sonst ehrlich
nicht gespeichert melden.
2026-04-20 15:05:32 +02:00
cursor-agent
dd95714351 sessions: opencode transcript 2026-04-20 (Qwen 3.6 Hardware-Guide) 2026-04-20 13:10:48 +02:00
cursor-agent
daf6ea1d75 docs: AGENTS.md mit OpenMemory-Pflicht für opencode 2026-04-20 11:43:22 +02:00
Auto-Sync
12cf3e459b Auto-Sync: 2026-04-17 22:00 2026-04-17 22:00:10 +02:00
root
10f3c8323a rag_mode: RAG-first als Default + Persistenz, Router haertet persoenliche Fragen
rag_mode.py:
 - Default fuer neue/unbekannte Chats: RAG-first (True statt False)
 - State wird auf Disk geschrieben (/opt/homelab-ai-bot/data/rag_mode.json),
   ueberlebt Bot-Restarts; threadsicher.

llm.py:
 - _LOCAL_OVERRIDES erweitert um persoenliche Possessiv-/Besitz-Marker:
   wohnung(en), apartment, condo/kondo, immobilie, kambodscha/cambodia,
   phnom penh, arakawa, gekostet, kaufpreis, bezahlt, ausgegeben, ueberweisung,
   meine/mein/meines/..., was haben, wie viel habe ich, ich fuer/für.
   Damit werden klar persoenliche Fragen nie mehr faelschlich an Sonar
   geroutet, selbst wenn Web-Trigger wie "wie viel" im Text vorkommen.

Hintergrund: Eine Frage der Form "wie viel habe ich fuer die Wohnungen in
Kambodscha bezahlt" wurde an Perplexity/Sonar geroutet (Websuche) statt an
RAG, weil der Mode-Schalter durch einen Bot-Restart im RAM verloren ging und
der Router bei "wie viel" sofort MODEL_ONLINE waehlte.
2026-04-17 21:57:42 +02:00
root
c63b3621c0 rag: LLM-Query-Rewrite (Stufe B, gpt-4o-mini) als Default-Modus
Query wird vor ES-Suche durch gpt-4o-mini in 4 DE/EN-Varianten umformuliert
(Synonyme, Fachbegriffe, Zahl-/Kosten-/Summenbegriffe). Dann Multi-Query-Merge
durch _merge_hits_from_queries. Fallback auf Single-Query bei API-Fehler oder
fehlendem Key. 1h-Cache, 8s-Timeout.

Loest ua. Kosten-/Preis-Fragen, die zuvor am Standardpfad gescheitert sind
(Beispiel: "was haben die wohnungen in kambodscha gekostet" findet jetzt
G2010B und D1603 in einem Rutsch).
2026-04-17 21:46:15 +02:00
Auto-Sync
7bbefdcb78 Auto-Sync: 2026-04-17 21:30 2026-04-17 21:30:10 +02:00
Homelab Cursor
61faa9fcee RAG Multi-Query DE/EN + OpenAI-Key erneuert
- tools/rag.py: _is_count_list_query + _expand_multilingual fuer Zaehlfragen
  (z.B. >meine 2 Wohnungen in Kambodscha< findet jetzt beide Units)
- homelab.conf: OPENAI_API_KEY erneuert (alter widerrufen)
- Cleanup: Backup-Files entfernt
2026-04-17 21:25:42 +02:00
Auto-Sync
7a37b749f3 Auto-Sync: 2026-04-17 21:15 2026-04-17 21:15:08 +02:00
Auto-Sync
e402899aef Auto-Sync: 2026-04-17 21:00 2026-04-17 21:00:09 +02:00
Auto-Sync
a0f9a84e61 Auto-Sync: 2026-04-17 20:45 2026-04-17 20:45:09 +02:00
Auto-Sync
01754bb745 Auto-Sync: 2026-04-17 20:30 2026-04-17 20:30:11 +02:00
Auto-Sync
4117256bb6 Auto-Sync: 2026-04-17 20:15 2026-04-17 20:15:09 +02:00
Auto-Sync
9d94627ea2 Auto-Sync: 2026-04-17 20:00 2026-04-17 20:00:10 +02:00
Auto-Sync
940069c020 Auto-Sync: 2026-04-17 19:45 2026-04-17 19:45:09 +02:00
Auto-Sync
c7f2a4fb52 Auto-Sync: 2026-04-17 19:30 2026-04-17 19:30:10 +02:00
Auto-Sync
54c8b5b437 Auto-Sync: 2026-04-17 19:15 2026-04-17 19:15:09 +02:00
Auto-Sync
8a0ffa00a1 Auto-Sync: 2026-04-17 19:00 2026-04-17 19:00:09 +02:00
Auto-Sync
9a016f7eaa Auto-Sync: 2026-04-17 18:45 2026-04-17 18:45:10 +02:00
Auto-Sync
8f69208b0a Auto-Sync: 2026-04-17 18:30 2026-04-17 18:30:10 +02:00
Auto-Sync
b9bc65dcbc Auto-Sync: 2026-04-17 18:15 2026-04-17 18:15:08 +02:00
Auto-Sync
f17c76595a Auto-Sync: 2026-04-17 18:00 2026-04-17 18:00:10 +02:00
Auto-Sync
db94588f65 Auto-Sync: 2026-04-17 17:45 2026-04-17 17:45:09 +02:00
Auto-Sync
4c043abcd7 Auto-Sync: 2026-04-17 17:30 2026-04-17 17:30:09 +02:00
Auto-Sync
deba77caf2 Auto-Sync: 2026-04-17 17:15 2026-04-17 17:15:09 +02:00