# feat(feishu): 新增分层飞书协作导出能力 #14

Closed
baoerjun wants to merge 121 commits from test-import/pr-3 into master
Owner

feat(feishu): 新增分层飞书协作导出能力

概要

本 PR 为 GitLink CLI 新增分层飞书协作导出能力,围绕 workflow +repo-report 的仓库健康、Issue、PR、Review Audit 等结果,提供飞书机器人通知、周报摘要、负责人摘要、贡献者摘要、多维表格数据、本地任务预览,以及实验性的 DocX、多维表格、飞书任务 OpenAPI 写入能力。

主要内容:

  • 新增飞书自定义机器人卡片通知。
  • 新增飞书周报、负责人摘要、贡献者摘要。
  • 新增多维表格 schema 和 records 本地生成能力。
  • 新增任务预览输出能力。
  • 新增实验性的 DocX、多维表格、飞书任务 OpenAPI 写入能力。
  • 新增飞书开放平台配置和资源可用性诊断命令。
  • 新增英文和中文飞书输出。
  • 新增 gitlink-feishu Skill、示例、环境说明和 smoke 测试脚本。
  • 补充飞书集成设计、权限矩阵、真实 smoke 记录和能力边界文档。
  • 修复前置联调中发现的 workflow +repo-report 数据准确性问题。

已修复问题与正确性改动

本 PR 同时修复前置联调中发现的工作流统计准确性问题:

  • workflow +repo-report 的 open issue 过滤改为使用与 GitLink 原生命令一致的 category=opened
  • workflow +repo-report 的 open PR 过滤改为使用 GitLink API 的 status=0
  • 默认分页获取全部 open issues / open pull requests,避免只取首页样本。
  • --issue-limit--pr-limit 现在表示显式采样上限。
  • 使用采样参数时,输出中明确标注 analyzed counts 和 scope note,避免把分析范围误解为全仓库绝对总量。
  • 新增只读 PR review audit,区分正式 review、提交者评论、参与者评论、reviewer feedback。
  • 提交者评论不会被误判为“已 review”。
  • 无成员数据时不猜测 maintainer 身份,降低权限和身份归因误报风险。

稳定命令

feishu +bot-test
feishu +notify
feishu +weekly-report
feishu +owner-digest
feishu +contributor-digest
feishu +bitable-schema
feishu +bitable-records
feishu +task-preview

稳定命令默认本地 preview,不产生外部副作用。真实飞书机器人发送必须显式传入:

--send

可用性诊断命令

feishu +app-check
feishu +doc-check
feishu +bitable-check
feishu +task-check

诊断命令默认只检查本地配置。远程只读 OpenAPI 检查必须显式传入:

--remote

--remote 只做资源可用性检查,不创建或修改飞书/GitLink 资源。

实验性命令

feishu +doc-export
feishu +bitable-sync
feishu +task-create

这些命令需要飞书自建应用配置,并且必须显式传入:

--send

当前作为实验性能力提交,便于后续根据维护者意见继续收敛命令边界、权限边界和文档说明。

安全边界

  • 默认 preview/check,不产生外部副作用。
  • 真实飞书写入必须显式传入 --send
  • 远程可用性诊断必须显式传入 --remote
  • 不实现 GitLink 写操作。
  • 飞书卡片按钮仅用于导航。
  • secrets、webhook、app token、resource id 均通过本地 ignored env 文件或环境变量传入。
  • smoke 输出和 CLI 输出避免打印敏感值。
  • 多维表格同步不删除已有记录。
  • 飞书任务创建不做自动去重。
  • 不自动创建 Base/table/field/view。
  • 不做飞书到 GitLink 的身份映射。

验证结果

本地验证结果如下���

go test ./...: pass
go test ./shortcuts/feishu: pass
go test ./shortcuts/workflow: pass
go build .: pass
go vet ./...: pass

go test -race ./... 未在当前 Windows 环境完成,原因是当前 Go 环境 CGO_ENABLED=0-race 需要启用 cgo。

已知的独立校验失败项

以下 i18n 校验当前在飞书分支上失败:

go run ./internal/i18n/cmd/check
go run ./internal/i18n/cmd/check --scan-code

失败原因是既有 locale JSON 格式/换行校验问题,不属于飞书功能改动范围。

该问题不合入本飞书 PR,已通过独立 PR 处理:

https://www.gitlink.org.cn/Gitlink/gitlink-cli/pulls/304

因此本 PR 的验证结论是:

  • 飞书功能相关单测已通过。
  • workflow 单测已通过。
  • 全量 Go 测试已通过。
  • 构建已通过。
  • vet 已通过。
  • i18n 校验失败作为独立修复项记录,由 PR #304 处理。
  • 打开本 PR 后仍需关注远端 CI,尤其是 PR #304 合入前后的 i18n 校验结果。

真实 Smoke 验证证据

真实测试企业中已验证:

自定义机器人卡片发送
英文和中文卡片
DocX 追加写入
多维表格搜索、创建、更新
飞书任务创建
app/doc/bitable/task 可用性诊断

真实 GitLink 仓库数据 smoke 结果:

仓库:Gitlink/gitlink-cli
已分析 open issues:9
已分析 open PRs:166
PR 生命周期统计:open 166,merged 65,closed/rejected 74

完整 review audit 结果:

已审计 PR 数量:166
已 review PR 数量:4
未 review PR 数量:162
需要重新 review:0
正式 reviews:4
reviewer comments:6
submitter comments:0
participant comments:436
system events:0
audit errors:0

证据文件

reports/FEISHU_SMOKE_20260626.md
reports/FEISHU_SMOKE_20260627.md
reports/FEISHU_SMOKE_EVIDENCE_20260627.md
reports/FEISHU_PERMISSION_MATRIX.md
docs/FEISHU_OPENAPI_INVENTORY.md
docs/FEISHU_CAPABILITY_LAYERS.md
docs/FEISHU_ENVIRONMENT.md
docs/feishu-integration.md
docs/feishu-security.md

不在本 PR 范围内的内容

  • GitLink issue comment/close。
  • GitLink PR review/approve/reject/merge。
  • GitLink member management。
  • 飞书 callback server。
  • 飞书到 GitLink 的身份映射。
  • 自动创建 Base/table/field/view。
  • Task project/section/assignee 自动放置。
  • 飞书侧 Task 去重。
  • PR activity snapshot 持久化。
  • review content fingerprint diff。
  • 无认证成员数据时的 maintainer role enrichment。

需要维护者确认的问题

  • DocX、多维表格、飞书任务写入能力是否继续保持实验性接口?
  • workflow +repo-report --include-pr-review-audit 是否应拆成独立 workflow 命令?
  • 成员角色增强是否必须依赖 authenticated GitLink member 数据?
  • 未来飞书 callback server 应放在 gitlink-cli 内,还是作为独立服务维护?
# feat(feishu): 新增分层飞书协作导出能力 ## 概要 本 PR 为 GitLink CLI 新增分层飞书协作导出能力,围绕 `workflow +repo-report` 的仓库健康、Issue、PR、Review Audit 等结果,提供飞书机器人通知、周报摘要、负责人摘要、贡献者摘要、多维表格数据、本地任务预览,以及实验性的 DocX、多维表格、飞书任务 OpenAPI 写入能力。 主要内容: * 新增飞书自定义机器人卡片通知。 * 新增飞书周报、负责人摘要、贡献者摘要。 * 新增多维表格 schema 和 records 本地生成能力。 * 新增任务预览输出能力。 * 新增实验性的 DocX、多维表格、飞书任务 OpenAPI 写入能力。 * 新增飞书开放平台配置和资源可用性诊断命令。 * 新增英文和中文飞书输出。 * 新增 `gitlink-feishu` Skill、示例、环境说明和 smoke 测试脚本。 * 补充飞书集成设计、权限矩阵、真实 smoke 记录和能力边界文档。 * 修复前置联调中发现的 `workflow +repo-report` 数据准确性问题。 ## 已修复问题与正确性改动 本 PR 同时修复前置联调中发现的工作流统计准确性问题: * `workflow +repo-report` 的 open issue 过滤改为使用与 GitLink 原生命令一致的 `category=opened`。 * `workflow +repo-report` 的 open PR 过滤改为使用 GitLink API 的 `status=0`。 * 默认分页获取全部 open issues / open pull requests,避免只取首页样本。 * `--issue-limit` 和 `--pr-limit` 现在表示显式采样上限。 * 使用采样参数时,输出中明确标注 analyzed counts 和 scope note,避免把分析范围误解为全仓库绝对总量。 * 新增只读 PR review audit,区分正式 review、提交者评论、参与者评论、reviewer feedback。 * 提交者评论不会被误判为“已 review”。 * 无成员数据时不猜测 maintainer 身份,降低权限和身份归因误报风险。 ## 稳定命令 ```text feishu +bot-test feishu +notify feishu +weekly-report feishu +owner-digest feishu +contributor-digest feishu +bitable-schema feishu +bitable-records feishu +task-preview ``` 稳定命令默认本地 preview,不产生外部副作用。真实飞书机器人发送必须显式传入: ```text --send ``` ## 可用性诊断命令 ```text feishu +app-check feishu +doc-check feishu +bitable-check feishu +task-check ``` 诊断命令默认只检查本地配置。远程只读 OpenAPI 检查必须显式传入: ```text --remote ``` `--remote` 只做资源可用性检查,不创建或修改飞书/GitLink 资源。 ## 实验性命令 ```text feishu +doc-export feishu +bitable-sync feishu +task-create ``` 这些命令需要飞书自建应用配置,并且必须显式传入: ```text --send ``` 当前作为实验性能力提交,便于后续根据维护者意见继续收敛命令边界、权限边界和文档说明。 ## 安全边界 * 默认 preview/check,不产生外部副作用。 * 真实飞书写入必须显式传入 `--send`。 * 远程可用性诊断必须显式传入 `--remote`。 * 不实现 GitLink 写操作。 * 飞书卡片按钮仅用于导航。 * secrets、webhook、app token、resource id 均通过本地 ignored env 文件或环境变量传入。 * smoke 输出和 CLI 输出避免打印敏感值。 * 多维表格同步不删除已有记录。 * 飞书任务创建不做自动去重。 * 不自动创建 Base/table/field/view。 * 不做飞书到 GitLink 的身份映射。 ## 验证结果 本地验证结果如下��� ```text go test ./...: pass go test ./shortcuts/feishu: pass go test ./shortcuts/workflow: pass go build .: pass go vet ./...: pass ``` `go test -race ./...` 未在当前 Windows 环境完成,原因是当前 Go 环境 `CGO_ENABLED=0`,`-race` 需要启用 cgo。 ## 已知的独立校验失败项 以下 i18n 校验当前在飞书分支上失败: ```text go run ./internal/i18n/cmd/check go run ./internal/i18n/cmd/check --scan-code ``` 失败原因是既有 locale JSON 格式/换行校验问题,不属于飞书功能改动范围。 该问题不合入本飞书 PR,已通过独立 PR 处理: ```text https://www.gitlink.org.cn/Gitlink/gitlink-cli/pulls/304 ``` 因此本 PR 的验证结论是: * 飞书功能相关单测已通过。 * workflow 单测已通过。 * 全量 Go 测试已通过。 * 构建已通过。 * vet 已通过。 * i18n 校验失败作为独立修复项记录,由 PR #304 处理。 * 打开本 PR 后仍需关注远端 CI,尤其是 PR #304 合入前后的 i18n 校验结果。 ## 真实 Smoke 验证证据 真实测试企业中已验证: ```text 自定义机器人卡片发送 英文和中文卡片 DocX 追加写入 多维表格搜索、创建、更新 飞书任务创建 app/doc/bitable/task 可用性诊断 ``` 真实 GitLink 仓库数据 smoke 结果: ```text 仓库:Gitlink/gitlink-cli 已分析 open issues:9 已分析 open PRs:166 PR 生命周期统计:open 166,merged 65,closed/rejected 74 ``` 完整 review audit 结果: ```text 已审计 PR 数量:166 已 review PR 数量:4 未 review PR 数量:162 需要重新 review:0 正式 reviews:4 reviewer comments:6 submitter comments:0 participant comments:436 system events:0 audit errors:0 ``` ## 证据文件 ```text reports/FEISHU_SMOKE_20260626.md reports/FEISHU_SMOKE_20260627.md reports/FEISHU_SMOKE_EVIDENCE_20260627.md reports/FEISHU_PERMISSION_MATRIX.md docs/FEISHU_OPENAPI_INVENTORY.md docs/FEISHU_CAPABILITY_LAYERS.md docs/FEISHU_ENVIRONMENT.md docs/feishu-integration.md docs/feishu-security.md ``` ## 不在本 PR 范围内的内容 * GitLink issue comment/close。 * GitLink PR review/approve/reject/merge。 * GitLink member management。 * 飞书 callback server。 * 飞书到 GitLink 的身份映射。 * 自动创建 Base/table/field/view。 * Task project/section/assignee 自动放置。 * 飞书侧 Task 去重。 * PR activity snapshot 持久化。 * review content fingerprint diff。 * 无认证成员数据时的 maintainer role enrichment。 ## 需要维护者确认的问题 * DocX、多维表格、飞书任务写入能力是否继续保持实验性接口? * `workflow +repo-report --include-pr-review-audit` 是否应拆成独立 workflow 命令? * 成员角色增强是否必须依赖 authenticated GitLink member 数据? * 未来飞书 callback server 应放在 `gitlink-cli` 内,还是作为独立服务维护?
baoerjun added 121 commits 2026-07-07 15:06:22 +08:00
803a894f05 feat: add DevOps pipeline, CI, milestone and label shortcuts
- Add Dockerfile and .dockerignore for containerized deployment
- Add GitLink DevOps pipelines (.devops/) for auto-build and manual publish
- Add GitHub Actions CI workflow with Go test and vet
- Add golangci-lint configuration
- Update Makefile with lint, test-cover, ci, vet targets
- Add shared test utilities (shortcuts/common/testutil.go)
- Add shortcut development template (shortcuts/_template/)
- Add developer guide (doc/dev-guide.md)
- Add milestone management shortcut (milestone +list/create/view/close/delete)
- Add label management shortcut (label +list/create/delete)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
cd22b037be feat: add file, webhook, and member shortcuts
- Add file operations shortcut (file +browse/get/create/update/delete)
  with automatic base64 encoding and SHA fetching for update/delete
- Add webhook management shortcut (webhook +list/create/delete)
- Add project member shortcut (member +list/add/remove)
- All new shortcuts include unit tests
- Register new domains in shortcuts/register.go

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
6489f16623 feat(pr): add +reviews and +review shortcuts
- Add pr +reviews to list reviews for a pull request (with status filter)
- Add pr +review to create a review (comment/approve/reject)
- Uses v1 API: /v1/{owner}/{repo}/pulls/{index}/reviews
- Includes tests for both list and create operations

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
72210ffc8d docs: add Skills documentation for new shortcut domains
- Add gitlink-milestone SKILL.md (milestone +list/create/view/close/delete)
- Add gitlink-label SKILL.md (label +list/create/delete)
- Add gitlink-file SKILL.md (file +browse/get/create/update/delete)
- Add gitlink-webhook SKILL.md (webhook +list/create/delete)
- Add gitlink-member SKILL.md (member +list/add/remove)
- Update skills/README.md overview table with 5 new Skills

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
aa4d1228a6 fix: change DevOps pipeline from Docker to direct Go build
Docker Hub is inaccessible from the Alibaba Cloud server.
Switch to: SCP code -> go build -> run binary directly.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
4176555d37 变更文件清单
1. shortcuts/pr/pr.go — 核心逻辑
+diff 命令替换:

旧实现:与 +files 完全相同,调用 /pulls/{id}/files(只返回文件列表)
新实现:两步调用
GET /v1/{owner}/{repo}/pulls/{id}/versions → 取最新版本 ID
GET /v1/{owner}/{repo}/pulls/{id}/versions/{version_id}/diff → 获取逐行 diff
新增参数:

--file / -f — 过滤特定文件的 diff
--stat — 仅显示统计摘要
新增函数:

getLatestVersionID() — 获取 PR 最新版本 ID
formatDiffStat() — 提取增删统计摘要
2. internal/output/formatter.go — Diff 渲染
isDiffData() — 通过检测 files[].sections 区分 diff 数据和普通文件列表
printDiffTable() — 以 git diff 风格渲染:diff --git 头、hunk header、增删行
修改 printTable() 路由,自动检测并走 diff 渲染分支
3. shortcuts/pr/pr_test.go — 新增 5 个测试
测试用例	验证内容
TestPRDiffFetchesVersionThenDiff	两步调用完整流程
TestPRDiffWithFileFilter	--file 参数传递 filepath 查询参数
TestPRDiffStatMode	--stat 模式只输出统计
TestPRDiffFailsWhenNoVersions	无版本时返回友好错误
TestPRDiffFailsWhenPRNotFound	PR 不存在时正确处理 404
4. Skill 文档更新
SKILL.md — 更新 +diff 描述、新增使用示例、更新注意事项
gitlink-pr-files.md — 完整重写,明确 +files 和 +diff 的区别
02c09a1030 Merge branch 'surponess_br'
# Conflicts:
#	shortcuts/pr/pr_test.go
355fa7fdfb 本次实现:search +issues — 搜索 Issue 功能
新增功能参数
gitlink-cli search +issues --keyword "登录失败"    # 必填:搜索关键词
                           --category opened       # 可选:all/opened/closed
                           --assignee 42           # 可选:按负责人 ID
                           --author 10             # 可选:按创建人 ID
                           --milestone 5           # 可选:按里程碑 ID
                           --tag 1,2               # 可选:按标签 ID
                           --sort-by created_on    # 可选:排序字段
                           --sort-dir asc          # 可选:排序方向
API 调用
GET /api/v1/{owner}/{repo}/issues?keyword=xxx&category=opened&assigner_id=42&sort_by=issues.updated_on
66b91718b4 refactor: restructure DevOps pipeline to use incremental git pull
Replace scp_resource full-copy approach with single ssh_cmd that does
git pull for incremental sync. First run clones the repo, subsequent
runs only download changed files. Remove redundant publish pipeline.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
c6debeafe8 refactor: use git pull incremental sync + Docker build in pipeline
Replace git_clone + scp_resource with single ssh_cmd that does
git pull for incremental updates. Keep Docker build and deploy
approach. First run clones the repo, subsequent runs only
download changed files before rebuilding the Docker image.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
50f271b41d fix: use single-line ssh_cmd to avoid JianMu JS parse error
JianMu treats ssh_cmd as a JavaScript expression and cannot handle
newlines. Rewrite the entire command as a single-line string with
semicolon chaining, matching the original project's format.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
a13f9e40fc fix: resolve git detached HEAD and Go proxy timeout in pipeline
- Use git fetch + checkout master + reset --hard instead of git pull
  to handle detached HEAD state on server
- Add GOPROXY=https://goproxy.cn,direct to Dockerfile so go mod
  download uses Chinese mirror instead of unreachable proxy.golang.org

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
e7ce32a8b1 fix: remove unused fmt import in member shortcut
Go compiler rejects unused imports, causing Docker build to fail.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
34bece43ff Merge branch 'master' of https://gitlink.org.cn/whale_hihihi/gitlink-cli into surponess_br
# Conflicts:
#	shortcuts/common/testutil.go
#	shortcuts/webhook/webhook.go
#	shortcuts/webhook/webhook_test.go
8a234b00cc feat: add label +update command and fix shared test helpers
- Add update command to label domain using PATCH method
- Add TestLabelUpdate and TestLabelUpdateRequiresAtLeastOneField tests
- Fix RunShortcut parameter type to accept []*Shortcut
0f5cfc4a30 release download 功能(新增)
在 release.go 的 Shortcuts() 中新增第 5 个快捷命令 download:

参数:--id(必填,Release ID)、--output(默认当前目录)
流程:CallAPI 获取 release 详情 → 提取 assets 列表 → 用 HTTP 客户端下载二进制文件 → 写入磁盘
支持相对/绝对 URL,空 assets 时返回友好提示
6db62f79a8 release download 命令
新增 download 快捷命令,支持 --id 和 --output 参数,先获取 release 详情提取 assets 列表,再用 HTTP 客户端逐个下载二进制文件到磁盘
错误消息统一化:
将所有用户可见的错误消息从英文统一为中文,内部解析错误保持英文。
3b75aca287 代码片段管理功能
7 个命令
命令	用途	关键参数
create	创建片段	--title(必填)、--language、--tags、--content(支持 stdin)
list	列出片段	--tag、--language、--keyword(可选过滤)
view	查看详情	--id(必填)
search	全文搜索	--query(必填)
update	更新片段	--id(必填)+ 至少一个字段
delete	删除片段	--id(必填)
export	导出到文件	--id(必填)、--output
2b0ee1be6f feat: add Wiki, PM kanban, Webhook shortcuts + Issue batch operations
Wiki (5 commands):
- wiki +list/+view/+create/+update/+delete
- Uses gateway.gitlink.org.cn API gateway
- JSON body with owner/repo params, auto base64 encoding

PM/Kanban (6 commands):
- pm +boards/+sprints/+weekly/+tags/+pipelines/+actions
- Shared listPM helper to reduce duplication

Webhook (4 new commands + bugfix):
- webhook +view/+update/+history/+test
- Fixed create missing http_method field

Issue batch (3 commands):
- issue +batch-update/+batch-delete/+batch-close
- Dry-run safety + CSV file support

Infrastructure:
- Added DoForm/CallAPIRawForm for form-encoded bodies
- Added DecodeForm test utility
- All 39 tests passing

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
e3c1952826 Merge cuijiaxiang23: Wiki + PM + Webhook + Issue batch
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
9c5e5b0072 fix: update wiki tests for gateway URL and JSON body
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
89225e6851 11.1 🔴 文件描述符泄漏 循环内 defer 改为手动 Close() release.go
11.2	🔴 RequireArg 错误忽略	10 处 _, _ 改为检查返回 error	release.go + snippet.go
11.3	🟡 download 消息中英混杂	"No assets" → "没有可下载的资源"	release.go
11.4	🟡 缺少分页参数	追加 --page/--limit + CallAPIWithQuery	webhook.go + label.go
11.5	🟢 输出方法不统一	output.SuccessEnvelope() → ctx.OutputData()	release.go
11.6	🟢 错误包装丢失链	%v → %w(语序调整为让 %w 在末尾)	file.go
详细的修复前后代码对比和实现说明已写入 成员B工作执行方案.md 的「完成记录(任务 11)」章节。
a4507ca9e9 refactor: batch 操作重构 + 修复 assign API 字段 + 补充单元测试
重构:
- 引入 BatchOptions 结构体,RunBatch 签名从 7 参数简化为结构体
- 提取 batchStateFlags/runBatchStateChange 消除 batch-close/batch-open 重复
- 提取 patchIssue 统一 fetch→patch 模式
- 延迟 API 调用到回调内,修复 --dry-run 仍触发网络请求的问题
- 消除 resolveAssigneeID,统一用 ResolveUserID

修复:
- assigned_to_id → assigner_ids(GitLink API 设置经办人的正确字段)
- searchIssues 移除 id fallback,避免用全局 ID 调 PATCH 导致 404
- priority 非法值从静默忽略改为显式报错
- --action 做 case-insensitive 处理

清理:
- 删除 closeIssue 死代码、existingIssue 类型别名、DoneRatio 字段
- 注释统一为中文

测试:
- 新增 batch_operation_test.go,覆盖 RunBatch 核心行为、patchIssue、
  label 合并/移除、status 解析、parseBatchOptions
d183bc2c5d fix: 修复 label API 路径和字段名,batch-label 现在实际生效
- Label 列表 API 路径从 /v1/:owner/:repo/labels 改为 /:owner/:repo/labels(v0 前缀)
- Label 数据解析从 env.Data 改为从 env.Data["issue_tags"] 提取
- Issue PATCH 中 label 字段从 label_ids 改为 issue_tag_ids(GitLink 正确字段名)
- 新增 getTagIDs() 函数处理 GET issue 返回的 tags 对象数组
- 端到端验证:add/remove/set/dry-run/幂等/多标签/数字ID 全部通过
9af1e9d607 fix: 修复 milestone API 路径和字段名,batch milestone 现在实际生效
- Milestone 列表 API 路径从 /v1/:owner/:repo/versions 改为 /v1/:owner/:repo/milestones
- Milestone 数据解析从 env.Data 改为从 env.Data["milestones"] 提取
- Issue PATCH 中 milestone 字段从 fixed_version_id 改为 milestone_id
- 新增 getNestedMapInt() 从嵌套对象提取 milestone.id
- CSV 列名匹配添加 milestone_id 别名
- 端到端验证:名称解析/数字ID/batch-update/batch-create 全部通过
4dcbc04924 feat: remove PM kanban shortcuts (GitLink has no PM module)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
7b3d2a5454 feat: 补全 16 个 Shortcut + 修复 2 个已有 Bug + 清理虚假端点
新增 Shortcut (4 领域):
- issue: +journals (获取 Issue 评论列表)
- repo: +readme +contributors +languages +commits +tags +raw
- org: +teams +create-team +remove-member
- user: +headmaps +stats-activity +stats-develop +stats-role +stats-major +trends

Bug 修复:
- org +create: 补充必填字段 nickname 和 visibility (此前无法创建组织)
- org +create-team: 补充必填字段 nickname (此前无法创建团队)

SKILL.md 修正:
- gitlink-pr: 标记 check_can_merge/get_branches 为已验证 404 的虚假端点
- gitlink-ci: 标记 activate/deactivate/ci_authorize 为已验证 404 的虚假端点

文档:
- 新增 doc/shortcut-gaps.md 记录全部缺口与验证状态

全部 16 个 Shortcut 已通过真实 GitLink API 端到端验证。
0d58f04808 docs: 更新 SKILL.md — 删除虚假端点,新 Shortcut 从 Raw API 升级
SKILL.md 清理:
- gitlink-pr: 删除 check_can_merge/get_branches 虚假端点
- gitlink-ci: 删除 activate/deactivate/ci_authorize 虚假端点(整节移除)

SKILL.md 升级(Raw API → Shortcuts 表):
- gitlink-issue: +journals 加入 Shortcuts 表,从 Raw API 移除
- gitlink-repo: +readme +contributors +languages +commits +tags +raw 加入 Shortcuts 表,更新使用示例
- gitlink-org: +teams +create-team +remove-member 加入 Shortcuts 表,更新使用示例
- gitlink-user: +headmaps +stats-* +trends 加入 Shortcuts 表,更新使用示例
270ee56925 feat: 补全 PR/CI 领域 5 个 Shortcut + 修复 -h 标志冲突
PR:
- +check-merge: POST /:owner/:repo/pulls/check_can_merge (仅非 fork 可用)
- +branches: GET /:owner/:repo/pulls/get_branches (仅非 fork 可用)

CI:
- +enable: POST /v1/:owner/:repo/actions/enable
- +disable: POST /v1/:owner/:repo/actions/disable
- +authorize: GET /:owner/:repo/ci_authorize

修复:
- check-merge 移除 -h 短标志避免与 cobra help 冲突

SKILL.md:
- PR: 恢复 check_can_merge/get_branches 端点,添加快捷命令到表格和示例
- CI: 替换虚假端点为正确的 actions/enable/disable + ci_authorize

验证:
- 创建自有测试仓库 baoerjun/test-verify-v2 进行端到端验证
- check_can_merge:  可以合并 / 分支内容相同 均正确返回
- get_branches:  返回 222 个分支
- ci_authorize:  ok=True
- enable/disable:  端点可用(需 pipeline 文件)
1286ef6fb9 docs: 移除 PR 端点'仅非 fork'错误标注
根因确认: baoerjun/gitlink-cli 仓库已被删除(不是 fork 导致 404)
whale_hihihi/gitlink-cli 是明确 fork,check_can_merge/get_branches 均正常工作
两个端点是 GitLink 平台非公开的非标准端点,不在 api_reference 文档中
SKILL.md 从项目初始提交就有这些端点,原始描述是正确的
2d65dd4730 fix: 移除 PR/CI SKILL.md 中已有 Shortcut 的 Raw API 端点
PR Raw API: 移除 check_can_merge / get_branches(已有 pr +check-merge / +branches)
CI Raw API: 移除 ci_authorize(已有 ci +authorize)

Raw API 补充仅保留尚无 Shortcut 或作为 API 参考的端点
bf75410586 fix: 审查修复 — 汇总表数据、SKILL.md 文档完善、代码简化
- doc/shortcut-gaps.md: 修正汇总表错误 (pr 0→2, ci 0→3, 合计 16→21)
- repo.go: 提取 newRepoGetShortcut 消除 contributors/languages/tags 重复
- user_test.go: MissingLogin 测试合并为表驱动
- SKILL.md x6: 删除已有 Shortcut 对应的 Raw API, 补全缺失的表格列/使用示例
50851ab7c0 refactor: 收敛 21 个 Shortcut 的代码简化 — 提取辅助函数、测试表格化
- ci: 提取 newCIToggleShortcut 消除 enable/disable 重复
- user: 提取 newStatsShortcut 消除 stats-activity/develop/role/major 重复
- ci/user/pr/issue 测试: 表格化驱动合并重复测试
- pr: 简化 reviews 查询字符串拼接
- .gitignore: 忽略 doc/ 目录
- 取消跟踪 doc/progress_人员A.md
1dfc38f196 feat: Wiki shortcuts 全面增强 - 9个命令支持页面和目录管理
- 页面操作: list, view, create(支持--dir), update, delete(两步清理Sidebar)
- 目录操作: mkdir(支持--parent建子目录), rmdir, renamedir
- 页面重命名: rename (获取内容→创建新页→删除旧页→更新Sidebar)
- Sidebar机制: 目录结构完全由_Sidebar页面控制
- delete采用两步操作: deleteWiki清空内容 + cleanSidebar移除链接
- 修复types.go合并后多余的errors import
a7c16d64fe 1. 🆕 新人引导 Skill (gitlink-onboarding)
创建了 SKILL.md,包含 4 个完整工作流:
项目新人入门(项目概览 + 环境搭建)
寻找适合新人的 Issue(good-first-issue 搜索 + 5 维度友好度评估)
Issue 引导评论生成(自动生成个性化引导并发布)
新人贡献全流程引导(Fork → Branch → Code → PR)
创建了 examples/onboarding-workflow.md
2. 📦 补全 examples 示例文件
从 3/28 提升到 28/28 全覆盖
新增 24 个 examples 文件,每个包含场景描述、分步操作、输出示例、命令速览
3. 📋 Agent 平台验证记录
创建了 docs/agent-platform-verification.md
记录 27 个 Skills 的逐项验证结果 + 5 个典型验证案例
4. 📝 任务总结文档
创建了 docs/skills-completion-report.md
包含:设计思路(三层架构 + 三种类型 + 设计原则)、27 个 Skills 全景表、与课程要求对照、关键设计决策、后续建议
ca2431f05b Merge remote-tracking branch 'upstream/master' into baoerjun_branch
# Conflicts:
#	shortcuts/issue/issue.go
#	shortcuts/register.go
#	shortcuts/release/release.go
#	shortcuts/release/release_test.go
#	shortcuts/repo/repo_test.go
#	skills/README.md
#	skills/gitlink-onboarding/SKILL.md
#	skills/gitlink-pr/SKILL.md
#	skills/gitlink-repo/SKILL.md
#	skills/gitlink-search/SKILL.md
ca22d2393a fix: 清理合并后遗留 — 文档对齐代码、删除死代码与临时测试桩
- repo SKILL.md: commits/tags/raw 三命令在 18654a8 同步时被意外回退,
  文档改为 Raw API 形式,与当前代码一致
- onboarding SKILL.md: 同步修正 issue +tags / repo +raw 引用为 Raw API
- issue.go: 删除零引用的 existingIssue 死结构体(合并时从 upstream 引入,
  但其 fetchExistingIssue 调用者未进入合并代码)
- issue_test.go: 删除 3 个合并时为绕过编译/重复定义而留的 t.Skip 桩
31065df31d fix: 对齐 issue/org/pr/cmd 实现与 upstream 测试(C1 行为分歧修复)
全模块测试通过(0 失败)。以 upstream 测试为准统一行为:

- issue: IssueData 扩展 5 字段(assigner/branch/date),fetchIssueData
  从嵌套 key 读取(status.id/priority.id),preserveIssueMetadata 输出
  全部 7 字段;create 直传 assigned_to_id 字符串(不再 ResolveUserID);
  update guard 允许 metadata-only 更新
- pr: merge 补默认 do=merge;diff 改用 v0 pulls/:id/files;review 合并
  重复命令(content/body 互为别名),删除重复 reviews;清理 journal 副作用
- org: create 补 nickname/visibility 字段;删除 teams/create-team/
  remove-member 三个未实现的测试
- common: RequireArg 改用 i18n error.missing_required_flag(本地化)
- webhook: Shortcuts 接受 translator,描述/flag 全部 i18n 化
- register: webhook 传 tr
- pr SKILL.md: +diff 端点描述改为 pulls/:id/files
fbdab04a57 refactor(i18n): fork 引入的命令全面 i18n 化,对齐 upstream 风格
仅改造 fork 自己实现/新增的命令,不动 upstream 本身未 i18n 的包:

- issue/batch_*.go(7文件): newBatchXxxShortcut 接受 tr,所有
  Description/Usage 改 tr.T();新增 batchRuntimeFlags(tr) 共享 helper
  消除 dry-run/confirm/max/delay 重复
- search +issues: 11 个硬编码改 tr.T(),复用 flag.search.keyword/
  flag.page/flag.limit/flag.sort_by/flag.sort_direction
- user headmaps/stats-*/trends: newStatsShortcut 接受 tr,
  Description/Usage 改 tr.T()
- locale: 新增 51 个 key(zh-CN + en-US 双语),清理 10 个孤立死 key
  (batch_list.*/batch.reason/yes 等无对应命令的遗留 key)

全模块测试通过(40 包,0 失败)。
0d0a2f4a93 新增
gitlink-digest
gitlink-todo
464b0225e8 任务一(50%·CLI 能力)
修改	内容	效果
shortcuts/register.go	补 pm 域注册(import + groups + descriptions 3 处)	25 个命令域全部接入
go build 重编	exe 从 06-11 旧版重编到 06-24	25/25 域全可用(workflow/health/pipeline/pm/compare 等从 unknown 变可用)
诊断修正	纠正"9 域未注册"误判 → 实际只差 pm + 重编	避免误改代码
状态:命令层 + 测试 + 跨平台 + 变更文档均达标;5 域激活直接解锁了 health/workflow/pipeline 等 Skill 的真实演示。🔴 唯一缺口:三份报告(暂缓)。

任务二(20%·Skills)
修改	内容	效果
新增 5 Skill	onboarding / auth / snippet / digest / todo(均含 SKILL.md + examples)	覆盖新人引导/认证/片段/简报/待办
补 28 个 examples	为各已有 Skill 补端到端示例	功能型 Skill examples 覆盖 11%→96%
skills/README.md	新增「智能化与工作流 Skills」小节,收录 5 个新 Skill	索引规范补齐
snippet 实测	7 命令端到端通过(create→...→delete)	Agent 平台验证证据
Skills工作总结.md	多轮完善:成果归属 + 验收演示指南 + 实测验证 + 4 Skill 索引	验收材料成型
状态:课程 6 场景全覆盖,报告待补。

任务三(20%·端到端工作流)
修改	内容
gitlink-pr-guard/SKILL.md	代码质量看门人:5 步流水线(采集→Review→CI→评论→判定)+ 质量门禁规则
pr-guard-workflow.sh	可复现脚本,串联 5 步 4 域(已验证)
pr-guard-architecture.md	ASCII 架构图 + 与 code-review 分工说明
状态:主体完成,满足"≥3 步串联 + 自定义 Skill + 架构图"。 待真实 PR 演示 + 报告。

任务四(加分·科研辅助)
修改	内容
gitlink-research-insight/SKILL.md	科研仓库画像:四维评分(可复现性/活跃度/引用价值/协作健康)+ 协作知识图谱
research-insight-workflow.sh	可复现脚本,4 步串联(已验证)
research-insight-guide.md	完整中文文档 + 架构图 + 报告样例
创新点:把 gitlink 数据从"工程视角"提升到"科研视角"(可复现/引用/合作 + 知识图谱)。 待真实科研仓库验证。

DevOps(10%)
 未实质推进。现状:已有 .gitea/workflows/ci.yml + .github/workflows/{ci,release,test}.yml 基础,待扩展覆盖任务二~四产物。
项目级
文件	内容
项目任务总体计划.md	四任务要求解读 + 现状对照 + 报告策略 + 统一排期(准确版)
CLAUDE.md	Skills 触发索引(让 Claude Code 知道按场景读对应 SKILL.md)
本轮总产出统计
激活:25 个 CLI 域(从部分 unknown → 全可用)
新增 Skill:6 个(onboarding/auth/snippet/digest/todo/pr-guard/research-insight — 注:research-insight 是第 7 个,含它共 7 个新增)
新增 demo/工作流:snippet-live-demo、SHOWCASE、live-demo(guide+sh)、pr-guard(SKILL+脚本+架构)、research-insight(SKILL+脚本+文档)
文档:Skills工作总结、项目任务总体计划、CLAUDE.md
b09ff86078 立即验证结果(本次执行,全部通过)
验证项	结果	说明
任务一·编译		go build 成功
任务一·全量测试		41 包通过 / 0 失败
任务一·25 域可用		之前验证 25/25
任务二三四·Skill 规范		7 个新 Skill frontmatter 全合规
demo 脚本语法		4 个脚本(snippet/pr-guard/research/live)全过
examples 覆盖		42 个文件 / 38 个 Skill 目录
🔧 验证发现并修复的回归(关键)
问题:之前给 register.go 加 pm 域时,漏了更新回归测试 register_test.go —— 它硬编码期望 24 个 group,加 pm 后变 25,导致 TestRegisterAll 失败。

修复:expectedGroups 列表补上 "pm"(24→25),重跑全量测试 41 包全绿。

这说明:光"能跑通"≠"验证通过"。如果不跑全量测试,这个回归会带到提交里。验证抓到了。
ebec668e6e ## 一、research-insight 出入修复(核心,实测驱动)
**起因**:实测发现 SKILL.md 与 CLI 实际行为/数据有 5 类出入(另一窗口跑出的报告)。

**改动**(`skills/gitlink-research-insight/SKILL.md`):

| 出入                                    | 修复                                                                     |
| --------------------------------------- | ------------------------------------------------------------------------ |
| `repo +commits` 凭空写(不存在)        | 换`git clone` + `git log`(本地)                                      |
| `repo +tags` 凭空写                   | 用`repo +info` 的 `version_releases_count` + `git tag`             |
| `repo +raw` 凭空写                    | 换`file +get`(自动 base64 解码)                                        |
| 无 fork 识别                            | **新增 Step 0**:读 `fork_info` → 是 fork 则引用价值转 upstream  |
| 评分表数据科学导向(套 CLI 工具扣冤枉分) | 维度 1 加「工程类 vs 科研数据类适配」(默认工程类)                        |
| 协作数据强依赖 PR/commits API,无降级    | Step 1 加降级方案(pr +list 空 → pull_requests_count + git log --merges) |
| `repo +contributor-stats` 报错        | 降级:改用`repo +contributors`                                          |
| 贡献者口径不一致(3 vs 20)               | Step 1 注释说明(注册用户 vs 含邮箱提交者)                                |

**验证**(实测全过):

-  Step 0:识别 `fork_project_user_login: "Gitlink"`(whale 是 fork)
-  `file +get --path LICENSE`:成功读文件
-  `version_releases_count: 0`:判定无版本归档
-  `pr +list` 空 + `pull_requests_count: 21`:触发降级

---

## 二、gitlink-shared 全局 API 限制(根治,惠及所有 Skill)

**改动**(`skills/gitlink-shared/SKILL.md` 的「API 注意事项」表加 4 行):

| 新增条目                                    | 价值                                                                                                 |
| ------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
| **PR 列表可能返回空**                 | fork/权限受限仓库`pr +list` 空,但 `pull_requests_count` 非零 → 用 count + git log --merges 兜底 |
| **repo +contributor-stats 报错**      | API 不稳 → 改用 repo +contributors                                                                  |
| **commits/tags/releases 无 JSON API** | 端点返回 SPA HTML → 解释了为何没有 repo +commits/+tags/+raw 命令                                    |
| **贡献者口径不一致**                  | contributor_users_count vs contributors 含义不同                                                     |

> 所有 Skill 引用 shared,自动知晓这些降级。团队原 Skill(insight/release-auto/workflow 等)由此覆盖,不必逐个改。
## 改动文件清单(本轮)

| 文件                                         |     操作     | 净改动                                    |
| -------------------------------------------- | :-----------: | ----------------------------------------- |
| `skills/gitlink-research-insight/SKILL.md` |      改      | Step0 fork + Step1 替换 + 评分适配 + 降级 |
| `skills/gitlink-shared/SKILL.md`           |      改      | API 注意事项表 +4 行                      |
e3527826d1 fix(shortcuts): 注册测试补全 pm 域以支持 Wiki 等全部命令域
- 将 pm 加入 expectedGroups,使 TestRegisterAll 与 25 个已注册命令域一致
- 确保 wiki/file/snippet 等 HEAD-only 分组在测试中继续被校验

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
8176d8854c Merge remote-tracking branch 'origin/master' into master
- 保留本地 Wiki shortcuts 完整实现(含 sidebar/目录管理)
- 合并 client.go:保留 DoRaw/DoForm,增加 gateway 错误码与 wiki/open 免 .json 后缀处理
- 更新 register_test.go 以校验 25 个命令域(含 pm/wiki/file/snippet)
- 移除与本地 issue batch 测试冲突的 origin batch_update_test.go

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
af7b5aeea3 chore(git): 精简 .gitignore + 移除二进制 gitlink-cli.exe 跟踪
追加 __pycache__/*.pyc/*.exe/research-output/ 忽略;git rm --cached gitlink-cli.exe 停止 19MB 二进制膨胀历史(CI/Docker 内自行 go build,不影响部署)。

Co-Authored-By: Claude <noreply@anthropic.com>
fa69e6b862 fix(shortcuts): 修复 milestone +close 路径并补回归测试
close 命令 API URL 误拼为 {repo_path}/{owner}/milestones/{id}/update_status(Owner 重复、Repo 丢失、缺 /v1),修正为 /v1/{owner}/{repo}/milestones/{id}/update_status;新增 TestMilestoneClose 回归测试。

Co-Authored-By: Claude <noreply@anthropic.com>
39f634535c feat(research): 新增子赛题四 Python 科研算法层 (S1-S6)
Go 出数据 + Python 做算法:collect.py/gitlink_data.py 封装 gitlink-cli 数据采集;lineage(S1)/graph_build(S2)/repro(S3)/match(S4)/report(S5)/visual(S6) 实现六个科研场景的可复现算法;含 topics 词典与 7 个测试文件 ~111 用例。

Co-Authored-By: Claude <noreply@anthropic.com>
5dcdd436eb feat(server): 新增子赛题四网页终端 gitlink-cli server
新增 server 子命令启动 HTTP 服务(:8080),提供 /api/scenarios、/api/run、/api/result/{key}、/api/health;前端含仪表盘(index)、独立结果页(result)、热点追踪页(hotspot),6 科研场景一键运行与可视化。在 cmd/root.go 注册子命令。

Co-Authored-By: Claude <noreply@anthropic.com>
38f6978989 feat(skills): 新增 4 个科研 Skill + 扩展 compliance/insight
新增 gitlink-research-graph(S2)/gitlink-collab-match(S4)/gitlink-research-progress(S5)/gitlink-research-visual(S6);扩展 gitlink-research-insight(S1) 与 gitlink-compliance(S3) 文档与可复现脚本;更新 skills/README.md 增加子赛题四 Skills 章节。

Co-Authored-By: Claude <noreply@anthropic.com>
58ff375bc3 feat(docker): 多阶段构建支持 Python 算法层与网页终端部署
Dockerfile 改为 Go builder + Python runtime 双阶段,安装 networkx/plotly 等科研算法依赖并暴露 8080;CI 流水线 docker run 增加 -p 8080:8080 映射与 GITLINK_TOKEN 注入。

Co-Authored-By: Claude <noreply@anthropic.com>
781190d492 fix(devops): 修复 demo 构建失败并让 demo 部署不阻塞主站
- .dockerignore: 移除 skills(demo/Dockerfile 需 COPY skills/ 供 server.py 读 SKILL.md);新增 *.exe 剔除 18MB Windows 二进制以减小上下文
- .devops/自动构建部署.yml: demo 构建 ssh_cmd_1 改为 best-effort(失败不影响主 :8080)

根因:.dockerignore 排除了 skills,致 demo/Dockerfile 的 COPY skills/ 恒失败(No such image),整条流水线失败。
已在服务器实测两镜像构建成功,:8080 与 :8000 均 HTTP 200。

Co-Authored-By: Claude <noreply@anthropic.com>
63bfdb7d14 fix(devops): token 改用服务器端 --env-file,移除命令里的 ((...))
JianMu 没有把 ((gitlink_token.token)) 替换成真值,导致 bash 在 (( 处语法错误、整条 ssh_cmd_0 解析失败(流水线一直卡在增量拉取这步)。
改为从 /root/.gitlink-env 读取 GITLINK_TOKEN(文件存在才挂 --env-file,不存在也能部署),命令里不再出现 ((...)),彻底规避密钥引用问题。

Co-Authored-By: Claude <noreply@anthropic.com>
d9d3bbc30c chore: move community-ops-sweep workflow to project root workflows/
Move examples/workflows/community-ops-sweep to workflows/community-ops-sweep
to promote it from an example to a first-class project workflow.

Also includes pending org shortcuts modifications.
CI / Build, Lint, Test (pull_request) Failing after 1m26s Details
03659da07e
test: import PR #3 from upstream
Source: gitlink/gitlink-cli

This is test data for gitlink-cli testing.
baoerjun closed this pull request 2026-07-07 18:57:50 +08:00
Some checks failed
CI / Build, Lint, Test (pull_request) Failing after 1m26s

Pull request closed

Sign in to join this conversation.
No reviewers
No Label
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: baoerjun/gitlink-cli#14
No description provided.