feat(skills): add gitlink-stale skill

This commit is contained in:
Ct201314 2026-06-06 15:31:10 +08:00
parent b45241dcda
commit 1ae613717b
3 changed files with 171 additions and 0 deletions

View File

@ -0,0 +1,82 @@
---
name: gitlink-stale
version: 1.0.0
description: "陈旧 Issue/PR 清理:检测久未更新的开放 Issue 与 PR按陈旧度分级活跃/留意/陈旧/僵尸),生成清理建议清单。当用户提到「陈旧 Issue」「积压」「久未更新」「清理 Issue」「stale」「僵尸 PR」「待清理」时触发。"
metadata:
requires:
bins: ["gitlink-cli"]
optional_bins: ["python"]
cliHelp: "gitlink-cli issue --help"
---
# gitlink-stale陈旧 Issue/PR 清理)
**CRITICAL — 开始前先阅读 [`../gitlink-shared/SKILL.md`](../gitlink-shared/SKILL.md),其中包含认证、权限处理和 API 注意事项。**
**CRITICAL — GitLink 操作只能用 `gitlink-cli`。禁止用 `gh`GitHub CLI操作 GitLink 资源。**
**CRITICAL — 关闭 Issue/PR 属于写操作,执行前必须征得用户确认。本技能只生成建议清单,不自动关闭。**
> **前置条件:** 先阅读 [`../gitlink-shared/SKILL.md`](../gitlink-shared/SKILL.md)。
## 何时使用本技能
- 维护者想清理长期无人跟进的 Issue/PR控制积压
- 用户问「有哪些 Issue 很久没动了」「该清理哪些 PR」
- 定期做 backlog 健康检查
## 何时不使用
- 项目综合健康度 → 用 `gitlink-health` / `gitlink-insight`
- 普通列出 Issue/PR → 用 `gitlink-issue` / `gitlink-pr`
## 陈旧度分级
| 等级 | 停滞时长 | 含义 |
|:----:|:--------:|------|
| 🟢 活跃 | ≤ 14 天 | 近期有更新 |
| 🟡 留意 | ≤ 45 天 | 开始放缓 |
| 🟠 陈旧 | ≤ 120 天 | 需要跟进 |
| 🔴 僵尸 | > 120 天 | 建议评估关闭 |
## 工作流:扫描陈旧项
### 方式 A配套脚本推荐
```bash
python scripts/stale.py --owner Gitlink --repo gitlink-cli
python scripts/stale.py --owner Gitlink --repo gitlink-cli --format json
```
参数说明:
| 参数 | 类型 | 必填 | 说明 |
|------|------|:----:|------|
| `--owner` / `--repo` | string | 是* | 仓库(*或用 `--slug` |
| `--slug` | string | 否 | `owner/repo` 或完整 URL |
| `--format` | string | 否 | `markdown`(默认)或 `json` |
| `--output` | string | 否 | 输出文件 |
### 方式 B用 gitlink-cli 命令
```bash
gitlink-cli issue +list --owner Gitlink --repo gitlink-cli --state open --format json
gitlink-cli pr +list --owner Gitlink --repo gitlink-cli --state open --format json
```
### 处理建议(写操作,需确认)
```bash
# 确认后关闭陈旧 Issueweb 序号)
gitlink-cli issue +close --owner Gitlink --repo gitlink-cli --number <web序号>
```
## API 注意事项
- 停滞天数依据 `updated_at` / `created_at` 的相对时间(如"2个月前")估算,为粗略值。
- 只扫描开放项Issue 状态非「关闭」、PR `pull_request_status=0`)。
- 关闭操作是写操作,本技能只给建议,需用户确认后执行。
## References
- [api-reference.md](references/api-reference.md) — 采集接口与字段
- [grading.md](references/grading.md) — 陈旧度分级与时间估算规则
- [gitlink-shared](../gitlink-shared/SKILL.md) — 认证、全局参数、安全规则

View File

@ -0,0 +1,55 @@
# gitlink-stale API 参考
> **前置条件:** 先阅读 [`../../gitlink-shared/SKILL.md`](../../gitlink-shared/SKILL.md)。
本技能采集只读;关闭操作由维护者确认执行。
## 采集的接口
### Issue 列表
```
GET /:owner/:repo/issues.json?page=1&limit=50
```
使用字段:
| 字段 | 用途 |
|------|------|
| `id` / `name` / `subject` | 编号与标题 |
| `issue_status` | 过滤已关闭(含"关"/closed 的跳过) |
| `updated_at` / `created_at` | 相对时间,估算停滞天数 |
| `author_login` | 作者 |
### PR 列表
```
GET /:owner/:repo/pulls.json?page=1&limit=50
```
| 字段 | 用途 |
|------|------|
| `pull_request_number` | 编号 |
| `pull_request_status` | 仅取 0open |
| `pr_time` / `updated_at` | 相对时间,估算停滞天数 |
## 时间估算
`updated_at`/`created_at` 多为相对时间字符串("3天前"/"2个月前"/"1年前"
本技能用正则换算为天数:天/周(×7)/月(×30)/年(×365)"刚刚/小时"记为 0。
这是粗略估算,用于分级而非精确计时。
## 写操作(关闭)
```
gitlink-cli issue +close --owner <o> --repo <r> --number <web序号>
```
属写操作,需用户确认。本技能只生成建议清单。
## 输出字段JSON
```json
{"total_open": 27, "by_grade": {"活跃":20,"留意":6,"陈旧":1},
"cleanup_count": 1, "cleanup": [{"kind","id","title","age_days","grade","author"}]}
```

View File

@ -0,0 +1,34 @@
# 陈旧度分级与时间估算规则
## 分级阈值
按"最近更新距今天数"分四级:
| 等级 | 停滞天数 | emoji | 处理建议 |
|:----:|:--------:|:-----:|----------|
| 活跃 | ≤ 14 | 🟢 | 无需处理 |
| 留意 | 15 45 | 🟡 | 关注进展 |
| 陈旧 | 46 120 | 🟠 | 跟进或补充信息 |
| 僵尸 | > 120 | 🔴 | 评估关闭 |
| 未知 | 无法解析时间 | ⚪ | 人工核对 |
阈值集中在 `scripts/stale.py``grade()` 函数,可按项目节奏调整。
## 时间估算规则
停滞天数来自 `updated_at`/`created_at` 的相对时间字符串:
| 文本 | 换算 |
|------|------|
| 刚刚 / N 秒前 / N 分钟前 / N 小时前 | 0 天 |
| N 天前 | N |
| N 周前 | N × 7 |
| N 个月前 / N月前 | N × 30 |
| N 年前 | N × 365 |
无法解析时记为"未知",不计入清理建议。
## 清理清单
「陈旧」+「僵尸」项进入清理建议清单,按停滞天数降序,最多展示 30 条。
报告同时给出分等级的处理建议与关闭命令示例。