Skidanje razgovora sa ChatGPT/Gemini/AI Mode, uvoz i indeksiranje bez LLM poziva: komanda, prekidači, vodeni žig i kvarovi
Skidanje razgovora sa ChatGPT-a, Gemini-ja i Google AI Mode-a, uvoz u korpus i indeksiranje. Ceo lanac je bez ijednog LLM poziva — skripte pričaju sa Chrome-om preko CDP-a i parsiraju DOM/API. Jedini korak koji troši model je graf, i on se lako izostavi.
Projekat: E:\Work\AI\chathistory (paket aikb). Stanje na dan 21.09.2026: 4858 razgovora, 40.778 vektora.
cd E:\Work\AI\chathistory
python -m aikb refresh --harvestTo je sve. Komanda sama:
C:\chrome-cdp) ako ne radi — od verzije 136 Chrome ignoriše --remote-debugging-port nad podrazumevanim profilom, zato zaseban;ollama serve ako ne radi (treba samo za vektorski indeks);corpus/, pa sync (keyword indeks) i vindex (vektori);Jedino što traži od tebe: da profil C:\chrome-cdp bude ulogovan na nalozima. Ako nije, skripta to kaže jasno ([x] nema accessToken — uloguj se na ...) i prolaz staje.
| prekidač | čemu služi |
|---|---|
--no-graph | izostavi jedini korak koji troši model |
--dry-run | ispiši plan, ne pokreći ništa |
--since 2026-09-01 | ručni vodeni žig za ChatGPT umesto izračunatog |
--keep-chrome | ostavi prozor otvoren posle skidanja |
--no-vindex | preskoči vektorski indeks (onda ne treba ni Ollama) |
--no-sessions | preskoči uvoz agent-sesija (Claude Code, Codex, OpenCode) |
--stop-on-error | stani na prvom koraku koji padne |
Bez --harvest komanda radi samo uvoz postojećeg sirovog materijala + indeksiranje, bez diranja naloga.
ChatGPT se ne lista ceo svaki put — uzima se samo ono izmenjeno posle žiga. Žig se računa kao najnoviji updated_at u corpus/openai/ minus dva dana.
Alternativa je bila da se pamti kad je update poslednji put pokrenut. Odbačena je zato što vreme pokretanja beleži da se posao desio, a ne da je rezultat stigao na disk. Ta dva se razilaze čim nešto pukne na pola, a ovde je puklo dva puta:
raw/ sa corpus/);vindex-a (nestalo memorije).Da se žig u tim trenucima pomerio na „sad", sledeći prolaz bi počeo ispod tih razgovora i oni bi tiho ostali van baze — bez ijedne poruke o grešci. Žig iz korpusa taj scenario ne poznaje: ako uvoz padne, korpus se nije pomerio, pa se isto povuče ponovo (importer je idempotentan, ponovljeno prolazi kao „nepromenjeno"). Greši samo na stranu viška, nikad na stranu preskakanja.
Gemini i AI Mode ne koriste žig — oni porede listu iz naloga sa onim što već stoji na disku.
tools/graph_supervisor.py obrađuje nove dokumente kroz model (opencode/GPT kvota). Sam prati limit preko oc-usage, spava do reseta i nastavlja — ne treba ga nadgledati. Stanje:
Get-Content index\supervisor.log -Tail 30Ako u preseku piše LIMIT, nadzornik samo spava do reseta — to nije kvar. Dva nadzornika ne mogu da rade uporedo: drugi vidi prvog, ispiše presek njegovog posla i izađe.
Zasebno pokretanje: python tools/graph_supervisor.py, zaustavljanje: --stop.
Prazna lista razgovora, ili klik na nit ne prolazi. Uzrok je najčešće uzak prozor: ispod ~1000 px Gemini i AI Mode sakriju bočnu traku, a dugmad ostanu u DOM-u kao nevidljiva (0×0), pa klik visi do isteka. Skripte sada same postave prozor na 1440×900 i otvore traku — ako se ponovi, prvo proveri širinu, pa tek onda traži promenjen selektor.
vindex stoji i ništa ne ispisuje. Ollama nije pokrenuta — ne puca nego ponavlja u tišini (mereno: 500 s bez ijednog reda). Provera: curl 127.0.0.1:11434/api/version.
Prolaz ubijen „zbog memorije". vindex snima napredak usput, pa ga je dovoljno pokrenuti ponovo — nastavlja odakle je stao.
Poruka „Nema novih razgovora ... (sve već stoji u korpusu)" nije greška nego uredan ishod. Greška je samo kad ulaz ne postoji ili je prazan.
| putanja | sadržaj |
|---|---|
raw/openai_live, raw/gemini_live, raw/aimode_live | sirovo skinuto — izvor istine, ne briše se |
corpus/<izvor>/*.md | kanonski markdown sa frontmatterom |
index/index.jsonl | keyword indeks |
index/vector/ | vektorski indeks (lokalno, ollama:all-minilm) |
index/supervisor.log | dnevnik nadzornika grafa |
tools/browser_harvest.md | runbook: šta je izmereno na živim stranicama |
python -m aikb search "pojam" # keyword
python -m aikb vsearch "pitanje" # semantički (traži Ollamu)
python -m aikb status # broj razgovora po platformi