#cobarcolrobi dzisiaj mały side project który zacząłem i o dziwo skończyłem wczoraj, mianowicie...

Zrobiłem sobie czujnik pracy opencode!

W sensie jest to mała skrzyneczka zasilana z powerbanka, która świeci naniebieskie gdy przynajmniej jeden agent pracuje, albo na czerwono gdy wszystkie sie opierdalają

Mięchem skrzyneczki jak nodemcu z dwoma diodami i dwoma rezystorami jakie znalazłem pod ręką, tutaj kod jest prosty: request na server i jeśli "1" to jedna dioda, jeśli "0" to druga.

Server postawiłem na railsach bo miałem gotowy setup, "rails new" - i wszystko działa ¯\_( ͡° ͜ʖ ͡°)_/¯

Jedyny problem jaki spotkałem to odpowiedzieć na pytanie: "czy agenty pracują?" Wierzcie lub nie ale opencode nigdzie tego nie udostępnia, nie ma to API, nie ma statusu z konsoli, nie ma endpointa w opencode web (╯ ͠° ͟ʖ ͡°)╯┻━┻

Zrobiłem więc stare dobre druciarstwo "pyk pyk jako tako i fajrant", detale w komentarzu

Myślę że spoko efekt, jak na jeden wieczór XD Na biurku leży fizyczny indykator stanu agentów, nie muszę alt-tabować czy skończyły pracę.

Inb4. Projekt na ten moment to kuleczka z gnoju, pewnie jobek nie jest potrzebny odkąd ograniczylem filtrowanie po updated_at, pewnie da się ograniczyć tego basha do minimum na rzecz czegoś czytelniejszego, itp. Ale robiłem jak najmniejszym kosztem PoC, więc jak zacząlem od grzebania po kąsolce czy da sie określić stan to potem copy paste do ruby ¯\_( ͡° ͜ʖ ͡°)_/¯

A, obudowa to listwa przypodłogowa cięta piłką na oko, klapka to panel podłogowy, a kopułka to jakaś miarka płynu do prania co znalazłem obok pralki, mam nadzieje że nieużywana xdd

#programowanie #diy #majsterkowanie

b54e9462-8eca-4f98-8974-a5b650d7fc9b

Komentarze (13)

Techniczne szczegóły abominacji:

1. wyciągam listę wszystkich sesji
```
def all_sessions
midnight_ms = Time.now.beginning_of_day.to_i * 1000

cmd = <<~BASH
cd {folder z projektem}
opencode session list --format json | \
jq -r '.[] | select(.updated >= #{midnight_ms}) | .id'
BASH

`#{cmd}`
end
```

Musiałem ograniczyć do updated_at większego niż ostatnia północ, bo nawet i 40 sekund zbierało całość :v

2. Każdą sesje exportuje do jsona i dla każdej sprawdzam ostatni wers z "type"
```
json_file = "/tmp/#{session_id}.json"
system("opencode export #{session_id} > #{json_file} 2>/dev/null")
last_status = `grep -e '"type"' -e '"error"' #{json_file} | tail -n1`

tempfile.puts(last_status.include?("error") || last_status.include?("step-finish") ? '1' : '0')
```

Dlaczego do pliku? Bo za długie były dla grepa i nie pokazywał ostatniego tylko jakiś losowy z połowy jak robiłem pajpem, a że nie jestem bashowcem to nie szukalem jak to wymusić ładniej xd

3. Mój endpoint jedynie sprawdza w głownym tempfile czy są same jedynki czy może jakieś zero, i scheduluje jobka który odświeża plik w tle. Odpowiedzi są lekko spóźnione, ale nie timeoutują

No i takie projekty to ja lubię! Na kolanie, posklejane z resztek taśmy, na szybko sprawdzone czy działa i wrzucone bez zbędnego marketingowego pierdolenia na wszelki wypadek jakby miało zarobić miliony dolarów, z dodatkiem AI slopowej grafiki i opisu. Pierun Panie, Pierun!!!!

@Romanzholandii
Jeśli AI na moim komputerze coś robi - kalkuluje, generuje, sprawdza, cokolwiek robi - dioda niebieska
Jeśli zakończyło prace i czeka co dalej - czerwona

Mogę to zabrać ze sobą do kibla, do kuchni, do ogrodu, i widzieć czy pora żebym wydał kolejne polecenia w pracy czy nadal mam fajrant

Zaloguj się aby komentować