diff --git a/.env.example b/.env.example index 78c9831..6002054 100644 --- a/.env.example +++ b/.env.example @@ -10,25 +10,25 @@ APPROVING_DEPLOYMENT_MODE=local-demo # local-demo default; change before exposing beyond loopback. SANDBOX_GATEWAY_API_KEY=approving-local-demo -# Published images (GHCR). Tag 0.1.1-beta matches the current public packages. +# Published images (GHCR). Tag 0.1.2-beta matches the current public packages. # Prefer @sha256:... digests for immutable releases / ./release-smoke.sh. -APPROVING_IMAGE=ghcr.io/cocofhu/approving:0.1.1-beta -SANDBOX_GATEWAY_IMAGE=ghcr.io/cocofhu/sandbox-gateway:0.1.1-beta +APPROVING_IMAGE=ghcr.io/cocofhu/approving:0.1.2-beta +SANDBOX_GATEWAY_IMAGE=ghcr.io/cocofhu/sandbox-gateway:0.1.2-beta # Optional GLOBAL FORCE for all acpBackends (smoke / digest pin). Leave unset so # each backend uses APPROVING_SANDBOX_IMAGE_* below. If set, ./start.sh maps it to # APPROVING_SANDBOX_IMAGE (or set APPROVING_SANDBOX_IMAGE directly). -# SANDBOX_IMAGE=ghcr.io/cocofhu/universal-sandbox-cursor:0.1.1-beta +# SANDBOX_IMAGE=ghcr.io/cocofhu/universal-sandbox-cursor:0.1.2-beta # APPROVING_SANDBOX_IMAGE= # Per-backend sandbox runtimes (default GHCR). ./start.sh pulls all four. -APPROVING_SANDBOX_IMAGE_CURSOR=ghcr.io/cocofhu/universal-sandbox-cursor:0.1.1-beta -APPROVING_SANDBOX_IMAGE_CLAUDE_CODE=ghcr.io/cocofhu/universal-sandbox-claude_code:0.1.1-beta -APPROVING_SANDBOX_IMAGE_CODEBUDDY=ghcr.io/cocofhu/universal-sandbox-codebuddy:0.1.1-beta -APPROVING_SANDBOX_IMAGE_TRAE=ghcr.io/cocofhu/universal-sandbox-trae:0.1.1-beta +APPROVING_SANDBOX_IMAGE_CURSOR=ghcr.io/cocofhu/universal-sandbox-cursor:0.1.2-beta +APPROVING_SANDBOX_IMAGE_CLAUDE_CODE=ghcr.io/cocofhu/universal-sandbox-claude_code:0.1.2-beta +APPROVING_SANDBOX_IMAGE_CODEBUDDY=ghcr.io/cocofhu/universal-sandbox-codebuddy:0.1.2-beta +APPROVING_SANDBOX_IMAGE_TRAE=ghcr.io/cocofhu/universal-sandbox-trae:0.1.2-beta # Gateway: per-provider template; SANDBOX_IMAGE (or default cursor) is fallback only. -SBGW_IMAGE_TEMPLATE=ghcr.io/cocofhu/universal-sandbox-{provider}:0.1.1-beta +SBGW_IMAGE_TEMPLATE=ghcr.io/cocofhu/universal-sandbox-{provider}:0.1.2-beta # Loopback doctor control-plane token. Empty → ./start.sh generates one. APPROVING_DOCTOR_TOKEN= diff --git a/CHANGELOG.md b/CHANGELOG.md index cb10380..bfaaf8a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,16 @@ All notable public-release changes are documented here. ## Unreleased +## 0.1.2-beta — 2026-07-31 + +- Public beta follow-up on [`v0.1.2-beta`](https://github.com/cocofhu/approving/releases/tag/v0.1.2-beta) + (relative to `v0.1.1-beta`: PRs #143–#151). Full notes on the GitHub Release. +- Pin `./start.sh`, `.env.example`, and `compose.release.yaml` defaults to GHCR + `*:0.1.2-beta` (tag publish does not rewrite these files). +- Highlights: Gates Inbox 纳入 app_preview 待审批;Inbox 布局/预览预算修复;inspect 可取消; + revise 失败不再显示 Done;PreviewIssues 冷会话退回;sandbox `/tmp` PVC;Token 实心饼图; + ArtifactPreview 图片 padding;输出节点 goto 邻接选项。 + ## 0.1.1-beta — 2026-07-29 - Public beta follow-up on [`v0.1.1-beta`](https://github.com/cocofhu/approving/releases/tag/v0.1.1-beta) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 9ecce97..6188c19 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -147,16 +147,16 @@ A release is complete only when all three workflows succeed, and `publish-sandbox` is green for every matrix provider (`cursor`, `claude_code`, `codebuddy`, `trae`). If any job fails, re-run the failed workflow via **Actions → workflow_dispatch** (e.g. re-run -`publish-sandbox` for an existing `v*` tag such as `v0.1.1-beta`). +`publish-sandbox` for an existing `v*` tag such as `v0.1.2-beta`). Sandbox builds are large (often 30–90+ minutes). Packages may start private; set them Public under GitHub → Packages if anonymous pulls are required. Default tags used by `./start.sh` (overridable in `.env`): -- `ghcr.io/cocofhu/approving:0.1.1-beta` -- `ghcr.io/cocofhu/sandbox-gateway:0.1.1-beta` -- `ghcr.io/cocofhu/universal-sandbox-{cursor,claude_code,codebuddy,trae}:0.1.1-beta` +- `ghcr.io/cocofhu/approving:0.1.2-beta` +- `ghcr.io/cocofhu/sandbox-gateway:0.1.2-beta` +- `ghcr.io/cocofhu/universal-sandbox-{cursor,claude_code,codebuddy,trae}:0.1.2-beta` (per `acpBackend`; optional `SANDBOX_IMAGE` / `APPROVING_SANDBOX_IMAGE` forces one image for all backends — used by release-smoke) ### release-smoke (manual; not a PR required check) diff --git a/compose.release.yaml b/compose.release.yaml index 0d18ffe..e736fc6 100644 --- a/compose.release.yaml +++ b/compose.release.yaml @@ -2,15 +2,15 @@ # ./release-smoke.sh (smoke requires immutable @sha256 refs via env). services: gateway: - image: ${SANDBOX_GATEWAY_IMAGE:-ghcr.io/cocofhu/sandbox-gateway:0.1.1-beta} + image: ${SANDBOX_GATEWAY_IMAGE:-ghcr.io/cocofhu/sandbox-gateway:0.1.2-beta} network_mode: host environment: SBGW_LISTEN: ":${APPROVING_GATEWAY_PORT:-8899}" SBGW_DB_PATH: /data/gateway.db SBGW_DRIVER: docker # Per-provider template; SBGW_IMAGE is cursor-only fallback when template/map miss. - SBGW_IMAGE_TEMPLATE: ${SBGW_IMAGE_TEMPLATE:-ghcr.io/cocofhu/universal-sandbox-{provider}:0.1.1-beta} - SBGW_IMAGE: ${SANDBOX_IMAGE:-ghcr.io/cocofhu/universal-sandbox-cursor:0.1.1-beta} + SBGW_IMAGE_TEMPLATE: ${SBGW_IMAGE_TEMPLATE:-ghcr.io/cocofhu/universal-sandbox-{provider}:0.1.2-beta} + SBGW_IMAGE: ${SANDBOX_IMAGE:-ghcr.io/cocofhu/universal-sandbox-cursor:0.1.2-beta} # Require Bearer auth on /api/v1/* (healthz stays open). SBGW_API_KEYS: ${SANDBOX_GATEWAY_API_KEY:-approving-local-demo} volumes: @@ -30,7 +30,7 @@ services: restart: unless-stopped approving: - image: ${APPROVING_IMAGE:-ghcr.io/cocofhu/approving:0.1.1-beta} + image: ${APPROVING_IMAGE:-ghcr.io/cocofhu/approving:0.1.2-beta} network_mode: host environment: APPROVING_PORT: ${APPROVING_PORT:-8080} @@ -39,10 +39,10 @@ services: APPROVING_SANDBOX_GATEWAY_API_KEY: ${SANDBOX_GATEWAY_API_KEY:-approving-local-demo} # Global force only when explicitly set (smoke / optional). Empty = per-backend below. APPROVING_SANDBOX_IMAGE: ${APPROVING_SANDBOX_IMAGE:-} - APPROVING_SANDBOX_IMAGE_CURSOR: ${APPROVING_SANDBOX_IMAGE_CURSOR:-ghcr.io/cocofhu/universal-sandbox-cursor:0.1.1-beta} - APPROVING_SANDBOX_IMAGE_CLAUDE_CODE: ${APPROVING_SANDBOX_IMAGE_CLAUDE_CODE:-ghcr.io/cocofhu/universal-sandbox-claude_code:0.1.1-beta} - APPROVING_SANDBOX_IMAGE_CODEBUDDY: ${APPROVING_SANDBOX_IMAGE_CODEBUDDY:-ghcr.io/cocofhu/universal-sandbox-codebuddy:0.1.1-beta} - APPROVING_SANDBOX_IMAGE_TRAE: ${APPROVING_SANDBOX_IMAGE_TRAE:-ghcr.io/cocofhu/universal-sandbox-trae:0.1.1-beta} + APPROVING_SANDBOX_IMAGE_CURSOR: ${APPROVING_SANDBOX_IMAGE_CURSOR:-ghcr.io/cocofhu/universal-sandbox-cursor:0.1.2-beta} + APPROVING_SANDBOX_IMAGE_CLAUDE_CODE: ${APPROVING_SANDBOX_IMAGE_CLAUDE_CODE:-ghcr.io/cocofhu/universal-sandbox-claude_code:0.1.2-beta} + APPROVING_SANDBOX_IMAGE_CODEBUDDY: ${APPROVING_SANDBOX_IMAGE_CODEBUDDY:-ghcr.io/cocofhu/universal-sandbox-codebuddy:0.1.2-beta} + APPROVING_SANDBOX_IMAGE_TRAE: ${APPROVING_SANDBOX_IMAGE_TRAE:-ghcr.io/cocofhu/universal-sandbox-trae:0.1.2-beta} # Generated by start.sh / release-smoke.sh when unset. APPROVING_DOCTOR_TOKEN: ${APPROVING_DOCTOR_TOKEN:-} APPROVING_DEPLOYMENT_MODE: ${APPROVING_DEPLOYMENT_MODE:-local-demo} diff --git a/start.sh b/start.sh index 5f61fbd..f18b044 100755 --- a/start.sh +++ b/start.sh @@ -49,19 +49,19 @@ set +a : "${APPROVING_GATEWAY_PORT:=8899}" : "${APPROVING_SANDBOX_GATEWAY_URL:=http://127.0.0.1:${APPROVING_GATEWAY_PORT}}" : "${APPROVING_DEPLOYMENT_MODE:=local-demo}" -: "${APPROVING_IMAGE:=ghcr.io/cocofhu/approving:0.1.1-beta}" -: "${SANDBOX_GATEWAY_IMAGE:=ghcr.io/cocofhu/sandbox-gateway:0.1.1-beta}" +: "${APPROVING_IMAGE:=ghcr.io/cocofhu/approving:0.1.2-beta}" +: "${SANDBOX_GATEWAY_IMAGE:=ghcr.io/cocofhu/sandbox-gateway:0.1.2-beta}" : "${SANDBOX_GATEWAY_API_KEY:=approving-local-demo}" # Optional global force: capture user-set SANDBOX_IMAGE BEFORE applying the # cursor fallback default, so a bare default does not re-force all backends. _user_sandbox_image="${SANDBOX_IMAGE-}" -: "${SANDBOX_IMAGE:=ghcr.io/cocofhu/universal-sandbox-cursor:0.1.1-beta}" -: "${APPROVING_SANDBOX_IMAGE_CURSOR:=ghcr.io/cocofhu/universal-sandbox-cursor:0.1.1-beta}" -: "${APPROVING_SANDBOX_IMAGE_CLAUDE_CODE:=ghcr.io/cocofhu/universal-sandbox-claude_code:0.1.1-beta}" -: "${APPROVING_SANDBOX_IMAGE_CODEBUDDY:=ghcr.io/cocofhu/universal-sandbox-codebuddy:0.1.1-beta}" -: "${APPROVING_SANDBOX_IMAGE_TRAE:=ghcr.io/cocofhu/universal-sandbox-trae:0.1.1-beta}" -: "${SBGW_IMAGE_TEMPLATE:=ghcr.io/cocofhu/universal-sandbox-{provider}:0.1.1-beta}" +: "${SANDBOX_IMAGE:=ghcr.io/cocofhu/universal-sandbox-cursor:0.1.2-beta}" +: "${APPROVING_SANDBOX_IMAGE_CURSOR:=ghcr.io/cocofhu/universal-sandbox-cursor:0.1.2-beta}" +: "${APPROVING_SANDBOX_IMAGE_CLAUDE_CODE:=ghcr.io/cocofhu/universal-sandbox-claude_code:0.1.2-beta}" +: "${APPROVING_SANDBOX_IMAGE_CODEBUDDY:=ghcr.io/cocofhu/universal-sandbox-codebuddy:0.1.2-beta}" +: "${APPROVING_SANDBOX_IMAGE_TRAE:=ghcr.io/cocofhu/universal-sandbox-trae:0.1.2-beta}" +: "${SBGW_IMAGE_TEMPLATE:=ghcr.io/cocofhu/universal-sandbox-{provider}:0.1.2-beta}" # Explicit SANDBOX_IMAGE (or APPROVING_SANDBOX_IMAGE) → global force; default path leaves it empty. if [[ -z "${APPROVING_SANDBOX_IMAGE:-}" && -n "${_user_sandbox_image}" ]]; then APPROVING_SANDBOX_IMAGE="${_user_sandbox_image}"