AtomGit SDK
统一的 AtomGit API 封装 SDK,可用于 AtomGit / GitCode 上的 PR、Issue、Review 与评论修复流程。
特性
- 统一的 API 客户端: 封装所有 AtomGit API 调用
- API 文档目录: 内置常用协作 endpoint catalog,并支持从官方文档同步完整 endpoint 列表
- 类型安全: 使用 Pydantic 模型进行数据验证
- Diff 解析: 准确的 Diff 行号映射算法(已修复 bug)
- 高级服务: PRService 和 RepairService 封装常用操作
- 零外部依赖: 仅使用项目已有的 requests 和 pydantic
安装
如果 SDK 以源码方式集成在仓库中,请将 libs/atomgit_sdk/src 加入 PYTHONPATH。未来若单独发布,也可直接按包方式安装。
快速开始
基础使用
from atomgit_sdk import AtomGitClient, AtomGitConfig
# 从配置文件创建
config = AtomGitConfig.from_json("config.json")
client = AtomGitClient(config)
# 获取 PR 信息
pr = client.get_pull_request(123)
print(f"PR Title: {pr['title']}")
使用 PRService
from atomgit_sdk.services import PRService
service = PRService(client)
# 获取完整的 PR 上下文
context = service.get_full_pr_context(123)
print(f"Files changed: {len(context['files'])}")
# 提交评论
service.submit_inline_comment(123, {
"path": "src/main.py",
"position": 10,
"body": "建议优化这段代码"
})
回复单条 PR review 意见
官方 API 为 review discussion 提供了独立的回复与解决状态接口。SDK 中应优先使用这些封装,而不是在 skill 脚本里直接拼 HTTP:
from atomgit_sdk.services import RepairService
repair = RepairService(client)
# 按评论 ID 回复;SDK 会先读取该评论并找到 discussion_id
repair.reply_to_comment(123, comment_id=456, reply_body="已按建议修复。")
# 按评论 ID 标记其 discussion 已解决
repair.resolve_comment(123, comment_id=456, resolved=True)
# 已知 discussion_id 时也可以直接调用
client.reply_to_pr_discussion(123, "discussion-id", "补充说明...")
client.set_pr_discussion_resolved(123, "discussion-id", True)
调用官方 API catalog
当前官方 API 文档大多只公开标题、HTTP 方法和路径。SDK 因此采用“catalog + typed wrapper”的方式:常用协作流程使用显式方法,长尾 API 通过 catalog 调用。
from atomgit_sdk import APICatalog
# 内置常用协作 endpoint
matches = client.find_api_endpoints(path_contains="/pulls/comments")
# 调用内置 catalog 中的 endpoint
comment = client.call_api(
"get-api-v-5-repos-owner-repo-pulls-comments-id",
path_params={"owner": "openEuler", "repo": "IB_Robot", "id": 456},
)
# 需要完整官方 endpoint 列表时,可从文档同步(2026-04 抽取到 247 个 API 页面)
full_catalog = APICatalog.from_docs()
Diff 位置计算
from atomgit_sdk.utils import calculate_diff_position
patch = """@@ -10,5 +10,6 @@
context line
-old line
+new line
another line"""
position = calculate_diff_position(patch, line_number=11)
print(f"Position in diff: {position}")
目录结构
libs/atomgit_sdk/
├── src/
│ └── atomgit_sdk/
│ ├── __init__.py # 导出常用类
│ ├── config.py # 配置管理
│ ├── client.py # API 客户端
│ ├── models.py # 数据模型
│ ├── exceptions.py # 自定义异常
│ ├── utils/ # 工具函数
│ │ ├── diff.py # Diff 解析
│ │ └── url.py # URL 解析
│ └── services/ # 业务服务
│ ├── pr_service.py # PR 操作
│ └── repair_service.py # 修复操作
└── tests/ # 单元测试
配置
在你的 config.json 中配置:
{
"atomgit": {
"token": "your-token",
"owner": "owner-name",
"repo": "repo-name",
"baseUrl": "https://api.atomgit.com"
}
}
API 参考
AtomGitConfig
配置管理类。
方法:
from_json(path: str): 从 JSON 文件加载配置
AtomGitClient
API 客户端。
方法:
get_pull_request(pr_number: int): 获取 PR 详情get_pr_files(pr_number: int): 获取 PR 文件列表get_pr_files_json(pr_number: int): 获取 PR files.json 列表get_pr_commits(pr_number: int): 获取 PR 提交列表get_pr_comments(pr_number: int): 获取 PR 评论列表get_pr_comment(comment_id: int): 获取单条 PR 评论reply_to_pr_discussion(pr_number: int, discussion_id: str, body: str): 回复指定 review discussionset_pr_discussion_resolved(pr_number: int, discussion_id: str, resolved: bool): 修改 discussion 解决状态get_file_content(path: str, ref: str): 获取文件内容call_api(slug: str, path_params: dict, params: dict, body: dict): 调用 catalog 中的官方 API endpoint
PRService
PR 操作服务。
方法:
get_full_pr_context(pr_number: int): 获取完整 PR 上下文submit_inline_comment(pr_number: int, comment: dict): 提交行内评论submit_batch_comments(pr_number: int, comments: list): 批量提交评论reply_to_pr_discussion(pr_number: int, discussion_id: str, body: str): 回复指定 review discussionset_pr_discussion_resolved(pr_number: int, discussion_id: str, resolved: bool): 修改 discussion 解决状态
RepairService
评审意见处理服务。
方法:
get_unresolved_comments(pr_number: int): 获取未解决 review 评论reply_to_comment(pr_number: int, comment_id: int, reply_body: str): 按评论 ID 回复单条 review 意见resolve_comment(pr_number: int, comment_id: int, resolved: bool): 按评论 ID 修改所属 discussion 解决状态resolve_discussion(pr_number: int, discussion_id: str, resolved: bool): 按 discussion ID 修改解决状态
测试
运行单元测试:
cd libs/atomgit_sdk
pytest tests/
版本历史
- 0.1.0 (2026-03-20): 初始版本
- 统一的 AtomGit API 客户端
- Diff 解析算法(修复版)
- PRService 和 RepairService
- Pydantic 数据模型
许可证
许可证遵循分发此 SDK 的仓库配置。