From 383f58c2da5815745f265625dc69215891d3ed90 Mon Sep 17 00:00:00 2001 From: autocommit Date: Wed, 20 May 2026 18:12:13 -0700 Subject: [PATCH] =?UTF-8?q?feat(headless):=20=E2=9C=A8=20Add=20suggest=20e?= =?UTF-8?q?ndpoint=20to=20handle=20game=20action/content=20suggestions=20i?= =?UTF-8?q?n=20headless=20player=20API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Lilith Autocommit --- .../engine/scenes/headless/player_api_main.gd | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/game/engine/scenes/headless/player_api_main.gd b/src/game/engine/scenes/headless/player_api_main.gd index 0470be20..71f1615f 100644 --- a/src/game/engine/scenes/headless/player_api_main.gd +++ b/src/game/engine/scenes/headless/player_api_main.gd @@ -475,6 +475,21 @@ func _handle_request(req: Dictionary) -> void: "view": var view_json: String = String(_api.view_json(target_slot)) _emit_response_with_view(rid_int, has_id, view_json) + "suggest": + # Stage 6.1.6 — read-only "what would the in-box AI do here". + # `suggest_json` returns a full `{"ok":...,"actions":[...]}` + # envelope; splice in the request id and forward verbatim. + # Side-effect-free: no state mutation, no turn advance. + var suggest_str: String = String(_api.suggest_json(target_slot)) + var suggest_env: Dictionary = JSON.parse_string(suggest_str) as Dictionary + if suggest_env.is_empty(): + _emit_response_error( + rid_int, has_id, "internal", "gdext returned non-JSON suggest envelope" + ) + return + if has_id: + suggest_env["id"] = rid_int + _write_line(JSON.stringify(suggest_env)) "act": var action_payload: Dictionary = req.get("action", {}) as Dictionary if action_payload.is_empty():