Files
agentic-mobile-control/apps/device-host-agent/tests/test_execution.py
T
q792602257 1107ace89c
Tests / Test passed: 626
Default-enable AI Planner in Host Agent; propose cloud-planner-proxy
- Host Agent now defaults AI_PLANNER_ENABLED=true (opt-out via env),
  scoped to apps/device-host-agent/host_agent/execution.py only; the
  shared runtime.planner_config default (disabled) is unchanged.
- Add openspec proposal for cloud-planner-proxy: centralize LLM
  provider config/credentials on the Cloud Control Plane and let the
  Host Agent proxy AI Planner decisions through it instead of holding
  provider API keys locally. Proposal only, no implementation yet.
2026-07-13 20:50:35 +08:00

69 lines
2.3 KiB
Python

from __future__ import annotations
from pathlib import Path
import pytest
from device.manager import DeviceManager
from host_agent.execution import create_execution_factories
from runtime.ai_planner import AIPlanner
from runtime.planner import Planner
from runtime.task import TaskRunner
from workflow.runner import WorkflowRunner
from workflow.store import WorkflowStore
def test_execution_factories_compose_existing_runtime_and_workflow(tmp_path) -> None:
manager = DeviceManager()
workflow_store = WorkflowStore(tmp_path / "workflows.sqlite3")
factories = create_execution_factories(
manager,
workflow_store=workflow_store,
)
task_runner = factories.task_runner_factory()
workflow_runner = factories.workflow_runner_factory()
assert isinstance(task_runner, TaskRunner)
assert isinstance(workflow_runner, WorkflowRunner)
assert workflow_runner.store is workflow_store
assert isinstance(workflow_runner.task_runner_factory(), TaskRunner)
def test_created_task_runner_defaults_to_ai_planner(
tmp_path, monkeypatch: pytest.MonkeyPatch
) -> None:
monkeypatch.delenv("AI_PLANNER_ENABLED", raising=False)
manager = DeviceManager()
factories = create_execution_factories(
manager, workflow_store=WorkflowStore(tmp_path / "workflows.sqlite3")
)
task_runner = factories.task_runner_factory()
assert isinstance(task_runner.planner, AIPlanner)
def test_created_task_runner_honors_explicit_ai_planner_opt_out(
tmp_path, monkeypatch: pytest.MonkeyPatch
) -> None:
monkeypatch.setenv("AI_PLANNER_ENABLED", "false")
manager = DeviceManager()
factories = create_execution_factories(
manager, workflow_store=WorkflowStore(tmp_path / "workflows.sqlite3")
)
task_runner = factories.task_runner_factory()
assert type(task_runner.planner) is Planner
def test_runtime_owned_packages_do_not_import_host_or_cloud_concerns() -> None:
root = Path(__file__).resolve().parents[3]
forbidden = ("import cloud", "from cloud", "import host_agent", "from host_agent")
for package in ("core", "device", "driver", "runtime", "tools"):
for path in (root / package).rglob("*.py"):
source = path.read_text(encoding="utf-8")
assert not any(token in source for token in forbidden), path