Više djece, smjene se računaju iz "sidra" (jedan datum + smjena tad; mijenja se
sedmično 1,2,1,2...). Odgovara: koje časove ima, kad počinje/završava, koja smjena
— za danas/sutra/prekosutra/juče/naziv dana/konkretan datum.
- store.py: djeca, sidro->smjena za bilo koji datum, raspored po smjeni/danu,
uparivanje imena (padeži), CSV import (kolone dijete..predmet), grid uređivanje.
- manifest.py: alat raspored_upit(dijete, kada, sta=casovi|pocetak|kraj|smjena);
bosanska gramatika (N časa/časova, akuzativ dana). Sve lokalno (inline).
- admin.py + templates: pregled djece (+smjena danas), dodaj/obriši dijete,
postavi razred+sidro, grid rasporeda (uredi/dodaj/obriši po času), CSV upload.
- Registrovano u load_apps() i ADMIN_APPS.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LzKpYaEsuWDevuNnvSjcFW
Vremena dnevnih namaza (sabah, podne, ikindija, akšam, jacija) sa api.vaktija.ba.
- idriz/apps/vaktija/store.py: izbor lokacije + bundlana lista (lokacije.json, 118
lokacija; id=indeks). Sarajevo default. Bez openai/requests (uvozi ga admin).
- client.py: dohvat vakat[] po (lokacija, datum) sa keširanjem; API vraća lokalna
vremena (sam vodi DST). vakat[1] je izlazak sunca (nije namaz), preskočen.
- manifest.py: alat namaz_vrijeme(koji): 'sljedeci' = prvi nadolazeći (ili sutra
sabah ako su svi prošli); ili konkretan namaz (danas ako nadolazi, inače sutra).
Bosanska gramatika za "za X sati/minuta" i rod (prošao/prošlo/prošla).
- admin.py + templates/vaktija.html: dropdown svih lokacija, Sarajevo default.
- Registrovano u load_apps() i ADMIN_APPS.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LzKpYaEsuWDevuNnvSjcFW
Glasovni prijedlozi doručka/ručka iz porodičnih lista (ne izmišlja, ne pretražuje web).
- idriz/apps/obroci/store.py: liste jela po obroku + istorija pojedenog (bez openai).
- manifest.py: alati obroci_prijedlog (nasumično sa liste; ponovni poziv za isti
obrok daje drugo jelo jer se prethodno tretira kao odbijeno; izbjegava jela
pojedena zadnja 3 dana) i obroci_dodaj (dodavanje jela glasom).
- Pamćenje pojedenog: zadnji NE-odbijeni prijedlog za dan/obrok se bilježi kao
pojedeno (svaki prijedlog prepiše današnji zapis).
- admin.py + templates/obroci.html: dvije textarea (doručak/ručak) + istorija zadnjih dana.
- Registrovano u load_apps() i ADMIN_APPS.
Prvi app napravljen po CLAUDE.md obrascu.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LzKpYaEsuWDevuNnvSjcFW
Admin stranica app-a živi u folderu app-a:
- idriz/apps/superheroji/admin.py (Flask Blueprint BP + NAV), template preseljen u
idriz/apps/superheroji/templates/superheroji.html.
- admin/app.py: registruje sve iz ADMIN_APPS, lijevi meni se puni iz njihovih NAV
(context processor), globalni before_request štiti i Blueprint rute.
- Uklonjena inline /superheroji ruta i hardkodiran link u base.html.
Dodavanje admin stranice novom app-u = admin.py (BP+NAV) u folderu app-a + upis u
ADMIN_APPS. Time je mini-app potpuno samostalan: prompt, tools, config i admin.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LzKpYaEsuWDevuNnvSjcFW
Prvi pravi mini-app kao samostalan folder:
- idriz/apps/base.py: AppSpec, AppTool, AppContext (uski most ka runtime-u).
- idriz/apps/__init__.py: load_apps() (lijeni uvoz manifesta).
- idriz/apps/superheroji/: logic.py (bivši game.py), store.py (bivši gamestore.py),
manifest.py (prompt fragment + sheme + handleri preko ctx).
Assistant više NEMA game_* metode ni self.match: prompt/tools/pozdrav/dispatch se
grade iz registra app-ova + jezgra. Admin uvozi apps.superheroji.store (bez openai).
Ponašanje isto (testirano: mehanika, handleri kroz AppContext, admin bez openai).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LzKpYaEsuWDevuNnvSjcFW
Problem: potvrda zadnjeg heroja se čula tek nakon "sad ću odlučiti" jer je
model grupisao potvrdu i poziv presudi. Rješenje: presuda runde je sada
AUTOMATSKA (uklonjen alat superheroji_presudi). Kad zadnji igrač izabere,
Python pokrene resolve_round u pozadini; model prvo brzo potvrdi ime i kaže
da razmišlja, rezultat stigne preko notify_model. Ako traje >8s -> filler.
Pamćenje dvoboja: pored Ela sada se u heroes.json (matchups) bilježe konkretni
ishodi sa razlogom, po cijelom skupu likova i po parovima. Kad se isti dvoboj
ponovi -> čita se iz baze BEZ poziva LLM-u (dosljedno + brzo). Admin tab
prikazuje "Zabilježene dvoboje"; reset briše i njih.
Sekvenciranje odgovora (_wait_idle) da se izbjegne
conversation_already_has_active_response.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LzKpYaEsuWDevuNnvSjcFW
Igra: 1-5 igrača, nekoliko rundi (konfigurabilno). Svaku rundu svaki igrač
kaže izmišljenog lika (širok pojam — bilo koji medij), Idriz presudi ko bi
pobijedio i zašto. Pobjednik runde se banuje do kraja partije. Redoslijed se
rotira svaku rundu (zadnji ima prednost). Najviše pobjeda runda = pobjednik partije.
- idriz/gamestore.py: trajno skladište (heroji, Elo rejting, broj rundi), bez
vanjskih zavisnosti (i admin ga uvozi). clear_favorite() drži borbe dosljedne
kroz partije (jači heroj ne gubi od znatno slabijeg).
- idriz/game.py: resolve_hero (najjači LLM gpt-5.5 + web search fallback samo kad
ne zna lika), adjudicate (presuda + obrazloženje na bosanskom), Match (tok partije).
- assistant.py: 4 realtime alata (nova_partija, izbor, presudi, kraj) + upute;
igra ide odmah nazad modelu, ne kroz pozadinski posao.
- config.py: game_model (default = text_model).
- admin: tab "Superheroji" (broj rundi + rang-lista + reset pamćenja).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LzKpYaEsuWDevuNnvSjcFW
- admin/: LAN web panel (Flask + waitress + python-pam), status servisa,
PAM login sa idriz korisnikom, vertikalni meni. Port 8080, samo LAN.
- systemd/idriz-admin.service: korisnički servis, enabled + Restart=always
+ StartLimitIntervalSec=0.
- systemd/idriz.service: dodan StartLimitIntervalSec=0 (repo je bio zastario).
Od sada sav aplikacioni source code ide u ovaj repo.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LzKpYaEsuWDevuNnvSjcFW