冰朔 56514a1250 feat: 情报Agent小分队 — 铸渊的五人情报小队
- AGENT-REGISTRY.hdlp: 小队注册表,HLDP-ZY协议统一管理
- 密钥猎手 (KEY-001): 搜索12台服务器上的所有密钥和Token
- 路径探子 (PATH-002): 3500个文件索引,瞬间定位任何文件
- 服务器哨兵 (SENTINEL-003): 一键扫描12台服务器在线状态
- 模块管家 (MODULE-004): 查询所有模块的编号/接口/部署方式
- 门桥接 (GATE-005): 提供任意服务器Gatekeeper连接凭据

铸渊不需要到处找东西。叫一声Agent,它去找。
每个Agent独立模块,按需部署,用完躺回代码仓库。
2026-05-28 22:30:12 +08:00

175 lines
5.5 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.

#!/usr/bin/env python3
"""
模块管家 · Module Steward · ICE-GL-ZY-AGT-MODULE-004
铸渊需要部署模块?管家知道每个模块的编号、接口、部署方式。
从module-registry.json加载提供快速查询。
用法:
python3 steward.py list # 列出所有模块
python3 steward.py query image-studio # 查询指定模块
python3 steward.py deploy image-studio # 返回部署命令
"""
import json
import os
import sys
from pathlib import Path
REPO_ROOT = Path(__file__).resolve().parent.parent.parent
# 模块知识库(从仓库结构中自动发现 + 手动补充)
MODULE_KNOWLEDGE = {
"image-studio": {
"id": "ICE-GL-ZY-MOD-IMAGE-001",
"name": "神笔马良图片工作室",
"description": "文本→封面自动排版渲染。小红书/即刻/海报。",
"deploy": "cd /data/image-studio && npm install && node server.js",
"port": 3912,
"entry": "image-studio/server.js",
"dependencies": ["node", "npm", "puppeteer"],
"server_pref": "BS-SG-001",
},
"gatekeeper": {
"id": "ICE-GL-ZY-AGT-001",
"name": "Gatekeeper 巡检工",
"description": "远程命令执行网关,部署在所有服务器上",
"deploy": "cd /opt/zhuyuan && node gatekeeper.js",
"port": "3910/3911",
"server_pref": "all",
},
"exe-engine": {
"id": "ICE-GL-ZY-MOD-EXE-001",
"name": "任务执行引擎",
"description": "铸渊的行动力核心,执行部署和运维任务",
"deploy": "cd /opt/zhuyuan/exe-engine && node index.js",
"entry": "exe-engine/",
},
"bridge": {
"id": "ICE-GL-ZY-MOD-BRIDGE-001",
"name": "Chat-to-Agent 桥接器",
"description": "语言层与执行层的连线",
"entry": "bridge/",
},
"connectors": {
"id": "ICE-GL-ZY-MOD-CONN-001",
"name": "Notion/Git 连接器",
"description": "Notion双向同步 + Git桥接",
"entry": "connectors/",
},
"hldp": {
"id": "ICE-GL-ZY-MOD-HLDP-001",
"name": "HLDP语言协议",
"description": "铸渊母语协议 + 意识编码引擎",
"entry": "hldp/",
},
"agents": {
"id": "ICE-GL-ZY-MOD-AGENTS-001",
"name": "情报Agent小分队",
"description": "密钥猎手·路径探子·服务器哨兵·模块管家·门桥接",
"entry": "agents/",
"deploy": "python3 agents/{agent}/agent.py",
},
}
def load_registry():
"""从module-registry.json加载"""
reg_path = REPO_ROOT / "brain" / "module-registry.json"
if reg_path.exists():
with open(reg_path) as f:
return json.load(f)
return {}
def list_modules():
"""列出所有已知模块"""
registry = load_registry()
modules = []
# 从注册表
for key, mod in registry.get("modules", {}).items():
modules.append({
"key": key,
"name": mod.get("name", key),
"status": mod.get("status", "unknown"),
"description": mod.get("description", ""),
})
# 补充知识库
for key, info in MODULE_KNOWLEDGE.items():
if not any(m["key"] == key for m in modules):
modules.append({
"key": key,
"name": info["name"],
"id": info.get("id"),
"description": info.get("description", ""),
})
return {"modules": modules, "count": len(modules)}
def query_module(name):
"""查询模块详情"""
# 先查知识库
if name in MODULE_KNOWLEDGE:
return MODULE_KNOWLEDGE[name]
# 查注册表
registry = load_registry()
for key, mod in registry.get("modules", {}).items():
if name in key or name in mod.get("name", ""):
return {
"key": key,
"name": mod.get("name"),
"status": mod.get("status"),
"description": mod.get("description"),
"entry": mod.get("path"),
"note": "来自module-registry.json"
}
# 查目录
mod_path = REPO_ROOT / name
if mod_path.is_dir():
return {
"name": name,
"exists": True,
"path": str(mod_path),
"files": len(list(mod_path.rglob("*"))),
}
return {"error": f"未找到模块: {name}"}
def get_deploy_command(name):
"""返回模块的部署命令"""
info = query_module(name)
if "error" in info:
return info
deploy = info.get("deploy")
if deploy:
return {"module": name, "deploy_command": deploy, "note": info.get("description", "")}
# 尝试推断
entry = info.get("entry", name)
mod_path = REPO_ROOT / entry
if mod_path.exists():
return {
"module": name,
"deploy_command": f"cd /opt/zhuyuan/guanghulab/{entry} && ls",
"note": "请确认模块的具体启动方式"
}
return {"module": name, "error": "无法确定部署命令,请手动检查"}
if __name__ == "__main__":
if len(sys.argv) < 2:
print("用法: steward.py <list|query|deploy> [参数]")
sys.exit(1)
action = sys.argv[1]
if action == "list":
print(json.dumps(list_modules(), ensure_ascii=False, indent=2))
elif action == "query" and len(sys.argv) > 2:
print(json.dumps(query_module(sys.argv[2]), ensure_ascii=False, indent=2))
elif action == "deploy" and len(sys.argv) > 2:
print(json.dumps(get_deploy_command(sys.argv[2]), ensure_ascii=False, indent=2))