Files

94 lines
2.9 KiB
Python

"""The latency diagnosis agent stays evidence-first and does not overwrite edits."""
from __future__ import annotations
import importlib.util
import json
from pathlib import Path
def _load_reader():
path = (
Path(__file__).resolve().parents[1]
/ "app"
/ "gateway"
/ "routers"
/ "_latency_diagnosis_seed_assets"
/ "skills"
/ "latency-diagnosis"
/ "scripts"
/ "read_records.py"
)
spec = importlib.util.spec_from_file_location("latency_read_records", path)
assert spec and spec.loader
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)
return module
def test_soul_checks_command_and_disk_before_the_model() -> None:
from app.gateway.routers import _latency_diagnosis_seed as seed
soul = (seed._ASSETS_DIR / seed.LATENCY_DIAGNOSIS_AGENT_ID / "SOUL.md").read_text(encoding="utf-8")
command_rule = soul.index("整次接近这段空等,检查只有几十毫秒")
model_rule = soul.index("这时才查模型日志")
assert command_rule < model_rule
assert "这段不要写成模型问题" in soul
assert "剩余空间" in soul
assert "first_chunk_ms" in soul
def test_seed_is_idempotent_and_preserves_local_edits(tmp_path, monkeypatch) -> None:
from app.gateway.routers import _latency_diagnosis_seed as seed
class FakePaths:
def agent_dir(self, agent_id: str) -> Path:
return tmp_path / "agents" / agent_id
monkeypatch.setattr(seed, "get_paths", lambda: FakePaths())
monkeypatch.setattr(
seed,
"_ensure_skill",
lambda: None,
)
assert seed.ensure_latency_diagnosis_agent() is True
soul = tmp_path / "agents" / seed.LATENCY_DIAGNOSIS_AGENT_ID / "SOUL.md"
soul.write_text("现场调整", encoding="utf-8")
assert seed.ensure_latency_diagnosis_agent() is False
assert soul.read_text(encoding="utf-8") == "现场调整"
def test_reader_prints_check_and_total_without_inventing_rows(tmp_path, capsys) -> None:
reader = _load_reader()
missing = tmp_path / "missing"
reader._candidates = lambda: [missing]
reader.main()
assert "没有找到" in capsys.readouterr().out
path = tmp_path / "skill-view-diagnostics.jsonl"
path.write_text(
json.dumps(
{
"at": "2026-10-02T10:00:00+00:00",
"tool": "bash",
"status": "narrow",
"total_ms": 30,
"tool_ms": 40000,
"lock_wait_ms": 0,
"skill_names": ["demo"],
"command": "echo hi",
},
ensure_ascii=False,
)
+ "\n",
encoding="utf-8",
)
reader._candidates = lambda: [path]
reader.main()
printed = capsys.readouterr().out
assert "total_ms=30" in printed
assert "tool_ms=40000" in printed
assert "echo hi" in printed