Files
nmfs-agents/tests/test_base_validator.py
qiuruiandClaude Sonnet 4.6 df59fc0c83 feat: NMFS Agents 全量入库(org v2 + dashboard + 多队列 + 组织架构)
包含从项目创建至今的全部代码首次入库:

核心框架:
- TaskQueue(SQLite,6 种状态,原子 dequeue)
- Executor(asyncio 并发,semaphore 限流,agent_role 路由)
- Scheduler(APScheduler,三队列独立调度)
- Watchdog(超时检测 + 优先级防饥饿)
- Scanner(项目扫描,README/TODO/CLAUDE.md 提取)

Agent 体系(20+ 角色):
- 项目交付组:architect/developer/tester/productizer
- 基础技术组:base-architect/validator/hw/os/kernel/lowlevel/system-tester
- 算法组:algo-antishake/position/nav
- 洞察组:planner/vision-analyst/media-producer
- 市场组:market-pm/sport/elder/safety
- 组织层:boss/group-leader/senior-dev/ops
- 平台扩展:nrf-dev/esp32-dev
- 三专项调研:rtp-researcher/net-researcher/kernel-analyzer

工具层:
- ProjectMemory(goals/facts/history SQLite)
- VersionPipeline(并行版本流水线 + 反幻觉门控)
- EventBus(Redis Streams,5 consumer groups)
- DailyReport(append-only 日报 + Boss 决策视图)
- AgentScorer(4 维评分:完成度/质量/自主性/协作)
- DeviceAgent(SSH rsync + 板端执行)
- EnvCollector(本机+SSH 环境采集)
- ArchVersion(快照/优化/promote/rollback)

Dashboard(React + Vite + Tailwind):
- 看板/项目/配置/洞察/日报/Visual 六标签页
- WebSocket 实时更新
- Markdown 渲染(react-markdown + remark-gfm)

测试:314 passed

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-10 07:24:19 +08:00

59 lines
2.4 KiB
Python

from __future__ import annotations
import pytest
from unittest.mock import MagicMock
from nmfs_agents.agents.base_validator import BaseValidatorAgent, BASE_VALIDATOR_SYSTEM
from nmfs_agents.config import AgentsConfig, ClaudeConfig
from nmfs_agents.core.queue import Task
from nmfs_agents.tools.project_memory import ProjectMemory
def _make_config():
cfg = MagicMock(spec=AgentsConfig)
cfg.projects = {"yolo": MagicMock(description="目标检测", mode="auto", path=MagicMock())}
cfg.claude = ClaudeConfig(model="claude-sonnet-4-6", api_key=None)
cfg.devices = {}
return cfg
def test_base_validator_system_prompt_contains_keywords():
for kw in ["性能", "稳定性", "精度", "硬件约束"]:
assert kw in BASE_VALIDATOR_SYSTEM, f"缺少关键词: {kw}"
def test_base_validator_context_contains_hardware_facts(tmp_path):
mem = ProjectMemory(db_path=tmp_path / "m.db")
mem.set_fact("__hardware__", "rk3588.npu", "6TOPS", role="hw-engineer")
agent = BaseValidatorAgent(_make_config(), memory=mem)
task = Task(project="yolo", type="validate", title="test",
context="", priority=3, mode="auto", agent_role="base-validator")
ctx = agent._build_context(task)
assert "6TOPS" in ctx or "rk3588.npu" in ctx
def test_base_validator_system_covers_regression_detection():
from nmfs_agents.agents.base_validator import BASE_VALIDATOR_SYSTEM
assert "[验证结果]" in BASE_VALIDATOR_SYSTEM
assert "[验证退化]" in BASE_VALIDATOR_SYSTEM
assert "基线" in BASE_VALIDATOR_SYSTEM
def test_base_validator_context_has_ssh_and_edge_service(tmp_path):
from nmfs_agents.config import DeviceConfig
from nmfs_agents.config import AgentsConfig, ClaudeConfig, SchedulerConfig, FeishuConfig
cfg = AgentsConfig(
projects={},
scheduler=SchedulerConfig(),
claude=ClaudeConfig(api_key="fake"),
feishu=FeishuConfig(),
devices={"rk3588": DeviceConfig(
host="192.168.1.1", user="pi", password="pi",
workspace="/home/pi", type="linux", connect="ssh",
)},
)
mem = ProjectMemory(db_path=tmp_path / "m.db")
agent = BaseValidatorAgent(cfg, memory=mem)
task = Task(project="yolo", type="test", title="验证",
context="", priority=2, mode="auto", agent_role="base-validator")
ctx = agent._build_context(task)
assert "EdgeValidatorService" in ctx or "8899" in ctx