feat: optional LLM enhancement + noise filter for topic detection
- Add llm-enhance.ts: optional OpenAI-compatible LLM for deeper analysis
- Supports any provider: Ollama, OpenAI, OpenRouter, vLLM, etc.
- Batched calls (configurable batchSize, default 3 messages)
- Cooldown + timeout + graceful degradation (falls back to regex)
- JSON structured output: threads, decisions, closures, mood
- Add noise filter (isNoiseTopic):
- Rejects short/blacklisted/pronoun-starting fragments
- Fixes 'nichts gepostet habe' type garbage threads
- Improve patterns:
- Topic regex: min 3 chars, max 40 (was 2-30)
- Add 'let's talk/discuss/look at' and 'lass uns über/mal' triggers
- German patterns handle optional articles (dem/die/das)
- Wire LLM into hooks:
- Regex runs first (zero cost, always)
- LLM batches and enhances on top (async, fire-and-forget)
- ThreadTracker.applyLlmAnalysis() merges LLM findings
- DecisionTracker.addDecision() for direct LLM-detected decisions
- Config: new 'llm' section (disabled by default)
- 288 tests passing (18 new)
- Version 0.2.0
BREAKING: None — LLM is opt-in, regex behavior unchanged