fix(scenes): restore cinema seat controls and ordered romantic lighting
This commit is contained in:
@@ -34,6 +34,11 @@ from cognitive_agent.application.mode_creation_seat_policy import (
|
||||
)
|
||||
from cognitive_agent.application.mode_schedule import ModeSchedule
|
||||
from cognitive_agent.application.mode_schedule_service import public_schedule_status
|
||||
from cognitive_agent.application.mode_scene_ingress import MAX_MODE_SCENE_ACTIONS
|
||||
from cognitive_agent.application.romantic_lighting import (
|
||||
romantic_light_override_refs,
|
||||
romantic_scene,
|
||||
)
|
||||
from cognitive_agent.application.scene_composer import (
|
||||
SCENE_COMPOSER_INSTRUCTIONS,
|
||||
SCENE_PLANNER_VERSION,
|
||||
@@ -1517,6 +1522,17 @@ class CodexAssistantService:
|
||||
requests = normalized.get("requests")
|
||||
if not isinstance(requests, list):
|
||||
raise SceneCompositionError("scene plan requests must be an array")
|
||||
semantics = scene_context.get("scene_semantics")
|
||||
if isinstance(semantics, Mapping) and romantic_scene(semantics.get("mode_name")):
|
||||
replaced_refs = romantic_light_override_refs(scene_context.get("peripheral_actions", []))
|
||||
requests[:] = [request for request in requests if not (
|
||||
isinstance(request, Mapping) and request.get("capability") == "infrared.emit"
|
||||
and any(isinstance(parameter, Mapping)
|
||||
and parameter.get("name") == "capability_ref"
|
||||
and isinstance(parameter.get("value"), str)
|
||||
and parameter.get("value") in replaced_refs
|
||||
for parameter in request.get("parameters", []))
|
||||
)]
|
||||
existing_refs = {
|
||||
str(parameter.get("value") or "").strip()
|
||||
for request in requests
|
||||
@@ -4317,13 +4333,17 @@ class CodexAssistantService:
|
||||
secret=secret,
|
||||
)
|
||||
actions: list[dict[str, object]] = []
|
||||
action_limit = (
|
||||
MAX_MODE_SCENE_ACTIONS
|
||||
if isinstance(result.get("mode_profile_draft"), Mapping)
|
||||
or isinstance(result.get("mode_profile"), Mapping)
|
||||
else 96 if result.get("schedule") else MAX_PLAN_REQUESTS
|
||||
)
|
||||
intent_ir = result.get("intent_ir")
|
||||
if isinstance(intent_ir, dict):
|
||||
spec = intent_ir.get("spec")
|
||||
if isinstance(spec, dict) and isinstance(spec.get("actions"), list):
|
||||
for item in spec["actions"][
|
||||
:96 if result.get("schedule") else MAX_PLAN_REQUESTS
|
||||
]:
|
||||
for item in spec["actions"][:action_limit]:
|
||||
if not isinstance(item, dict):
|
||||
continue
|
||||
safe_action = {
|
||||
@@ -4351,7 +4371,7 @@ class CodexAssistantService:
|
||||
infrared_actions: list[dict[str, object]] = []
|
||||
raw_infrared = result.get("infrared_actions")
|
||||
if isinstance(raw_infrared, list):
|
||||
for item in raw_infrared[:MAX_PLAN_REQUESTS]:
|
||||
for item in raw_infrared[:action_limit]:
|
||||
if not isinstance(item, dict):
|
||||
continue
|
||||
infrared_actions.append(
|
||||
|
||||
Reference in New Issue
Block a user