from pathlib import Path import config from extensions import GatewayBinding, ResultBinding from extensions.main_fan.schemas import MainFanInput, MainFanResult from extensions.main_fan.exploration_tools import (prepare_main_fan_task, fetch_main_fan_data, query_fan_timeseries, query_fan_sensor_realtime, query_fan_equipment_realtime, query_fan_equipment_timeseries, run_python, submit_main_fan_report) from extensions.main_fan.service import validate_result from extensions.main_fan.batch_tools import (submit_main_fan_mine_plan, query_main_fan_history, fetch_main_fan_reports, archive_main_fan_report) def enabled(): return config.get_bool("MAIN_FAN_ENABLED", True) def validate_config(): from extensions.main_fan.targets import load_catalog load_catalog() from extensions.main_fan.pipeline import load_rules load_rules() def setup(registry): from extensions.main_fan.middleware import MainFanSandboxMiddleware if config.get_bool('MAIN_FAN_LOCAL_BATCH_ENABLED', False): from extensions.main_fan.batch_service import service registry.register_service('main_fan_batches', service, requires=('shaanxi_gateway',)) registry.register_business_agent( name="main_fan", display_name="矿井主通风机研判智能体", description="联合分析主通风机与备用风机的报告参数、性能测定数据和实际切换前后风量风压,形成一致性研判报告。", prompt=Path(__file__).with_name("prompt.md").read_text(encoding="utf-8"), tools=[prepare_main_fan_task, fetch_main_fan_data, query_fan_sensor_realtime, query_fan_timeseries, query_fan_equipment_realtime, query_fan_equipment_timeseries, run_python, submit_main_fan_report, submit_main_fan_mine_plan, query_main_fan_history, fetch_main_fan_reports, archive_main_fan_report], input_schema=MainFanInput, result_schema=MainFanResult, max_concurrency=config.get_int("MAIN_FAN_MAX_CONCURRENCY", 1), result_validator=validate_result, skill_path='/skills/main-fan-equivalent-capability-assessment/SKILL.md', result_binding=ResultBinding( agent_code=config.get_str("MAIN_FAN_RESULT_AGENT_CODE", "main_fan_equivalence_agent"), agent_name=config.get_str("MAIN_FAN_RESULT_AGENT_NAME", "矿井主通风机同等能力研判"), ), gateway=GatewayBinding( agent_code=config.get_str("MAIN_FAN_AGENT_CODE", "main_fan_equivalence_agent"), check_type_code=config.get_str("MAIN_FAN_CHECK_TYPE_CODE", "main_fan_equivalence"), sensor_type_list=config.get_str("MAIN_FAN_SENSOR_TYPES"), topics=tuple(t.strip() for t in config.get_str("MAIN_FAN_TOPICS").split(",") if t.strip()), ), ) registry.register_middleware('MainFanSandboxMiddleware', lambda services: MainFanSandboxMiddleware(), targets=['main_fan'])