Revise Claude Code CLI installation message#4
Open
tfcporciuncula wants to merge 44 commits into
Open
Conversation
…vigation, and map rendering Custom Stats & Time Effects: - Custom character stats (hunger, thirst, radiation, etc.) with auto-change over time - Time effects engine with stat consequences at thresholds - Precise time tracking (HH:MM) with auto-elapsed calculation - Timed consequences with --hours parameter for auto-triggering - Auto-detect active character (name optional in commands) Encounter System v6.0: - D&D-based random encounter checks during travel - Distance-based path segmentation with DC scaling - Waypoint creation for stopping encounters - DM-controlled encounter types (combat/social/hazard/loot/flavor) Coordinate Navigation & Maps: - Coordinate system with bearing/distance calculation - A* pathfinding with blocked direction support - Path preference caching for route decisions - ASCII map rendering with fog of war - Tkinter GUI map viewer with terrain visualization - Path intersection detection and automatic splitting Auto-Movement Time: - Travel auto-calculates elapsed time from distance and speed - Time effects applied automatically during movement All features are opt-in and backward-compatible with standard D&D campaigns. Includes 27 tests (all passing) and full documentation.
…ization, refresh button - Terrain colors loaded from campaign-overview.json instead of hardcoded - Auto-scale terrain surface to max 2000px (fixes 30s+ load on large maps) - Viewport-crop rendering eliminates lag at high zoom levels - Add map.sh launcher and clickable Refresh button - Add CHANGELOG.md with version tracking
…cates Connections between locations now stored in ONE place (alphabetically-first location). All modules read edges through connection_utils helpers which reconstruct reverse direction on the fly. Move without existing path is rejected with actionable error message. Map renderers draw each line once. Also: ensure_ascii=False across all json.dumps calls for proper Cyrillic.
Time effects engine now simulates hour-by-hour instead of batch multiplication, re-evaluating rule conditions each tick. Added --sleeping flag for rest periods, condition field for gating effects (e.g. "hp < max"), and auto-split paths when adding locations on existing routes.
Added unified inventory manager with atomic transactions, stackable/unique item system, and auto-migration. Added automated firearms combat resolver with detailed roll breakdowns and PEN vs PROT mechanics. Includes modern campaign template and enhanced plot/consequence managers.
Modular architecture for community expansion packs - modules can be toggled during campaign creation (firearms, survival, coordinates, etc). Enables Mix & Match mechanics and backward compatibility.
Added unified inventory manager, automated firearms combat resolver, modern campaign template, enhanced time effects with conditionals, canonical connections, and module system roadmap to both English and Russian READMEs.
Module system architecture: CORE lib/ has zero module imports. 4 modules extracted: coordinate-navigation, encounter-system, firearms-combat, survival-stats. Each module is self-contained with own lib/, tools/, tests/, rules. CORE tools delegate to module wrappers. 73 module tests passing.
Phase A: Revert CORE lib/ files to upstream - session_manager: remove connection_utils, speed_multiplier, travel calc - location_manager: remove terrain/distance params, canonical storage - time_manager: remove elapsed_hours, precise_time, tick logic - player_manager: remove custom_stat methods (CRUD + CLI) - consequence_manager: remove trigger_hours, hours_elapsed - plot_manager: remove add_plot method - search.py, world_stats.py: remove connection_utils import Phase B: Delete from lib/ - Delete lib/connection_utils.py (lives in coordinate-navigation module) - Delete lib/inventory_manager.py (moved to inventory-system module) Phase C: Modules absorb extracted features - coordinate-navigation: add move + connect actions with metadata - survival-stats: add custom-stat CRUD + time advance with effects - NEW inventory-system: atomic transactions, stackable/unique items - NEW quest-system: plot creation with full metadata Phase D: Bash wrappers delegation - dm-session.sh move → coordinate-navigation module (fallback: CORE) - dm-time.sh --elapsed/--precise-time/--sleeping → survival-stats module - dm-location.sh connect --terrain/--distance → coordinate-navigation module - dm-player.sh custom-stat/custom-stats-list → survival-stats module - dm-inventory.sh → inventory-system module (full delegation) - dm-plot.sh add → quest-system module Verification: zero grep hits for custom code in lib/*.py
…ule imports - Copy connection_utils.py from lib/ history into coordinate-navigation/lib/ - Update all imports: lib.connection_utils → connection_utils (local module) - encounter-system: import connection_utils via sys.path from nav module - survival_engine: remove calls to player_mgr.modify_custom_stat (deleted from CORE) Replace with direct json_ops read/write on character.json All 73 module tests pass.
- Add dm-navigation.sh path check/route/analyze actions (was broken dm-path.sh in tools/) - Add dm-navigation.sh migrate action (wraps migrate-connections.py) - Move migrate-connections.py from tools/ → coordinate-navigation/tools/ - Rewrite tools/dm-path.sh as thin delegator → dm-navigation.sh path - Remove tools/migrate-connections.py (now lives in module) tools/ rule: zero logic, only thin module delegators
…a dispatch_middleware - Add dispatch_middleware() to common.sh: loops modules/*/middleware/<tool>.sh - Rewrite CORE tools to use middleware chain instead of inline module checks - Add 7 middleware files across 4 modules (survival-stats, coord-nav, inventory, quest) - Remove delegator tools: dm-combat, dm-encounter, dm-map, dm-path (modules self-document) - Delete .claude/rules/custom-campaigns.md (content lives in module rules.md) - Move modern-firearms template into firearms-combat module - Delete historical docs/custom-stats-time-effects-plan.md - Fix JsonOps → JsonOperations bug in dm-consequence middleware
… modules - Add dispatch_middleware_help() to common.sh: collects help lines from modules - Fix glob bug: PROJECT_ROOT/.claude/modules/*/middleware/<tool> (was adding .sh.sh) - Add --help handler to all middleware: each module self-documents its own actions - CORE help text stripped of all module-specific flags/actions/examples - Module actions (--elapsed, --from, --bearing, decide, routes, custom-stat, etc.) now appear in help only when the module is installed
- Delete tools/dm-inventory.sh (never in upstream, pure delegator) - dm-plot.sh: remove add case from CORE (not in upstream), dispatch_middleware intercepts - dm-session.sh: remove --speed-multiplier from help (coord-nav module flag, not CORE) - Add dispatch_middleware_help to dm-plot.sh and dm-session.sh help output
- Game rules moved to .claude/rules/dm-rules.md - CLAUDE.md reset to minimal dev-only rules - /dm skill injects dm-rules.md + all module rules.md at startup - DM scans modules dynamically at campaign creation, presents mod menu - Module rules auto-injected into context — DM knows all mechanics from turn one
- Delete test_encounter.py — EncounterManager moved to encounter-system module - Rewrite test_time_effects.py to match actual TimeManager API: - TimeManager only has update_time() and get_time() — no add_time_hours() - No require_active_campaign kwarg on TimeManager - Survival stat changes belong to survival-stats module (has own tests) - Add make_world_state() helper to build CampaignManager-compatible structure - Tests now cover update_time, get_time, precise_time field, config validation
Modules: - merge coordinate-navigation + encounter-system → world-travel - rename survival-stats → custom-stats (generic, no hardcoded hunger/thirst) - remove quest-system module, move add_plot() into CORE plot_manager.py - add README.md to all 4 modules (CORE vs module tables, examples, config) Module system: - module_loader.py rewritten: campaign-overview.json["modules"] as single source of truth - dm-module.sh: add activate/deactivate commands with dependency checks - common.sh: add _module_enabled(), dispatch_middleware_post() (post-hook pattern) - campaign_manager.py: init modules from defaults on campaign creation - module.json: standardized fields (genre_tags, middleware, post_middleware, adds_to_core) CORE additions: - time_manager.py: --elapsed <hours>, stores total_hours_elapsed, auto-ticks consequences - consequence_manager.py: add --hours <N> for timed triggers, tick <hours> command - dm-time.sh: --elapsed flag, calls dispatch_middleware_post after CORE - dm-consequence.sh: tick command, --hours flag - plot_manager.py + dm-plot.sh: add command (moved from quest-system) - save_character.py: normalize stat aliases (constitution→con etc.) - dm-player.sh: save-json via stdin (fix quoting) custom-stats: - replace dm-time.sh middleware with dm-time.sh.post (post-hook) - reads --elapsed from args after CORE runs, no more CORE re-entry Tests: 166/166 passing
Vehicle system (world-travel module): - VehicleManager: dual-map transport (global anchor + internal rooms) - dm-vehicle.sh: create, add-room, board, exit, move, status, map, list - stationary flag: cities/buildings that can't be moved - middleware: dm-session.sh intercepts move when player is inside vehicle - _find_project_root() via pyproject.toml — no more parent.parent.parent chains - 69 tests, all passing Module system: - slot-based rules: .claude/dm/slots/*.md replaces monolithic rules.md - dm-active-modules-rules.sh rewritten for slot loading - dm-continue.md new command - ensure_ascii=False across campaign_manager, session_manager, save_character - dm-module.sh list-verbose, module selection in new-game
- Added recommended module suggestions based on campaign name and tone in new-game.md. - Introduced phase 1.6 for loading module-specific creation rules, detailing how to handle world-building for active modules. - Updated firearms-combat rules.md to clarify when to use the combat system and streamlined the resolving combat section. - Revised inventory-system rules.md to emphasize using the dm-inventory.sh for all inventory changes and added new commands for looting and item usage. - Simplified world-travel rules.md by consolidating navigation and encounter checks, ensuring clarity on mandatory location creation protocols.
- Add 4 built-in narrator styles (epic-heroic, horror-atmospheric, sarcastic-puns, serious-cinematic) - Add dm-narrator.sh CLI (list, recommend, apply, show, remove) - Add Phase 1.7 narrator selection in /new-game - Fix /dm-continue rules loading: use Read tool via /tmp/dm-rules.md to avoid Bash truncation - Rewrite dm-active-modules-rules.sh for reliability - Update world-travel/rules.md with hierarchy docs
…nts, BFS navigation, GUI drill-down Adds world→compound→interior hierarchy to the flat locations.json model. Compounds contain children (rooms/zones), entry points with event configs, and support nested compounds. GUI gets dual-mode: global map + interior force-directed graph with breadcrumb navigation. New files: - hierarchy_manager.py — core API (create, enter, exit, move, tree, validate) - force_layout.py — spring algorithm for interior layout - dm-hierarchy.sh — CLI wrapper - migrate_to_hierarchy.py — vehicle→hierarchy migration - test_hierarchy_manager.py — 60 tests Modified: - location_manager.py — hierarchy kwargs (parent, type, children) - session_manager.py — location_stack, scope-aware connections - vehicle_manager.py — dual-write (vehicle + hierarchy fields) - map_gui.py — interior view, breadcrumb, compound squares - dm-session.sh — hierarchy-aware move interception 265 tests passing (was 205).
…ation-rules - Fix hierarchy_manager BFS to use connection_utils.get_connections() (canonical connections stored one-way, BFS needs both directions) - Fix dm-hierarchy.sh --via → --entry-point translation - Add Part 4 (Hierarchical Locations) to world-travel/rules.md - Update creation-rules.md Step 7: compounds replace vehicles flow - Migrate FTL campaign to hierarchy format (not committed — gitignored)
…solve - Pre-generate all compound layouts at startup, instant switching - Smart refresh: hash-based, only regenerate changed compounds - Vehicle move: stopping distance (sum of radii), no overlap - Vehicle connections: wipe and rebuild by proximity on every move - Player auto-resolve: compound → entry point on session start - GUI: player highlighted on global map, double-click to enter compound - Enter button for compounds, description in info panel - Rewrite rules.md and creation-rules.md — cleaner, no bloat
…gation fixes - Add campaign-rules templates and dm-campaign-rules.sh tool - Improve survival engine with rest/sleep mechanics - Fix firearms resolver edge cases - Enhance world-travel GUI caching and navigation - Add hierarchical location support to CORE - Update dm-continue and new-game command rules - Update TODO with pending tasks
feat: Modular expansion system with 4 modules + middleware architecture
CORE (lib/, tools/) reverted to pre-merge 9b6660c state with only sanctioned changes: ensure_ascii=False throughout, require_active_campaign + Optional[str] annotations in entity_manager/player_manager. Advanced infrastructure moved from tools/ and lib/ into .claude/modules/: - lib/module_loader.py → .claude/modules/module_loader.py - tools/dm-module.sh → .claude/modules/infrastructure/tools/ - tools/dm-active-modules-*.sh → .claude/modules/infrastructure/ - tools/dm-campaign-rules.sh → .claude/modules/infrastructure/ - tools/dm-narrator.sh → .claude/modules/infrastructure/ - .claude/dm/slots/ → .claude/modules/dm-slots/ - .claude/campaign-rules-templates/ → .claude/modules/campaign-rules-templates/ - .claude/narrator-styles/ → .claude/modules/narrator-styles/ - new: .claude/modules/infrastructure/common-advanced.sh Commands updated: - dm.md: restored to monolithic vanilla version; delegates to /dm-continue when campaign-overview.json has "advanced_mode": true - new-game.md: restored to vanilla + Phase 1.1 game mode choice (Classic/ Advanced); Advanced phases reference .claude/modules/infrastructure/ - dm-continue.md: paths updated to .claude/modules/infrastructure/ Tests: test_time_effects.py moved to .claude/modules/custom-stats/tests/. 79 tests pass. README rewritten to document both modes clearly, with accurate tool paths and correct Getting Started instructions. Thanks to DrSeedon for the PR that introduced the advanced module system — those features are now fully accessible via Advanced mode at /new-game.
…r easy onboarding
Updated installation instructions for Claude Code CLI since npm isn't the recommended way to install it anymore — I think it's easier to just point to the website since 1. it can change again and 2. the instructions are different per platform.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Updated installation instructions for Claude Code CLI since npm isn't the recommended way to install it anymore — I think it's easier to just point to the website since 1. it can change again and 2. the instructions are different per platform.