refactor(kb-workflow): 重构为真正的编排者,使用sessions_spawn调用子agent
- kb_workflow.py: 重构为编排者,使用sessions_spawn调用子技能 - skill_main.py: 新增技能入口,处理用户消息 - SKILL.md: 更新文档,明确架构和流程 - SkillBug.md: 新增问题记录文档 设计原则: - workflow不读文件内容,从文件名提取平台 - 使用sessions_spawn调用子agent - 子技能自己定义输入输出格式
This commit is contained in:
+181
-185
@@ -13,7 +13,7 @@ KB Workflow 是一个完整的知识库管理系统,包含:
|
||||
|
||||
**核心功能**:
|
||||
- 📥 **收件箱扫描** - 扫描四个子目录 (pending, metadata, content, analyzed)
|
||||
- 🔄 **内容处理** - 调用技能2-4处理内容
|
||||
- 🔄 **内容处理** - 调用子agent处理各阶段
|
||||
- 📦 **Git版本管理** - 归档后自动提交并推送
|
||||
- 🔔 **订阅管理** - 跟踪订阅源更新
|
||||
- 🧹 **自动清理** - 定期清理临时文件
|
||||
@@ -27,218 +27,213 @@ KB Workflow 是一个完整的知识库管理系统,包含:
|
||||
|
||||
| 触发词 | 行为 | 示例 |
|
||||
|--------|------|------|
|
||||
| `保存到知识库` + 链接 | 添加到收件箱并处理 | "保存到知识库 https://www.bilibili.com/video/BVxxx" |
|
||||
| `添加到知识库` + 链接 | 添加到收件箱并处理 | "添加到知识库 https://www.bilibili.com/video/BVxxx" |
|
||||
| `订阅到知识库` + 链接 | 添加到订阅列表 | "订阅到知识库 https://www.bilibili.com/video/BVxxx" |
|
||||
| `订阅知识库` + 链接 | 添加到订阅列表 | "订阅知识库 https://www.bilibili.com/video/BVxxx" |
|
||||
| `保存到知识库` + 链接 | 添加到收件箱并处理 | "保存到知识库 https://www.bilibili.com/video/BVxxx" |
|
||||
|
||||
### 支持的平台
|
||||
|
||||
| 平台 | 保存 | 订阅 |
|
||||
|------|------|------|
|
||||
| Bilibili | ✅ | ✅ |
|
||||
| YouTube | ✅ | ❌ |
|
||||
| 知乎 | ✅ | ❌ |
|
||||
| 平台 | 子技能 |
|
||||
|------|--------|
|
||||
| Bilibili | kb-bilibili-metadata, kb-bilibili-content |
|
||||
| 知乎 | kb-zhihu-metadata |
|
||||
|
||||
## 架构设计
|
||||
|
||||
```
|
||||
用户: "添加到知识库 https://www.bilibili.com/video/BV1ci4y1V7tb"
|
||||
│
|
||||
▼
|
||||
┌─────────────────────────────────────────────────────────┐
|
||||
│ kb-workflow (主代理) │
|
||||
│ │
|
||||
│ 职责: │
|
||||
│ 1. 接收用户消息,识别触发词和链接 │
|
||||
│ 2. 查重(根据URL/文件名) │
|
||||
│ 3. 调用子agent处理各阶段 │
|
||||
│ 4. 文件流转(mv) │
|
||||
│ 5. Git版本管理 │
|
||||
│ 6. 归档和清理 │
|
||||
└─────────────────────────────────────────────────────────┘
|
||||
│ │ │ │
|
||||
▼ ▼ ▼ ▼
|
||||
┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐
|
||||
│ kb-link-parser│ │kb-bilibili- │ │kb-bilibili- │ │ kb-deep- │
|
||||
│ (子agent) │ │ metadata │ │ content │ │ analyzer │
|
||||
│ │ │ (子agent) │ │ (子agent) │ │ (子agent) │
|
||||
└──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘
|
||||
```
|
||||
|
||||
## 处理流程
|
||||
|
||||
### 完整流程(6个阶段)
|
||||
|
||||
```
|
||||
用户发送"添加到知识库 + 链接"
|
||||
│
|
||||
▼
|
||||
kb-workflow:
|
||||
1. 查重(根据URL/文件名)
|
||||
2. 确认目录存在
|
||||
3. 调用 kb-link-parser (sessions_spawn)
|
||||
│
|
||||
▼
|
||||
kb-link-parser (子agent):
|
||||
解析URL
|
||||
输出: pending/bilibili_BV1ci4y1V7tb.link.json
|
||||
返回: {"success": true/false, "output_file": "pending/..."}
|
||||
│
|
||||
▼
|
||||
kb-workflow:
|
||||
从文件名提取平台 "bilibili" → 调用 kb-bilibili-metadata
|
||||
│
|
||||
▼
|
||||
kb-bilibili-metadata (子agent):
|
||||
获取元数据
|
||||
输出: metadata/bilibili_BV1ci4y1V7tb.meta.json
|
||||
返回: {"success": true/false, "output_file": "metadata/..."}
|
||||
│
|
||||
▼
|
||||
kb-workflow:
|
||||
调用 kb-bilibili-content
|
||||
│
|
||||
▼
|
||||
kb-bilibili-content (子agent):
|
||||
下载视频+字幕
|
||||
输出: content/downloads/*.mp4, *.srt
|
||||
返回: {"success": true/false, "output_file": "...", "subtitles": "..."}
|
||||
│
|
||||
▼
|
||||
kb-workflow:
|
||||
拿到字幕文件 → 调用 kb-ocr-processor
|
||||
│
|
||||
▼
|
||||
kb-ocr-processor (子agent):
|
||||
OCR处理
|
||||
输出: content/bilibili_BV1ci4y1V7tb.txt
|
||||
返回: {"success": true/false, "output_file": "content/..."}
|
||||
│
|
||||
▼
|
||||
kb-workflow:
|
||||
拿到txt文件 → 调用 kb-deep-analyzer
|
||||
│
|
||||
▼
|
||||
kb-deep-analyzer (子agent):
|
||||
深度分析
|
||||
输出: analyzed/bilibili_BV1ci4y1V7tb.md
|
||||
返回: {"success": true/false, "output_file": "analyzed/..."}
|
||||
│
|
||||
▼
|
||||
kb-workflow:
|
||||
mv → archive/YYYY-MM-DD/
|
||||
git add → commit → push
|
||||
汇报完成
|
||||
```
|
||||
|
||||
## 目录结构
|
||||
|
||||
```
|
||||
knowledge-base/
|
||||
├── kb.config.yaml # 配置文件
|
||||
├── .gitignore # Git忽略规则
|
||||
├── pending/ # 待处理内容 (*.md)
|
||||
├── metadata/ # 链接解析结果 (*.link.json)
|
||||
知识库根目录 KB_BASE_PATH/
|
||||
├── archive/ # Git归档目录
|
||||
│ ├── YYYY-MM-DD/ # 按日期归档
|
||||
│ └── subscriptions/ # 订阅数据
|
||||
├── pending/ # 链接解析结果 (*.link.json)
|
||||
├── metadata/ # 元数据 (*.meta.json)
|
||||
├── content/
|
||||
│ ├── json/ # 元数据 (*.meta.json)
|
||||
│ ├── downloads/ # 视频文件 (*.mp4/*.flv) - 7天后清理
|
||||
│ └── subtitles/ # 字幕文件 (*.srt/*.lrc) - 7天后清理
|
||||
│ ├── downloads/ # 视频文件 (*.mp4) - 7天后清理
|
||||
│ └── subtitles/ # 字幕文件 (*.srt) - 7天后清理
|
||||
├── frames/ # 视频截帧 (*.jpg) - 7天后清理
|
||||
├── analyzed/ # 分析报告 (*.md)
|
||||
└── archive/ # Git归档目录
|
||||
├── YYYY-MM-DD/ # 按日期归档
|
||||
└── subscriptions/ # 订阅数据
|
||||
├── subscriptions.json # 订阅配置
|
||||
└── processed.json # 已处理项目
|
||||
└── analyzed/ # 分析报告 (*.md)
|
||||
```
|
||||
|
||||
## Git版本管理
|
||||
## 设计原则
|
||||
|
||||
### 配置
|
||||
### workflow 职责
|
||||
|
||||
| 操作 | 说明 |
|
||||
|------|------|
|
||||
| 查重 | 根据URL/文件名查重 |
|
||||
| 创建目录 | 确保 base_path 下目录存在 |
|
||||
| 调用子agent | 使用 sessions_spawn 调用子技能 |
|
||||
| 提取文件名 | 从子agent返回的output_file提取 |
|
||||
| 提取平台 | 从文件名第一个下划线之前提取(不读内容) |
|
||||
| 传递信息 | 给子agent提示词 + 需要的路径 |
|
||||
| 文件流转 | 最后归档 |
|
||||
| Git | commit + push |
|
||||
|
||||
### workflow 不管
|
||||
|
||||
- 不读文件内容
|
||||
- 不关心子技能内部格式
|
||||
- 子技能自己定义输入输出规范
|
||||
|
||||
### 子agent 调用方式
|
||||
|
||||
```python
|
||||
# kb-workflow 调用子agent
|
||||
result = sessions_spawn(
|
||||
agentId="子技能名称",
|
||||
task="提示词 + 需要的路径信息",
|
||||
timeoutSeconds=120
|
||||
)
|
||||
```
|
||||
|
||||
### 子技能返回格式
|
||||
|
||||
所有子技能应返回JSON:
|
||||
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"output_file": "完整文件路径",
|
||||
"subtitles": "字幕文件路径(可选)"
|
||||
}
|
||||
```
|
||||
|
||||
## 环境变量
|
||||
|
||||
设置环境变量:
|
||||
```bash
|
||||
export KB_BASE_PATH="/path/to/knowledge-base" # 知识库根目录
|
||||
export KB_GIT_ROOT="/path/to/archive" # Git仓库目录
|
||||
export KB_GIT_REMOTE="git@github.com:user/repo.git" # 远程仓库
|
||||
export KB_GIT_USER="Username" # 用户名
|
||||
export KB_GIT_EMAIL="user@example.com" # 邮箱
|
||||
```
|
||||
|
||||
### 工作流程
|
||||
|
||||
```
|
||||
归档项目 → Git add → Git commit → Git push → 清理临时文件
|
||||
```
|
||||
|
||||
- 每次归档生成一个commit
|
||||
- 自动推送到远程仓库(重试3次)
|
||||
- 汇报中体现Git状态
|
||||
|
||||
## 订阅管理
|
||||
|
||||
### 数据结构
|
||||
|
||||
```json
|
||||
{
|
||||
"version": "1.0",
|
||||
"subscriptions": [
|
||||
{
|
||||
"id": "sub_001",
|
||||
"platform": "bilibili",
|
||||
"type": "series",
|
||||
"identifier": "123456",
|
||||
"name": "UE5教程",
|
||||
"subscribed_at": "2026-02-10T12:00:00",
|
||||
"last_checked": null,
|
||||
"last_update": null,
|
||||
"status": "active"
|
||||
}
|
||||
],
|
||||
"processed_items": [
|
||||
{
|
||||
"id": "BVxxx",
|
||||
"title": "视频标题",
|
||||
"processed_at": "2026-02-10T14:00:00",
|
||||
"archived": true
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### 命令
|
||||
|
||||
```bash
|
||||
# 添加订阅
|
||||
python kb_workflow.py --trigger subscriptions --add "bilibili" "series" "123456" "教程名称"
|
||||
|
||||
# 检查更新
|
||||
python kb_workflow.py --trigger subscriptions --check
|
||||
|
||||
# 查看状态
|
||||
python kb_workflow.py --trigger subscriptions --status
|
||||
```
|
||||
|
||||
## 自动清理策略
|
||||
|
||||
### 清理规则
|
||||
|
||||
| 类型 | 保留 | 清理周期 |
|
||||
|------|------|---------|
|
||||
| 分析报告 | ✅ 永久 | - |
|
||||
| 链接信息 | ✅ 永久 | - |
|
||||
| 元数据 | ✅ 永久 | - |
|
||||
| 订阅数据 | ✅ Git管理 | - |
|
||||
| 视频文件 | ❌ | 7天 |
|
||||
| 截帧文件 | ❌ | 7天 |
|
||||
|
||||
### 命令
|
||||
|
||||
```bash
|
||||
# 清理30天前的临时文件
|
||||
python kb_workflow.py --trigger cleanup --days 30
|
||||
|
||||
# 清理单个项目
|
||||
python kb_workflow.py --trigger cleanup --project "项目名称"
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
### 命令行用法
|
||||
### 作为 OpenClaw 技能
|
||||
|
||||
当用户发送消息时自动触发:
|
||||
```
|
||||
用户: "添加到知识库 https://www.bilibili.com/video/BVxxx"
|
||||
```
|
||||
|
||||
### 作为子代理
|
||||
|
||||
```python
|
||||
# 从其他技能调用
|
||||
result = sessions_spawn(
|
||||
agentId="kb-workflow",
|
||||
task="添加到知识库 https://www.bilibili.com/video/BVxxx"
|
||||
)
|
||||
```
|
||||
|
||||
### 命令行
|
||||
|
||||
```bash
|
||||
# 查看状态
|
||||
python kb_workflow.py --trigger status
|
||||
|
||||
# 处理待处理内容
|
||||
python kb_workflow.py --trigger manual --scope pending --limit 5
|
||||
|
||||
# 初始化Git
|
||||
python kb_workflow.py --trigger git-init
|
||||
|
||||
# 查看Git状态
|
||||
python kb_workflow.py --trigger git-status
|
||||
|
||||
# 清理过期文件
|
||||
python kb_workflow.py --trigger cleanup --days 30
|
||||
# 处理单个URL
|
||||
python kb_workflow.py --url "https://www.bilibili.com/video/BVxxx"
|
||||
```
|
||||
|
||||
### 参数说明
|
||||
## 子技能集成
|
||||
|
||||
| 参数 | 说明 | 默认值 |
|
||||
|------|------|--------|
|
||||
| `--trigger` | 触发类型 | `status` |
|
||||
| `--scope` | 处理范围 | `pending` |
|
||||
| `--limit` | 处理数量限制 | 无限制 |
|
||||
| `--days` | 清理天数 | 30 |
|
||||
|
||||
## Integration
|
||||
|
||||
### 技能2-4 集成
|
||||
|
||||
KB Workflow 协调以下子技能:
|
||||
|
||||
1. **Skill 1: Link Parser** - 解析 URL/链接
|
||||
2. **Skill 2: Metadata** - 提取元数据
|
||||
3. **Skill 3: Content** - 获取内容
|
||||
4. **Skill 4: Deep Analyzer** - 深度分析
|
||||
|
||||
## Configuration
|
||||
|
||||
### 配置文件 (kb.config.yaml)
|
||||
|
||||
```yaml
|
||||
git:
|
||||
enabled: true
|
||||
remote: "git@github.com:user/repo.git"
|
||||
user: "Username"
|
||||
email: "user@example.com"
|
||||
|
||||
cleanup:
|
||||
video_retention_days: 7
|
||||
frame_retention_days: 7
|
||||
auto_cleanup: true
|
||||
|
||||
subscriptions:
|
||||
check_interval_hours: 24
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Git未初始化
|
||||
|
||||
```bash
|
||||
# 检查配置
|
||||
python kb_workflow.py --trigger git-status
|
||||
|
||||
# 初始化
|
||||
export KB_GIT_ROOT="/path/to/archive"
|
||||
python kb_workflow.py --trigger git-init
|
||||
```
|
||||
|
||||
### 推送失败
|
||||
|
||||
- 检查网络连接
|
||||
- 验证远程仓库权限
|
||||
- 查看错误日志
|
||||
|
||||
### 存储空间过大
|
||||
|
||||
```bash
|
||||
# 清理过期文件
|
||||
python kb_workflow.py --trigger cleanup --days 7
|
||||
|
||||
# 查看存储使用情况
|
||||
python kb_workflow.py --trigger status
|
||||
```
|
||||
| 阶段 | 子技能 | 输出文件 |
|
||||
|------|--------|----------|
|
||||
| 链接解析 | kb-link-parser | pending/{platform}_{id}.link.json |
|
||||
| 元数据 | kb-bilibili-metadata | metadata/{platform}_{id}.meta.json |
|
||||
| 内容 | kb-bilibili-content | content/downloads/{platform}_{id}.mp4, content/subtitles/{platform}_{id}.srt |
|
||||
| OCR | kb-ocr-processor | content/{platform}_{id}.txt |
|
||||
| 分析 | kb-deep-analyzer | analyzed/{platform}_{id}.md |
|
||||
|
||||
## Related Skills
|
||||
|
||||
@@ -246,3 +241,4 @@ python kb_workflow.py --trigger status
|
||||
- **kb-bilibili-metadata** - B站元数据
|
||||
- **kb-bilibili-content** - B站内容获取
|
||||
- **kb-deep-analyzer** - 深度分析
|
||||
- **kb-ocr-processor** - OCR处理
|
||||
|
||||
@@ -0,0 +1,99 @@
|
||||
# SkillBug.md
|
||||
|
||||
## 问题记录
|
||||
|
||||
### 2026-02-10: 缺少自动写入pending目录的功能
|
||||
|
||||
**状态:** ✅ 已修复
|
||||
|
||||
**解决方案:**
|
||||
1. 创建 `skill_main.py` 作为技能入口
|
||||
2. 创建 `kb_workflow.py` 实现完整流程
|
||||
3. 接收用户消息后自动处理
|
||||
|
||||
---
|
||||
|
||||
### 2026-02-10: kb-workflow 自己实现链接解析而非调用子技能
|
||||
|
||||
**状态:** ✅ 已修复
|
||||
|
||||
**解决方案:**
|
||||
重构 `kb_workflow.py`:
|
||||
1. 使用 `sessions_spawn` 调用子agent
|
||||
2. 不自己实现链接解析,调用 `kb-link-parser`
|
||||
3. 从文件名提取平台(不读内容)
|
||||
|
||||
```python
|
||||
# 调用子agent
|
||||
result = sessions_spawn(
|
||||
agentId="kb-link-parser",
|
||||
task="解析URL,输出到pending目录"
|
||||
)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 2026-02-10: _extract_metadata 是空壳
|
||||
|
||||
**状态:** ✅ 已修复
|
||||
|
||||
**解决方案:**
|
||||
实现真正的子agent调用:
|
||||
```python
|
||||
def call_metadata_agent(platform, link_file, metadata_dir):
|
||||
agent_id = METADATA_AGENTS.get(platform) # bilibili → kb-bilibili-metadata
|
||||
return call_subagent(agent_id, task, timeout=120)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 重构总结
|
||||
|
||||
### 架构变化
|
||||
|
||||
**之前(错误):**
|
||||
```
|
||||
kb_workflow.py (自己造轮子)
|
||||
├── _extract_link() - 自己解析URL
|
||||
├── _extract_metadata() - 空壳
|
||||
```
|
||||
|
||||
**之后(正确):**
|
||||
```
|
||||
kb-workflow (主代理)
|
||||
├── sessions_spawn() 调用子agent
|
||||
│ ├── kb-link-parser → pending/*.link.json
|
||||
│ ├── kb-bilibili-metadata → metadata/*.meta.json
|
||||
│ ├── kb-bilibili-content → content/downloads/*.mp4
|
||||
│ ├── kb-ocr-processor → content/*.txt
|
||||
│ └── kb-deep-analyzer → analyzed/*.md
|
||||
└── 文件流转 + Git归档
|
||||
```
|
||||
|
||||
### 设计原则
|
||||
|
||||
| workflow 管 | workflow 不管 |
|
||||
|-------------|---------------|
|
||||
| 查重 | 读文件内容 |
|
||||
| 调用子agent | 子技能内部格式 |
|
||||
| 提取文件名(从返回结果) | 子技能逻辑 |
|
||||
| 提取平台(从文件名) | |
|
||||
| 传递路径信息 | |
|
||||
| Git归档 | |
|
||||
|
||||
### 文件变更
|
||||
|
||||
| 文件 | 操作 | 说明 |
|
||||
|------|------|------|
|
||||
| `kb_workflow.py` | 重构 | 使用 sessions_spawn 调用子agent |
|
||||
| `skill_main.py` | 新增 | 技能入口 |
|
||||
| `SKILL.md` | 更新 | 明确架构和流程 |
|
||||
|
||||
---
|
||||
|
||||
## 待办
|
||||
|
||||
- [ ] 测试完整的处理流程
|
||||
- [ ] 验证 sessions_spawn 调用是否正常
|
||||
- [ ] 完善错误处理
|
||||
- [ ] 添加单元测试
|
||||
+588
-798
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,133 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
KB Workflow Skill Main Entry
|
||||
|
||||
当用户发送包含触发词的消息时自动触发:
|
||||
- "添加到知识库 + 链接"
|
||||
- "保存到知识库 + 链接"
|
||||
|
||||
职责:
|
||||
1. 接收用户消息
|
||||
2. 识别触发词和链接
|
||||
3. 调用 kb_workflow.process_url 处理
|
||||
4. 汇报结果
|
||||
"""
|
||||
|
||||
import re
|
||||
import sys
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
# 触发词模式
|
||||
TRIGGER_PATTERNS = [
|
||||
r'添加到知识库\s+(https?://[^\s]+)',
|
||||
r'保存到知识库\s+(https?://[^\s]+)',
|
||||
]
|
||||
|
||||
|
||||
def extract_link(message: str) -> str | None:
|
||||
"""从消息中提取链接"""
|
||||
for pattern in TRIGGER_PATTERNS:
|
||||
match = re.search(pattern, message)
|
||||
if match:
|
||||
return match.group(1)
|
||||
return None
|
||||
|
||||
|
||||
def main(message: str) -> Dict[str, Any]:
|
||||
"""
|
||||
主入口函数 - 当 kb-workflow 作为子代理被调用时执行
|
||||
"""
|
||||
result = {
|
||||
"success": False,
|
||||
"url": None,
|
||||
"workflow_result": None,
|
||||
"error": None
|
||||
}
|
||||
|
||||
try:
|
||||
# 1. 提取链接
|
||||
url = extract_link(message)
|
||||
if not url:
|
||||
result["error"] = "未找到链接"
|
||||
return result
|
||||
|
||||
result["url"] = url
|
||||
|
||||
# 2. 调用workflow处理
|
||||
from kb_workflow import process_url
|
||||
|
||||
import os
|
||||
base_path_str = os.environ.get('KB_BASE_PATH', '')
|
||||
base_path = Path(base_path_str) if base_path_str else None
|
||||
|
||||
# 处理
|
||||
workflow_result = process_url(url, base_path)
|
||||
result["workflow_result"] = workflow_result
|
||||
|
||||
if workflow_result.get("success"):
|
||||
result["success"] = True
|
||||
|
||||
except Exception as e:
|
||||
result["error"] = str(e)
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
|
||||
return result
|
||||
|
||||
|
||||
def print_result(result: Dict[str, Any]):
|
||||
"""打印结果"""
|
||||
print("\n" + "="*50)
|
||||
print("KB Workflow Result")
|
||||
print("="*50)
|
||||
|
||||
print(f"\nURL: {result.get('url', 'N/A')}")
|
||||
|
||||
wr = result.get('workflow_result', {})
|
||||
if wr:
|
||||
print(f"\n处理状态: {'成功' if wr.get('success') else '失败'}")
|
||||
|
||||
if wr.get('stages'):
|
||||
print(f"\n处理阶段:")
|
||||
for stage in wr['stages']:
|
||||
stage_name = stage.get('stage', 'unknown')
|
||||
print(f" ✓ {stage_name}")
|
||||
|
||||
if wr.get('final_file'):
|
||||
print(f"\n最终文件: {wr['final_file']}")
|
||||
|
||||
archive = wr.get('archive', {})
|
||||
if archive:
|
||||
print(f"\n归档:")
|
||||
print(f" 归档路径: {archive.get('archive_path', 'N/A')}")
|
||||
print(f" Git提交: {'是' if archive.get('git_commit') else '否'}")
|
||||
push = archive.get('git_push', {})
|
||||
if push:
|
||||
print(f" Git推送: {'成功' if push.get('success') else '失败'}")
|
||||
|
||||
if wr.get('error'):
|
||||
print(f"\n错误: {wr['error']}")
|
||||
|
||||
if result.get('error'):
|
||||
print(f"\n错误: {result['error']}")
|
||||
|
||||
print()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
# 从参数获取消息(作为子代理时)
|
||||
if len(sys.argv) > 1:
|
||||
message = sys.argv[1]
|
||||
else:
|
||||
message = sys.stdin.read()
|
||||
|
||||
if not message:
|
||||
print("请提供消息内容")
|
||||
sys.exit(1)
|
||||
|
||||
result = main(message)
|
||||
print_result(result)
|
||||
|
||||
sys.exit(0 if result.get('success') else 1)
|
||||
Reference in New Issue
Block a user