49 Commits

Author SHA1 Message Date
394a9b8355 Merge pull request 'Implement robust logging and enhanced event coverage' (#6) from feature/robust-logging into main
All checks were successful
Smoke tests / Build and smoke test (push) Successful in 1m27s
Reviewed-on: #6
2026-03-19 21:16:40 -06:00
7bab50b431 Merge branch 'main' into feature/robust-logging
All checks were successful
Smoke tests / Build and smoke test (pull_request) Successful in 1m28s
Smoke tests / Build and smoke test (push) Successful in 1m28s
2026-03-19 21:11:44 -06:00
AI Agent
b81362d4d1 Implement robust logging with flexi_logger and update CI to verify logs
Some checks failed
Smoke tests / Build and smoke test (pull_request) Successful in 1m30s
Smoke tests / Build and smoke test (push) Has been cancelled
2026-03-19 21:08:04 -06:00
93b1c1e301 Merge pull request 'Add tests for weather and time of day system' (#5) from feature/weather-time into main
All checks were successful
Smoke tests / Build and smoke test (push) Successful in 1m23s
Reviewed-on: #5
2026-03-19 17:43:52 -06:00
d9f2929c0c Merge branch 'main' into feature/weather-time
All checks were successful
Smoke tests / Build and smoke test (push) Successful in 1m24s
Smoke tests / Build and smoke test (pull_request) Successful in 1m25s
2026-03-19 17:38:05 -06:00
AI Agent
2689f9e29e Add tests for weather and time of day system
Some checks failed
Smoke tests / Build and smoke test (push) Has been cancelled
Smoke tests / Build and smoke test (pull_request) Successful in 1m23s
2026-03-19 17:01:31 -06:00
8b49ef2c46 Merge pull request 'Implement weather and time of day system' (#4) from feature/weather-time into main
All checks were successful
Smoke tests / Build and smoke test (push) Successful in 1m22s
2026-03-19 17:00:04 -06:00
AI Agent
1f4955db82 Implement weather and time of day system
All checks were successful
Smoke tests / Build and smoke test (push) Successful in 1m20s
Smoke tests / Build and smoke test (pull_request) Successful in 1m24s
2026-03-19 16:58:06 -06:00
03122f2901 Merge pull request 'Feature: Dynamic command discovery and enhanced RPC testing' (#3) from feature/dynamic-commands into main
All checks were successful
Smoke tests / Build and smoke test (push) Successful in 1m20s
Reviewed-on: #3
2026-03-19 16:08:59 -06:00
AI Agent
678543dd9a Merge origin/main into feature/dynamic-commands
All checks were successful
Smoke tests / Build and smoke test (push) Successful in 1m20s
Smoke tests / Build and smoke test (pull_request) Successful in 1m23s
Restore multi-step smoke workflow (openssh-client, netcat, wait-for-tcp).
Resolve run-tests.sh and TESTING.md with feature JSON-RPC coverage; add
matching Smoke - JSON-RPC list_commands workflow step.

Made-with: Cursor
2026-03-19 15:56:45 -06:00
AI Agent
0914b5a32b Replace sleep with wait-for-tcp script in run-tests.sh and CI workflow to improve reliability of smoke tests. Update TESTING.md to include prerequisites for the new script.
All checks were successful
Smoke tests / Build and smoke test (push) Successful in 1m17s
2026-03-19 15:47:21 -06:00
AI Agent
1a545bbae7 Refactor run-tests.sh to source individual test scripts and update TESTING.md for clarity on smoke test execution. CI now sets SKIP_SMOKE_BUILD to optimize the workflow.
All checks were successful
Smoke tests / Build and smoke test (push) Successful in 1m18s
2026-03-19 15:39:32 -06:00
AI Agent
3a2a606c4a needed tools
All checks were successful
Smoke tests / Build and smoke test (push) Successful in 1m12s
2026-03-19 15:30:21 -06:00
AI Agent
f183daa16c Feature: dynamic command discovery for JSON-RPC and enhanced testing
Some checks failed
Smoke tests / Build and smoke test (push) Failing after 1m2s
2026-03-19 15:22:39 -06:00
3baa0091f9 Merge pull request 'Feature: Shops, Economy and Enhanced NPC Interactions' (#2) from feature/shops-and-interactions into main
All checks were successful
Smoke tests / Build and smoke test (push) Successful in 1m2s
Reviewed-on: #2
2026-03-19 09:59:10 -06:00
AI Agent
87baaee46f Finalize shops, interactions and world data
All checks were successful
Smoke tests / Build and smoke test (push) Successful in 1m53s
2026-03-19 08:12:28 -06:00
AI Agent
52b333fa48 Update world data with dialogue, currency, and shop inventories 2026-03-17 13:34:36 -06:00
AI Agent
0722a2f1d7 Implement currency, shops, and enhanced NPC interaction system 2026-03-17 13:31:33 -06:00
AI Agent
2e1794b799 Fix: Rename unused jsonrpc field to _jsonrpc to silence warning
All checks were successful
Smoke tests / Build and smoke test (push) Successful in 1m1s
2026-03-17 10:14:31 -06:00
df757ba37d Merge pull request 'Fix smoke tests and resolve CI timeouts' (#1) from mcp-integration into main
All checks were successful
Smoke tests / Build and smoke test (push) Successful in 1m6s
Reviewed-on: #1
2026-03-17 10:00:19 -06:00
AI Agent
ebdfa16aa5 Fix smoke tests: update movement for new spawn point and resolve Test 6 timeout
All checks were successful
Smoke tests / Build and smoke test (push) Successful in 1m49s
2026-03-17 09:53:01 -06:00
AI Agent
dd517d8851 Add JSON-RPC interface and refactor for MCP support
All checks were successful
Smoke tests / Build and smoke test (push) Successful in 1h0m43s
2026-03-16 19:19:21 -06:00
AI Agent
4e41038555 Implement Lawold capital city: 49 rooms, 59 NPCs, and full world integration
Some checks failed
Smoke tests / Build and smoke test (push) Has been cancelled
2026-03-16 13:51:36 -06:00
def077c645 fix
Some checks failed
Smoke tests / Build and smoke test (push) Has been cancelled
2026-03-14 18:39:06 -06:00
AI Agent
2157b45486 Enhance error handling in ssh_mud function by temporarily disabling exit on error. This allows for graceful handling of MUD connection closures without terminating the script prematurely.
Some checks failed
Smoke tests / Build and smoke test (push) Has been cancelled
2026-03-14 18:32:54 -06:00
AI Agent
f2f1699351 Enable verbose output in run-tests.sh by adding the '-x' flag to the set command for improved debugging.
Some checks failed
Smoke tests / Build and smoke test (push) Failing after 34s
2026-03-14 18:30:58 -06:00
AI Agent
014730e2f7 Refactor SSH command in run-tests.sh to handle MUD connection closure gracefully
Some checks failed
Smoke tests / Build and smoke test (push) Failing after 34s
- Introduced a new function `ssh_mud` to encapsulate SSH command execution and treat exit code 255 as a success.
- Updated all SSH calls in the test script to use the new function for improved error handling.
2026-03-14 18:29:19 -06:00
AI Agent
b5fb56c50c Update smoke-tests.yml to install Rust using rustup instead of apt
Some checks failed
Smoke tests / Build and smoke test (push) Failing after 34s
2026-03-14 18:25:33 -06:00
AI Agent
a2ffee0f94 Update documentation and CI to include world validation checks
Some checks failed
Smoke tests / Build and smoke test (push) Failing after 34s
- Added a note in AGENTS.md about using `mudtool validate -w ./world` for schema validation before committing.
- Updated TESTING.md to include a checklist item for the new validation command.
- Modified smoke-tests.yml to run the world validation command as part of the CI workflow.
2026-03-14 18:22:34 -06:00
AI Agent
93862c3c34 Add world validation command to mudtool
Some checks failed
Smoke tests / Build and smoke test (push) Failing after 16s
- Introduced a new command `validate` to check the integrity of world data, ensuring all referenced entities (NPCs, objects, guilds, races, classes, spells) exist and have valid attributes.
- Updated help message to include usage of the new command and its options.
- Added support for specifying a world directory via command line argument.
2026-03-14 18:18:58 -06:00
AI Agent
7c50bbf01a fix tests
Some checks failed
Smoke tests / Build and smoke test (push) Failing after 52s
2026-03-14 18:15:58 -06:00
AI Agent
9c286823e6 Update TESTING.md to include prerequisites for running tests, specifying the need for the Rust toolchain and SSH client.
Some checks failed
Smoke tests / Build and smoke test (push) Failing after 0s
2026-03-14 18:06:54 -06:00
AI Agent
09ff51c2b0 sometests 2026-03-14 17:54:12 -06:00
AI Agent
98967ebe59 Add world content: warden class, druids guild, sylvan race, town expansion, whispering_woods region
Made-with: Cursor
2026-03-14 17:24:09 -06:00
AI Agent
5d290a8396 Add PLANNED.md with features grouped by difficulty
Made-with: Cursor
2026-03-14 17:23:14 -06:00
AI Agent
3a51ad115e gemini added rooms 2026-03-14 17:16:32 -06:00
AI Agent
156410bc39 Clean up README: remove redundant TOML examples, point to schema docs
Made-with: Cursor
2026-03-14 16:41:29 -06:00
AI Agent
e5e7057650 Add TOML reference docs for all world data types
- world/MANIFEST.md: manifest.toml and directory layout
- world/races/RACES.md: race schema (stats, body, natural, resistances, etc.)
- world/classes/CLASSES.md: class schema (base_stats, growth, hidden, guild)
- world/guilds/GUILDS.md: guild schema and [growth]
- world/spells/SPELLS.md: spell schema and types
- world/town/REGION.md: region.toml
- world/town/rooms/ROOMS.md: room schema and exits
- world/town/npcs/NPCS.md: NPC schema, race/class resolution
- world/town/objects/OBJECTS.md: object schema and [stats]

Made-with: Cursor
2026-03-14 16:40:09 -06:00
AI Agent
7b6829b1e8 Give every NPC a race and class, resolved at spawn time
NPCs can now optionally specify race and class in their TOML. When
omitted, race is randomly selected from non-hidden races and class is
determined by the race's default_class or picked randomly from
compatible non-hidden classes. Race/class are re-rolled on each
respawn for NPCs without fixed values, so killing the barkeep may
bring back a different race next time.

New hidden content (excluded from character creation):
- Beast race: for animals (rats, etc.) with feral stats and no
  equipment slots
- Peasant class: weak default for humanoid NPCs
- Creature class: default for beasts/animals

Existing races gain default_class fields (humanoids → peasant,
beast → creature, dragon → random compatible). Look and examine
commands now display NPC race and class.

Made-with: Cursor
2026-03-14 16:32:27 -06:00
AI Agent
598360ac95 Implement guild system with multi-guild, spells, and combat casting
- Guild data model: world/guilds/*.toml defines guilds with stat growth,
  resource type (mana/endurance), spell lists, level caps, and race
  restrictions. Spells are separate files in world/spells/*.toml.

- Player resources: mana and endurance pools added to PlayerStats with
  DB migration. Passive regen for mana/endurance when out of combat.

- Guild commands: guild list/info/join/leave with multi-guild support.
  spells/skills command shows available spells per guild level.

- Spell casting: cast command works in and out of combat. Offensive
  spells queue as CombatAction::Cast and resolve on tick. Heal/utility
  spells resolve immediately out of combat. Mana/endurance costs,
  cooldowns, and damage types all enforced.

- Chargen integration: classes reference a guild via TOML field. On
  character creation, player auto-joins the seeded guild at level 1.
  Class selection shows "→ joins <Guild>" hint.

- Look command: now accepts optional target argument to inspect NPCs
  (stats/attitude), objects, exits, players, or inventory items.

- 4 guilds (warriors/rogues/mages/clerics) and 16 spells created for
  the existing class archetypes.

Made-with: Cursor
2026-03-14 16:13:10 -06:00
AI Agent
bdd1a85ea2 Add optional target argument to look command
look with no args still shows the room. With an argument, it inspects
NPCs (showing stats/attitude), objects (description), exits (destination),
players, or inventory items. Replaces the need to use examine for quick
inspection while keeping full room view as the default.

Made-with: Cursor
2026-03-14 15:42:35 -06:00
AI Agent
005c4faf08 Flexible race system with slot-based equipment and dragon race
- Expand race TOML schema: 7 stats, body shape (size/weight/custom slots),
  natural armor and attacks with damage types, resistances, traits/disadvantages,
  regen multipliers, vision types, XP rate, guild compatibility
- Replace equipped_weapon/equipped_armor with slot-based HashMap<String, Object>
- Each race defines available equipment slots; default humanoid slots as fallback
- Combat uses natural weapons/armor from race when no gear equipped
- DB migration from old weapon/armor columns to equipped_json
- Add Dragon race: huge body, custom slots (forelegs/wings/tail), fire breath,
  natural armor 8, fire immune, slow XP rate for balance
- Update all existing races with expanded fields (traits, resistances, vision, regen)
- Objects gain optional slot field; kind=weapon/armor still works as fallback
- Update chargen to display race traits, size, natural attacks, vision
- Update stats display to show equipment and natural bonuses separately
- Update TESTING.md and AGENTS.md with race/slot system documentation

Made-with: Cursor
2026-03-14 15:37:20 -06:00
AI Agent
3f164e4697 Add README and agent guidelines documentation
README covers building, running, connecting, world data format,
game mechanics, database schema, mudtool usage, and admin system.
AGENTS.md provides architecture overview, concurrency model, coding
conventions, and step-by-step guides for extending the codebase.

Made-with: Cursor
2026-03-14 15:12:49 -06:00
AI Agent
5fd2c10198 Implement tick-based game loop, combat overhaul, and attack-any-NPC
Replace immediate combat with a 3-second tick engine that resolves
actions, NPC AI, status effects, respawns, and passive regeneration.
Players queue combat actions (attack/defend/flee/use) that resolve on
the next tick. Any NPC can now be attacked — non-hostile targets incur
attitude penalties instead of being blocked. Status effects persist in
the database and continue ticking while players are offline.

Made-with: Cursor
2026-03-14 15:12:44 -06:00
AI Agent
a083c38326 Update tests: status effects persist across sessions and tick while offline
Made-with: Cursor
2026-03-14 14:36:13 -06:00
AI Agent
1d344225d3 Update test checklist for tick-based combat and status effect systems
Add test cases for: tick engine lifecycle, tick-based combat resolution,
NPC AI auto-engage, defend command, queued flee/use, status effects
(poison, regen, expiration), passive HP regen, combat RNG variance,
and movement lockout during combat. Update smoke test with tick-timing test.

Made-with: Cursor
2026-03-14 14:34:00 -06:00
AI Agent
e7aac6d1dd Add admin system, registration gate, mudtool database editor, and test checklist
- Add is_admin flag to player DB schema with migration for existing databases
- Add server_settings table for key-value config (registration_open, etc.)
- Add 10 in-game admin commands: promote, demote, kick, teleport, registration,
  announce, heal, info, setattitude, list — all gated behind admin flag
- Registration gate: new players rejected when registration_open=false,
  existing players can still reconnect
- Add mudtool binary with CLI mode (players/settings/attitudes CRUD) and
  interactive ratatui TUI with tabbed interface for database management
- Restructure to lib.rs + main.rs so mudtool shares DB code with server
- Add TESTING.md with comprehensive pre-commit checklist and smoke test script
- Stats and who commands show [ADMIN] badge; help shows admin section for admins

Made-with: Cursor
2026-03-14 14:24:03 -06:00
AI Agent
680f48477e Add SQLite persistence, per-player NPC attitude system, character creation, and combat
- Add trait-based DB layer (db.rs) with SQLite backend for easy future swapping
- Player state persisted to SQLite: stats, inventory, equipment, room position
- Returning players skip chargen and resume where they left off
- Replace boolean hostile flag with 5-tier attitude system (friendly/neutral/wary/aggressive/hostile)
- Per-player NPC attitudes stored in DB, shift on kills with faction propagation
- Add character creation flow (chargen.rs) with data-driven races and classes from TOML
- Add turn-based combat system (combat.rs) with XP, leveling, and NPC respawn
- Add commands: take, drop, inventory, equip, use, examine, talk, attack, flee, stats
- Add world data: 5 races, 4 classes, hostile NPCs (rat, thief), new items

Made-with: Cursor
2026-03-14 13:58:22 -06:00
AI Agent
c82f57a720 Initial commit: SSH MUD server with data-driven world
Rust-based MUD server accepting SSH connections on port 2222.
Players connect with any SSH client, get dropped into a
data-driven world loaded from TOML files at startup.

Binary systems: SSH handling (russh), command parser, game state,
multiplayer broadcast, ANSI terminal rendering.

Data layer: world/ directory with regions, rooms, NPCs, and objects
defined as individual TOML files — no recompile needed to modify.

Commands: look, movement (n/s/e/w/u/d), say, who, help, quit.
Made-with: Cursor
2026-03-14 13:24:34 -06:00