repo_create uses is_org: true to route to the org endpoint — avoids a round-trip to detect user vs org
repo_update requires confirm == repo_name when setting private: false (making public is destructive)
repo_mirror_push uses an action param (add/list/delete) — three operations, one tool; remote_password is never returned in any response
Tests
All table-driven with httptest.NewServer mocks, following existing pattern. task check passes (lint + race test + vet + govulncheck).
## What
Batch 1 of the v0.2 sprint — three tools needed for the `hyperguild new-project` automated project creation flow.
### Tools added
| Tool | Gitea API | Issue |
|------|-----------|-------|
| `repo_create` | `POST /user/repos` or `/orgs/{org}/repos` | #13 |
| `repo_update` | `PATCH /repos/{owner}/{repo}` | #12 |
| `repo_mirror_push` | `POST/GET/DELETE /repos/{owner}/{repo}/push_mirrors` | #16 |
### Design decisions
- `repo_create` uses `is_org: true` to route to the org endpoint — avoids a round-trip to detect user vs org
- `repo_update` requires `confirm == repo_name` when setting `private: false` (making public is destructive)
- `repo_mirror_push` uses an `action` param (`add`/`list`/`delete`) — three operations, one tool; `remote_password` is never returned in any response
## Tests
All table-driven with `httptest.NewServer` mocks, following existing pattern. `task check` passes (lint + race test + vet + govulncheck).
repo_create: POST /user/repos or /orgs/{org}/repos, is_org flag routes
repo_update: PATCH /repos/{owner}/{repo}, confirm required when private=false
repo_mirror_push: add/list/delete push mirrors, password never returned
mathias
merged commit 2c94de7b59 into main2026-05-15 08:21:23 +00:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
What
Batch 1 of the v0.2 sprint — three tools needed for the
hyperguild new-projectautomated project creation flow.Tools added
repo_createPOST /user/reposor/orgs/{org}/reposrepo_updatePATCH /repos/{owner}/{repo}repo_mirror_pushPOST/GET/DELETE /repos/{owner}/{repo}/push_mirrorsDesign decisions
repo_createusesis_org: trueto route to the org endpoint — avoids a round-trip to detect user vs orgrepo_updaterequiresconfirm == repo_namewhen settingprivate: false(making public is destructive)repo_mirror_pushuses anactionparam (add/list/delete) — three operations, one tool;remote_passwordis never returned in any responseTests
All table-driven with
httptest.NewServermocks, following existing pattern.task checkpasses (lint + race test + vet + govulncheck).repo_create: POST /user/repos or /orgs/{org}/repos, is_org flag routes repo_update: PATCH /repos/{owner}/{repo}, confirm required when private=false repo_mirror_push: add/list/delete push mirrors, password never returned