71 lines
3.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""引擎级共享能力:跨产线通用的任务/交付件/问答/项目生命周期工具集合。
这些 handler 操作的都是**通用表**pipeline_tasks / pipeline_deliverables /
pipeline_agent_questions / sd_projects与具体产线无关。历史原因它们的实现落在
sdlc_ability.py 里;本模块把「通用那部分」聚合出来,供任意产线能力包复用:
from pipeline_service.shared_ability import SHARED_TOOLS, SHARED_HANDLERS
这样新产线(如投标产线 bidding_general不必复制 700 行任务管理代码,也不必反向依赖
另一个产线的能力包。零行为变更:只是引用,不移动实现。
后续可把这些 handler 的实现物理迁移到本模块sdlc_ability 改为从这里 import。
"""
import logging
logger = logging.getLogger("pipeline.shared_ability")
# 通用工具名单(产线无关)。凡涉及 sd_iterations / sd_features / sd_bugs /
# sd_test_* / sd_deploy_envs 的 SDLC 专属工具都不在此列。
_GENERIC_TOOL_NAMES = [
# 任务
"create_task", "list_roles", "list_tasks", "task_detail", "reset_task_retry",
"approve_task", "complete_task", "cancel_task",
# agent 运行 / 诊断
"start_agents", "diagnose_project", "check_progress",
# 交付件
"list_deliverables", "view_deliverable",
"submit_deliverable", "approve_deliverable", "reject_deliverable",
# 问答冒泡
"list_questions", "answer_question", "escalate_question",
# 项目生命周期
"list_projects", "start_project", "complete_project", "archive_project",
"reopen_project", "pause_project", "resume_project", "backup_project",
# 角色模型
"list_role_models", "set_role_model",
# 知识库按项目owner权限检索所有产线会话 agent 通用)
"rag_search", "rag_kb_list",
]
SHARED_TOOLS = []
SHARED_HANDLERS = {}
def _build():
global SHARED_TOOLS, SHARED_HANDLERS
try:
from .sdlc_ability import SDL_TOOLS, SDL_HANDLERS
except Exception as e:
logger.warning("shared_ability: 无法加载通用 handler 源: %s", str(e)[:160])
return
names = set(_GENERIC_TOOL_NAMES)
SHARED_TOOLS = [t for t in SDL_TOOLS if getattr(t, "name", "") in names]
SHARED_HANDLERS = {k: v for k, v in SDL_HANDLERS.items() if k in names}
missing = names - set(SHARED_HANDLERS)
if missing:
logger.info("shared_ability: 以下通用工具未找到 handler跳过: %s", sorted(missing))
# 流程裁剪工具(通用机制,产线声明 flow_stages 即可用;未声明的产线工具诚实降级)
try:
from .flow_plan_capability import FLOW_PLAN_TOOLS, FLOW_PLAN_HANDLERS
_seen = {getattr(t, "name", "") for t in SHARED_TOOLS}
SHARED_TOOLS += [t for t in FLOW_PLAN_TOOLS if getattr(t, "name", "") not in _seen]
SHARED_HANDLERS.update(FLOW_PLAN_HANDLERS)
except Exception as e:
logger.warning("shared_ability: 流程裁剪工具不可用(跳过): %s", str(e)[:160])
logger.info("shared_ability: %d tools / %d handlers 可复用",
len(SHARED_TOOLS), len(SHARED_HANDLERS))
_build()