65 lines
2.5 KiB
Python
65 lines
2.5 KiB
Python
"""pipeline-bidding 模块装载入口。
|
||
|
||
宿主应用(pipeline-app)在 init() 中调用 load_pipeline_bidding() 即挂载投标产线:
|
||
能力包注册(bid_ability)+ 角色工具 schema 注册(role_tool_schemas)+ 对账器启动(bid_flow)。
|
||
未装本模块的宿主完全零接触(不 import 本包则以上全部不发生)。
|
||
|
||
表结构不在此处建(铁律:运行期不做 schema 变更),建表走部署期:
|
||
json2ddl 生成 → build.sh 应用 / 人工执行(见 build.sh)。
|
||
"""
|
||
|
||
import logging
|
||
|
||
logger = logging.getLogger("pipeline.bidding")
|
||
|
||
_loaded = False
|
||
|
||
|
||
def load_pipeline_bidding():
|
||
"""挂载投标产线(幂等)。"""
|
||
global _loaded
|
||
if _loaded:
|
||
return True
|
||
|
||
ok = True
|
||
# 1. 角色工具 schema → 引擎分发字典(全路径模块,引擎裸名约定不变)
|
||
try:
|
||
from .role_tool_schemas import register_role_tools
|
||
n = register_role_tools()
|
||
logger.info("[pipeline_bidding] role tool schemas: %d", n)
|
||
except Exception as e:
|
||
logger.warning("[pipeline_bidding] role tool schema 注册失败: %s", str(e)[:200])
|
||
ok = False
|
||
|
||
# 2. 主 agent 能力包 + slash 命令(import 即注册,与开发产线同机制)
|
||
try:
|
||
from . import bid_ability # noqa: F401
|
||
logger.info("[pipeline_bidding] ability registered: bidding_general")
|
||
except Exception as e:
|
||
logger.warning("[pipeline_bidding] ability 注册失败: %s", str(e)[:200])
|
||
ok = False
|
||
|
||
# 3. 状态对账器(角色任务唯一创建者 + 阻塞门禁守门)。
|
||
# PIPELINE_MODE=web 时不注册(与引擎 poller 同款模式开关)。
|
||
import os
|
||
mode = (os.environ.get("PIPELINE_MODE", "all") or "all").strip().lower()
|
||
if mode in ("all", "worker"):
|
||
try:
|
||
from .bid_flow import start_poller
|
||
r = start_poller()
|
||
try:
|
||
from appPublic.log import debug as _dbg
|
||
_dbg("[pipeline_bidding] poller register result: %s (PIPELINE_MODE=%s)" % (r, mode))
|
||
except Exception:
|
||
pass
|
||
logger.info("[pipeline_bidding] poller register: %s (mode=%s)", r, mode)
|
||
except Exception as e:
|
||
logger.warning("[pipeline_bidding] poller 启动失败: %s", str(e)[:200])
|
||
ok = False
|
||
else:
|
||
logger.info("[pipeline_bidding] PIPELINE_MODE=web,poller 不启动")
|
||
|
||
_loaded = ok or _loaded
|
||
logger.info("[pipeline_bidding] v0.1.0 loaded")
|
||
return True
|