forked from Gitlink/gitlink-cli
Merge pull request '修改了skills中的部分bug' (#29) from zzx_branch into master
This commit is contained in:
commit
2a75e68df9
|
|
@ -666,7 +666,7 @@ var SKILLS = [
|
|||
{
|
||||
id: 'health', icon: '📊', name: '项目健康度报告 (gitlink-health)',
|
||||
prompts: [
|
||||
{ label: '基础健康度报告', prompt: '请使用 gitlink-health Skill,为 zzx-coder/test-repo 仓库生成项目健康度报告。' },
|
||||
{ label: '基础健康度报告', prompt: '请使用 gitlink-health Skill,为 zzx-coder/test-repo 仓库生成项目健康度报告。\n效率要求(重要):整份报告须在 2 分钟内完成。计数/合并率/积压数一律从 issue +list、pr +list 的汇总字段一次性获取;PR 合并时长只采样「最近 ≤8 条已合并 PR」调用 pr +view 取 merged_at,禁止遍历或分页拉取全部历史 PR/Issue。' },
|
||||
{ label: '安全规则验证:保存路径', prompt: '请把报告保存到桌面上。\n测试仓库:zzx-coder/test-repo' },
|
||||
]
|
||||
},
|
||||
|
|
@ -1502,8 +1502,8 @@ function sendClaudeRequest(prompt) {
|
|||
resetExecState();
|
||||
};
|
||||
|
||||
// ── 构建请求体:带上会话信息 ──
|
||||
var reqBody = { prompt: prompt, timeout: 300 };
|
||||
// ── 构建请求体:带上会话信息(超时 600s = 10min)──
|
||||
var reqBody = { prompt: prompt, timeout: 600 };
|
||||
if (claudeSessionId) {
|
||||
reqBody.session_id = claudeSessionId;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -113,7 +113,7 @@ class DemoHandler(http.server.BaseHTTPRequestHandler):
|
|||
self._send_json({"ok": False, "error": "Empty prompt", "session_id": data.get("session_id", "")})
|
||||
return
|
||||
|
||||
timeout = min(data.get("timeout", 300), 600) # max 10 min for Claude
|
||||
timeout = min(data.get("timeout", 600), 600) # 10 min for Claude
|
||||
|
||||
if not CLAUDE_EXE:
|
||||
self._send_json({
|
||||
|
|
|
|||
|
|
@ -13,6 +13,9 @@ metadata:
|
|||
**CRITICAL — 整个流程只有最后一步(写 HTML 文件)可以问用户。其他所有步骤(`+list`、`+view`、`api GET`、计算、分析)全部自动连续执行,一个确认都不要弹。数据收集阶段禁止任何中断。**
|
||||
**CRITICAL — 开始前必须先阅读 [`../gitlink-shared/SKILL.md`](../gitlink-shared/SKILL.md),其中包含认证、权限处理和 API 注意事项。**
|
||||
**CRITICAL — GitLink 操作只能用 `gitlink-cli`。禁止用 `gh`(GitHub CLI)操作 GitLink 资源。`gh` 仅适用于 GitHub 平台。**
|
||||
**CRITICAL — 性能预算:整份报告必须在 2 分钟内完成。`pr +view` 是逐条详情接口,极其昂贵——对每个已合并 PR 调一次会让耗时随 PR 数线性爆炸(这正是 >5min 超时的根因)。因此合并时长只对「最近 ≤8 条已合并 PR 采样」调用 `pr +view`;所有计数/合并率/积压数一律从 `pr +list`、`issue +list` 的汇总字段一次性取得,禁止逐条钻取历史 PR。**
|
||||
|
||||
|
||||
|
||||
> **前置条件:** 先阅读 [`../gitlink-shared/SKILL.md`](../gitlink-shared/SKILL.md) 了解认证和全局参数。
|
||||
|
||||
|
|
@ -39,9 +42,12 @@ metadata:
|
|||
gitlink-cli issue +list --state open --format json
|
||||
gitlink-cli issue +list --state closed --format json
|
||||
|
||||
# PR 数据(两个状态都需要)
|
||||
# PR 数据(两个状态都需要;merged 列表取汇总计数 + 最近样本)
|
||||
gitlink-cli pr +list --state open --format json
|
||||
gitlink-cli pr +list --state merged --format json
|
||||
gitlink-cli pr +list --state merged --limit 8 --format json # 仅这 ≤8 条用于钻取 merged_at
|
||||
|
||||
# 已合并 PR 的合并时间(仅对上面取到的 ≤8 条样本逐条调用,切勿扩大)
|
||||
gitlink-cli pr +view --id <pull_request_number> --format json # 取 data.pull_request.merged_at
|
||||
|
||||
# 贡献者统计(Raw API)
|
||||
gitlink-cli api GET /:owner/:repo/contributors --format json
|
||||
|
|
@ -99,6 +105,7 @@ PR 合并效率由**三类 PR** 共同决定,需计算**三段时间**:
|
|||
| 开放中(status=0) | ② | ❌ | ✅ |
|
||||
|
||||
> **数据获取**:`merged_at` 仅在 `pr +view --id <pull_request_number>` 单个 PR 详情中返回(路径 `data.pull_request.merged_at`),列表接口不暴露。
|
||||
> **效率关键(采样而非全量)**:合并时长是统计量,只需对**最近 ≤8 条已合并 PR**调用 `pr +view` 取 `merged_at` 求平均即可——`pr +list --state merged` 默认按合并时间倒序,列表前 ≤8 条即为最近样本。合并总数 / 合并率 / 积压数等计数指标全部从 `pr +list` 的汇总字段一次性获取,**禁止**对全部历史已合并 PR 逐条调用 `pr +view`(会超时)。
|
||||
> **绝对禁止**:用「当前时间 - 创建时间」估算已合并 PR 的合并时间。开放 PR 用此公式是允许的(且必要),因为它们没有合并时间点,等待时长反映积压。
|
||||
|
||||
### 3. 贡献者活跃度
|
||||
|
|
|
|||
|
|
@ -24,19 +24,20 @@ gitlink-cli issue +list --state closed --format json
|
|||
### 第二步:收集 PR 数据
|
||||
|
||||
```bash
|
||||
# 获取未合并 PR
|
||||
# 获取未合并 PR(计数 + 积压)
|
||||
gitlink-cli pr +list --state open --format json
|
||||
|
||||
# 获取已合并 PR
|
||||
gitlink-cli pr +list --state merged --format json
|
||||
# 获取已合并 PR 汇总 + 最近样本(--limit 8 限定钻取范围,避免超时)
|
||||
gitlink-cli pr +list --state merged --limit 8 --format json
|
||||
|
||||
# 仅对上面取到的 ≤8 条样本逐条取 merged_at(切勿对全部历史 PR 调用)
|
||||
gitlink-cli pr +view --id <pull_request_number> --format json
|
||||
```
|
||||
|
||||
# AI 从返回中提取:
|
||||
# - merged count: 10
|
||||
# - open count: 0
|
||||
# - 合并率: 10/11 = 91%
|
||||
# - 最新合并 PR: #11 (2026-06-04)
|
||||
# - PR 平均合并时间需逐条计算
|
||||
```
|
||||
# - merged count / open count:从 pr +list 汇总字段
|
||||
# - 合并率: merged / (merged + closed)
|
||||
# - 已合并 PR 平均合并时长:仅基于这 ≤8 条样本的 merged_at - created_at 求平均
|
||||
|
||||
### 第三步:收集贡献者统计
|
||||
|
||||
|
|
@ -90,7 +91,7 @@ AI 读取 `skills/gitlink-health/template.html`,将计算后的指标替换所
|
|||
## AI Agent 执行要点
|
||||
|
||||
1. **数据收集顺序**:先收集 Issue 和 PR(Shortcut 命令),再收集 contributors(Raw API),避免一次性大量 API 调用
|
||||
2. **分页处理**:Issue 和 PR 数量超过单页限制时,用 `--page` 逐页获取
|
||||
2. **效率优先于全量**:报告是趋势快照,不是审计。计数/合并率从 `+list` 汇总字段一次取得;合并时长只采样最近 ≤8 条已合并 PR(`pr +view`)。**禁止**分页遍历全部历史 Issue/PR,也禁止对每个已合并 PR 都调 `pr +view`——这是 >5min 超时的根因
|
||||
3. **时间计算**:ISO 8601 格式解析优先,Unix 时间戳更可靠但 PR 的 `pr_created_unix` 仅部分返回
|
||||
4. **指标计算容错**:样本不足时标注而非报错,新项目可能仅有少量数据
|
||||
5. **评分可按需调整**:新项目无 Release 时,"无近期发布"项自动跳过
|
||||
|
|
|
|||
|
|
@ -43,14 +43,16 @@ PR 返回的关键字段:
|
|||
|
||||
| 字段 | 用途 |
|
||||
|------|------|
|
||||
| `pull_request_number` | PR 编号 |
|
||||
| `pull_request_number` | PR 编号(用于 `pr +view --id` 钻取) |
|
||||
| `name` (title) | PR 标题 |
|
||||
| `pull_request_status` | 状态:0=open, 1=merged, 2=closed |
|
||||
| `author_login` | 作者 |
|
||||
| `pr_full_time` | 创建时间 (ISO 8601) |
|
||||
| `pr_merged_at` | 合并时间 |
|
||||
| `pr_created_unix` | 创建时间 (Unix timestamp) |
|
||||
| `merged_issues_size` / `open_count` / `close_count` | 合并/开放/关闭未合并计数(汇总字段,与 `--limit` 无关,一次性取得) |
|
||||
|
||||
> ⚠️ `pr +list` **不返回** `merged_at`(合并时间)字段,只有创建时间。`merged_at` 仅在 `pr +view --id <pull_request_number>` 的 `data.pull_request.merged_at` 中暴露。
|
||||
> ⚠️ **为控制耗时,只对最近 ≤8 条已合并 PR 调用 `pr +view` 取 `merged_at`**(列表默认按合并时间倒序,前 ≤8 条即最近样本)。`pr +list --state merged --limit 8` 一条命令即可同时拿到汇总计数(`merged_issues_size` 等不受 limit 影响)和 8 条样本。禁止遍历全部历史已合并 PR。
|
||||
> ⚠️ `--state` 参数仅影响 `merged_count`/`open_count`/`closed_count` 汇总计数,API 返回的 issues 列表可能包含所有状态的 PR。需按 `pull_request_status` 客户端过滤。
|
||||
|
||||
### 步骤 3:收集贡献者统计
|
||||
|
|
@ -100,17 +102,17 @@ gitlink-cli api GET /:owner/:repo/activity --format json
|
|||
|
||||
数据收集覆盖以下时间范围:
|
||||
|
||||
- **Issue**: 所有未关闭 + 近期已关闭(默认取最近 100 条)
|
||||
- **PR**: 所有未合并 + 近期已合并(默认取最近 100 条)
|
||||
- **Issue**: 所有未关闭 + 近期已关闭(计数从汇总字段取;时间计算用近期限定条数即可)
|
||||
- **PR**: 所有未合并 + 近期已合并(计数/合并率从 `pr +list` 汇总字段取;**合并时长仅采样最近 ≤8 条已合并 PR** 钻取 `merged_at`)
|
||||
- **Contributors**: 项目全量历史数据
|
||||
- **Activity**: 最近 30 天
|
||||
|
||||
对于大型项目,可通过 `--page` 分页获取更多数据。
|
||||
大型项目也**不要**通过 `--page` 分页遍历全部历史数据——健康度是趋势快照,计数取汇总字段、合并时长取最近 ≤8 条样本即可,避免超时。
|
||||
|
||||
## 注意事项
|
||||
|
||||
- 计算响应时间需要 Issue 有 `closed_at` 字段,仅已关闭 Issue 才会返回此字段
|
||||
- PR 合并时间需通过 `pr_full_time` 与当前时间对比估算,或结合 PM `/weekly_issues` API
|
||||
- PR 合并时间**不能**用「当前时间 - `pr_full_time`」估算(已合并 PR 必须取真实 `merged_at`);`merged_at` 通过 `pr +view --id` 获取,**仅采样最近 ≤8 条已合并 PR**
|
||||
- `contributors` 端点统计基于默认分支(通常为 `master`),不含其他分支
|
||||
- `--owner` / `--repo` 在仓库目录下可自动解析
|
||||
- 时间计算使用 Unix 时间戳(`pr_created_unix`)比解析字符串格式(`pr_full_time`)更可靠
|
||||
|
|
|
|||
|
|
@ -73,9 +73,9 @@ PR 合并效率由**三类 PR** 共同决定,需计算**三段时间**:
|
|||
### 计算公式
|
||||
|
||||
```
|
||||
# ① 已合并 PR 平均合并时长
|
||||
# ① 已合并 PR 平均合并时长(基于最近 ≤8 条样本)
|
||||
time_merged_i = merged_at_i - created_at_i
|
||||
avg_merged = sum(time_merged_i) / merged_count
|
||||
avg_merged = sum(time_merged_i) / sample_count # sample_count = 实际采样的 PR 条数(≤8),不是历史合并总数
|
||||
|
||||
# ② 开放 PR 平均等待时长
|
||||
time_open_i = now - created_at_i
|
||||
|
|
@ -123,28 +123,16 @@ merge_rate = merged_count / (merged_count + closed_count) × 100%
|
|||
|
||||
### 数据可用性
|
||||
|
||||
| 字段 | 来源命令 | 路径 |
|
||||
|------|---------|------|
|
||||
| `created_at` | `pr +list` | `data.issues[].pr_full_time` 或 `pr_created_unix` |
|
||||
| `merged_at` | `pr +view --id <pull_request_number>` | `data.pull_request.merged_at` |
|
||||
|
||||
> **绝对禁止**:用「当前时间 - 创建时间」估算已合并 PR 的合并时间。已合并 PR 必须用真实的 `merged_at`。
|
||||
> 开放 PR 用「当前时间 - 创建时间」是允许的(且必要),因为它们没有合并时间点,等待时长反映积压。
|
||||
|
||||
### 数据可用性
|
||||
|
||||
PR 合并时间**只与 PR 自身时间相关**(创建时间 + 合并时间),**与当前时间无关**。
|
||||
|
||||
实际数据源:
|
||||
|
||||
| 字段 | 来源命令 | 路径 |
|
||||
|------|---------|------|
|
||||
| `created_at` | `pr +list --state merged` | `data.issues[].pr_full_time` 或 `pr_created_unix` |
|
||||
| `merged_at` | `pr +view --id <pull_request_id>` | `data.pull_request.merged_at` |
|
||||
| 合并总数 / 合并率 / 积压数 | `pr +list` 汇总字段 | `data.close_count` 等(一次性获取,勿逐条钻取) |
|
||||
| `merged_at` | `pr +view --id <pull_request_number>` | `data.pull_request.merged_at` |
|
||||
|
||||
**注意**:`merged_at` 只在 `pr +view` 单个 PR 详情中暴露,列表接口不返回。需要对每个已合并 PR 调用一次详情接口。
|
||||
|
||||
> **绝对禁止**:使用「当前时间 - 创建时间」作为合并时间估算。这种做法会把开放中或近期合并的 PR 误判为"超长合并时间",与 PR 合并效率的真实含义相悖。
|
||||
> **效率关键(采样而非全量)**:`merged_at` 只在 `pr +view` 单个 PR 详情中暴露,列表接口不返回。但合并时长是统计量——**只对最近 ≤8 条已合并 PR 采样调用 `pr +view`** 即可求得稳定平均,无需遍历全部历史 PR。`pr +list --state merged` 默认按合并时间倒序,取列表前 ≤8 条作为样本。合并总数/合并率从 `pr +list` 汇总字段一次性取得。
|
||||
> **绝对禁止**:使用「当前时间 - 创建时间」作为已合并 PR 的合并时间估算(会把开放中或近期合并的 PR 误判为"超长合并时间")。开放 PR 用「当前时间 - 创建时间」是允许且必要的,等待时长反映积压。
|
||||
|
||||
## 指标 3:贡献者活跃度
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue