|
|
@@ -0,0 +1,105 @@
|
|
|
+from __future__ import annotations
|
|
|
+
|
|
|
+import inspect
|
|
|
+from pathlib import Path
|
|
|
+
|
|
|
+from agent.core.runner import AgentRunner
|
|
|
+from agent.orchestration.coordinator import TaskCoordinator
|
|
|
+from agent.trace.store import FileSystemTraceStore
|
|
|
+from agent.tools.builtin import browser
|
|
|
+from agent.tools.builtin.browser import baseClass
|
|
|
+from agent.tools.builtin.feishu.feishu_agent import FeishuAgent, execute_tool
|
|
|
+
|
|
|
+
|
|
|
+def _parameter_names(callable_obj) -> tuple[str, ...]:
|
|
|
+ return tuple(inspect.signature(callable_obj).parameters)
|
|
|
+
|
|
|
+
|
|
|
+def test_runner_and_coordinator_public_call_shapes_are_frozen() -> None:
|
|
|
+ assert _parameter_names(AgentRunner) == (
|
|
|
+ "trace_store",
|
|
|
+ "tool_registry",
|
|
|
+ "llm_call",
|
|
|
+ "utility_llm_call",
|
|
|
+ "skills_dir",
|
|
|
+ "goal_tree",
|
|
|
+ "debug",
|
|
|
+ "logger_name",
|
|
|
+ "task_coordinator",
|
|
|
+ "tool_policy",
|
|
|
+ )
|
|
|
+ assert _parameter_names(AgentRunner.run) == (
|
|
|
+ "self",
|
|
|
+ "messages",
|
|
|
+ "config",
|
|
|
+ "inject_skills",
|
|
|
+ "skill_recency_threshold",
|
|
|
+ )
|
|
|
+ assert _parameter_names(AgentRunner.run_result) == (
|
|
|
+ "self",
|
|
|
+ "messages",
|
|
|
+ "config",
|
|
|
+ "on_event",
|
|
|
+ "inject_skills",
|
|
|
+ )
|
|
|
+ assert _parameter_names(TaskCoordinator) == (
|
|
|
+ "task_store",
|
|
|
+ "artifact_store",
|
|
|
+ "trace_store",
|
|
|
+ "config",
|
|
|
+ "event_sink",
|
|
|
+ "executor",
|
|
|
+ "validation_policy",
|
|
|
+ "deterministic_validator",
|
|
|
+ "evidence_provider",
|
|
|
+ )
|
|
|
+ assert _parameter_names(TaskCoordinator.decide_task) == (
|
|
|
+ "self",
|
|
|
+ "root_trace_id",
|
|
|
+ "task_id",
|
|
|
+ "validation_id",
|
|
|
+ "action",
|
|
|
+ "payload",
|
|
|
+ "idempotency_key",
|
|
|
+ )
|
|
|
+
|
|
|
+
|
|
|
+def test_trace_store_public_state_and_constructor_remain_stable(tmp_path) -> None:
|
|
|
+ assert str(inspect.signature(FileSystemTraceStore)) == "(base_path: str = '.trace')"
|
|
|
+ store = FileSystemTraceStore(str(tmp_path))
|
|
|
+ assert isinstance(store.base_path, Path)
|
|
|
+ assert store.base_path == tmp_path
|
|
|
+
|
|
|
+
|
|
|
+def test_legacy_browser_package_exports_keep_object_identity() -> None:
|
|
|
+ legacy_exports = (
|
|
|
+ "init_browser_session",
|
|
|
+ "get_browser_session",
|
|
|
+ "get_browser_live_url",
|
|
|
+ "cleanup_browser_session",
|
|
|
+ "kill_browser_session",
|
|
|
+ "browser_navigate",
|
|
|
+ "browser_search",
|
|
|
+ "browser_back",
|
|
|
+ "browser_interact",
|
|
|
+ "browser_scroll",
|
|
|
+ "browser_screenshot",
|
|
|
+ "browser_elements",
|
|
|
+ "browser_read",
|
|
|
+ "browser_extract",
|
|
|
+ "browser_tabs",
|
|
|
+ "browser_cookies",
|
|
|
+ "browser_wait",
|
|
|
+ "browser_js",
|
|
|
+ "browser_download",
|
|
|
+ )
|
|
|
+
|
|
|
+ for name in legacy_exports:
|
|
|
+ assert getattr(browser, name) is getattr(baseClass, name)
|
|
|
+
|
|
|
+
|
|
|
+def test_feishu_agent_legacy_entrypoints_keep_call_shapes() -> None:
|
|
|
+ assert str(inspect.signature(FeishuAgent)) == "()"
|
|
|
+ assert _parameter_names(FeishuAgent.handle_message) == ("self", "event")
|
|
|
+ assert _parameter_names(FeishuAgent.start) == ("self",)
|
|
|
+ assert _parameter_names(execute_tool) == ("name", "arguments")
|