test_governance_public_contract.py 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. from __future__ import annotations
  2. import inspect
  3. from pathlib import Path
  4. from agent.core.runner import AgentRunner
  5. from agent.orchestration.coordinator import TaskCoordinator
  6. from agent.trace.store import FileSystemTraceStore
  7. from agent.tools.builtin import browser
  8. from agent.tools.builtin.browser import baseClass
  9. from agent.tools.builtin.feishu.feishu_agent import FeishuAgent, execute_tool
  10. def _parameter_names(callable_obj) -> tuple[str, ...]:
  11. return tuple(inspect.signature(callable_obj).parameters)
  12. def test_runner_and_coordinator_public_call_shapes_are_frozen() -> None:
  13. assert _parameter_names(AgentRunner) == (
  14. "trace_store",
  15. "tool_registry",
  16. "llm_call",
  17. "utility_llm_call",
  18. "skills_dir",
  19. "goal_tree",
  20. "debug",
  21. "logger_name",
  22. "task_coordinator",
  23. "tool_policy",
  24. )
  25. assert _parameter_names(AgentRunner.run) == (
  26. "self",
  27. "messages",
  28. "config",
  29. "inject_skills",
  30. "skill_recency_threshold",
  31. )
  32. assert _parameter_names(AgentRunner.run_result) == (
  33. "self",
  34. "messages",
  35. "config",
  36. "on_event",
  37. "inject_skills",
  38. )
  39. assert _parameter_names(TaskCoordinator) == (
  40. "task_store",
  41. "artifact_store",
  42. "trace_store",
  43. "config",
  44. "event_sink",
  45. "executor",
  46. "validation_policy",
  47. "deterministic_validator",
  48. "evidence_provider",
  49. )
  50. assert _parameter_names(TaskCoordinator.decide_task) == (
  51. "self",
  52. "root_trace_id",
  53. "task_id",
  54. "validation_id",
  55. "action",
  56. "payload",
  57. "idempotency_key",
  58. )
  59. def test_trace_store_public_state_and_constructor_remain_stable(tmp_path) -> None:
  60. assert str(inspect.signature(FileSystemTraceStore)) == "(base_path: str = '.trace')"
  61. store = FileSystemTraceStore(str(tmp_path))
  62. assert isinstance(store.base_path, Path)
  63. assert store.base_path == tmp_path
  64. def test_legacy_browser_package_exports_keep_object_identity() -> None:
  65. legacy_exports = (
  66. "init_browser_session",
  67. "get_browser_session",
  68. "get_browser_live_url",
  69. "cleanup_browser_session",
  70. "kill_browser_session",
  71. "browser_navigate",
  72. "browser_search",
  73. "browser_back",
  74. "browser_interact",
  75. "browser_scroll",
  76. "browser_screenshot",
  77. "browser_elements",
  78. "browser_read",
  79. "browser_extract",
  80. "browser_tabs",
  81. "browser_cookies",
  82. "browser_wait",
  83. "browser_js",
  84. "browser_download",
  85. )
  86. for name in legacy_exports:
  87. assert getattr(browser, name) is getattr(baseClass, name)
  88. def test_feishu_agent_legacy_entrypoints_keep_call_shapes() -> None:
  89. assert str(inspect.signature(FeishuAgent)) == "()"
  90. assert _parameter_names(FeishuAgent.handle_message) == ("self", "event")
  91. assert _parameter_names(FeishuAgent.start) == ("self",)
  92. assert _parameter_names(execute_tool) == ("name", "arguments")