The GitHub account is restored, so github.com/ZacharyZhang-NY/Kigi-CLI is
the canonical repo again. Reverse the 2026-08 Gitea migration:
- .github/workflows/{release,warm-cache}.yml: restore the GitHub-hosted
pipeline dropped in 3e1652c, unchanged — hosted runners, rust-cache,
softprops release with every asset attached atomically.
- .gitea/workflows/release.yml: retire the Gitea edition (the runners are
being deregistered; git.zacharyzhang.com keeps the v0.1.12/v0.1.13
releases for old clients).
- kigi-env: update_base_url now defaults to the GitHub Releases API. The
updater already speaks GitHub wire format and sends a User-Agent; v0.1.14
is published to BOTH forges with identical assets so pre-0.1.14 installs
polling Gitea self-update onto the GitHub channel.
- install.sh / install.ps1: resolve releases from api.github.com.
- feedback, /docs, SECURITY.md, frontend worker + site: repo, issues and
raw-file links point at github.com / raw.githubusercontent.com.
- docs/RELEASE.md: GitHub edition of the checklist; Gitea runner sections
retired.
- version: 0.1.13 -> 0.1.14 (the cross-forge transition release).
Claude-Session: https://claude.ai/code/session_01A6RcwHhhsFYYrNdQB4ASuP
kigicli.dev
The Kigi landing site and the Worker that fronts it, deployed to Cloudflare as
the kigi-frontend Worker on kigicli.dev and www.kigicli.dev.
Layout
| Path | What it is |
|---|---|
worker/index.ts |
Worker entry point: installer proxy, /health, asset fallthrough |
wrangler.jsonc |
Deployment config (custom domains, assets binding, SPA fallback) |
dist/ |
The built site served by the assets binding |
dist/is build output, not source. It was recovered by mirroring the livekigicli.devdeployment — the original Vite/React project that produced these bundles is not in this repo. Content and copy changes therefore have to be made against the hasheddist/assets/index-*.jsandindex-*.cssfiles directly. If the upstream source ever turns up, drop it in besidedist/and switchwrangler.jsoncto point at its build directory.
Routes
Assets are matched first and served directly. Requests with no matching file fall through to the Worker, which owns:
GET /install.sh— proxiesinstall.shfrom the Kigi repo on GiteaGET /install.ps1— proxiesinstall.ps1from the Kigi repo on GiteaGET /health— plain-text liveness check- everything else —
env.ASSETS.fetch(), which servesindex.htmlfor unknown paths (single-page-application fallback)
The installer routes are proxied rather than linked so the published install
command (curl -fsSL https://kigicli.dev/install.sh | bash) stays stable no
matter where the repo is hosted. Responses are cached for 10 minutes at the
edge, so a push to main takes up to that long to show up.
Because assets win over the Worker, never add install.sh or install.ps1 to
dist/ — they would shadow the proxy routes.
Deploy
npm install
npx wrangler deploy
Cloudflare Web Analytics injects its beacon <script> at the edge; that is why
dist/index.html does not contain one and must not have one added.