# CyberBrain26 — předávací kontext pro nové vlákno / jinou aplikaci

**Datum stavu:** 5. září 2026

Tento dokument je samostatný technický a provozní kontext pro další AI asistenta nebo nové pracovní vlákno. Slouží k bezpečnému navázání vývoje projektu CyberBrain26 bez opakování předchozí diagnostiky a bez nechtěného rozbití funkčních částí.

---

## 1. Účel projektu

CyberBrain26 je lokálně provozovaný AI orchestrátor / osobní asistent běžící v Linux Mint XFCE virtuálním stroji ve VirtualBoxu. Primární ovládací rozhraní je webová aplikace. Projekt kombinuje:

- více LLM providerů za LiteLLM proxy;
- SAFE a FULL režim pro práci agenta;
- bezpečnostní klasifikaci shellových operací;
- schvalování potenciálně měnících akcí;
- perzistentní dlouhodobou paměť v ChromaDB;
- samostatně ukládané chatové konverzace v JSON;
- obnovu historie konverzací po refreshi UI a restartu aplikace;
- možnost bezpečného přístupu z telefonu přes privátní síť/tunel.

Cíl uživatele je rychlý, praktický, spolehlivý lokální asistent pro programování, diagnostiku, automatizaci, práci se soubory a postupné vylepšování vlastního systému. Má průběžně uvádět, co právě dělá, jasně oddělit plán, čekání na schválení, provedení a skutečný výsledek.

---

## 2. Prostředí a umístění

- Hostitel: VirtualBox.
- Hostovaný systém: Linux Mint XFCE.
- Uživatelský účet: `oem`.
- Kořen projektu: `/home/oem/CyberBrain26`.
- Projektový příkazový pracovní adresář: standardně `/home/oem` pro souborové operace; pokud je uživatel v `~/CyberBrain26`, nemají se přidávat zbytečné `cd` příkazy.
- Projekt používá více virtuálních Python prostředí:
  - `venv-litellm`: LiteLLM proxy a webapp.
  - `venv-oi`: SAFE-OI API a paměťová vrstva.
  - `venv`: starší/obecné prostředí.
  - `venv-webapp`: starší nebo oddělené webapp prostředí.

Aktuální VM byla uživatelem funkčně ověřena a následně plánuje/realizuje plný klon VirtualBoxu jako bod obnovy před dalšími zásahy.

---

## 3. Aktuálně ověřený stav

### 3.1 Služby

Následující služby byly opakovaně spuštěny a health-checky vrátily HTTP 200:

| Komponenta | Spouštěcí prostředí | Adresa / port | Úloha |
|---|---:|---|---|
| LiteLLM proxy | `venv-litellm` | `0.0.0.0:4000` | Jednotný OpenAI-kompatibilní endpoint pro více providerů a modelů |
| SAFE-OI API | `venv-oi` | `127.0.0.1:7682` | Agentní logika, bezpečnostní klasifikace, approval tok, paměťový kontext |
| Webapp | `venv-litellm` | `127.0.0.1:8080` | Webové UI, výběr modelu/režimu, chat, konverzace, approval panel |

Ověřené endpointy:

```text
GET http://127.0.0.1:8080/health
GET http://127.0.0.1:7682/health
GET http://127.0.0.1:4000/v1/models
GET http://127.0.0.1:7682/approvals
```

Stav `/health` SAFE API historicky obsahuje řetězec:

```json
"execution": "disabled-phase1"
```

Tento text je zastaralý diagnostický popisek. Funkčně byl ověřen FULL automatický běh bezpečných read příkazů i approval pro write/rizikové operace. Text endpointu lze později změnit pouze informačně, například na:

```json
"execution": "full-read-auto-run-write-approval"
```

### 3.2 Modely a proxy

LiteLLM `/v1/models` vrací mimo jiné:

```text
gemini-flash
gemini-flash-lite
gemini-3.6-flash
gemini-3.5-flash
gemini-3.1-flash-lite
groq-gpt-oss-120b
mistral-codestral
openrouter-gemma-4-31b-free
openrouter-nemotron-3-ultra-550b-free
openrouter-north-mini-code-free
```

Jako aktuálně používaný model ve web UI byl ověřen `groq-gpt-oss-120b`.

### 3.3 Spouštění/restart

Hlavní stabilní restart:

```bash
cd ~/CyberBrain26
./cb26-restart.sh
```

Skript:

1. ověří projekt a venv;
2. načte `.env`;
3. zastaví běžící služby;
4. spustí LiteLLM na portu 4000;
5. spustí SAFE-OI API na portu 7682;
6. spustí webapp na portu 8080;
7. provede základní health kontroly.

Zastavení:

```bash
cd ~/CyberBrain26
./cb26-stop.sh
```

Po restartu se občas v terminálu objeví opožděné job-control hlášky `Ukončen (SIGTERM)` pro staré `nohup` procesy. Při úspěšných nových health-checkách to není chyba nového běhu — jde o korektně ukončené staré procesy.

Logy po restartu podle výstupu skriptu:

```text
/tmp/cb26-litellm.log
/tmp/cb26-safeoi-api.log
/tmp/cb26-webapp.log
```

V projektu se také objevují:

```text
logs/litellm.log
logs/safe_oi_api.log
logs/webapp.log
```

Při diagnostice je vhodné kontrolovat obě místa a vždy rozlišit starší řádky od nových řádků po aktuálním restartu.

---

## 4. Architektura toku požadavku

### 4.1 Chat a agent

```text
Prohlížeč
  -> webapp.py :8080
  -> POST /api/agent/chat
  -> scripts/safe_oi_api.py :7682
  -> LiteLLM :4000/v1/chat/completions nebo kompatibilní modelový tok
  -> LLM provider
  -> odpověď / eventy / případné approval
  -> webapp UI
```

### 4.2 Paměť

```text
safe_oi_api.py
  -> memory_core.py
  -> chromadb.PersistentClient
  -> /home/oem/CyberBrain26/workspace/chroma_db
```

### 4.3 Konverzace

```text
Web UI
  -> POST /conversations (vytvoření s názvem)
  -> GET /conversations (seznam)
  -> GET /conversations/{id} (historie)
  -> POST /api/agent/chat s conversation_id
  -> webapp.py uloží user + assistant zprávu
  -> conversations_api.py
  -> data/conversations/{id}.json
```

### 4.4 Approval

```text
FULL požadavek
  -> Safe API klasifikuje příkaz/akci
  -> read: automatické provedení, pokud splní bezpečnostní podmínky
  -> write/rizikové: pending approval
  -> webapp zobrazí panel Schválit a provést / Zamítnout
  -> POST /api/agent/approvals/{approval_id}
  -> Safe API pokračuje nebo akci odmítne
```

---

## 5. Bezpečnostní režimy a klasifikace

### SAFE

- CyberBrain připraví návrh/příkaz, ale nemá jej automaticky spouštět.
- I pro čtecí požadavky je očekáván návrh, nikoli automatické provedení.
- V UI se například pro `pwd` objeví bash blok s návrhem.

### FULL

- Čisté a bezpečně klasifikované čtecí shell příkazy se spustí automaticky.
- Rizikové, zapisující, složené nebo nejednoznačné příkazy musí vyžadovat explicitní schválení uživatele.

Ověřené klasifikační výsledky:

| Příkaz | Výsledek |
|---|---|
| `ls -la /home/oem/CyberBrain26` | `read` |
| `pwd` | `read` |
| `df -h` | `read` |
| `git -C /home/oem/CyberBrain26 status` | `read` |
| `find /home/oem/CyberBrain26 -maxdepth 1 -type d` | `read` |
| `ls -la /home/oem/CyberBrain26 | grep scripts` | `write` (shell operátor/řetězení) |
| `echo test > /tmp/cb26-test.txt` | `write` (přesměrování/zápis) |
| `rm -f /tmp/cb26-test.txt` | `write` |
| `sudo true` | `write` |

Důležité uživatelské bezpečnostní pravidlo: původní seznam automaticky readonly příkazů v SAFE-OI má být odstraněn; rozhodování má vycházet z bezpečné klasifikace, nikoli z na pevno zadaného allowlistu. Prakticky je ale aktuální FULL automatika pro ověřené čisté read příkazy funkční.

Příkazy s pipe `|`, přesměrováním `>`, `rm`, `sudo`, instalací balíčků, restartem služeb, zápisy do souborů, Git commitem apod. považovat za write/rizikové a vyžadovat schválení.

---

## 6. Dlouhodobá paměť

### 6.1 Současný funkční stav

ChromaDB nyní funguje i v prostředí používaném SAFE-OI API.

Původní problém:

```text
venv-oi: ModuleNotFoundError: No module named 'chromadb'
```

Důsledek byl fallback režim a warning `WARNING: ChromaDB not available`.

Oprava byla provedena až po záloze databáze:

```bash
./venv-oi/bin/python -m pip install --upgrade "chromadb==1.5.9"
```

Aktuálně ověřeno:

```text
venv-oi: chromadb 1.5.9
memory_core import: OK
retrieve_active_context(limit=5): vrací záznamy
nový Safe API proces po restartu: bez warningu ChromaDB not available
```

### 6.2 Aktivní databáze

Primární aktivní cesta:

```text
/home/oem/CyberBrain26/workspace/chroma_db
```

Hlavní databázový soubor:

```text
workspace/chroma_db/chroma.sqlite3
```

Existují také starší/neověřené cesty, které se nesmí mazat bez explicitního auditu:

```text
workspace/chromadb/chroma.sqlite3
memory/chroma_db_UNUSED_20260729/chroma.sqlite3
```

### 6.3 Ověřený obsah aktivní ChromaDB

V aktivní databázi byly zjištěny kolekce a záznamy:

| Kolekce | Ověřený počet při auditu |
|---|---:|
| `conversations` | 15 |
| `warmup` | 1 |
| `errors` | 0 |
| `rules` | 2 |
| `projects` | 3 |
| `preferences` | 0 |
| `cyberbrain_memory` | 11 |

Počty se mohou během používání měnit. Neber je jako konstantu.

### 6.4 Implementace paměti

Hlavní soubor:

```text
memory_core.py
```

Relevantní rozhraní:

```python
save_memory(...)
remember(...)
retrieve_active_context(query=None, limit=20)
delete_memory(record_id)
```

Výchozí DB cesta v kódu:

```python
os.environ.get('CB26_DB_PATH', 'workspace/chroma_db')
```

Používá `chromadb.PersistentClient(path=...)`.

Vrácený paměťový záznam má strukturu podobnou:

```python
{
  "id": "rule-...",
  "content": "...",
  "metadata": {
    "supersedes": "",
    "expires_at": "",
    "kind": "rule",
    "source": "safe-oi-auto",
    "status": "active",
    "confidence": "auto_candidate",
    "created_at": "2026-09-05T...+00:00"
  }
}
```

Metadata nejsou na top-level. Správné čtení například:

```python
metadata = record.get("metadata", {})
kind = metadata.get("kind")
created_at = metadata.get("created_at")
```

Předchozí diagnostika ukazovala `category=None` a `created_at=None` pouze proto, že zkoumala klíče na nesprávné úrovni objektu.

### 6.5 Testy paměti již provedené

- Dříve byl úspěšně proveden test zápisu, retrieval přes aktivní kontext a smazání dočasného testovacího záznamu v SAFE režimu.
- Po opravě `venv-oi` byl po restartu úspěšný přímý test:

```text
MEMORY_IMPORT_OK
RETRIEVED_RECORDS: 5
```

- Uživatel následně potvrdil, že end-to-end paměť ve web UI funguje.

### 6.6 Záloha před instalací ChromaDB

Vytvořena:

```text
backups/memory-before-chromadb-venv-oi-20260905-202054/chroma_db
backups/memory-before-chromadb-venv-oi-20260905-202054/venv-oi-pip-freeze.txt
```

Velikost kopie DB při vytvoření: přibližně 1,5 MB.

---

## 7. Konverzace a web UI

### 7.1 Požadované chování uživatele

- Konverzace jsou oddělené a uložené v JSON.
- V UI je viditelný výběr konverzací.
- Po refreshi nebo restartu se po výběru uložené konverzace zobrazí její minulá historie.
- Po stisku `+ Nová konverzace` se má okamžitě vyžádat název.
- Prázdný název ani zrušený dialog nemají vytvářet prázdný JSON záznam.
- `Memory` má být výchozím nastavením zapnutá.

### 7.2 Úložiště konverzací

```text
/home/oem/CyberBrain26/data/conversations/*.json
```

Implementace:

```text
conversations_api.py
```

Relevantní funkce:

```python
list_conversations()
get_conversation(conv_id)
create_conversation(title: str = "", history: list = [])
update_conversation(...)
delete_conversation(conv_id)
save_message_to_conversation(conv_id, user_message, assistant_response)
```

Očekávaná JSON struktura:

```json
{
  "id": "uuid",
  "title": "Název konverzace",
  "history": [
    {"role": "user", "content": "..."},
    {"role": "assistant", "content": "..."}
  ],
  "created_at": "...",
  "updated_at": "..."
}
```

### 7.3 Nalezený a opravený problém

Před opravou měl frontend tento problém:

```javascript
fetch('/conversations', {
  method:'POST',
  body: JSON.stringify({title:'Nová konverzace',history:[]})
})
```

Backend předával celý `payload` přímo jako první argument `create_conversation(payload)`, přestože funkce očekávala řetězec `title`. Důsledkem byly některé starší JSON soubory s `title` typu objekt/dict místo stringu.

Druhý problém: UI neposílalo `conversation_id`; backend ukládal pomocí `thread_id`, které je interní běhové ID Safe API a není totéž co ID JSON konverzace. Historie proto nemusela končit v právě vybrané konverzaci.

### 7.4 Provedené opravy v `webapp.py`

Byly provedeny a syntakticky ověřeny tyto změny:

1. `newConversation()` nyní použije:

```javascript
const entered = window.prompt('Název nové konverzace:', '');
```

- Cancel: návrat bez vytvoření konverzace.
- Prázdný název: upozornění a návrat bez vytvoření.
- Název se odesílá jako `title`.

2. Chat request z UI nyní obsahuje:

```javascript
conversation_id: conversationId || null
```

3. `AgentChatRequest` v `webapp.py` obsahuje:

```python
conversation_id: Optional[str] = None
```

Ověřeno testem `AgentChatRequest(..., conversation_id='test-conversation-id')`.

4. `proxy_chat()` ukládá chat do zvolené konverzace:

```python
if req.conversation_id and data.get("reply"):
    save_message_to_conversation(
        req.conversation_id,
        req.message,
        data["reply"]
    )
```

5. Endpoint vytvoření konverzace validuje data:

```python
@app.post('/conversations')
def api_create_conversation(payload: dict):
    title = str(payload.get('title', '')).strip()
    history = payload.get('history', [])
    if not title:
        raise HTTPException(400, 'Název konverzace nesmí být prázdný.')
    if not isinstance(history, list):
        raise HTTPException(400, 'Historie konverzace musí být seznam.')
    return create_conversation(title=title, history=history)
```

6. UI již mělo implementovaný reload historie při změně dropdownu:

```javascript
const r = await fetch('/conversations/' + encodeURIComponent(conversationId));
const d = await r.json();
for (const m of (d.history || [])) {
  msg(m.role === 'user' ? 'user' : 'assistant', m.content || '');
}
```

Po výše uvedené opravě je tato funkce napojena na správně zapisovanou historii.

### 7.5 Ověřený výsledek uživatelem

Uživatel po implementaci potvrdil, že vše funguje — zahrnuje pojmenování nové konverzace a obnovu historie. Přesto je vhodné při dalším zásahu zachovat a případně regresně ověřit:

1. založení konverzace s názvem;
2. dvě zprávy a odpovědi;
3. `F5` + výběr konverzace;
4. `./cb26-restart.sh` + výběr stejné konverzace;
5. kontrolu, že JSON historie má správný počet položek.

### 7.6 Současné omezení

Při výběru starší konverzace UI obnoví její viditelnou historii, ale JS nastaví interní `threadId = null`. Při dalším odeslání zprávy proto Safe API může vytvořit novou interní běhovou relaci a nedostává automaticky celou dřívější JSON chatovou historii jako krátkodobý prompt kontext.

To **nebrání**:

- zobrazení historie;
- dalšímu zápisu do stejného JSON souboru;
- dlouhodobé ChromaDB paměti.

Je to možný budoucí samostatný upgrade: bezpečně předávat omezené okno uložené `history` Safe API při výběru/odeslání konverzace, s limity tokenů a jasným oddělením od dlouhodobé paměti.

---

## 8. Důležité soubory a adresáře

### Kořen projektu

```text
.env                                      # citlivé hodnoty; nečíst/vypisovat do chatu
.env.example
README.md
CyberBrain26-kontext.txt
CB26-VSE-POHROMADE.txt                    # velký agregovaný kontext / historie
cb26_full_diagnostic.txt
webapp.py                                 # FastAPI web UI + frontend HTML/JS
conversations_api.py                      # JSON konverzace
memory_core.py                            # primární dlouhodobá paměť ChromaDB + fallback
cyberbrain_memory.py                      # starší/další Chroma paměťová implementace
auto_memory.py                            # práce s konverzačními JSON / auto-memory
llm_router.py
models.yaml
requirements.txt
requirements-webapp.txt
```

### Hlavní skripty

```text
cb26-restart.sh                           # stabilní start/restart celé sestavy
cb26-stop.sh                              # zastavení
cb26-run.sh                               # běh / spuštění dle lokální implementace
start_cyberbrain.sh
final_fix.sh
fix_everything.sh
diagnose_and_fix.sh
diagnostika.sh
```

Mnoho `fix_*.sh`, `backup*`, `webapp.py.bak*` a podobných souborů existuje z předchozích oprav. Neprovádět plošné mazání bez auditu — některé mohou sloužit jako bod rollbacku.

### Důležité adresáře

```text
scripts/                                  # safe_oi_api.py, runtime/runner logika
data/conversations/                       # JSON chatové konverzace
workspace/chroma_db/                      # aktivní ChromaDB
workspace/chromadb/                       # starší/alternativní DB, zatím nemazat
memory/                                   # historické/stará paměťová data
backups/                                  # vytvořené zálohy
litellm-proxy/config.yaml                 # LiteLLM konfigurace
logs/                                     # projektové logy
runner-workspace/                         # izolovaný/runner pracovní prostor
static/                                   # statické assety
tests/ a test/                            # testy
config/                                   # konfigurace
```

### Zvláštní položky

V `~/CyberBrain26` existuje adresář doslova pojmenovaný:

```text
-
```

Není to chyba `ls`. Pravděpodobně vznikl dřívější chybou v shell příkazu. Zatím jej nemazat. Nejdříve bezpečně zjistit obsah například přes explicitní cestu a `--`.

V projektu existují citlivé `.env` a četné `.env.backup*`. Nikdy nevypisovat hodnoty do chatu/logů. Pokud je nutné zkontrolovat pouze názvy proměnných:

```bash
cut -d= -f1 /home/oem/CyberBrain26/.env
```

---

## 9. Vývojová pravidla uživatele

Tyto preference jsou závazné pro další asistenci:

1. **Před větší změnou nejdřív diagnostika a ověření současného stavu.**
2. **Změny provádět po jedné funkční části**, ne hromadné neověřené refaktory.
3. Preferovat **jeden kompletní copy-paste skript** pro jednu změnu, s pre-checkem a zálohou relevantních souborů.
4. Po změně provést minimálně syntax check, cílený test a restart/health check, pokud se mění běžící služba.
5. Nezkracovat potichu dlouhé výstupy; pro dlouhý obsah použít paging/soubor/jasný limit.
6. Asistent má aktivně uvádět krok, prováděnou akci, důvod, výsledek a případný další krok.
7. Po schváleném kroku, který selže, má pokračovat bezpečným troubleshootingem nebo navrhnout alternativu, nemá mlčet ani se bezdůvodně zastavit.
8. Začínat jednoduchým řešením; při selhání eskalovat k variantám, webovému průzkumu, kombinaci postupů a nové strategii.
9. Uživatel chce, aby CyberBrain uměl autonomně vyhledávat soubory a diagnostikovat systém; nikoli vyžadovat ruční kopírování každého mikrokroku.
10. Uživatel preferuje výkon, nízkou spotřebu tokenů, efektivní kontext, lokální caching a spolehlivost.
11. Funkce implementované pro SAFE-OI mají být dostupné nebo zachované i pro FULL-OI, pokud k tomu není explicitní důvod.
12. SafeOI/CyberBrain má mít možnost přístupu a vyhledávání ve všech složkách virtuálního PC, nejen v `runner-workspace`, avšak zápisové/rizikové akce jsou nadále pod approval politikou.

### Výchozí pravidla pro vyhledávání ve zdrojích

Při vyhledávání v `~/CyberBrain26` standardně vyloučit:

```text
venv/
venv-*/
site-packages/
__pycache__/
.git/
```

Tyto cesty zahrnout jen při explicitním požadavku na všechno nebo při konkrétní potřebě auditovat závislosti/virtuální prostředí.

---

## 10. Bezpečné diagnostické příkazy

### Stav služeb a portů

```bash
cd ~/CyberBrain26
pgrep -af 'webapp.py|safe_oi_api.py|litellm' || true
ss -ltnp | grep -E ':(4000|7682|8080)' || true
curl -sS http://127.0.0.1:8080/health
curl -sS http://127.0.0.1:7682/health
curl -sS -H "Authorization: Bearer ${LITELLM_MASTER_KEY:-sk-cb26-local}" http://127.0.0.1:4000/v1/models
```

### Syntax důležitých Python souborů

```bash
cd ~/CyberBrain26
./venv-oi/bin/python -m py_compile scripts/safe_oi_api.py
./venv-litellm/bin/python -m py_compile webapp.py
./venv-litellm/bin/python -m py_compile scripts/cb26_agent_runtime.py
```

Poznámka: před spuštěním třetího řádku ověřit, že `scripts/cb26_agent_runtime.py` skutečně existuje; v dřívější diagnostice byl tento příkaz použit, ale úplný aktuální strom není v tomto dokumentu garantován.

### Kontrola paměti bez výpisu obsahu

```bash
cd ~/CyberBrain26
./venv-oi/bin/python - <<'PY'
from memory_core import retrieve_active_context
records = retrieve_active_context(limit=10)
print('RETRIEVED_RECORDS:', len(records))
for i, record in enumerate(records, 1):
    metadata = record.get('metadata', {}) if isinstance(record, dict) else {}
    print(
        f"{i}. id={record.get('id')} | "
        f"kind={metadata.get('kind')} | "
        f"source={metadata.get('source')} | "
        f"status={metadata.get('status')} | "
        f"created_at={metadata.get('created_at')}"
    )
PY
```

### Kontrola struktury konverzací bez obsahu zpráv

```bash
cd ~/CyberBrain26
./venv-litellm/bin/python - <<'PY'
import json
from pathlib import Path
files = sorted(Path('data/conversations').glob('*.json'), key=lambda p: p.stat().st_mtime, reverse=True)
print('FILES:', len(files))
for path in files[:10]:
    try:
        data = json.loads(path.read_text(encoding='utf-8'))
        title = data.get('title', '')
        history = data.get('history', [])
        print(
            f"{path.name} | title_type={type(title).__name__} | "
            f"title={str(title)[:70]!r} | history_items={len(history)} | "
            f"updated_at={data.get('updated_at')}"
        )
    except Exception as exc:
        print(f"{path.name} | ERROR={type(exc).__name__}: {exc}")
PY
```

---

## 11. Testovací checklist pro regresi

Před větší další změnou nebo po změně související s UI/pamětí/agentem proveď přiměřenou část tohoto seznamu.

### Služby

- [ ] `cb26-restart.sh` dokončí všechny kroky.
- [ ] LiteLLM `/v1/models` odpoví HTTP 200.
- [ ] Safe API `/health` odpoví HTTP 200.
- [ ] Webapp `/health` odpoví HTTP 200.
- [ ] Porty 4000, 7682 a 8080 poslouchají.

### Bezpečnostní tok

- [ ] SAFE + `pwd`: ukáže návrh, nevykoná automaticky.
- [ ] FULL + `pwd`: automaticky vykoná a ukáže status/return code/výstup.
- [ ] FULL + `git -C /home/oem/CyberBrain26 status`: automaticky read.
- [ ] FULL + `touch /tmp/cb26-sandbox/approval-test.txt`: vyžádá approval.
- [ ] Zamítnutá write akce se neprovede.
- [ ] Schválená bezpečně omezená testovací write akce se provede.

### Paměť

- [ ] `venv-oi` importuje `chromadb` a `memory_core`.
- [ ] `retrieve_active_context()` vrátí záznamy.
- [ ] Po restartu není v novém Safe API logu `WARNING: ChromaDB not available`.
- [ ] UI se zapnutým Memory zvládne uložit a v nové konverzaci vyhledat testovací fakt.
- [ ] Testovací fakt se po ověření případně korektně odstraní přes implementované mazání, nikoli smazáním celé DB.

### Konverzace

- [ ] `+ Nová konverzace` požádá o název.
- [ ] Cancel/prázdný název nevytvoří záznam.
- [ ] Nová konverzace se správným názvem je v seznamu.
- [ ] Odeslání zprávy uloží uživatelskou zprávu i odpověď do jejího JSON.
- [ ] `F5` + výběr konverzace zobrazí historii.
- [ ] Restart + výběr konverzace zobrazí historii.

---

## 12. Doporučené budoucí úkoly

Prioritu určovat s uživatelem; nedělat automaticky vše naráz.

1. **Přesnější status `/health` Safe API**
   - Změnit zastaralé `execution: disabled-phase1` na aktuální popis.
   - Pouze kosmetická/monitorovací oprava, funkčnost je už ověřená.

2. **Navázání modelového kontextu na načtenou konverzaci**
   - Po výběru JSON konverzace předat Safe API omezené relevantní okno historie.
   - Zachovat tokenový limit; nemíchat bezhlavě všechnu historii s dlouhodobou Chroma pamětí.
   - Zachovat zobrazení historie i bezpečnostní tok.

3. **Audit a migrace starých konverzací s `title` typu dict**
   - Některé soubory vznikly před opravou endpointu.
   - Nejdříve report bez zápisu: najít pouze JSON, kde `title` není string.
   - Pak jeden zálohovaný, idempotentní migrační skript, který z `title.title` získá řetězec nebo nastaví bezpečný fallback.

4. **Správa paměti v UI**
   - Přehled záznamů bez vyzrazení citlivých dat.
   - Filtrování podle `kind`, `source`, `status`.
   - Explicitní potvrzení před mazáním, možnost označit fakt jako zastaralý / superseded.

5. **Testování/automatizované regresní testy**
   - Přidat testy pro konverzace: create/list/get/save/history persistence.
   - Přidat testy pro `AgentChatRequest.conversation_id` a `proxy_chat` ukládání.
   - Testy provádět proti oddělenému temporary datadiru, ne proti živé databázi.

6. **Telefonní přístup**
   - Uživatel chce přístup z telefonu přes browser s heslem bez viditelného UI na host PC.
   - Doporučený privátní test: Tailscale + `tailscale serve --bg http://127.0.0.1:8080`.
   - Alternativa pro krátký test: Cloudflare Quick Tunnel na `127.0.0.1:8080`; je veřejný, proto přes něj neposílat citlivá data, API klíče ani `sudo` operace.
   - Před trvalým veřejným zpřístupněním přidat autentizaci, HTTPS model, rate limit a audit bezpečnostních hranic.

7. **VirtualBox klon / checkpoint**
   - Doporučení: plný klon (Full Clone), `Current machine state`, nové MAC adresy.
   - Doporučené názvy: `CyberBrain26_v1.2_memory-conversations-ok` nebo datumový checkpoint.
   - Původní VM při prvním bootu klonu nechat vypnutou.
   - Po klonu ověřit health endpointy, paměť a obnovení konverzace.

---

## 13. Bezpečnost a citlivá data

- `.env` a `.env.backup*` mohou obsahovat API klíče. Nezobrazovat jejich obsah v konverzaci, logu nebo diagnostickém výstupu.
- Neprovádět hromadné mazání `workspace/chroma_db`, `workspace/chromadb`, `memory`, `data/conversations`, `backups` ani virtuálních prostředí.
- Před jakýmkoli write zásahem do důležitého souboru vytvořit cílenou timestampovanou zálohu.
- Před `pip install`, změnou verzí, migrací DB nebo větší úpravou nejdřív ověřit očekávanou verzi a kompatibilitu.
- Pro změny skriptů se službami vždy po úpravě provést syntax check a restart plus health check.
- Pokud se přístup z telefonu vystaví mimo privátní síť, zavést autentizaci před reálným používáním.

---

## 14. Krátký startovní prompt pro další AI

Zkopíruj tento blok do nové aplikace/vlákna spolu s tímto dokumentem:

```text
Pracuji na projektu CyberBrain26 v Linux Mint XFCE VM (VirtualBox), projekt je v /home/oem/CyberBrain26. Přečti přiložený předávací kontext celý a ber jej jako zdroj aktuálního ověřeného stavu. Neprováděj neověřené hromadné změny.

Pravidla práce:
- Nejdřív diagnostikuj aktuální stav, potom navrhni změnu.
- Prováděj změny po jedné funkční části, ideálně jedním copy-paste skriptem se zálohou a pre-checkem.
- Po změně proveď syntax test, relevantní funkční test a podle potřeby restart/health check.
- Nikdy nevypisuj obsah .env nebo API klíče.
- Chci jasně vidět: plán, co se provádí, proč, výsledek a další krok.
- Ve FULL režimu jsou čisté read příkazy automatické; write/rizikové akce musí zůstat pod schválením.
- V paměti je aktivní ChromaDB ve workspace/chroma_db a Safe API běží ve venv-oi s chromadb==1.5.9.
- Konverzace jsou JSON v data/conversations a UI již podporuje pojmenování nové konverzace a obnovu její historie po refreshi/restartu.

Nejdřív mi navrhni krátký read-only audit aktuálního stavu a až potom se ptej, na kterém z budoucích úkolů máme pracovat.
```

---

## 15. Poslední potvrzený stav

Uživatel naposledy potvrdil, že po provedených úpravách **vše funguje**:

- základní služby;
- SAFE/FULL tok;
- ChromaDB dlouhodobá paměť;
- pojmenování nové konverzace;
- ukládání a obnovení historie konverzace;
- test přístupu/sdílení z telefonu.

Další bezprostřední uživatelský krok: vytvořit bezpečný plný klon VirtualBox VM jako checkpoint.
