- 新增 pam_deploy_graph 包,包含 Agent runtime、ActionRouter、脚本/MCP/fake runner - 支持 hybrid_node_mcp 策略:PAM_HOME 走脚本 action,PAM_NODE 走 MCP - 支持 script_only 离线策略,全部 action 走现有脚本 action - 新增 LLM structured output 骨架和规则 fallback,支持意图识别、参数抽取、计划生成 - 新增 LangGraph StateGraph 工厂和 MCP client adapter - 新增 CLI:preview、analyze、run-global、run-deploy - 增加 fake 完整部署流程、单 IP 失败待回滚确认状态和报告输出 - 增加单元测试覆盖路由、parser、runner、Skill 加载、LLM 输出、MCP adapter 和 LangGraph 图 - 更新 README,记录当前代码骨架、进度、使用方式和下一步计划
113 lines
4.6 KiB
Markdown
113 lines
4.6 KiB
Markdown
# opagent
|
||
|
||
## PAM Deploy Agent
|
||
|
||
本仓库正在把原有 `PAM_AUTO_DEPLY_SKILL.md` + `deploy.sh` / `deploy.ps1` 的组合,重构为一个 LangGraph-style 的 PAM 智能部署 Agent。
|
||
|
||
当前已加入 `pam_deploy_graph` Python 包,用于先落地 Agent Runtime 的核心骨架:
|
||
|
||
- PAM_HOME action 固定通过 `deploy.sh` / `deploy.ps1` 调用。
|
||
- PAM_NODE action 可通过 MCP runner 调用。
|
||
- 默认执行策略为 `hybrid_node_mcp`,即 HOME 脚本 action + NODE MCP。
|
||
- 离线策略为 `script_only`,全部 action 走脚本 action。
|
||
- `langgraph` 已作为正式依赖引入;核心 Agent、runner、router 和 parser 也可独立测试。
|
||
|
||
## 当前代码骨架
|
||
|
||
```text
|
||
pam_deploy_graph/
|
||
agent.py # Agent runtime,参数归一化、预演、fake 全局流程
|
||
action_router.py # 按 action 路由到脚本、MCP 或 fake runner
|
||
script_runner.py # deploy.sh / deploy.ps1 action 调用封装
|
||
mcp_runner.py # PAM_NODE MCP runner 协议与 action -> tool 映射
|
||
fake_runner.py # 测试用 runner,不访问真实环境
|
||
output_parser.py # 解析 key=value、MCP JSON、待确认回滚标记
|
||
skill_policy.py # 从 PAM_AUTO_DEPLY_SKILL.md 加载 Skill 策略
|
||
config_writer.py # 生成脚本 action 所需 config 文件
|
||
checkpoint_store.py # 业务 checkpoint JSON 读写
|
||
params_loader.py # 读取 JSON 或 config.txt 风格参数文件
|
||
llm/ # LLM structured output 接口、规则 fallback 和 guardrails
|
||
graph.py # LangGraph StateGraph 集成入口
|
||
mcp_client.py # MCP session/callable adapter
|
||
cli.py # CLI 入口
|
||
|
||
tests/
|
||
test_action_router.py
|
||
test_output_parser.py
|
||
test_params_loader.py
|
||
test_script_runner.py
|
||
test_skill_policy.py
|
||
```
|
||
|
||
## 当前进度
|
||
|
||
已完成:
|
||
|
||
- 建立 Python 工程骨架和 `pyproject.toml`。
|
||
- 实现 `hybrid_node_mcp` 路由规则:PAM_HOME 走脚本 action,PAM_NODE 走 MCP。
|
||
- 实现 `script_only` 路由规则:所有 action 走脚本 action。
|
||
- 实现脚本 action 命令构造,避免调用脚本主流程。
|
||
- 实现 MCP runner 抽象和 PAM_NODE action 到 MCP tool 的默认映射。
|
||
- 实现脚本/MCP/fake action 结果统一为 `ActionResult`。
|
||
- 实现 `config.txt.example` 风格和 JSON 风格参数读取。
|
||
- 实现 fake 全局流程和完整部署流程,便于不触碰真实环境地验证 Agent 路由。
|
||
- 实现逐 IP 处理骨架:升级、轮询、启动、校验、日志下载。
|
||
- 实现单 IP 失败后的待回滚确认状态,不自动执行回滚。
|
||
- 实现 LLM structured output 骨架:意图识别、参数抽取、部署计划生成。
|
||
- 增加规则 fallback `RuleBasedLlmClient`,用于本地开发和测试。
|
||
- 增加 LLM 输出 guardrails,禁止计划中出现可执行脚本命令和非法 action。
|
||
- 引入 `langgraph` 依赖,并提供 `build_langgraph()` 图工厂。
|
||
- 引入 MCP client adapter,可包装 SDK session 或普通 callable。
|
||
- 本地已安装 `langgraph` 和 `mcp`,并完成 LangGraph fake 全局流程 smoke。
|
||
- CLI `analyze` 输出已做敏感字段脱敏。
|
||
- 添加基础测试,当前本地结果为 `22 passed, 1 skipped`。
|
||
|
||
未完成:
|
||
|
||
- 尚未接入真实 MCP client。
|
||
- 尚未接入真实 LLM 服务,目前使用规则 fallback。
|
||
- 尚未实现人工确认 interrupt、断点续跑完整图流程和单 IP 子流程。
|
||
- 尚未执行真实脚本 action 或真实 PAM_NODE MCP 调用。
|
||
|
||
## 使用方式
|
||
|
||
预演:
|
||
|
||
```bash
|
||
python -m pam_deploy_graph.cli preview --config doc_scripts/config.txt.example --strategy fake
|
||
```
|
||
|
||
fake 全局流程验证:
|
||
|
||
```bash
|
||
python -m pam_deploy_graph.cli run-global --config doc_scripts/config.txt.example --strategy fake --confirm
|
||
```
|
||
|
||
fake 完整部署流程验证:
|
||
|
||
```bash
|
||
python -m pam_deploy_graph.cli run-deploy --config doc_scripts/config.txt.example --strategy fake --confirm
|
||
```
|
||
|
||
结构化理解和计划生成:
|
||
|
||
```bash
|
||
python -m pam_deploy_graph.cli analyze --config doc_scripts/config.txt.example --text "请用 MCP 预演部署 HET PAM Node 版本 2.0.5,不要动环境"
|
||
```
|
||
|
||
测试:
|
||
|
||
```bash
|
||
pytest -q
|
||
```
|
||
|
||
## 下一步建议
|
||
|
||
1. 接入真实 PAM_NODE MCP session,并用 `SessionMcpToolClient` 包装。
|
||
2. 用 fake runner 补齐完整部署主流程和单 IP 子流程测试。
|
||
3. 引入 LangGraph,把当前 Agent 节点接入 `StateGraph`。
|
||
4. 增加人工确认节点:参数确认、IP 范围确认、回滚确认。
|
||
5. 接入真实 LLM 服务,实现 `RuleBasedLlmClient` 同协议替换。
|
||
6. 完善 checkpoint 恢复:全局步骤跳过、成功 IP 跳过、pending rollback 恢复。
|
||
7. 在测试环境中做 smoke:HOME 脚本 `get-token/get-node-url` + NODE MCP `get-online-ips`。
|