feat(control-plane): harden host-scoped reconcile and acceptance evidence

- add batch-scoped reconcile_runs persistence and queries
- route batch detail and reconcile writes through batch_id/host_id
- refresh production boards with host-scope acceptance artifacts
- include latest real-host acceptance evidence for self_service and subscription
This commit is contained in:
phamnazage-jpg
2026-05-18 22:22:22 +08:00
parent 71cbaf5fa6
commit 85d495dd16
332 changed files with 5561 additions and 422 deletions

View File

@@ -1,11 +1,35 @@
FROM golang:1.22.2 AS builder
ARG http_proxy=
ARG https_proxy=
ARG HTTP_PROXY=
ARG HTTPS_PROXY=
ARG no_proxy=
ARG NO_PROXY=
ENV http_proxy= \
https_proxy= \
HTTP_PROXY= \
HTTPS_PROXY= \
no_proxy= \
NO_PROXY=
WORKDIR /src
COPY go.mod go.sum ./
RUN go mod download
RUN GOPROXY=https://proxy.golang.org,direct go mod download
COPY . .
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -trimpath -ldflags='-s -w' -o /out/sub2api-cn-relay-manager ./cmd/server
RUN GOPROXY=https://proxy.golang.org,direct CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -trimpath -ldflags='-s -w' -o /out/sub2api-cn-relay-manager ./cmd/server
FROM debian:bookworm-slim
ARG http_proxy=
ARG https_proxy=
ARG HTTP_PROXY=
ARG HTTPS_PROXY=
ARG no_proxy=
ARG NO_PROXY=
ENV http_proxy= \
https_proxy= \
HTTP_PROXY= \
HTTPS_PROXY= \
no_proxy= \
NO_PROXY=
RUN apt-get update \
&& apt-get install -y --no-install-recommends ca-certificates tzdata wget \
&& rm -rf /var/lib/apt/lists/*

30
Dockerfile.local Normal file
View File

@@ -0,0 +1,30 @@
# Local-dev Dockerfile: uses prebuilt binary to avoid proxy issues in Docker.
# Usage:
# GOTOOLCHAIN=local CGO_ENABLED=0 GOOS=linux GOARCH=amd64 \
# go build -trimpath -ldflags='-s -w' -o bin/sub2api-cn-relay-manager ./cmd/server
# docker build -f Dockerfile.local -t sub2api-cn-relay-manager:local .
FROM debian:bookworm-slim
ARG http_proxy=
ARG https_proxy=
ARG HTTP_PROXY=
ARG HTTPS_PROXY=
ARG no_proxy=
ARG NO_PROXY=
ENV http_proxy= \
https_proxy= \
HTTP_PROXY= \
HTTPS_PROXY= \
no_proxy= \
NO_PROXY=
RUN apt-get update \
&& apt-get install -y --no-install-recommends ca-certificates tzdata wget \
&& rm -rf /var/lib/apt/lists/* \
&& update-ca-certificates
WORKDIR /app
COPY bin/sub2api-cn-relay-manager /usr/local/bin/sub2api-cn-relay-manager
ENV SUB2API_CRM_LISTEN_ADDR=:8080
ENV SUB2API_CRM_SQLITE_DSN=file:/data/sub2api-cn-relay-manager.db?_foreign_keys=on&_busy_timeout=5000
ENV SUB2API_CRM_ADMIN_TOKEN=
VOLUME ["/data"]
EXPOSE 8080
ENTRYPOINT ["/usr/local/bin/sub2api-cn-relay-manager"]

View File

@@ -67,6 +67,7 @@ sub2api-cn-relay-manager/
- [docs/TDD_PLAN.md](./docs/TDD_PLAN.md)
- [docs/EXECUTION_BOARD.md](./docs/EXECUTION_BOARD.md)
- [docs/DEPLOYMENT.md](./docs/DEPLOYMENT.md)
- [docs/REAL_HOST_ACCEPTANCE_RUNBOOK.md](./docs/REAL_HOST_ACCEPTANCE_RUNBOOK.md)
## 当前 MVP 能力
@@ -104,6 +105,27 @@ Docker Compose
```bash
cp .env.example .env
# 编辑 .env 中的 SUB2API_CRM_ADMIN_TOKEN
docker compose up --build -d
scripts/build_local_image.sh
docker run --rm -p 8080:8080 \
--env-file .env \
-v "$(pwd)/data:/data" \
sub2api-cn-relay-manager:local
curl -fsS http://127.0.0.1:8080/healthz
```
真实宿主验收:
```bash
CRM_BASE_URL=http://127.0.0.1:8080 \
CRM_ADMIN_TOKEN='<crm-admin-token>' \
HOST_NAME=prod-sub2api \
HOST_BASE_URL=https://sub2api.example.com \
HOST_API_KEY='<sub2api-admin-key>' \
PACK_PATH=/app/packs/openai-cn-pack \
PROVIDER_ID=deepseek \
KEYS=sk-live-1 \
ACCESS_MODE=self_service \
ACCESS_API_KEY='<user-gateway-key>' \
DRY_RUN=1 \
scripts/real_host_acceptance.sh
```

View File

@@ -0,0 +1 @@
{"dry_run":true,"method":"POST","url":"http://127.0.0.1:8080/api/hosts"}

View File

@@ -0,0 +1 @@
{"dry_run":true,"method":"POST","url":"http://127.0.0.1:8080/api/hosts/prod-sub2api/probe"}

View File

@@ -0,0 +1 @@
{"dry_run":true,"method":"POST","url":"http://127.0.0.1:8080/api/packs/install"}

View File

@@ -0,0 +1 @@
{"dry_run":true,"method":"POST","url":"http://127.0.0.1:8080/api/providers/deepseek/preview-import"}

View File

@@ -0,0 +1 @@
{"dry_run":true,"method":"POST","url":"http://127.0.0.1:8080/api/providers/deepseek/import"}

View File

@@ -0,0 +1 @@
{"dry_run":true,"method":"POST","url":"http://127.0.0.1:8080/api/providers/deepseek/access/preview"}

View File

@@ -0,0 +1 @@
{"dry_run":true,"method":"GET","url":"http://127.0.0.1:8080/api/providers/deepseek/access/status"}

View File

@@ -0,0 +1 @@
{"dry_run":true,"method":"GET","url":"http://127.0.0.1:8080/api/providers/deepseek/status"}

View File

@@ -0,0 +1 @@
{"dry_run":true,"method":"POST","url":"http://127.0.0.1:8080/api/providers/deepseek/reconcile"}

View File

@@ -0,0 +1 @@
{"dry_run":true,"method":"POST","url":"http://127.0.0.1:18081/api/hosts"}

View File

@@ -0,0 +1 @@
{"dry_run":true,"method":"POST","url":"http://127.0.0.1:18081/api/hosts/local-sub2api/probe"}

View File

@@ -0,0 +1 @@
{"dry_run":true,"method":"POST","url":"http://127.0.0.1:18081/api/packs/install"}

View File

@@ -0,0 +1 @@
{"dry_run":true,"method":"POST","url":"http://127.0.0.1:18081/api/providers/deepseek/preview-import"}

View File

@@ -0,0 +1 @@
{"dry_run":true,"method":"POST","url":"http://127.0.0.1:18081/api/providers/deepseek/import"}

View File

@@ -0,0 +1 @@
{"dry_run":true,"method":"POST","url":"http://127.0.0.1:18081/api/providers/deepseek/access/preview"}

View File

@@ -0,0 +1 @@
{"dry_run":true,"method":"GET","url":"http://127.0.0.1:18081/api/providers/deepseek/access/status"}

View File

@@ -0,0 +1 @@
{"dry_run":true,"method":"GET","url":"http://127.0.0.1:18081/api/providers/deepseek/status"}

View File

@@ -0,0 +1 @@
{"dry_run":true,"method":"POST","url":"http://127.0.0.1:18081/api/providers/deepseek/reconcile"}

View File

@@ -0,0 +1 @@
{"host_id":"local-sub2api","base_url":"http://127.0.0.1:18080","host_version":"0.1.126","status":"supported","capabilities":{"groups":true,"channels":true,"plans":true,"accounts":true,"account_test":true,"account_models":true,"subscriptions":true}}

View File

@@ -0,0 +1 @@
{"host_id":"local-sub2api","base_url":"http://127.0.0.1:18080","host_version":"0.1.126","status":"supported","capabilities":{"groups":true,"channels":true,"plans":true,"accounts":true,"account_test":true,"account_models":true,"subscriptions":true}}

View File

@@ -0,0 +1 @@
{"already_installed":false,"host_version":"0.1.126","pack_id":"openai-cn-pack","providers":[{"display_name":"DeepSeek OpenAI Compatible","provider_id":"deepseek"}],"version":"1.0.0"}

View File

@@ -0,0 +1 @@
{"dry_run":true,"method":"POST","url":"http://127.0.0.1:18081/api/hosts"}

View File

@@ -0,0 +1 @@
{"dry_run":true,"method":"POST","url":"http://127.0.0.1:18081/api/hosts/local-sub2api/probe"}

View File

@@ -0,0 +1 @@
{"dry_run":true,"method":"POST","url":"http://127.0.0.1:18081/api/packs/install"}

View File

@@ -0,0 +1 @@
{"dry_run":true,"method":"POST","url":"http://127.0.0.1:18081/api/providers/deepseek/preview-import"}

View File

@@ -0,0 +1 @@
{"dry_run":true,"method":"POST","url":"http://127.0.0.1:18081/api/providers/deepseek/import"}

View File

@@ -0,0 +1 @@
{"dry_run":true,"method":"POST","url":"http://127.0.0.1:18081/api/providers/deepseek/access/preview"}

View File

@@ -0,0 +1 @@
{"dry_run":true,"method":"GET","url":"http://127.0.0.1:18081/api/providers/deepseek/access/status"}

View File

@@ -0,0 +1 @@
{"dry_run":true,"method":"GET","url":"http://127.0.0.1:18081/api/providers/deepseek/status"}

View File

@@ -0,0 +1 @@
{"dry_run":true,"method":"POST","url":"http://127.0.0.1:18081/api/providers/deepseek/reconcile"}

View File

@@ -0,0 +1 @@
{"host_id":"local-sub2api","base_url":"http://127.0.0.1:18080","host_version":"0.1.126","status":"supported","capabilities":{"groups":true,"channels":true,"plans":true,"accounts":true,"account_test":true,"account_models":true,"subscriptions":true}}

View File

@@ -0,0 +1 @@
{"host_id":"local-sub2api","base_url":"http://127.0.0.1:18080","host_version":"0.1.126","status":"supported","capabilities":{"groups":true,"channels":true,"plans":true,"accounts":true,"account_test":true,"account_models":true,"subscriptions":true}}

View File

@@ -0,0 +1 @@
{"already_installed":true,"host_version":"0.1.126","pack_id":"openai-cn-pack","providers":[{"display_name":"DeepSeek OpenAI Compatible","provider_id":"deepseek"}],"version":"1.0.0"}

View File

@@ -0,0 +1 @@
{"host_id":"local-sub2api","base_url":"http://127.0.0.1:18080","host_version":"0.1.126","status":"supported","capabilities":{"groups":true,"channels":true,"plans":true,"accounts":true,"account_test":true,"account_models":true,"subscriptions":true}}

View File

@@ -0,0 +1 @@
{"host_id":"local-sub2api","base_url":"http://127.0.0.1:18080","host_version":"0.1.126","status":"supported","capabilities":{"groups":true,"channels":true,"plans":true,"accounts":true,"account_test":true,"account_models":true,"subscriptions":true}}

View File

@@ -0,0 +1 @@
{"already_installed":true,"host_version":"0.1.126","pack_id":"openai-cn-pack","providers":[{"display_name":"DeepSeek OpenAI Compatible","provider_id":"deepseek"}],"version":"1.0.0"}

View File

@@ -0,0 +1 @@
{"accepted_keys_count":1,"decisions":{"channel":{"Action":"create","Suggested":"crm-deepseek-channel","ExistingID":"","Reason":""},"group":{"Action":"create","Suggested":"crm-deepseek-group","ExistingID":"","Reason":""},"plan":{"Action":"create","Suggested":"crm-deepseek-plan","ExistingID":"","Reason":""}},"names":{"Group":"crm-deepseek-group","Channel":"crm-deepseek-channel","Plan":"crm-deepseek-plan"}}

View File

@@ -0,0 +1 @@
{"host_id":"local-sub2api","base_url":"http://127.0.0.1:18080","host_version":"0.1.126","status":"supported","capabilities":{"groups":true,"channels":true,"plans":true,"accounts":true,"account_test":true,"account_models":true,"subscriptions":true}}

View File

@@ -0,0 +1 @@
{"host_id":"local-sub2api","base_url":"http://127.0.0.1:18080","host_version":"0.1.126","status":"supported","capabilities":{"groups":true,"channels":true,"plans":true,"accounts":true,"account_test":true,"account_models":true,"subscriptions":true}}

View File

@@ -0,0 +1 @@
{"already_installed":false,"host_version":"0.1.126","pack_id":"openai-cn-pack","providers":[{"display_name":"DeepSeek OpenAI Compatible","provider_id":"deepseek"},{"display_name":"MiniMax OpenAI Compatible","provider_id":"minimax"},{"display_name":"OpenAI 中转兼容","provider_id":"openai-zhongzhuan"}],"version":"1.0.0"}

View File

@@ -0,0 +1 @@
{"accepted_keys_count":1,"decisions":{"channel":{"Action":"create","Suggested":"OpenAI 中转默认渠道","ExistingID":"","Reason":""},"group":{"Action":"reuse","Suggested":"OpenAI 中转默认分组","ExistingID":"18","Reason":"matching managed resource already exists"},"plan":{"Action":"create","Suggested":"OpenAI 中转默认套餐","ExistingID":"","Reason":""}},"names":{"Group":"OpenAI 中转默认分组","Channel":"OpenAI 中转默认渠道","Plan":"OpenAI 中转默认套餐"}}

View File

@@ -0,0 +1 @@
{"accepted_keys_count":1,"access_status":"broken","accounts_count":1,"batch_id":1,"batch_status":"partially_succeeded","channel":{"id":"10","name":"OpenAI 中转默认渠道"},"gateway":{"ok":false,"status_code":403,"models":null,"has_expected_model":false},"group":{"id":"18","name":"OpenAI 中转默认分组"},"plan":null,"provider_status":"degraded"}

View File

@@ -0,0 +1 @@
{"provider_id":"openai-zhongzhuan","mode":"self_service","available":false,"message":"access status broken does not satisfy mode self_service"}

View File

@@ -0,0 +1 @@
{"batch_access_status":"broken","batch_id":1,"closures_count":1,"latest_access_status":"broken","latest_closure":{"closure_type":"self_service","details_json":"{\"has_expected_model\":false,\"models\":null,\"ok\":false,\"status_code\":403}","id":1,"status":"broken"},"pack_id":"openai-cn-pack","provider_id":"openai-zhongzhuan"}

View File

@@ -0,0 +1 @@
{"access_closures_count":1,"batch":{"access_status":"broken","batch_status":"partially_succeeded","id":1,"mode":"partial"},"host":{"base_url":"http://127.0.0.1:18080","host_id":"http://127.0.0.1:18080","host_version":"0.1.126"},"latest_access_status":"broken","latest_reconcile_status":"not_run","latest_reconcile_summary":{},"managed_resources_count":3,"pack":{"pack_id":"openai-cn-pack","version":"1.0.0"},"provider":{"display_name":"OpenAI 中转兼容","platform":"openai","provider_id":"openai-zhongzhuan"},"provider_status":"partially_succeeded","reconcile_runs_count":0}

View File

@@ -0,0 +1 @@
{"batch_id":1,"extra_count":11,"missing_count":0,"provider_id":"openai-zhongzhuan","status":"drifted","summary":{"access_rechecked":true,"access_status":"broken","extra_count":11,"host_version":"0.1.126","missing_count":0,"probe_failures":0}}

View File

@@ -0,0 +1 @@
{"access_closures":[{"ID":1,"BatchID":1,"ClosureType":"self_service","Status":"broken","DetailsJSON":"{\"has_expected_model\":false,\"models\":null,\"ok\":false,\"status_code\":403}"},{"ID":2,"BatchID":1,"ClosureType":"self_service","Status":"broken","DetailsJSON":"{\"has_expected_model\":false,\"models\":null,\"ok\":false,\"reconcile_rerun\":true,\"status_code\":403}"}],"access_count":2,"batch":{"access_status":"broken","batch_status":"partially_succeeded","host_id":2,"id":1,"mode":"partial","pack_id":1,"provider_id":3},"items":[{"account_status":"passed","batch_id":1,"id":1,"key_fingerprint":"sha256:fbd0fe64bde9bf5e4fbc1b648540139ae34473dbdd07905a72b1e90970bddce5","probe_summary_json":"{\"account_id\":\"20\",\"models\":[{\"id\":\"gpt-5.5\",\"display_name\":\"GPT-5.5\",\"type\":\"model\"},{\"id\":\"gpt-5.4\",\"display_name\":\"GPT-5.4\",\"type\":\"model\"},{\"id\":\"gpt-5.4-mini\",\"display_name\":\"GPT-5.4 Mini\",\"type\":\"model\"},{\"id\":\"gpt-5.3-codex\",\"display_name\":\"GPT-5.3 Codex\",\"type\":\"model\"},{\"id\":\"gpt-5.3-codex-spark\",\"display_name\":\"GPT-5.3 Codex Spark\",\"type\":\"model\"},{\"id\":\"gpt-5.2\",\"display_name\":\"GPT-5.2\",\"type\":\"model\"},{\"id\":\"gpt-image-1\",\"display_name\":\"GPT Image 1\",\"type\":\"model\"},{\"id\":\"gpt-image-1.5\",\"display_name\":\"GPT Image 1.5\",\"type\":\"model\"},{\"id\":\"gpt-image-2\",\"display_name\":\"GPT Image 2\",\"type\":\"model\"}],\"probe_message\":\"\",\"probe_ok\":true,\"probe_status\":\"passed\",\"reconcile_rerun\":true,\"smoke_model_seen\":true}"}],"items_count":1,"managed_count":3,"managed_resources":[{"ID":1,"BatchID":1,"ResourceType":"group","HostResourceID":"18","ResourceName":"OpenAI 中转默认分组"},{"ID":2,"BatchID":1,"ResourceType":"channel","HostResourceID":"10","ResourceName":"OpenAI 中转默认渠道"},{"ID":3,"BatchID":1,"ResourceType":"account","HostResourceID":"20","ResourceName":"openai-zhongzhuan-01"}],"reconcile_count":1,"reconcile_runs":[{"ID":1,"ProviderID":3,"Status":"drifted","SummaryJSON":"{\"access_rechecked\":true,\"access_status\":\"broken\",\"extra_count\":11,\"host_version\":\"0.1.126\",\"missing_count\":0,\"probe_failures\":0}"}]}

View File

@@ -0,0 +1 @@
{"batch_id":1,"deleted_accounts":1,"deleted_channels":1,"deleted_groups":1,"deleted_plans":0}

View File

@@ -0,0 +1 @@
{"host_id":"local-sub2api","base_url":"http://127.0.0.1:18080","host_version":"0.1.126","status":"supported","capabilities":{"groups":true,"channels":true,"plans":true,"accounts":true,"account_test":true,"account_models":true,"subscriptions":true}}

View File

@@ -0,0 +1 @@
{"host_id":"local-sub2api","base_url":"http://127.0.0.1:18080","host_version":"0.1.126","status":"supported","capabilities":{"groups":true,"channels":true,"plans":true,"accounts":true,"account_test":true,"account_models":true,"subscriptions":true}}

View File

@@ -0,0 +1 @@
{"already_installed":false,"host_version":"0.1.126","pack_id":"openai-cn-pack","providers":[{"display_name":"DeepSeek OpenAI Compatible","provider_id":"deepseek"}],"version":"1.0.0"}

View File

@@ -0,0 +1 @@
{"accepted_keys_count":1,"decisions":{"channel":{"Action":"create","Suggested":"DeepSeek 默认渠道","ExistingID":"","Reason":""},"group":{"Action":"create","Suggested":"DeepSeek 默认分组","ExistingID":"","Reason":""},"plan":{"Action":"create","Suggested":"DeepSeek 默认套餐","ExistingID":"","Reason":""}},"names":{"Group":"DeepSeek 默认分组","Channel":"DeepSeek 默认渠道","Plan":"DeepSeek 默认套餐"}}

View File

@@ -0,0 +1 @@
{"host_id":"local-sub2api","base_url":"http://127.0.0.1:18080","host_version":"0.1.126","status":"supported","capabilities":{"groups":true,"channels":true,"plans":true,"accounts":true,"account_test":true,"account_models":true,"subscriptions":true}}

View File

@@ -0,0 +1 @@
{"host_id":"local-sub2api","base_url":"http://127.0.0.1:18080","host_version":"0.1.126","status":"supported","capabilities":{"groups":true,"channels":true,"plans":true,"accounts":true,"account_test":true,"account_models":true,"subscriptions":true}}

View File

@@ -0,0 +1 @@
{"already_installed":true,"host_version":"0.1.126","pack_id":"openai-cn-pack","providers":[{"display_name":"DeepSeek OpenAI Compatible","provider_id":"deepseek"}],"version":"1.0.0"}

View File

@@ -0,0 +1 @@
{"accepted_keys_count":1,"decisions":{"channel":{"Action":"create","Suggested":"DeepSeek 默认渠道","ExistingID":"","Reason":""},"group":{"Action":"reuse","Suggested":"DeepSeek 默认分组","ExistingID":"2","Reason":"matching managed resource already exists"},"plan":{"Action":"create","Suggested":"DeepSeek 默认套餐","ExistingID":"","Reason":""}},"names":{"Group":"DeepSeek 默认分组","Channel":"DeepSeek 默认渠道","Plan":"DeepSeek 默认套餐"}}

View File

@@ -0,0 +1 @@
{"host_id":"local-sub2api","base_url":"http://127.0.0.1:18080","host_version":"0.1.126","status":"supported","capabilities":{"groups":true,"channels":true,"plans":true,"accounts":true,"account_test":true,"account_models":true,"subscriptions":true}}

View File

@@ -0,0 +1 @@
{"host_id":"local-sub2api","base_url":"http://127.0.0.1:18080","host_version":"0.1.126","status":"supported","capabilities":{"groups":true,"channels":true,"plans":true,"accounts":true,"account_test":true,"account_models":true,"subscriptions":true}}

View File

@@ -0,0 +1 @@
{"already_installed":true,"host_version":"0.1.126","pack_id":"openai-cn-pack","providers":[{"display_name":"DeepSeek OpenAI Compatible","provider_id":"deepseek"}],"version":"1.0.0"}

View File

@@ -0,0 +1 @@
{"accepted_keys_count":1,"decisions":{"channel":{"Action":"create","Suggested":"DeepSeek 默认渠道","ExistingID":"","Reason":""},"group":{"Action":"reuse","Suggested":"DeepSeek 默认分组","ExistingID":"2","Reason":"matching managed resource already exists"},"plan":{"Action":"create","Suggested":"DeepSeek 默认套餐","ExistingID":"","Reason":""}},"names":{"Group":"DeepSeek 默认分组","Channel":"DeepSeek 默认渠道","Plan":"DeepSeek 默认套餐"}}

View File

@@ -0,0 +1 @@
{"accepted_keys_count":1,"access_status":"broken","accounts_count":0,"batch_id":4,"batch_status":"partially_succeeded","channel":{"id":"1","name":"DeepSeek 默认渠道"},"gateway":{"ok":false,"status_code":403,"models":null,"has_expected_model":false},"group":{"id":"2","name":"DeepSeek 默认分组"},"plan":null,"provider_status":"degraded"}

View File

@@ -0,0 +1 @@
{"provider_id":"deepseek","mode":"self_service","available":false,"message":"access status broken does not satisfy mode self_service"}

View File

@@ -0,0 +1 @@
{"batch_access_status":"broken","batch_id":4,"closures_count":1,"latest_access_status":"broken","latest_closure":{"closure_type":"self_service","details_json":"{\"has_expected_model\":false,\"models\":null,\"ok\":false,\"status_code\":403}","id":4,"status":"broken"},"pack_id":"openai-cn-pack","provider_id":"deepseek"}

View File

@@ -0,0 +1 @@
{"access_closures_count":1,"batch":{"access_status":"broken","batch_status":"partially_succeeded","id":4,"mode":"partial"},"host":{"base_url":"http://127.0.0.1:18080","host_id":"http://127.0.0.1:18080","host_version":"0.1.126"},"latest_access_status":"broken","latest_reconcile_status":"not_run","latest_reconcile_summary":{},"managed_resources_count":2,"pack":{"pack_id":"openai-cn-pack","version":"1.0.0"},"provider":{"display_name":"DeepSeek OpenAI Compatible","platform":"openai","provider_id":"deepseek"},"provider_status":"partially_succeeded","reconcile_runs_count":0}

View File

@@ -0,0 +1 @@
{"host_id":"local-sub2api","base_url":"http://127.0.0.1:18080","host_version":"0.1.126","status":"supported","capabilities":{"groups":true,"channels":true,"plans":true,"accounts":true,"account_test":true,"account_models":true,"subscriptions":true}}

View File

@@ -0,0 +1 @@
{"host_id":"local-sub2api","base_url":"http://127.0.0.1:18080","host_version":"0.1.126","status":"supported","capabilities":{"groups":true,"channels":true,"plans":true,"accounts":true,"account_test":true,"account_models":true,"subscriptions":true}}

View File

@@ -0,0 +1 @@
{"already_installed":true,"host_version":"0.1.126","pack_id":"openai-cn-pack","providers":[{"display_name":"DeepSeek OpenAI Compatible","provider_id":"deepseek"}],"version":"1.0.0"}

View File

@@ -0,0 +1 @@
{"accepted_keys_count":1,"decisions":{"channel":{"Action":"reuse","Suggested":"DeepSeek 默认渠道","ExistingID":"1","Reason":"matching managed resource already exists"},"group":{"Action":"reuse","Suggested":"DeepSeek 默认分组","ExistingID":"2","Reason":"matching managed resource already exists"},"plan":{"Action":"create","Suggested":"DeepSeek 默认套餐","ExistingID":"","Reason":""}},"names":{"Group":"DeepSeek 默认分组","Channel":"DeepSeek 默认渠道","Plan":"DeepSeek 默认套餐"}}

View File

@@ -0,0 +1 @@
{"host_id":"local-sub2api","base_url":"http://127.0.0.1:18080","host_version":"0.1.126","status":"supported","capabilities":{"groups":true,"channels":true,"plans":true,"accounts":true,"account_test":true,"account_models":true,"subscriptions":true}}

View File

@@ -0,0 +1 @@
{"host_id":"local-sub2api","base_url":"http://127.0.0.1:18080","host_version":"0.1.126","status":"supported","capabilities":{"groups":true,"channels":true,"plans":true,"accounts":true,"account_test":true,"account_models":true,"subscriptions":true}}

View File

@@ -0,0 +1 @@
{"already_installed":false,"host_version":"0.1.126","pack_id":"openai-cn-pack","providers":[{"display_name":"DeepSeek OpenAI Compatible","provider_id":"deepseek"}],"version":"1.0.0"}

View File

@@ -0,0 +1 @@
{"accepted_keys_count":1,"decisions":{"channel":{"Action":"reuse","Suggested":"DeepSeek 默认渠道","ExistingID":"1","Reason":"matching managed resource already exists"},"group":{"Action":"reuse","Suggested":"DeepSeek 默认分组","ExistingID":"2","Reason":"matching managed resource already exists"},"plan":{"Action":"create","Suggested":"DeepSeek 默认套餐","ExistingID":"","Reason":""}},"names":{"Group":"DeepSeek 默认分组","Channel":"DeepSeek 默认渠道","Plan":"DeepSeek 默认套餐"}}

View File

@@ -0,0 +1 @@
{"accepted_keys_count":1,"access_status":"broken","accounts_count":0,"batch_id":1,"batch_status":"partially_succeeded","channel":{"id":"1","name":"DeepSeek 默认渠道"},"gateway":{"ok":false,"status_code":403,"models":null,"has_expected_model":false},"group":{"id":"2","name":"DeepSeek 默认分组"},"plan":null,"provider_status":"degraded"}

View File

@@ -0,0 +1 @@
{"provider_id":"deepseek","mode":"self_service","available":false,"message":"access status broken does not satisfy mode self_service"}

View File

@@ -0,0 +1 @@
{"batch_access_status":"broken","batch_id":1,"closures_count":1,"latest_access_status":"broken","latest_closure":{"closure_type":"self_service","details_json":"{\"has_expected_model\":false,\"models\":null,\"ok\":false,\"status_code\":403}","id":1,"status":"broken"},"pack_id":"openai-cn-pack","provider_id":"deepseek"}

View File

@@ -0,0 +1 @@
{"access_closures_count":1,"batch":{"access_status":"broken","batch_status":"partially_succeeded","id":1,"mode":"partial"},"host":{"base_url":"http://127.0.0.1:18080","host_id":"http://127.0.0.1:18080","host_version":"0.1.126"},"latest_access_status":"broken","latest_reconcile_status":"not_run","latest_reconcile_summary":{},"managed_resources_count":2,"pack":{"pack_id":"openai-cn-pack","version":"1.0.0"},"provider":{"display_name":"DeepSeek OpenAI Compatible","platform":"openai","provider_id":"deepseek"},"provider_status":"partially_succeeded","reconcile_runs_count":0}

View File

@@ -0,0 +1 @@
{"batch_id":1,"extra_count":4,"missing_count":0,"provider_id":"deepseek","status":"drifted","summary":{"access_rechecked":true,"access_status":"broken","extra_count":4,"host_version":"0.1.126","missing_count":0,"probe_failures":0}}

View File

@@ -0,0 +1 @@
{"access_closures":[{"ID":1,"BatchID":1,"ClosureType":"self_service","Status":"broken","DetailsJSON":"{\"has_expected_model\":false,\"models\":null,\"ok\":false,\"status_code\":403}"},{"ID":2,"BatchID":1,"ClosureType":"self_service","Status":"broken","DetailsJSON":"{\"has_expected_model\":false,\"models\":null,\"ok\":false,\"reconcile_rerun\":true,\"status_code\":403}"}],"access_count":2,"batch":{"access_status":"broken","batch_status":"partially_succeeded","host_id":2,"id":1,"mode":"partial","pack_id":1,"provider_id":1},"items":[],"items_count":0,"managed_count":2,"managed_resources":[{"ID":1,"BatchID":1,"ResourceType":"group","HostResourceID":"2","ResourceName":"DeepSeek 默认分组"},{"ID":2,"BatchID":1,"ResourceType":"channel","HostResourceID":"1","ResourceName":"DeepSeek 默认渠道"}],"reconcile_count":1,"reconcile_runs":[{"ID":1,"ProviderID":1,"Status":"drifted","SummaryJSON":"{\"access_rechecked\":true,\"access_status\":\"broken\",\"extra_count\":4,\"host_version\":\"0.1.126\",\"missing_count\":0,\"probe_failures\":0}"}]}

View File

@@ -0,0 +1 @@
{"batch_id":1,"deleted_accounts":0,"deleted_channels":1,"deleted_groups":1,"deleted_plans":0}

View File

@@ -0,0 +1 @@
{"host_id":"local-sub2api","base_url":"http://127.0.0.1:18080","host_version":"0.1.126","status":"supported","capabilities":{"groups":true,"channels":true,"plans":true,"accounts":true,"account_test":true,"account_models":true,"subscriptions":true}}

View File

@@ -0,0 +1 @@
{"host_id":"local-sub2api","base_url":"http://127.0.0.1:18080","host_version":"0.1.126","status":"supported","capabilities":{"groups":true,"channels":true,"plans":true,"accounts":true,"account_test":true,"account_models":true,"subscriptions":true}}

View File

@@ -0,0 +1 @@
{"already_installed":false,"host_version":"0.1.126","pack_id":"openai-cn-pack","providers":[{"display_name":"DeepSeek OpenAI Compatible","provider_id":"deepseek"}],"version":"1.0.0"}

View File

@@ -0,0 +1 @@
{"accepted_keys_count":1,"decisions":{"channel":{"Action":"create","Suggested":"DeepSeek 默认渠道","ExistingID":"","Reason":""},"group":{"Action":"create","Suggested":"DeepSeek 默认分组","ExistingID":"","Reason":""},"plan":{"Action":"create","Suggested":"DeepSeek 默认套餐","ExistingID":"","Reason":""}},"names":{"Group":"DeepSeek 默认分组","Channel":"DeepSeek 默认渠道","Plan":"DeepSeek 默认套餐"}}

View File

@@ -0,0 +1 @@
{"accepted_keys_count":1,"access_status":"broken","accounts_count":1,"batch_id":1,"batch_status":"partially_succeeded","channel":{"id":"2","name":"DeepSeek 默认渠道"},"gateway":{"ok":false,"status_code":403,"models":null,"has_expected_model":false},"group":{"id":"3","name":"DeepSeek 默认分组"},"plan":null,"provider_status":"degraded"}

View File

@@ -0,0 +1 @@
{"provider_id":"deepseek","mode":"self_service","available":false,"message":"access status broken does not satisfy mode self_service"}

View File

@@ -0,0 +1 @@
{"batch_access_status":"broken","batch_id":1,"closures_count":1,"latest_access_status":"broken","latest_closure":{"closure_type":"self_service","details_json":"{\"has_expected_model\":false,\"models\":null,\"ok\":false,\"status_code\":403}","id":1,"status":"broken"},"pack_id":"openai-cn-pack","provider_id":"deepseek"}

View File

@@ -0,0 +1 @@
{"access_closures_count":1,"batch":{"access_status":"broken","batch_status":"partially_succeeded","id":1,"mode":"partial"},"host":{"base_url":"http://127.0.0.1:18080","host_id":"http://127.0.0.1:18080","host_version":"0.1.126"},"latest_access_status":"broken","latest_reconcile_status":"not_run","latest_reconcile_summary":{},"managed_resources_count":3,"pack":{"pack_id":"openai-cn-pack","version":"1.0.0"},"provider":{"display_name":"DeepSeek OpenAI Compatible","platform":"openai","provider_id":"deepseek"},"provider_status":"partially_succeeded","reconcile_runs_count":0}

View File

@@ -0,0 +1 @@
{"batch_id":1,"extra_count":5,"missing_count":0,"provider_id":"deepseek","status":"drifted","summary":{"access_rechecked":true,"access_status":"broken","extra_count":5,"host_version":"0.1.126","missing_count":0,"probe_failures":1}}

View File

@@ -0,0 +1 @@
{"access_closures":[{"ID":1,"BatchID":1,"ClosureType":"self_service","Status":"broken","DetailsJSON":"{\"has_expected_model\":false,\"models\":null,\"ok\":false,\"status_code\":403}"},{"ID":2,"BatchID":1,"ClosureType":"self_service","Status":"broken","DetailsJSON":"{\"has_expected_model\":false,\"models\":null,\"ok\":false,\"reconcile_rerun\":true,\"status_code\":403}"}],"access_count":2,"batch":{"access_status":"broken","batch_status":"partially_succeeded","host_id":2,"id":1,"mode":"partial","pack_id":1,"provider_id":1},"items":[{"account_status":"failed","batch_id":1,"id":1,"key_fingerprint":"sha256:555499e31601143d6c6e8dde8ee68266615cea97e4f3d1dbe9495bd070aaf8d6","probe_summary_json":"{\"account_id\":\"6\",\"models\":[{\"id\":\"gpt-5.5\",\"display_name\":\"GPT-5.5\",\"type\":\"model\"},{\"id\":\"gpt-5.4\",\"display_name\":\"GPT-5.4\",\"type\":\"model\"},{\"id\":\"gpt-5.4-mini\",\"display_name\":\"GPT-5.4 Mini\",\"type\":\"model\"},{\"id\":\"gpt-5.3-codex\",\"display_name\":\"GPT-5.3 Codex\",\"type\":\"model\"},{\"id\":\"gpt-5.3-codex-spark\",\"display_name\":\"GPT-5.3 Codex Spark\",\"type\":\"model\"},{\"id\":\"gpt-5.2\",\"display_name\":\"GPT-5.2\",\"type\":\"model\"},{\"id\":\"gpt-image-1\",\"display_name\":\"GPT Image 1\",\"type\":\"model\"},{\"id\":\"gpt-image-1.5\",\"display_name\":\"GPT Image 1.5\",\"type\":\"model\"},{\"id\":\"gpt-image-2\",\"display_name\":\"GPT Image 2\",\"type\":\"model\"}],\"probe_message\":\"\",\"probe_ok\":false,\"probe_status\":\"failed\",\"reconcile_rerun\":true,\"smoke_model_seen\":false}"}],"items_count":1,"managed_count":3,"managed_resources":[{"ID":1,"BatchID":1,"ResourceType":"group","HostResourceID":"3","ResourceName":"DeepSeek 默认分组"},{"ID":2,"BatchID":1,"ResourceType":"channel","HostResourceID":"2","ResourceName":"DeepSeek 默认渠道"},{"ID":3,"BatchID":1,"ResourceType":"account","HostResourceID":"6","ResourceName":"deepseek-01"}],"reconcile_count":1,"reconcile_runs":[{"ID":1,"ProviderID":1,"Status":"drifted","SummaryJSON":"{\"access_rechecked\":true,\"access_status\":\"broken\",\"extra_count\":5,\"host_version\":\"0.1.126\",\"missing_count\":0,\"probe_failures\":1}"}]}

View File

@@ -0,0 +1 @@
{"batch_id":1,"deleted_accounts":1,"deleted_channels":1,"deleted_groups":1,"deleted_plans":0}

View File

@@ -0,0 +1 @@
{"host_id":"local-sub2api","base_url":"http://127.0.0.1:18080","host_version":"0.1.126","status":"supported","capabilities":{"groups":true,"channels":true,"plans":true,"accounts":true,"account_test":true,"account_models":true,"subscriptions":true}}

View File

@@ -0,0 +1 @@
{"host_id":"local-sub2api","base_url":"http://127.0.0.1:18080","host_version":"0.1.126","status":"supported","capabilities":{"groups":true,"channels":true,"plans":true,"accounts":true,"account_test":true,"account_models":true,"subscriptions":true}}

View File

@@ -0,0 +1 @@
{"already_installed":false,"host_version":"0.1.126","pack_id":"openai-cn-pack","providers":[{"display_name":"DeepSeek OpenAI Compatible","provider_id":"deepseek"}],"version":"1.0.0"}

View File

@@ -0,0 +1 @@
{"accepted_keys_count":1,"decisions":{"channel":{"Action":"create","Suggested":"DeepSeek 默认渠道","ExistingID":"","Reason":""},"group":{"Action":"create","Suggested":"DeepSeek 默认分组","ExistingID":"","Reason":""},"plan":{"Action":"create","Suggested":"DeepSeek 默认套餐","ExistingID":"","Reason":""}},"names":{"Group":"DeepSeek 默认分组","Channel":"DeepSeek 默认渠道","Plan":"DeepSeek 默认套餐"}}

View File

@@ -0,0 +1 @@
{"accepted_keys_count":1,"access_status":"broken","accounts_count":1,"batch_id":1,"batch_status":"partially_succeeded","channel":{"id":"3","name":"DeepSeek 默认渠道"},"gateway":{"ok":false,"status_code":403,"models":null,"has_expected_model":false},"group":{"id":"4","name":"DeepSeek 默认分组"},"plan":null,"provider_status":"degraded"}

View File

@@ -0,0 +1 @@
{"provider_id":"deepseek","mode":"self_service","available":false,"message":"access status broken does not satisfy mode self_service"}

View File

@@ -0,0 +1 @@
{"batch_access_status":"broken","batch_id":1,"closures_count":1,"latest_access_status":"broken","latest_closure":{"closure_type":"self_service","details_json":"{\"has_expected_model\":false,\"models\":null,\"ok\":false,\"status_code\":403}","id":1,"status":"broken"},"pack_id":"openai-cn-pack","provider_id":"deepseek"}

Some files were not shown because too many files have changed in this diff Show More