Files
wehub-resource-sync 4b6817381b
CI (OpenClaw E2E) / openclaw test (push) Has been cancelled
CI / coverage-report (push) Has been cancelled
CI / test-kubernetes (push) Has been cancelled
CI / should-run-thorough (push) Has been cancelled
CI / test-thorough (cloudwatch-demo) (push) Has been cancelled
CI / test-thorough (flink-ecs) (push) Has been cancelled
CI / test-thorough (upstream-lambda) (push) Has been cancelled
CI / test-thorough (prefect-ecs-fargate) (push) Has been cancelled
Release / build-binaries (zip, opensre.exe, onefile, windows-latest, windows-x64) (push) Has been cancelled
Benchmark image — build + push to ECR (any adapter) / build + push (push) Has been cancelled
CI / quality (ubuntu-latest) (push) Has been cancelled
CI / test (tools-runtime) (push) Has been cancelled
CI / test (e2e-general) (push) Has been cancelled
CI / test (cli-runtime) (push) Has been cancelled
CI / test (e2e-provider-and-openclaw) (push) Has been cancelled
CI / test (integrations-and-misc) (push) Has been cancelled
Release / verify (push) Has been cancelled
Release / build-python-dist (push) Has been cancelled
Release / build-binaries (tar.gz, opensre, onedir, macos-15-intel, darwin-x64) (push) Has been cancelled
Release / build-binaries (tar.gz, opensre, onedir, macos-latest, darwin-arm64) (push) Has been cancelled
Release / build-binaries (tar.gz, opensre, onedir, ubuntu-22.04, linux-x64) (push) Has been cancelled
Release / publish-release (push) Has been cancelled
Release / publish-main-release (push) Has been cancelled
Interactive Shell Live (PR + post-merge) / turn-checks (no-LLM) (push) Has been cancelled
CodeQL / Analyze (python) (push) Has been cancelled
Interactive Shell Live (PR + post-merge) / turn-live shard ${{ matrix.shard_index }} (push) Has been cancelled
Release / prepare (push) Has been cancelled
Release / build-binaries (tar.gz, opensre, onedir, ubuntu-22.04-arm, linux-arm64) (push) Has been cancelled
Synthetic Deterministic Tests / Synthetic offline (deterministic) (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:10:45 +08:00

91 lines
3.0 KiB
Python

"""Synthetic test tool."""
from __future__ import annotations
from functools import lru_cache
from typing import Any
from config.constants.paths import SYNTHETIC_SCENARIOS_DIR
from core.agent_harness.tools.tool_context import (
ActionToolContext,
capability_available_from_sources,
execute_with_action_context,
object_schema,
string_property,
)
from core.tool_framework.registered_tool import RegisteredTool
from tools.interactive_shell.subprocess import require_subprocess_presenter
from tools.interactive_shell.synthetic.runner import run_synthetic_test
@lru_cache(maxsize=1)
def list_rds_postgres_scenarios() -> tuple[str, ...]:
"""Enumerate available RDS Postgres synthetic scenario directory names."""
if not SYNTHETIC_SCENARIOS_DIR.is_dir():
return ()
return tuple(
sorted(
entry.name
for entry in SYNTHETIC_SCENARIOS_DIR.iterdir()
if entry.is_dir()
and len(entry.name) >= 5
and entry.name[:3].isdigit()
and entry.name[3] == "-"
)
)
def execute_synthetic_tool(args: dict[str, Any], ctx: ActionToolContext) -> bool:
suite = str(args.get("suite", "")).strip()
scenario = str(args.get("scenario", "")).strip()
if not suite or not scenario:
return False
run_synthetic_test(f"{suite}:{scenario}", require_subprocess_presenter(ctx))
return True
def run_synthetic(*, suite: str, scenario: str, context: Any) -> dict[str, Any]:
return execute_with_action_context(
{"suite": suite, "scenario": scenario},
context,
execute_synthetic_tool,
)
synthetic_run_tool = RegisteredTool(
name="synthetic_run",
description=(
"Run a synthetic scenario in a suite. Match the scenario id exactly from "
"the user request: a bare numeric prefix selects the enum value with that "
'same prefix, e.g. "005" -> "005-failover" and "004" -> '
'"004-cpu-saturation-bad-query". Never substitute a neighboring numbered '
"scenario when the user supplied a numeric id."
),
input_schema=object_schema(
properties={
"suite": string_property(
description="Synthetic suite name.",
enum=("rds_postgres",),
),
"scenario": string_property(
description=(
"Synthetic scenario id within the selected suite or `all`. "
"For bare numeric requests, use the enum value with the same "
"three-digit prefix."
),
enum=("all", *list_rds_postgres_scenarios()),
),
},
required=("suite", "scenario"),
),
source="interactive_shell",
surfaces=("action",),
parallel_safe=False,
accepts_runtime_context=True,
run=run_synthetic,
is_available=lambda sources: capability_available_from_sources(sources, "synthetic_suites"),
)
__all__ = ["execute_synthetic_tool", "list_rds_postgres_scenarios", "synthetic_run_tool"]