diff --git a/cc-haha/src/server/services/providerService.ts b/cc-haha/src/server/services/providerService.ts index 125b86fb..5f582f3e 100644 --- a/cc-haha/src/server/services/providerService.ts +++ b/cc-haha/src/server/services/providerService.ts @@ -431,7 +431,10 @@ export class ProviderService { if (input.apiKey) { headers['Authorization'] = `Bearer ${input.apiKey}` headers['x-api-key'] = input.apiKey - headers['anthropic-version'] = '2023-06-01' + // Note: anthropic-version is intentionally NOT set here. + // Model discovery always uses the OpenAI-compatible format (GET /v1/models → {data:[...]}). + // Sending anthropic-version causes relay servers (NewAPI / heicode Manager) to branch + // into the Anthropic-specific response handler, which panics on an empty model list. } const candidates = [`${base}/v1/models`, `${base}/models`] diff --git a/heicode/controller/heicode_oauth.go b/heicode/controller/heicode_oauth.go index c6e1bd18..b3a30d32 100644 --- a/heicode/controller/heicode_oauth.go +++ b/heicode/controller/heicode_oauth.go @@ -152,7 +152,7 @@ func renderHeicodeLoginRequired(c *gin.Context, state, redirectURI, providerID s url.QueryEscape(redirectURI), url.QueryEscape(providerID), ) - loginURL := "/login" + loginURL := "/sign-in?redirect=" + url.QueryEscape(authorizeURL) body := fmt.Sprintf(` diff --git a/heicode/controller/model.go b/heicode/controller/model.go index 0145efd1..1cd70e68 100644 --- a/heicode/controller/model.go +++ b/heicode/controller/model.go @@ -211,11 +211,16 @@ func ListModels(c *gin.Context, modelType int) { Type: "model", } } + var firstID, lastID interface{} + if len(useranthropicModels) > 0 { + firstID = useranthropicModels[0].ID + lastID = useranthropicModels[len(useranthropicModels)-1].ID + } c.JSON(200, gin.H{ "data": useranthropicModels, - "first_id": useranthropicModels[0].ID, + "first_id": firstID, "has_more": false, - "last_id": useranthropicModels[len(useranthropicModels)-1].ID, + "last_id": lastID, }) case constant.ChannelTypeGemini: userGeminiModels := make([]dto.GeminiModel, len(userOpenAiModels)) diff --git a/heicode/deploy/nginx/heicode-gateway.conf b/heicode/deploy/nginx/heicode-gateway.conf index 0b071498..780c0141 100644 --- a/heicode/deploy/nginx/heicode-gateway.conf +++ b/heicode/deploy/nginx/heicode-gateway.conf @@ -100,6 +100,12 @@ server { proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; + # Compatibility for older HeiCode desktop builds that probe /models + # instead of the OpenAI-compatible /v1/models endpoint. + location = /models { + proxy_pass http://newapi_relay/v1/models; + } + # Only relay-compatible API paths are sent to NewAPI. NewAPI admin/backend # pages are intentionally not proxied through the public Manager gateway. location = /v1/models {