From cccd5face67730149280936ec6e5d1fa49aa0455 Mon Sep 17 00:00:00 2001 From: admin Date: Fri, 27 Feb 2026 15:50:39 +0800 Subject: [PATCH] =?UTF-8?q?=E7=B2=BE=E7=AE=80=20weekly-report=20README?= =?UTF-8?q?=EF=BC=8C=E5=8F=AA=E4=BF=9D=E7=95=99=E6=8A=80=E8=83=BD=E7=89=B9?= =?UTF-8?q?=E6=9C=89=E9=85=8D=E7=BD=AE=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 4.6 --- skills/weekly-report/README.md | 117 +++++++-------------------------- 1 file changed, 25 insertions(+), 92 deletions(-) diff --git a/skills/weekly-report/README.md b/skills/weekly-report/README.md index 97291c4..8456290 100644 --- a/skills/weekly-report/README.md +++ b/skills/weekly-report/README.md @@ -1,39 +1,23 @@ # weekly-report -统计项目过去 7 天的 commit 和 PR,为每位协作者生成个人工作日志,并生成项目整体进度报告,通过 SMTP 发送到指定邮箱。 +统计项目过去 7 天的 commit 和 PR,为每位协作者生成个人工作日志和项目整体进度报告,通过 SMTP 发送邮件。 > 适用于自建 Gitea 仓库,不依赖 `gh` CLI。 -## 安全限制 - -本技能通过 `allowed-tools` 限定了 Claude 可使用的工具范围: - -| 允许 | 说明 | -|------|------| -| `Read` | 读取配置文件和报告内容 | -| `Glob` | 查找脚本路径 | -| `Grep` | 搜索文件内容 | -| `Bash(git pull*)` | 仅允许执行 `git pull` | -| `Bash(python*)` | 仅允许执行 Python 脚本 | - -明确**禁止**的操作:`Write`(写文件)、`Edit`(编辑文件)、任意 Bash 命令(如 `rm`、`curl`、`cat >` 等)。 - -临时文件(数据 JSON 和 HTML 报告)由 Python 脚本自身写入 `/tmp/`,不经过 Claude 的写工具。 - ## 前置要求 - Python 3.8+ -- 项目使用 Git,且 `origin` 指向 Gitea 实例 +- 项目 `origin` 指向 Gitea 实例 - 有可用的 SMTP 邮件账号 -## 第一步:在项目根目录创建配置文件 +## 配置文件 -在**需要生成周报的项目**根目录下创建 `report-config.json`(可提交到 git): +在**被统计项目**的根目录创建 `report-config.json`(可提交到 git): ```json { "recipients": ["boss@company.com", "team@company.com"], - "project_name": "你的项目名称", + "project_name": "项目名称", "smtp_host": "smtphz.qiye.163.com", "smtp_port": 994 } @@ -42,77 +26,35 @@ | 字段 | 必填 | 说明 | |------|------|------| | `recipients` | 是 | 收件人邮箱列表 | -| `project_name` | 是 | 项目名称,显示在邮件标题中 | -| `smtp_host` | 否 | SMTP 服务器地址,内置服务商可省略(见下表) | -| `smtp_port` | 否 | SMTP 端口,内置服务商可省略 | +| `project_name` | 是 | 显示在邮件标题中 | +| `smtp_host` | 否 | 内置服务商可省略(见下表) | +| `smtp_port` | 否 | 内置服务商可省略 | -### 内置服务商(smtp_host/smtp_port 可省略) +### 内置 SMTP 服务商 -| 发件邮箱后缀 | 自动使用的服务器 | 端口 | -|-------------|----------------|------| +| 邮箱后缀 | 服务器 | 端口 | +|----------|--------|------| | `@gmail.com` | smtp.gmail.com | 587 | | `@qq.com` | smtp.qq.com | 465 | | `@163.com` | smtp.163.com | 465 | | `@126.com` | smtp.126.com | 465 | | `@outlook.com` / `@hotmail.com` | smtp.office365.com | 587 | -企业自定义域名(如 `@yourcompany.com`)需手动填写 `smtp_host` 和 `smtp_port`。 +企业自定义域名需手动填写 `smtp_host` 和 `smtp_port`。 -## 第二步:设置环境变量 - -账号密码**不要写入任何文件**,在终端中临时设置: +## 环境变量 ```bash export SMTP_USER=your@email.com -export SMTP_PASSWORD=your-smtp-password-or-auth-code -``` +export SMTP_PASSWORD=your-auth-code -> **说明**:`export` 仅对当前终端会话有效,关闭后自动失效。 -> 如需持久化,可写入 `~/.bashrc`(注意文件权限 `chmod 600 ~/.bashrc`)。 - -### 私有 Gitea 仓库 - -如果仓库是私有的,还需要额外设置 Gitea 访问令牌: - -```bash +# 私有 Gitea 仓库需要(公开仓库忽略) export GITEA_TOKEN=your-gitea-token ``` -在 Gitea 中生成令牌:`头像 → 设置 → 应用 → 管理 Access Token`,权限勾选 `repository: Read`。 +`GITEA_TOKEN` 在 Gitea 中生成:`头像 → 设置 → 应用 → 管理 Access Token`,权限勾选 `repository: Read`。 -公开仓库无需配置此项。 - -## 第三步:安装技能 - -将 `weekly-report` 文件夹复制到目标位置: - -```bash -# 仅当前项目可用 -cp -r weekly-report /path/to/your-project/.claude/skills/ - -# 所有项目可用 -cp -r weekly-report ~/.claude/skills/ -``` - -## 第四步:调用技能 - -在 Claude Code 中输入: - -``` -/weekly-report -``` - -Claude 会自动执行以下流程: -1. 读取 `report-config.json` -2. 拉取 `origin/main` 最新代码 -3. 通过 Gitea API 获取过去 7 天的 commits 和已合并 PR -4. 生成每位协作者的个人工作日志 -5. 生成项目整体进度报告 -6. 发送 HTML 格式邮件到 `recipients` 列表 - -## 定时自动发送(Cron) - -### Linux / Mac +## 定时发送 `crontab -e` 添加一行(每周五 18:00): @@ -120,27 +62,18 @@ Claude 会自动执行以下流程: 0 18 * * 5 cd /path/to/your-project && SMTP_USER=xxx SMTP_PASSWORD=xxx claude -p "/weekly-report" >> ~/weekly_report.log 2>&1 ``` -crontab 文件权限默认仅限当前用户,密码写在里面是安全的。 - -### Windows(任务计划程序) - -1. 开始菜单搜索「任务计划程序」→「创建基本任务」 -2. 触发器:每周,设置具体时间(如每周五 18:00) -3. 操作:启动程序 - - 程序:`C:\Program Files\Git\bin\bash.exe` - - 参数:`-l -c "cd /e/your-project && SMTP_USER=xxx SMTP_PASSWORD=xxx claude -p '/weekly-report'"` - -> 如遇「命令未找到」,将 `claude` 替换为绝对路径(用 `which claude` 查询)。 - ---- +Windows 用任务计划程序,参数设为: +``` +-l -c "cd /e/your-project && SMTP_USER=xxx SMTP_PASSWORD=xxx claude -p '/weekly-report'" +``` ## 常见问题 **Q:发送失败,提示认证错误** -A:SMTP 密码通常需要使用"授权码"而非登录密码。QQ/163 邮箱请在邮箱设置中开启 SMTP 并生成授权码;Gmail 需要开启两步验证后生成"应用专用密码"。 +A:需使用授权码而非登录密码。QQ/163 在邮箱设置中开启 SMTP 并生成授权码;Gmail 需开启两步验证后生成应用专用密码。 **Q:没有 PR 数据** -A:直接 `git push` 的提交不会产生 PR 记录,只有通过 Gitea 创建 Pull Request 并合并的才会被统计。 +A:只有通过 Gitea 创建并合并的 Pull Request 才会被统计,直接 `git push` 不产生 PR 记录。 -**Q:私有仓库报 401 错误** -A:需要设置 `GITEA_TOKEN` 环境变量,参考上方说明。 +**Q:私有仓库报 401** +A:设置 `GITEA_TOKEN` 环境变量。