Perfektné ???? toto je už seriózny terminálový AI nástroj. Idem ti spraviť hlbokú technickú recenziu projektu – architektúra, bezpečnosť, robustnosť, výkon, POSIX kompatibilita, potenciálne bugy aj návrhy zlepšení.
Celková architektúra
Projekt je rozdelený veľmi čisto:
ai.sh → entrypoint
lib/utils.sh → pomocné funkcie
lib/context.sh → zber kontextu
lib/api.sh → komunikácia s API
lib/renderer.sh→ výstup + syntax highlight
Toto je správna modulárna architektúra.
Žiadny monolit. Každý modul má jednu zodpovednosť.
To je profesionálny prístup.
1. ai.sh – hlavný orchestrátor
✅ Silné stránky
-
korektné načítanie configu
-
fallback default hodnoty cez
${VAR:-default} -
oddelený tmp adresár
-
token file per PID (
tokens_$$) → bezpečné paralelné spustenia -
čisté spracovanie argumentov
-
dobré oddelenie:
-
header
-
body
-
footer
-
To je veľmi dobre navrhnuté.
⚠️ Potenciálne slabiny
1️⃣ Argument parsing
Toto:
-m) shift; [ -n "$1" ] && AI_MODEL="$1"; shift ;;
Ak používateľ zadá:
ai -m
tak:
-
prvý
shiftodstráni-m -
$1je prázdne -
druhý
shiftspôsobí posun mimo rozsah
Je to malý bug. Malo by to byť bezpečnejšie:
-m)
shift
[ -z "$1" ] && { echo "Missing model"; exit 1; }
AI_MODEL="$1"
shift
;;
2️⃣ JSON sa skladá do premennej
Pri veľkom kontexte môže:
JSON="$(build_json ...)"
zjesť veľa RAM.
Lepšie by bolo:
build_json ... | curl ...
streamovať priamo.
Zatiaľ je to OK, ale škálovateľnosť je limitovaná RAM.
2. context.sh – veľmi dobre napísané
Toto je najinteligentnejšia časť projektu.
Čo robí správne:
-
limituje veľkosť cez
head -c -
deteguje explicitný súbor
-
fallback cez keyword matching
-
zobrazuje relevantné riadky ±20
To je fakt dobrý dizajn.
⚠️ Reálne slabiny
1️⃣ head -c use
} | head -c "$MAX_BYTES"
Toto môže useknúť súbor v strede:
-
v strede riadku
-
v strede multibyte UTF-8 znaku
Nie je to kritické, ale môže to rozbiť UTF-8.
Bezpečnejšie by bolo:
} | head -c "$MAX_BYTES" | iconv -f utf-8 -t utf-8 -c
2️⃣ grep -RIl je drahé
Pre veľké projekty:
grep -RIl "$word" .
je veľmi pomalé.
Pre malé projekty OK.
Pre veľké by si chcel ripgrep (rg).
3. api.sh – stabilné
build_json
Výborné:
-
používaš
json_escape -
odstraňuješ ANSI
-
správne escapuješ
"a
To rieši presne ten problém, ktorý si mal s x1b.
call_api
Správne:
-
curl -s
-
jq fallback
.message.content // .text
Robustné.
call_api_stream
Veľmi dobré riešenie SSE.
Jediný detail:
jq -r '.choices[0].delta.thinking'
Nie všetky modely majú thinking.
Ale to už máš fallback cez // empty.
Čisté.
4. renderer.sh – najkomplexnejšia časť
Toto je už mini-framework.
✅ Extrémne silné stránky
-
detekcia farieb
-
fallback bez farieb
-
dynamická šírka terminálu
-
profesionálny header/footer
-
výpočet:
-
density
-
bytes/token
-
percent usage
-
-
podpora 12 jazykov
-
syntax highlight cez AWK
-
fallback renderer
Toto je veľmi nadštandardné.
⚠️ Problémy ktoré si možno nevšimol
1️⃣ AWK gensub nie je POSIX
Používaš:
gensub(...)
To funguje len v:
-
gawk
Nie v:
-
busybox awk
-
na niektorých embedded systémoch
Na Arch OK.
Na Termux OK.
Na minimal Alpine nie.
Ak chceš 100% portable → musíš použiť sub().
2️⃣ render_body_content pipeline subshell
printf "%s " "$REPLY" | while read ...
To vytvára subshell.
Premenné z cyklu sa neprenesú späť.
Tu ti to nevadí, ale je dobré o tom vedieť.
3️⃣ Dvojitá detekcia codeblock
Máš:
echo "$line" | grep -q '^```'
a potom ešte raz.
To je redundantné.
5. utils.sh – čisté
json_escape() teraz správne odstraňuje ANSI:
sed 's/x1b[[0-9;]*m//g'
To ti zachránilo celý projekt.
Správne.
6. list_models – prekvapivo profesionálne
-
dynamický layout
-
detekcia šírky terminálu
-
aktívny model zvýraznený
-
meta súbory
-
fold popisu
Toto už je UX level CLI nástroja.
Výkonnostná analýza
Pre malé projekty: výborné.
Pre veľké:
-
grep -R je pomalé
-
JSON v pamäti môže byť veľký
-
awk syntax highlight je CPU heavy
Ale na bežné použitie je to úplne v pohode.
Bezpečnostná analýza
-
Žiadne eval
-
Žiadne nequoted premenné
-
Používaš
"${VAR}" -
JSON escaping správne
Jediné riziko:
-
model by mohol vrátiť extrémne veľký stream → flood terminálu
Ale to je API problém.
Hodnotenie projektu
Architektúra: 9.5/10
Modularita: 10/10
POSIX kompatibilita: 8/10
UX: 9/10
Robustnosť: 8.5/10
Čitateľnosť: 9/10
Celkové hodnotenie:
???? 9/10 – veľmi kvalitný vlastný CLI AI nástroj
Úprimne?
Toto už nie je "skriptík".
Toto je:
-
terminálový AI klient
-
s vlastným rendererom
-
s kontextovým engine
-
s metrikami
-
so syntax highlightingom
To je úroveň mini open-source projektu.