Skip to content

Changelog

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

This file is maintained automatically by release-please from Conventional Commits.

0.3.2 (2026-05-17)

Documentation

  • Sync CLAUDE.md + project URLs to post-v0.3.1 state (d3d6ac8)

0.3.1 (2026-05-17)

Dependencies

  • Bump Microsoft.NET.Test.Sdk from 17.11.1 to 18.5.1 (#8) (9483cbd)

0.3.0 (2026-05-17)

Features

  • mod+server+examples: Objectives, scoreboard, scenario presets, e2e smoke (Phase 6) (9d70fa8)
  • mod+server: In-memory MessageBus + send/recv tools (Phase 5) (29ce923)
  • mod+server: Turn-based opt-in + TurnAdvanceCommand (Phase 4) (dd3350a)
  • mod: Agents.json loader + whoami / session_info commands (Phase 2 C# side) (6bd9296)
  • mod: Introduce Session/Agent identity plumbing (Phase 1 of multi-agent v0.3) (c6a83ae)
  • mod: Split AdvanceTime permission so FactionPlayers can fast-forward (3077e8b)
  • mod: Wire permissions + faction binding + fog-of-war (Phase 3) (88083ff)
  • server: Switch to Authorization: Bearer + add whoami / session_info tools (Phase 2 Python) (c1546fd)

Bug Fixes

  • ci: Auto-enable GitHub Pages on first docs deploy (3a8060d)
  • ci: Exclude github issue forms from check-yaml + drop csharpier from pre-commit + simplify MCP self-check (8546502)
  • ci: Pass ruff/mypy/pre-commit on server + tolerate mod-build limitation (dba154b)
  • ci: Unstick csharpier lint + mkdocs strict build (both pre-existing breakage) (6bf983a)

Dependencies

  • Bump FluentAssertions from 6.12.1 to 6.12.2 (#13) (7fbf32e)
  • Bump HarmonyX from 2.10.2 to 2.16.1 (#7) (506bc65)
  • Bump Newtonsoft.Json from 13.0.3 to 13.0.4 (#9) (5cf0bdd)
  • Bump xunit from 2.9.2 to 2.9.3 (#10) (562aea8)

Documentation

  • Add CLAUDE.md (auto-loaded context for Claude Code sessions) + cross-ref from CONTRIBUTING (acfcdb1)
  • multi-agent: Walkthrough + protocol + command-reference updates (Phase 7) (194a419)
  • Refresh all .md to v0.3 — 26 tools, multi-agent, both auth headers (b73dabb)

0.2.0 (2026-05-16)

Features

  • mod,server: Add generate_world / save_world / load_world (2694bc0)
  • mod,server: Batch Phase 2/3 — spawn + paint_tile + 6 read commands (cae7882)
  • mod,server: Control commands — pause, resume, set_speed (aa276fc)
  • mod,server: Implement discovery primitives (list_tiles/actors/powers) (a098056)
  • mod,server: Invoke_power primitive (universal action via GodPower delegate) (a47f8e3)
  • mod: Scaffold BepInEx C# plugin (ffb0278)
  • server: Scaffold Python MCP server with auth-aware bridge client (76d0c2f)

Bug Fixes

  • ci: Bump astral-sh/setup-uv from v4 (nonexistent) to v6 (46fd1f2)
  • ci: Replace email-obfuscation artifact in pre-commit/action ref (3544683)
  • mod: Inject dispatcher into PlayerLoop instead of MonoBehaviour.Update (435583f)
  • mod: List_kingdoms/list_cities + kingdoms_alive/cities_alive counters now report live entries (98a8a1c)
  • mod: Switch to TcpListener + IPAddress.Loopback, decouple from MonoBehaviour lifecycle (c75d3b8)

Documentation

  • Claude Code wiring recipe + dense god-mode prompt for live agent test (b08a6ae)
  • readme: Rewrite as proper public landing page (5ee1ca0)
  • scenario: Fix docstring path after move to examples/scenarios/ (0bc6f0c)

[0.1.1] — 2026-05-16

Fixed

  • worldbox_list_kingdoms and worldbox_list_cities now return live entries instead of always an empty list. Root cause: the reflection helper looked for getSimpleList() on the manager, which only exists on SimSystemManager<,> (the actor side) — never on MetaSystemManager<,> (the kingdom / city side). Both manager hierarchies share a common CoreSystemManager<,> base that implements IEnumerable<T>, so the fix iterates via the C# interface instead of a specific method name.
  • worldbox_get_world_state.kingdoms_alive / cities_alive now report the real counts (same root cause, same fix — replaced the manual list count with the Count property inherited from CoreSystemManager).

Changed

  • docs/game-api-notes.md updated with verified reflection paths for every command (spawn, paint_tile, invoke_power, pause/resume/set_speed, generate/save/load world, screenshot), the WorldTimeScaleAsset ids actually accepted (including the undocumented x10, x15, x20), and the CoreSystemManager iteration contract.
  • docs/command-reference.md rewritten as a real reference (was a Phase-3 stub). Covers the 20 tools, their args, and the full error envelope.
  • docs/index.md and README.md reconciled: tool count is 20 in both places (was inconsistently 19 and 20).
  • docs/install/claude-code.md: simplified — uvx worldbox-mcp is now the primary path (v0.1.0 is published on PyPI as of this release cycle); local-clone path kept as a fallback for testing unreleased commits.
  • docs/compatibility.md upgraded with a real entry: WorldBox 0.51.2 × mod 0.1.1 is marked ✅ validated end-to-end.

[0.1.0] — 2026-05-16

Added

  • First public release. 19 mod commands surfaced as 20 MCP tools (+ worldbox_capabilities meta tool):
  • Meta: health, capabilities
  • Discovery: list_tiles, list_actors, list_powers
  • Action: invoke_power, spawn, paint_tile
  • Read: get_world_state, get_tile, list_kingdoms, list_cities, query_actors, screenshot
  • Control: pause, resume, set_speed, generate_world, save_world, load_world
  • BepInEx 5.x C# plugin (WorldBoxBridge) with HTTP API on 127.0.0.1:8723 and per-install auth token.
  • Python MCP server published on PyPI as worldbox-mcpuvx worldbox-mcp for instant use from any MCP client.
  • Universal reflection-based discovery: AssetCatalog enumerates any of the ~150 typed asset libraries on AssetManager via the uniform AssetLibrary<T> contract.
  • MainThreadDispatcher injected into Unity's PlayerLoop Update phase (rather than a MonoBehaviour.Update() — that gets destroyed shortly after Awake on this game).
  • Levenshtein-based did_you_mean suggestions on every UNKNOWN_ASSET error.
  • End-to-end ecology demo at examples/scenarios/ecology_smoke.py.
  • Per-client wiring recipes for Claude Code / OpenCode / Codex / Cursor / Continue.

Known issues

  • list_kingdoms / list_cities / get_world_state.{kingdoms,cities}_alive always return 0 even when kingdoms exist — fixed in 0.1.1.