✨ feat(spx): 按 git origin 支持 GitHub 仓库,state 评论改成隐藏注释格式,新增 issue view / pr view / pr create

This commit is contained in:
cruldra committed 2026-10-19 07:41:13 +11:00
1 parent 64d5961b62
commit c90d84d7f2
17 files changed
+2683 -400

No files matched your search

+32 -5
View File
@@ -1,6 +1,6 @@
# spx
superpowers-vscode 工作流 CLI 工具,给 cc/codex agent 用的 Gitea 操作薄包装。
superpowers-vscode 工作流 CLI 工具,给 cc/codex agent 用的工单 / PR 操作薄包装,Gitea 和 GitHub 仓库用同一套命令。
## 安装
@@ -9,11 +9,16 @@ make install
# 把 $HOME/.local/bin 加进 PATH
```
## 前置
## 仓库与凭据
需要先用 [`tea`](https://gitea.com/gitea/tea) 登录过(`~/.config/tea/config.yml` 有默认 login)。
spx 读 `git remote get-url origin`,按 host 决定连哪种仓库(`--host` / `--repo` 可覆盖):
如果 tea 用 keyring 存 token(v0.10+ 默认行为),可以另外设环境变量 `GITEA_TOKEN` 作为回退:
| origin host | 仓库 | token 来源 |
| --- | --- | --- |
| `github.com` | GitHub(API `https://api.github.com`) | `gh auth token --hostname github.com`;取不到就先运行 `gh auth login` |
| 其它任何 host | Gitea(API `<host>/api/v1`) | [`tea`](https://gitea.com/gitea/tea) 配置 `~/.config/tea/config.yml` 里 URL 与 origin 同 host 的 login;没有该 login 或 token 为空时回退环境变量 `GITEA_TOKEN` |
tea 用 keyring 存 token(v0.10+ 默认行为)时,可以设 `GITEA_TOKEN` 作为回退:
```
export GITEA_TOKEN=...
@@ -24,13 +29,23 @@ export GITEA_TOKEN=...
```
spx issue create --title "新功能 X" --spec docs/specs/x.md --plan docs/plans/x.md
spx issue marker --issue 79 --type plan --value docs/plans/issue-79/plan.md
spx issue view --issue 79 --comments
spx issue state get --issue 79
spx issue state merge --issue 79 --state-json '{"column":"review"}'
spx pr view --pr 73
spx pr create --title "修复 X" --body-file /tmp/pr.md --head feature/x [--base main]
spx pr review-comment --pr 73 --body "审查意见: ..."
```
- `issue view` 输出编号、标题、正文、状态、作者、指派人、链接;`--comments` 附带评论,但不含 state 评论。
- `pr view` 输出编号、标题、正文、状态、是否已合并、head/base 的分支与 SHA、作者、链接。
- `pr create` 的 `--body` / `--body-file` 必须给一个;不给 `--base` 时取仓库默认分支。输出新 PR 的编号和链接。
- `pr review-comment` 在两种仓库上都走 issue 评论接口(PR 与工单共用编号)。
全局 flag:
- `--repo OWNER/REPO` 默认从当前 git origin 推断
- `--host URL` 默认从 tea config 默认 login 取
- `--host HOST` 如 `github.com` 或 `https://gitea.example.com`,默认从当前 git origin 推断;同时给 `--host` 和 `--repo` 时不需要 git 仓库
- `--json` JSON 输出
- `--cwd PATH` repo 探测的工作目录,默认 `.`
@@ -45,3 +60,15 @@ issue/PR body 里用 HTML 注释行携带 spx 元数据:
```
`spx issue marker` 会做增量更新(已存在则替换那一行,不存在则追加),其他类型的 marker 不会被动到。
## State 评论约定
工单的 state JSON(字段见 [`state-json.schema.json`](../schemas/state-json.schema.json))存在评论里,每次合并追加一条新评论。写出格式是网页上不可见的 HTML 注释,JSON 紧凑一行,`<` `>` `&` 转义成 `\u003c` `\u003e` `\u0026`,保证正文里不会出现 `-->`:
```
<!-- spx-state
{"column":"review","specFile":"docs/specs/foo.md"}
-->
```
读取时从最新一条评论往前找,第一条有效的胜出。兼容三种形式:上面的隐藏格式、旧 YouTrack 格式(`<!--spx-state-->` 后接 JSON)、旧的裸 JSON 对象。内容必须是 JSON 对象,且至少带一个 schema 里声明的字段。