# dsh-github-picker
[English](README.md) | 简体中文
DeepSeek Harness Web GUI 的 GitHub Issue 与 Pull Request 引用插件。点击输入框右下角的 GitHub 图标,即可搜索当前工作区仓库的 Issue 与 PR,并插入引用文本——GitHub URL,或 `@owner/repo#编号` 提及。

## 安装与更新
```sh
dsh plugin --profile web add dsh-github-picker
```
已有安装用同一条命令即可更新到最新版本;需要固定版本时在包名后追加 `@<版本>`。安装后重启 `dsh web`。
## 用法
点击输入框右下角的 GitHub 图标。弹窗列出仓库最近的 Issue 和 PR——每页 12 条,滚动到底部自动加载下一页,直至取完全部结果(无上限)——输入关键字即时本地过滤(数字前缀优先)。点击行插入引用;Esc 或点击弹窗外任意处关闭。搜索失败(未安装 gh、未登录、限流、网络错误、仓库未解析)时显示一行本地化提示,而不是静默关闭。
每行显示 GitHub 官方状态图标、标题和 `#编号`:
| 状态 | 图标 |
| --- | --- |
| 打开的 Issue | `issue-opened`(绿) |
| 已关闭的 Issue | `issue-closed`(紫) |
| 打开的 PR | `git-pull-request`(绿) |
| Draft PR | `git-pull-request-draft`(灰) |
| 已关闭未合并的 PR | `git-pull-request-closed`(红) |
| 已合并的 PR | `git-merge`(紫) |
选中后按**插入格式**落稿:
```text
@owner/name#125 # 格式 ref(默认)
https://github.com/owner/name/issues/125 # 格式 url
```
Agent 开始执行前,Host 会扫描草稿中的 GitHub 引用——URL、`@owner/repo#编号`、裸 `#编号`——并为每个引用注入一条简短消息:
```xml
```
插件只传递仓库与编号,从不拉取 Issue 正文。
## 数据来源
只使用 **gh CLI**:复用本机 `gh` 登录态,调用 `gh api search/issues`(一次查询同时返回 Issue 和 PR)。不涉及设备流、OAuth App 或任何已保存凭据。仓库通过工作区 `git remote get-url origin`(https、ssh、`git@` 形式)自动解析;无法解析时弹窗会提示如何添加 remote。
## 设置
插件卡片(标题「GitHub 引用」,英文界面为 "GitHub Picker")位于官方插件配置页。它显示 gh 连接状态(`gh auth status` 报告的已登录帐号)与**插入格式**(`@owner/repo#编号` 或 `GitHub URL`)。这是唯一的设置项:没有「启用」开关——选择器始终可用——也没有结果上限。
## 配置
Host 插件配置写入所选 profile 的 `cordis.patch.yml`:
```yaml
- id: dsh-github-picker
config:
searchTimeoutMs: 15000
repoCacheTtl: 30000
```
- `searchTimeoutMs`——数据源调用超时(默认 15000 毫秒)。
- `repoCacheTtl`——仓库解析结果按工作区缓存时长(默认 30000 毫秒)。
修改 Host 配置后需重启 `dsh web`;纯客户端改动只需刷新浏览器。
## 开发
```sh
pnpm install
pnpm run check
```
检查阶梯为 typecheck + 测试 + 构建,每个源文件 100% 覆盖率;`lib/` 随仓库提交,profile 安装无需构建。安装本地检出时,在 `~/.dsh/profiles/web/package.json` 中加入依赖与 `dsh.profile.bundles`,执行 `pnpm install` 后重启 `dsh web`。插件以 `/plugins/dsh-github-picker/client.js` 提供服务,网关路由 `/api/githubPicker/*`。
## 许可证
MIT