smallworld

Timeline
Login

Timeline

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

10 check-ins

2026-06-18
23:33
Add Fossil wiki as primary persistence layer for smallworld

- smallworld/wiki.py: New module to load world from Fossil wiki pages - fossil wiki list/export via subprocess - Markdown parser for META/DESCRIPTION/EXITS/OWNERSHIP/SCRIPTS sections - Conversion helpers: wiki_to_locations, wiki_to_objects, wiki_to_players, wiki_to_scripts

- smallworld/world.py: Wiki-first loading strategy - load_from_db() now prefers wiki over SQLite - Added load_from_wiki() method - wiki_dir parameter for explicit checkout path

- smallworld/server.py: Wiki-aware startup - Auto-detects _checkout directory next to .fossil file - SMALLWORLD_WIKI_DIR env var override - Falls back to SQLite when no wiki pages exist

- tests/test_wiki.py: 21 new tests for wiki parsing and loading - Added missing cmd_world_state() method to World class

All 223 tests pass (202 existing + 21 new). Leaf check-in: ae5d00ba6c user: geoff tags: trunk

13:04
Add up/down movement buttons to dashboard check-in: e7261e3cd1 user: geoff tags: trunk
12:57
Add up/down movement buttons to dashboard and sync SSE-enabled server - dashboard/templates/dashboard.html: Added "↑ U" and "↓ D" buttons for up/down movement commands - smallworld/server.py: Synced SSE-enabled version with SSERequestHandler and /sse endpoint check-in: 8fe3e13bef user: geoff tags: trunk
07:12
Add RequestHandler alias for backwards compatibility with existing tests check-in: 4b4220a3f0 user: geoff tags: trunk
06:54
Redesign dashboard with 3D visualization, SSE push updates - smallworld/server.py: Added SSERequestHandler with SSE endpoint (/sse) for real-time world state push to clients - dashboard/app.py: Added /sse endpoint that proxies SSE events from world server; SSE support for real-time updates instead of polling - dashboard/templates/dashboard.html: Complete redesign with 3D viewport, location circles, object tooltips, directional exit arrows, force-directed layout, drag-to-rotate viewport, zoom controls, real-time SSE updates check-in: e9eca6967b user: geoff tags: trunk
2026-06-17
13:41
Fix IPv6 support: HTTPSServer auto-detects IPv6 from host string, client strips brackets for urllib, tests use class-level address_family, socket.AF_INET6 for _free_port

- smallworld/server.py: Added HTTPSServer class that detects IPv6 hosts and sets address_family before socket creation; default host "::" (all interfaces) - smallworld/client.py: Strip brackets from IPv6 URLs for urllib.request compatibility - smallworld/puzzle_agent.py: LLM URL "http://[::1]:8000/v1", server URL "http://[::1]:9000" - dashboard/app.py: SMALLWORLD_URL "http://[::1]:9000", DASHBOARD_HOST "::" - tests/test_integration.py, test_server.py, test_server_connections.py: Use class-level address_family assignment for IPv6 socket binding, socket.AF_INET6 for _free_port - tests/test_dashboard.py, test_client.py: Updated URLs to IPv6 - docs/README.md, AGENTS.md, API.md, PUZZLE_AGENT.md, dashboard/README.md: All IPv4 references replaced with IPv6 equivalents check-in: e24e3c66e5 user: geoff tags: trunk

09:29
Switch to IPv6 addressing for all hosts and servers - smallworld/server.py: default host "::" (all interfaces, IPv6), bracket-wrapped URL in print - smallworld/client.py: default base_url "http://[::1]:9000" - smallworld/puzzle_agent.py: LLM URL "http://[::1]:8000/v1", server URL "http://[::1]:9000" - dashboard/app.py: SMALLWORLD_URL "http://[::1]:9000", DASHBOARD_HOST "::", bracket-wrapped URL in print - tests: all host bindings and URLs use "::1" (localhost) or "::" (all interfaces) - docs/README.md, AGENTS.md, API.md, PUZZLE_AGENT.md, dashboard/README.md: all IPv4 references replaced with IPv6 equivalents check-in: 31c6191f38 user: geoff tags: trunk
00:31
Add puzzle agent, dashboard, connection tests, and documentation - smallworld/puzzle_agent.py: autonomous agent that designs, builds, and manages interactive puzzles (4 types: riddle, treasure hunt, number puzzle, pattern maze) using LLM-generated content - dashboard/: Flask web dashboard with SVG world map, player tracking, broadcast log, and interactive controls - tests/test_puzzle_agent.py: 55 tests for puzzle agent (builders, tracker, LLM integration, solution detection) - tests/test_dashboard.py: 18 tests for Flask dashboard routes (all 7 endpoints) - tests/test_server_connections.py: 30 connection-level tests (concurrency, lifecycle, multi-player, timeouts) - docs/PUZZLE_AGENT.md: comprehensive puzzle agent documentation - README.md: updated with puzzle agent and dashboard sections check-in: e790b9e221 user: geoff tags: trunk
2026-06-14
22:27
Initial import: smallworld text world with HTTP API, AI agent, and test suite

- smallworld/ package: models, db, world, server, client, agent, dsl - tests/: full test suite covering all modules - docs/: API reference, DSL reference, agent guide, contributing guide - moo_repl.py: standalone in-memory REPL (legacy) - PLAN.md: test-driven implementation plan check-in: b834e22187 user: geoff tags: trunk

22:15
initial empty check-in check-in: 221bfa4edd user: geoff tags: trunk