name: bk-daily-report description: 自动生成并上传蓝鲸日报。分析Git提交和iWiki文档编辑,生成今日总结和明日计划,上传到蓝鲸平台。当用户提到"写日报"、"生成日报"、"上传日报"、"自动日报"时使用此技能。
🚀 蓝鲸日报自动生成与上传
📋 核心职责
自动执行完整的日报生成流程:
- ✅ 分析 Git 提交记录(今天优先,今天无则昨天)
- ✅ 获取 iWiki 文档编辑(如果 MCP 可用)
- ✅ 综合分析并生成日报内容
- ✅ 上传到蓝鲸平台(日期始终为今天)
⚠️ 关键规则(必须遵守)
规则 1:日期处理策略
- 代码提交日期 vs 日报提交日期:
- 代码提交日期:今天优先,今天无则使用昨天(用于生成内容)
- 日报提交日期:永远使用今天(
report_date参数)
- 原因:日报记录的是"今天写的日报",而不是"代码提交的日期"
规则 2:全自动执行
- ❌ 禁止向用户提问(如"是否上传?""需要修改吗?")
- ✅ 直接执行整个流程:分析 → 生成 → 上传
- ✅ 只在最后报告结果
规则 3:内容质量要求
- 今日总结:3-7 项,每项 < 30 字,具体且有价值
- 明日计划:基于今日工作推断,2-5 项
- 优先级:重要功能 > 小优化 > 配置变更
🔧 执行流程
第零步:环境检测
检查必要组件:
# 检查配置文件
ls {SKILL_BASE_DIR}/assets/daily_report_config.yml
# 检查上传脚本
ls {SKILL_BASE_DIR}/scripts/upload_daily_report.py
# 检查 iWiki MCP(可选)
# 如果可用,后续步骤会使用
第一步:Git 提交分析
使用 Git 分析脚本:
# 方式A:使用脚本(推荐)
python3 {SKILL_BASE_DIR}/scripts/analyze_git_commits.py \
--repo . \
--period auto \
--format json
或者 手动执行 Git 命令:
# 今天的提交
git log --since="today 00:00" --pretty=format:"%h|%an|%ad|%s" --date=format:"%Y-%m-%d %H:%M:%S"
# 如果今天没有,获取昨天的
git log --since="yesterday 00:00" --until="today 00:00" --pretty=format:"%h|%an|%ad|%s" --date=format:"%Y-%m-%d %H:%M:%S"
输出处理:
- 提取提交消息(
%s部分) - 按重要性分类:功能开发 > Bug 修复 > 优化 > 文档
- 合并相似提交(如多次调试同一功能)
第二步:iWiki 文档分析(可选)
检测 iWiki MCP 是否可用:
# 检查 MCP 工具列表中是否有 iWiki
iwiki_available = check_if_mcp_tool_exists("iWiki", "searchDocument")
如果 iWiki 可用,执行以下步骤:
2.1 搜索作者的所有文档
⚠️ 注意:iWiki 按时间搜索不可靠,需要先搜索所有文档再筛选。
from datetime import datetime
# 获取今天的日期
today = datetime.now().strftime('%Y-%m-%d')
# 第一步:搜索作者的所有文档(用通配符 "*")
mcp_call_tool(
serverName="iWiki",
toolName="searchDocument",
arguments={
"query": "*", # ⚠️ 不要用 modified:date,搜索不可靠
"search_type": ["page"],
"author": ["perryyzhang"] # 替换为实际用户名
}
)
2.2 从结果中筛选今天修改的文档
# 第二步:从返回的 contents 列表中筛选今天的
today_docs = []
for doc in results['contents']:
modify_time = doc.get('modify_time', '')
if modify_time.startswith(today):
today_docs.append({
'title': doc['title'],
'modify_time': modify_time,
'href': doc['href']
})
输出处理:
- 提取文档标题和修改时间
- 生成简要描述(如"更新了 X 文档")
- 添加到今日总结
第三步:生成日报内容
综合 Git 提交和 iWiki 文档,生成日报:
今日总结生成规则:
功能开发(优先级最高):
- 示例:"完成 XXX 功能开发"
- 示例:"实现 YYY 模块的 ZZZ 能力"
Bug 修复:
- 示例:"修复 XXX 问题"
- 示例:"解决 YYY 场景下的 ZZZ 异常"
优化改进:
- 示例:"优化 XXX 性能"
- 示例:"重构 YYY 模块代码"
文档编辑(如果有 iWiki):
- 示例:"更新 XXX 技术文档"
- 示例:"编写 YYY 使用说明"
明日计划生成规则:
- 基于今日工作推断下一步
- 示例:今日"完成登录功能" → 明日"测试登录功能并优化"
- 示例:今日"修复拨测问题" → 明日"验证修复效果并回归测试"
格式要求:
- 每项以
-开头 - 换行符使用
\n - 示例:
today_summary = "- 完成拨测模块重构\n- 修复引用路径问题\n- 优化代码结构" tomorrow_plan = "- 测试拨测功能\n- 编写单元测试\n- 更新技术文档"
第四步:上传到蓝鲸平台
使用上传脚本:
python3 {SKILL_BASE_DIR}/scripts/upload_daily_report.py \
--summary "- 任务1\n- 任务2\n- 任务3" \
--plan "- 计划1\n- 计划2" \
--feeling "无" \
--date "$(date +%Y-%m-%d)" # ⚠️ 必须使用今天的日期
或者 在 Python 中调用:
import sys
from pathlib import Path
from datetime import datetime
# 添加脚本路径
sys.path.insert(0, str(Path("{SKILL_BASE_DIR}/scripts")))
from upload_daily_report import upload_report
# ⚠️ 日期必须使用今天,即使分析的是昨天的代码
today = datetime.now().strftime('%Y-%m-%d')
result = upload_report(
today_summary="- 任务1\n- 任务2\n- 任务3",
tomorrow_plan="- 计划1\n- 计划2",
feeling="无",
report_date=today # ⚠️ 必须是今天的日期
)
if result['success']:
print(f"✓ {result['message']}")
else:
print(f"✗ {result['message']}")
📊 完整执行示例
用户输入:"帮我写今天的日报"
Agent 执行流程:
分析 Git:
python3 {SKILL_BASE_DIR}/scripts/analyze_git_commits.py --period auto --format json输出:今天有 3 个提交
分析 iWiki(如果可用):
# 搜索所有文档 docs = mcp_call_tool("iWiki", "searchDocument", {"query": "*", "author": ["perryyzhang"]}) # 筛选今天修改的 today_docs = [d for d in docs['contents'] if d['modify_time'].startswith(today)]输出:今天编辑了 1 篇文档
生成内容:
今日总结: - 完成拨测模块底座切换 - 修复引用路径问题 - 优化代码结构 - 更新"拨测能力切换"文档 明日计划: - 测试拨测功能 - 编写单元测试 - 验证生产环境上传:
python3 {SKILL_BASE_DIR}/scripts/upload_daily_report.py \ --summary "- 完成拨测模块底座切换\n- 修复引用路径问题\n- 优化代码结构\n- 更新拨测能力切换文档" \ --plan "- 测试拨测功能\n- 编写单元测试\n- 验证生产环境" \ --date "2026-03-05"输出结果:
✓ 日报上传成功 日期: 2026-03-05 今日总结: 4 项 明日计划: 3 项
🔍 故障排查
问题 1:配置文件未找到
错误信息:配置文件不存在
解决方案:
# 确认配置文件存在
ls {SKILL_BASE_DIR}/assets/daily_report_config.yml
# 如果不存在,从根目录复制
cp /path/to/daily_report_config.yml {SKILL_BASE_DIR}/assets/
问题 2:认证凭证过期
错误信息:权限不足 (403) 或 认证失败 (401)
解决方案:
- 打开浏览器登录蓝鲸平台
- 打开开发者工具 → Network
- 提交一次日报,查看请求头
- 更新配置文件中的凭证:
credentials: bk_ticket: "新的 ticket" bk_csrf_token: "新的 csrf token" bk_sessionid: "新的 session id"
问题 3:今天和昨天都没有提交
行为:无法生成日报
解决方案:
- 提示用户:"今天和昨天都没有代码提交,无法生成日报"
- 建议用户手动填写日报内容
📁 文件结构
bk-daily-report-skill/
├── SKILL.md # 本文件(Skill 定义)
├── scripts/
│ ├── upload_daily_report.py # 上传脚本(核心)
│ └── analyze_git_commits.py # Git 分析脚本
├── assets/
│ └── daily_report_config.yml # 配置文件(凭证)
└── references/
└── (可选) 蓝鲸 API 文档
🎯 触发关键词
当用户消息包含以下关键词时,自动触发此 Skill:
- "写日报" / "写蓝鲸日报"
- "生成日报" / "自动日报"
- "上传日报" / "提交日报"
- "今天的日报" / "日报上传"
✅ 成功标准
执行成功的标志:
- ✅ Git 提交分析完成(今天或昨天)
- ✅ iWiki 文档分析完成(如果可用)
- ✅ 日报内容生成(3-7 项总结,2-5 项计划)
- ✅ 上传成功(输出包含"日报上传成功")
🚫 注意事项
- 不要询问用户:全自动执行,除非遇到无法解决的错误
- 日期必须是今天:即使分析昨天的代码,
report_date也用今天 - iWiki 搜索策略:不要用
modified:date,先搜全部再筛选 - 内容质量:确保每项总结具体且有价值,避免空洞描述
📞 依赖项
- Python 3.8+
- PyYAML
- Git(命令行工具)
- curl(命令行工具)
- iWiki MCP(可选,用于文档分析)