librarian: odsyłaj wynik do bota, który wysłał zapytanie (obsługa wielu botów) #18

Merged
gitea merged 2 commits from librarian-per-origin-callback into main 2026-08-03 17:47:55 +00:00
Owner

Po co

Żeby jeden librarian obsługiwał oba boty (testowy + deploy) — teraz strzelał każdym wynikiem/pongiem w jeden statyczny CONJURER_MAIN_BOT. Bez tego fixa health-check deploy-bota by nie działał: jego ping wracałby pongiem do testowego, więc deploy nigdy nie włączyłby cogu librariana.

Jak

  • Bot dokłada swój adres zwrotny (CONJURER_SELF_CALLBACK) do każdego /query i /ping.
  • Librarian trzyma callback razem z zapytaniem (w trwałym request — więc replay po restarcie dalej odpowiada właściwemu botowi) i, dla wyników, we wpisie OUTBOX ({target, payload}) — więc resender dowozi do bota-źródła nawet po restarcie librariana.
  • Pongi też wracają do pingującego bota (inaczej ping drugiego bota wracałby do pierwszego i zawsze timeout'owałby).
  • Pusty callback → fallback do MAIN_BOT_ADDRESS; stary wpis OUTBOX (surowy payload sprzed tej zmiany) też się dostarcza do domyślnego bota → upgrade bezszwowy.

Deploy (paruje się z deploy#11)

Dodać CONJURER_SELF_CALLBACK botom: testowy http://192.168.1.73:32442, deploy http://192.168.1.73:32443 — dorzucam to do deploy#11. Librarian dalej ma CONJURER_MAIN_BOT: http://bot:5000 jako fallback.

Testy

Per-origin dostawa wyniku + fallback dla starego kształtu (outbox); busy/idle pong routowany do callbacku vs default (lifecycle). Suite: 58 unit + 52 integration zielone.

🤖 Generated with Claude Code

## Po co Żeby **jeden librarian obsługiwał oba boty** (testowy + deploy) — teraz strzelał każdym wynikiem/pongiem w jeden statyczny `CONJURER_MAIN_BOT`. Bez tego fixa health-check deploy-bota by nie działał: jego ping wracałby pongiem do testowego, więc deploy nigdy nie włączyłby cogu librariana. ## Jak - Bot dokłada swój adres zwrotny (`CONJURER_SELF_CALLBACK`) do każdego `/query` i `/ping`. - Librarian **trzyma callback razem z zapytaniem** (w trwałym request — więc replay po restarcie dalej odpowiada właściwemu botowi) i, dla wyników, we wpisie OUTBOX (`{target, payload}`) — więc resender dowozi do bota-źródła nawet po restarcie librariana. - **Pongi też** wracają do pingującego bota (inaczej ping drugiego bota wracałby do pierwszego i zawsze timeout'owałby). - Pusty callback → fallback do `MAIN_BOT_ADDRESS`; stary wpis OUTBOX (surowy payload sprzed tej zmiany) też się dostarcza do domyślnego bota → upgrade bezszwowy. ## Deploy (paruje się z deploy#11) Dodać `CONJURER_SELF_CALLBACK` botom: testowy `http://192.168.1.73:32442`, deploy `http://192.168.1.73:32443` — dorzucam to do deploy#11. Librarian dalej ma `CONJURER_MAIN_BOT: http://bot:5000` jako fallback. ## Testy Per-origin dostawa wyniku + fallback dla starego kształtu (outbox); busy/idle pong routowany do callbacku vs default (lifecycle). Suite: **58 unit + 52 integration** zielone. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
gitea self-assigned this 2026-08-03 16:37:27 +00:00
gitea added 1 commit 2026-08-03 16:37:28 +00:00
Librarian: answer each query back to the bot that sent it
CI / compile (pull_request) Successful in 8s
CI / unit (pull_request) Successful in 26s
CI / integration (pull_request) Successful in 26s
26b6ab636e
So one librarian can serve several bots (test + deploy) instead of firing
every result/pong at a single static CONJURER_MAIN_BOT.

* The bot includes its own callback address (CONJURER_SELF_CALLBACK) in
  every /query and /ping.
* The librarian stores that callback with the query (persisted with the
  request, so a replay after restart still answers the right bot) and, for
  results, in the OUTBOX entry ({target, payload}) so the resender delivers
  to the origin bot even across a librarian restart.
* Pongs go back to the pinging bot too - otherwise a second bot's health
  check would be ponged to the first and always time out, so it could
  never enable its librarian cog.
* Empty callback falls back to MAIN_BOT_ADDRESS, and a legacy OUTBOX entry
  (raw payload, pre-callback) is still delivered to the default bot, so the
  upgrade is seamless.

Tests: per-origin result delivery + legacy-shape fallback (outbox),
busy/idle pong routed to the callback bot vs default (lifecycle). Suite:
58 unit + 52 integration green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
gitea added 1 commit 2026-08-03 16:50:04 +00:00
FIx print
CI / compile (pull_request) Successful in 7s
CI / unit (pull_request) Successful in 26s
CI / integration (pull_request) Successful in 26s
build / build (push) Successful in 41s
CI / compile (push) Successful in 9s
CI / unit (push) Successful in 27s
CI / integration (push) Successful in 49s
d4c6d78c2e
gitea merged commit d4c6d78c2e into main 2026-08-03 17:47:55 +00:00
gitea deleted branch librarian-per-origin-callback 2026-08-03 17:47:56 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: gitea/conjurer#18