[0.0.30] - 2026-09-03
This release moves eligible media follow-up work into durable background jobs, exposes effective runtime model routing in the UI, and converts structured plugin agents to bounded atomic Function Calling workflows for faster, more reliable world and story updates.
Added
- Safe post-turn function runtimes can finish beyond the foreground turn barrier. Plugin manifests can opt in with
turnCompletion.mode: detachedplus queue/execution deadlines, serial overlap, and stale-result rejection. The scheduler freezes source-turn inputs, falls back to foreground execution with diagnostics when a declaration is unsafe, and validates actual effects again before commit.mimo-tts/auto-narrateis the first bundled runtime using this path. - Scheduler-detached work has durable lifecycle APIs and events.
_runtime_jobsstores CAS-leased jobs on the active DataStore backend while snapshots and browser checkpoints omit control-plane rows; clients can list, cancel, or explicitly retry jobs and receiveruntime.deferredplus origin-turn-awarejob-status.updatedevents. - Plugin surfaces explain runtime behavior with contract-derived feature badges. Session setup, plugin details, and the execution-flow preview expose trigger, LLM/function type, background execution, output role, and declared capabilities without branching on bundled plugin ids.
Changed
- A player turn no longer waits for eligible media follow-up work. Queued job creation commits atomically with the source turn, while background execution runs outside the main session lock and rechecks session/plugin incarnation, version, lease ownership, and declared effects before committing. Restart recovery resumes unclaimed queued work, but terminalizes expired queues and expired in-flight leases without replaying potentially billable provider calls.
- Bundled image prompt generation is now manifest-declared background work. Both OpenAI-compatible and DashScope image prompt agents return a job immediately for every RPC caller, and a background entry now preserves its emitted background-follower chain instead of dropping the provider render. Decision guidance such as
scene-promptsremains inside the foreground barrier because the player needs it before choosing the next action. - Bundled structured agents now submit results through bounded Function Calling workflows. World setup, WorldIR extraction, character tracking, codex updates, relationship extraction, guidance, scene prompts, quests, affinity, inventory, and image prompts use one atomic batch tool where practical, stop immediately after a successful terminal tool, and cap provider attempts so a stalled plugin cannot consume repeated full runtime budgets. Prose narrators remain streaming text runtimes.
- Runtime model selectors now distinguish routing declarations from effective targets. Session Prep and in-session plugin controls keep
runtimeId → slotoverrides scoped to the session while showing the provider/model currently resolved for each slot. Function-runtimemodelPresetIdprovider slots remain separate device-level plugin settings.
Fixed
- WorldIR factual events no longer become malformed domain events. Output normalization only creates
event.emitproposals from{ topic, data? }envelopes whosetopicis a string, so WorldIR's ownevents[]records cannot produce repeatedevent.emit: topic must be a non-empty stringfailures. - Atomic submission tools prevent partial structured-plugin writes.
initialize-world,sync-characters, andsync-codex-entriesreturn their accumulated proposals only after the full batch succeeds; image prompt tools own their fixed event topics instead of asking the model to construct fragile event envelopes.
What's Changed
Full Changelog: v0.0.29...v0.0.30