Skip to content

Rules Agent

Overview

The Rules Agent is responsible for validating game rules, managing constraints, and ensuring game mechanics are properly enforced.

Core Architecture

graph TD
    subgraph Rules Agent
        RA[Rules Agent] --> RM[Rules Manager]
        RA --> VM[Validation Module]
    end

    subgraph Components
        VM --> RV[Rule Validator]
        VM --> CV[Constraint Validator]
        VM --> MV[Mechanics Validator]
    end

    RA --> |Uses| Cache[Cache System]
    RA --> |Updates| State[Game State]

Key Components

Rules Management

  • Rule Processing

    • Rule interpretation
    • Context validation
    • Condition checking
  • Constraint System

    • Game mechanics
    • Player limitations
    • World rules
  • Validation Logic

    • Action validation
    • State consistency
    • Rule dependencies
class RulesAgent:
    async def validate(self, action: Action, state: GameState) -> bool:
        # Check basic constraints
        if not await self._validate_basic_constraints(action, state):
            return False

        # Validate game mechanics
        if not await self._validate_mechanics(action, state):
            return False

        # Check complex rules
        return await self._validate_complex_rules(action, state)

Validation System

The Rules Agent validates through multiple layers:

  1. Basic Constraints
  2. Action validity
  3. Player permissions
  4. Resource availability

  5. Game Mechanics

  6. Combat rules
  7. Skill checks
  8. Resource management

  9. Complex Rules

  10. Quest conditions
  11. Story progression
  12. World state

Rule Processing

  • Static Rules

    • Core game mechanics
    • Basic constraints
    • Invariant conditions
  • Dynamic Rules

    • Context-dependent
    • State-based
    • Temporal rules
  • Meta Rules

    • Rule interactions
    • Rule priorities
    • Rule conflicts
class RulesAgent:
    async def process_rules(self, context: RuleContext) -> RuleResult:
        # Process static rules
        static_result = await self._process_static_rules(context)
        if not static_result.valid:
            return static_result

        # Process dynamic rules
        dynamic_result = await self._process_dynamic_rules(context)
        if not dynamic_result.valid:
            return dynamic_result

        # Process meta rules
        return await self._process_meta_rules(context)

Validation Flow

sequenceDiagram
    participant SG as Story Graph
    participant RA as Rules Agent
    participant RM as Rules Manager
    participant ST as State

    SG->>RA: Validate Action
    RA->>RM: Get Rules
    RM-->>RA: Rules
    RA->>ST: Get Current State
    ST-->>RA: State

    par Rule Processing
        RA->>RA: Process Static Rules
        RA->>RA: Process Dynamic Rules
        RA->>RA: Process Meta Rules
    end

    RA-->>SG: Validation Result

Best Practices

  1. Rule Design
  2. Keep rules atomic
  3. Define clear hierarchies
  4. Document dependencies
  5. Handle conflicts

  6. Validation

  7. Validate early
  8. Fail fast
  9. Provide clear errors
  10. Cache results

  11. Performance

  12. Optimize hot paths
  13. Cache rule results
  14. Batch validations
  15. Profile regularly

Error Handling

The Rules Agent implements comprehensive error handling:

try:
    # Validate rules
    result = await self._validate_rules(context)
    return result
except RulesError as e:
    # Handle rule-specific errors
    logger.error("Rule validation error: {}", str(e))
    return RuleResult(valid=False, error=str(e))
except Exception as e:
    # Handle unexpected errors
    logger.error("Unexpected error in rules: {}", str(e))
    return RuleResult(valid=False, error="Internal rules error")

Performance Considerations

  1. Caching Strategy
  2. Rule results caching
  3. State caching
  4. Cache invalidation

  5. Optimization

  6. Rule prioritization
  7. Early termination
  8. Parallel validation

  9. Resource Management

  10. Memory efficiency
  11. CPU utilization
  12. Cache size control