"""为规划提供前端实际支持的物料目录""" from app.processor.base import BaseNode from app.processor.state import QueryState from app.resources.component import ComponentProvider from app.schemas.component_resource import ComponentQuery class ComponentResourceNode(BaseNode): name = "component_resource_node" def process(self, state: QueryState) -> QueryState: # 浅拷贝状态 updated_state: QueryState = state.copy() # 空查询不设置筛选条件,由提供器读取默认组件目录并返回查询结果 result = ComponentProvider().query(ComponentQuery()) # 保存组件定义、目录版本和查询状态,供后续规划和动作生成使用 updated_state["component_resources"] = result # 清空旧规划,后续需要根据本次查询到的组件能力重新规划 updated_state["screen_plan"] = None # 如果目录未配置或没有查到组件,标记失败,避免基于未知组件能力继续规划 if result.status != "resolved": updated_state["status"] = "failed" # 沿用查询结果中的说明,保留无法获取组件的具体原因 updated_state["failure_reason"] = result.message else: # 如果已获取组件定义,保持运行状态,让后续节点继续规划 updated_state["status"] = "running" # 清空旧的失败原因,避免成功查询后仍携带上一轮错误 updated_state["failure_reason"] = None # 返回资源查询结果和处理状态,由图决定继续规划还是进入失败处理 return updated_state if __name__ == "__main__": import json state: QueryState = {"request": {}} node = ComponentResourceNode() final_state = node.process(state) print( json.dumps( final_state, ensure_ascii=False, indent=2, default=lambda value: value.model_dump(mode="json"), ) )