merge: sync feature/N7Web into feature/N7Web-Tech

# Conflicts:
#	apps/web-console/service-worker.js
#	src/cognitive_agent/application/mode_profile.py
#	src/cognitive_agent/application/mode_scene_catalog.py
#	src/cognitive_agent/application/seat_service.py
#	tests/e2e/test_seat_web_api.py
#	tests/unit/test_assistant_frontend_contract.py
#	tests/unit/test_vue_frontend_contract.py
This commit is contained in:
Miayui
2026-09-17 11:16:48 +08:00
31 changed files with 2925 additions and 127 deletions
@@ -16,8 +16,13 @@ from cognitive_agent.generated.can_semantic_protocol import (
@pytest.fixture(scope="module")
def vehicle_service() -> SeatDemoService:
return SeatDemoService()
def vehicle_service(tmp_path_factory: pytest.TempPathFactory) -> SeatDemoService:
service = SeatDemoService()
service.mode_profiles = type(service.mode_profiles)(
service.root / "config" / "modes",
user_root=tmp_path_factory.mktemp("assistant-capability-modes"),
)
return service
def _catalog(
@@ -269,7 +274,16 @@ def test_all_modes_are_discoverable_and_reference_callable_capabilities(
"zero_gravity",
}
assert all(item["assistant_callable"] is True for item in modes)
assert all(set(item["operation_ids"]) <= callable_ids for item in modes)
assert all(
set(item["operation_ids"])
<= callable_ids | set(item.get("n7_transfer_operation_ids", []))
for item in modes
)
assert all(
not item.get("n7_transfer_operation_ids")
or item.get("origin") == "n7_mqtt"
for item in modes
)
assert (
next(item for item in modes if item["id"] == "baby_nap")[
"all_operations_have_native_binding"