feat(skills): add gitlink-newcomer skill

This commit is contained in:
Ct201314 2026-06-06 00:14:46 +08:00
parent b45241dcda
commit 28db64531b
3 changed files with 218 additions and 0 deletions

View File

@ -0,0 +1,112 @@
---
name: gitlink-newcomer
version: 1.0.0
description: "新人引导:识别 good-first-issue、评估上手难度与友好度、为候选 Issue 生成个性化引导评论、产出新手任务看板,降低新贡献者参与门槛。当用户提到「适合新人的 Issue」「good first issue」「新手任务」「引导新贡献者」「降低参与门槛」「new contributor」时触发。"
metadata:
requires:
bins: ["gitlink-cli"]
optional_bins: ["python"]
cliHelp: "gitlink-cli issue --help"
---
# gitlink-newcomer新人引导
**CRITICAL — 开始前先阅读 [`../gitlink-shared/SKILL.md`](../gitlink-shared/SKILL.md),其中包含认证、权限处理和 API 注意事项。**
**CRITICAL — GitLink 操作只能用 `gitlink-cli`。禁止用 `gh`GitHub CLI操作 GitLink 资源。`gh` 仅适用于 GitHub 平台。**
**CRITICAL — 发布引导评论属于写操作,执行前必须征得用户确认。本技能默认只生成评论内容,不自动发布。**
> **前置条件:** 先阅读 [`../gitlink-shared/SKILL.md`](../gitlink-shared/SKILL.md) 了解认证与全局参数。
## 何时使用本技能
- 维护者想为新贡献者整理一份「适合上手的 Issue」清单
- 用户问「这个项目有哪些 good first issue / 新手任务」
- 想为某个简单 Issue 自动生成欢迎与引导评论,降低新人门槛
- 需要评估某个 Issue 对新手的友好程度
## 何时不使用
- 只是普通地列出全部 Issue → 用 `gitlink-issue`
- 复杂的项目健康度/协作分析 → 用 `gitlink-health` / `gitlink-insight`
## 能力概览
| 能力 | 说明 |
|------|------|
| good-first-issue 识别 | 综合标签、标题/正文关键词、描述长度、讨论热度等多信号识别 |
| 友好度评分 | 为每个 Issue 输出 0-100 的新手友好度分与难度等级(入门/较易/中等/进阶) |
| 个性化引导 | 为候选 Issue 生成包含上手步骤、Fork/PR 流程的欢迎评论 |
| 新手任务看板 | 汇总候选 Issue 为 Markdown 看板,可贴到 Wiki 或 README |
## 工作流 1生成新手任务看板
### 方式 A用配套脚本推荐一步到位
```bash
# 扫描仓库 Issue输出新手任务看板Markdown
python scripts/newcomer.py --owner Gitlink --repo gitlink-cli
# 输出 JSON 供 Agent 进一步处理(含每个候选的引导文案)
python scripts/newcomer.py --owner Gitlink --repo gitlink-cli --format json
# 写入文件
python scripts/newcomer.py --owner Gitlink --repo gitlink-cli --output board.md
```
参数说明:
| 参数 | 类型 | 必填 | 说明 |
|------|------|:----:|------|
| `--owner` | string | 是* | 仓库所有者(*或用 `--slug` |
| `--repo` | string | 是* | 仓库名称 |
| `--slug` | string | 否 | `owner/repo` 或完整 URL替代 owner/repo |
| `--issue` | int | 否 | 只为指定 Issue 编号web 序号)生成引导 |
| `--limit` | int | 否 | 扫描 Issue 数量上限,默认 50 |
| `--format` | string | 否 | `markdown`(默认)或 `json` |
| `--output` | string | 否 | 输出文件路径,缺省打印到标准输出 |
### 方式 B用 gitlink-cli 命令手动采集
当无法运行脚本时Agent 可用以下命令采集数据后自行分析:
```bash
# 1. 获取开放 Issue 列表
gitlink-cli issue +list --owner Gitlink --repo gitlink-cli --state open --format json
# 2. 查看某个 Issue 详情(--number 用 web 序号,不是全局 id
gitlink-cli issue +view --owner Gitlink --repo gitlink-cli --number 12 --format json
# 3. 查看仓库标签,确认是否有 good first issue 类标签
gitlink-cli label +list --owner Gitlink --repo gitlink-cli --format json
```
识别规则建议:
- 带 `good first issue` / `beginner` / `新手` 等标签 → 强新手信号
- 标题/正文含 `typo` / `docs` / `文档` / `test` / `翻译` 等 → 易上手信号
- 含 `refactor` / `架构` / `并发` / `性能` 等 → 高难度信号
## 工作流 2为单个 Issue 生成引导评论
```bash
# 生成引导文案(不发布)
python scripts/newcomer.py --owner Gitlink --repo gitlink-cli --issue 12
# 确认文案后,由用户决定是否发布为评论(写操作,需确认)
gitlink-cli issue +comment --owner Gitlink --repo gitlink-cli --number 12 -b "<引导文案>"
```
## API 注意事项
- **ID 混淆**GitLink 的 Issue 列表接口(`issue +list`)通常只返回全局数据库 `id`,不含 web 序号。发评论 / 关联 Issue 时,`issue +comment` 的 `--number` 需要 web 序号URL 中显示的编号),不要把全局 id 当 web 序号用。
- **写操作确认**`issue +comment` 会真实发布评论,执行前务必向用户确认内容与目标 Issue。
- 数据采集全程只读,脚本默认不发布任何内容。
## 输出示例
参见 [`examples/`](examples/) 目录下的真实运行产物(新手看板、单 Issue 引导)。
## References
- [api-reference.md](references/api-reference.md) — 采集的接口、字段与 ID 混淆说明
- [scoring.md](references/scoring.md) — 新手友好度评分规则与信号词表
- [gitlink-shared](../gitlink-shared/SKILL.md) — 认证、全局参数、安全规则

View File

@ -0,0 +1,64 @@
# gitlink-newcomer API 参考
> **前置条件:** 先阅读 [`../../gitlink-shared/SKILL.md`](../../gitlink-shared/SKILL.md) 了解认证、全局参数和安全规则。
本技能识别 good-first-issue 所依赖的 GitLink 接口与字段。数据采集全程只读。
## 采集的接口
### Issue 列表
```
GET /:owner/:repo/issues.json?page={page}&limit={limit}
# 或经 gitlink-cli
gitlink-cli issue +list --owner <owner> --repo <repo> --state open --format json
```
返回的 `issues[]` 中本技能使用的字段:
| 字段 | 说明 | 用途 |
|------|------|------|
| `id` | 全局数据库 ID | 去重、展示(**非** web 序号) |
| `name` / `subject` | Issue 标题 | 关键词分析、展示 |
| `description` | 正文 | 关键词分析、长度评估 |
| `issue_tags` / `labels` | 标签 | good-first-issue 标签信号 |
| `comment_journals_count` / `journals_count` | 评论数 | 讨论热度评估 |
| `author_login` / `author_name` | 作者 | 展示 |
### Issue 详情(单个)
```
GET /:owner/:repo/issues/{number}.json
# 或:
gitlink-cli issue +view --owner <owner> --repo <repo> --number {number} --format json
```
`{number}` 为 web 序号URL 中的编号)。详情接口可拿到更完整的字段。
## ID 混淆(重要)
GitLink 存在两种 ID
| 名称 | 来源 | 用途 |
|------|------|------|
| 全局数据库 `id` | Issue 列表接口 | 仅去重 / 内部引用 |
| web 序号(`project_issues_index` / `number` | 单 Issue 详情、web URL | 发评论、PR 关联、`issue +comment --number` |
本技能的处理:
- 列表接口只返回全局 `id` 时,看板以 `id:xxx` 形式标注,**不**伪装成 web 序号;
- 生成引导评论时,若无可靠 web 序号则用 Issue 标题引用,避免误导;
- 发布评论用 `gitlink-cli issue +comment --number <web序号>`
## 写操作
发布引导评论是写操作:
```
gitlink-cli issue +comment --owner <owner> --repo <repo> --number <web序号> -b "<引导文案>"
```
执行前必须征得用户确认;本技能默认只生成文案,不自动发布。
## 错误处理
沿用 gitlink-shared 的错误码401 重新登录 / 403 权限 / 404 检查 owner/repo。采集失败时脚本返回非零退出码并打印原因。

View File

@ -0,0 +1,42 @@
# 新手友好度评分规则
本技能用一套可解释的规则为每个 Issue 打出 0-100 的新手友好度分,不依赖大模型。
## 评分模型
基准分 **50**,在此基础上根据信号加减:
| 信号 | 分值 | 说明 |
|------|:----:|------|
| 命中新手友好标签 | +35 | `good first issue` / `beginner` / `新手` / `easy` 等 |
| 命中高难度标签 | -30 | `hard` / `complex` / `advanced` / `困难` 等 |
| 命中易上手关键词 | +7/词(上限 +20 | `typo` / `docs` / `文档` / `test` / `翻译` 等 |
| 命中高难度关键词 | -10/词(上限 -25 | `refactor` / `架构` / `并发` / `性能` / `安全` 等 |
| 描述长度适中30-600 | +5 | 适中描述更易上手 |
| 描述过长(>1500 | -8 | 往往较复杂 |
| 讨论过多(评论 >15 | -8 | 可能存在分歧 |
最终分数裁剪到 [0, 100]。
## 难度等级
| 友好度分 | 难度等级 |
|:--------:|:--------:|
| ≥ 75 | 入门 |
| 55 - 74 | 较易 |
| 40 - 54 | 中等 |
| < 40 | 进阶 |
友好度 ≥ 55 的 Issue 被列为新手候选(`is_good_first = true`)。
## 信号词表(节选)
**新手友好标签**good first issue、good-first-issue、first-timers-only、beginner、beginner-friendly、easy、starter、新手、新手友好、入门、简单
**易上手关键词**typo、document、docs、readme、comment、translation、rename、format、lint、test、example、i18n、文档、注释、拼写、翻译、示例、格式
**高难度关键词**refactor、architecture、performance、concurrency、race、security、deadlock、memory leak、breaking change、重构、架构、性能、并发、安全、死锁、内存
## 可调整性
词表与阈值集中在 `scripts/newcomer.py` 顶部常量(`GOOD_FIRST_LABELS` / `EASY_KEYWORDS` / `HARD_KEYWORDS` / `HARD_LABELS`),可按项目习惯调整。