Some checks failed
Deploy Nexus / deploy (push) Failing after 4s
Implements the Hermes observation/control path for local Bannerlord per GamePortal Protocol. ## New Components - nexus/bannerlord_harness.py (874 lines) - MCPClient for JSON-RPC communication with MCP servers - capture_state() → GameState with visual + Steam context - execute_action() → ActionResult for all input types - observe-decide-act loop with telemetry through Hermes WS - Bannerlord-specific actions (inventory, party, save/load) - Mock mode for testing without game running - mcp_servers/desktop_control_server.py (14KB) - 13 desktop automation tools via pyautogui - Screenshot, mouse, keyboard control - Headless environment support - mcp_servers/steam_info_server.py (18KB) - 6 Steam Web API tools - Mock mode without API key, live mode with STEAM_API_KEY - tests/test_bannerlord_harness.py (37 tests, all passing) - GameState/ActionResult validation - Mock mode action tests - ODA loop tests - GamePortal Protocol compliance tests - docs/BANNERLORD_HARNESS_PROOF.md - Architecture documentation - Proof of ODA loop execution - Telemetry flow diagrams - examples/harness_demo.py - Runnable demo showing full ODA loop ## Updates - portals.json: Bannerlord metadata per GAMEPORTAL_PROTOCOL.md - status: active, portal_type: game-world - app_id: 261550, window_title: 'Mount & Blade II: Bannerlord' - telemetry_source: hermes-harness:bannerlord ## Verification pytest tests/test_bannerlord_harness.py -v 37 passed, 2 skipped, 11 warnings Closes #722
111 lines
3.1 KiB
JSON
111 lines
3.1 KiB
JSON
[
|
|
{
|
|
"id": "morrowind",
|
|
"name": "Morrowind",
|
|
"description": "The Vvardenfell harness. Ash storms and ancient mysteries.",
|
|
"status": "online",
|
|
"color": "#ff6600",
|
|
"position": { "x": 15, "y": 0, "z": -10 },
|
|
"rotation": { "y": -0.5 },
|
|
"destination": {
|
|
"url": "https://morrowind.timmy.foundation",
|
|
"type": "harness",
|
|
"params": { "world": "vvardenfell" }
|
|
}
|
|
},
|
|
{
|
|
"id": "bannerlord",
|
|
"name": "Bannerlord",
|
|
"description": "Calradia battle harness. Massive armies, tactical command.",
|
|
"status": "active",
|
|
"color": "#ffd700",
|
|
"position": { "x": -15, "y": 0, "z": -10 },
|
|
"rotation": { "y": 0.5 },
|
|
"portal_type": "game-world",
|
|
"world_category": "strategy-rpg",
|
|
"environment": "production",
|
|
"access_mode": "operator",
|
|
"readiness_state": "active",
|
|
"telemetry_source": "hermes-harness:bannerlord",
|
|
"owner": "Timmy",
|
|
"app_id": 261550,
|
|
"window_title": "Mount & Blade II: Bannerlord",
|
|
"destination": {
|
|
"url": "https://bannerlord.timmy.foundation",
|
|
"type": "harness",
|
|
"action_label": "Enter Calradia",
|
|
"params": { "world": "calradia" }
|
|
}
|
|
},
|
|
{
|
|
"id": "workshop",
|
|
"name": "Workshop",
|
|
"description": "The creative harness. Build, script, and manifest.",
|
|
"status": "online",
|
|
"color": "#4af0c0",
|
|
"position": { "x": 0, "y": 0, "z": -20 },
|
|
"rotation": { "y": 0 },
|
|
"destination": {
|
|
"url": "https://workshop.timmy.foundation",
|
|
"type": "harness",
|
|
"params": { "mode": "creative" }
|
|
}
|
|
},
|
|
{
|
|
"id": "archive",
|
|
"name": "Archive",
|
|
"description": "The repository of all knowledge. History, logs, and ancient data.",
|
|
"status": "online",
|
|
"color": "#0066ff",
|
|
"position": { "x": 25, "y": 0, "z": 0 },
|
|
"rotation": { "y": -1.57 },
|
|
"destination": {
|
|
"url": "https://archive.timmy.foundation",
|
|
"type": "harness",
|
|
"params": { "mode": "read" }
|
|
}
|
|
},
|
|
{
|
|
"id": "chapel",
|
|
"name": "Chapel",
|
|
"description": "A sanctuary for reflection and digital peace.",
|
|
"status": "online",
|
|
"color": "#ffd700",
|
|
"position": { "x": -25, "y": 0, "z": 0 },
|
|
"rotation": { "y": 1.57 },
|
|
"destination": {
|
|
"url": "https://chapel.timmy.foundation",
|
|
"type": "harness",
|
|
"params": { "mode": "meditation" }
|
|
}
|
|
},
|
|
{
|
|
"id": "courtyard",
|
|
"name": "Courtyard",
|
|
"description": "The open nexus. A place for agents to gather and connect.",
|
|
"status": "online",
|
|
"color": "#4af0c0",
|
|
"position": { "x": 15, "y": 0, "z": 10 },
|
|
"rotation": { "y": -2.5 },
|
|
"destination": {
|
|
"url": "https://courtyard.timmy.foundation",
|
|
"type": "harness",
|
|
"params": { "mode": "social" }
|
|
}
|
|
},
|
|
{
|
|
"id": "gate",
|
|
"name": "Gate",
|
|
"description": "The transition point. Entry and exit from the Nexus core.",
|
|
"status": "standby",
|
|
"color": "#ff4466",
|
|
"position": { "x": -15, "y": 0, "z": 10 },
|
|
"rotation": { "y": 2.5 },
|
|
"destination": {
|
|
"url": "https://gate.timmy.foundation",
|
|
"type": "harness",
|
|
"params": { "mode": "transit" }
|
|
}
|
|
}
|
|
]
|