Skip to content

v0.2.9

Choose a tag to compare

@Phantivia Phantivia released this 27 Oct 22:07
· 72 commits to main since this release

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 onEvent to the provider, with or without an outputTap; providers decide streaming from onEvent as before. Only the comparison request used to diagnose an in-stream failure stays non-streaming. A provider extension that cannot stream should ignore onEvent (#332).
  • WorldLifecycleEvent has a new kind, start-failed, with reason. A Persona that implements onWorldLifecycle should 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 (enabled is 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.braveBaseUrl and worlds.websearch.deepseekBaseUrl set 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.customName is 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_text returns 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 resident git fsmonitor--daemon in 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.