Repository navigation
v0.2.9
Model requests always stream, so an endpoint that accepts only stream: true works whether or not any World provides an output tap, and the connection test now takes the same path. A World whose start() throws at startup no longer stops the bot; it is left inactive with its reason. The websearch World's service addresses are configurable, and the Minecraft World handles 1.21.2+ protocol changes.
Changes for extension authors
- Every main-loop request now passes
onEventto the provider, with or without an outputTap; providers decide streaming fromonEventas before. Only the comparison request used to diagnose an in-stream failure stays non-streaming. A provider extension that cannot stream should ignoreonEvent(#332). WorldLifecycleEventhas a new kind,start-failed, withreason. A Persona that implementsonWorldLifecycleshould handle it; Cormini injects one notice with the reason (#329).
Features
- Core: a World whose
start()throws during startup is skipped. Its slot goes back to inactive with the reason (enabledis unchanged, so the next start tries again), the other Worlds and the main loop start as usual, and the World overview shows the reason on the inactive card. Before, a busy listening port in any World made the whole bot exit (#328). - websearch World:
worlds.websearch.braveBaseUrlandworlds.websearch.deepseekBaseUrlset the service addresses (default: the official ones), so a compatible proxy can be used. The quick-config tab has an address field; the next search uses it (#337).
Fixes
- The main loop sent non-streaming requests when no World provided an outputTap, so a streaming-only endpoint failed whenever, for example, Coopanion's pet window was disconnected. Requests now always stream (#332).
- The provider connection test and the openai-responses-compat reasoning-replay probe send streaming requests, so they test the same path as real requests (#332).
- Minecraft World: the potion and food protocol-table corrections are applied only to the versions that need them; from 1.21.2
potion_contents.customNameis kept, which fixes slots shifting in inventories with potions (#335, fixes #330). - Minecraft World: explosion diagnostics read the 1.21.2–1.21.8 and 1.21.9+ packet shapes instead of throwing in
hookBotEvents; values a version does not send are left out (#335, fixes #333). - QQ World: when
fetch_ptt_textreturns a failure or empty text, it is fetched again with backoff for up to 30 s; 1404, timeouts and disconnects are not retried (#316). - Extension market: weekly and monthly downloads are queried for explicit date ranges ending yesterday (UTC); counts that cannot be fetched are shown as "—", sort last and do not pass a minimum-downloads filter, instead of showing 0 (#334).
- Cormini: workspace git commands run with
core.fsmonitor=false, so a user's global fsmonitor setting no longer leaves a residentgit fsmonitor--daemonin the workspace (#336).
Documentation
- QQ World README: log in to QQ before loading it in SnowLuma; after QQ or the computer restarts, load it again once QQ has logged in. The QQ World itself keeps reconnecting.