91 lines · 5.5 KB · Go
RawDownload
package helps import (	"context"	"net/http" 	multiagentv2 "github.com/router-for-me/CLIProxyAPI/v7/internal/client/codex/optimize-multi-agent-v2"	"github.com/router-for-me/CLIProxyAPI/v7/internal/config"	"github.com/router-for-me/CLIProxyAPI/v7/internal/thinking"	openaichatclaude "github.com/router-for-me/CLIProxyAPI/v7/internal/translator/claude/openai/chat-completions"	responsesclaude "github.com/router-for-me/CLIProxyAPI/v7/internal/translator/claude/openai/responses"	codexclaude "github.com/router-for-me/CLIProxyAPI/v7/internal/translator/codex/claude"	geminiclaude "github.com/router-for-me/CLIProxyAPI/v7/internal/translator/gemini/claude"	interactionsclaude "github.com/router-for-me/CLIProxyAPI/v7/internal/translator/interactions/claude"	openaiclaude "github.com/router-for-me/CLIProxyAPI/v7/internal/translator/openai/claude"	cliproxyauth "github.com/router-for-me/CLIProxyAPI/v7/sdk/cliproxy/auth"	sdktranslator "github.com/router-for-me/CLIProxyAPI/v7/sdk/translator") // RewriteCodexSpawnAgentDescription optimizes spawn_agent definitions for// official Codex clients when multi-agent v2 optimization is enabled.func RewriteCodexSpawnAgentDescription(ctx context.Context, headers http.Header, payload []byte, cfg *config.Config) []byte {	return multiagentv2.RewriteCodexSpawnAgentDescription(ctx, headers, payload, cfg)} // RewriteCodexMultiAgentV2Input converts official Codex multi-agent input into// standard Responses API messages when multi-agent v2 optimization is enabled.func RewriteCodexMultiAgentV2Input(ctx context.Context, headers http.Header, payload []byte, cfg *config.Config) []byte {	return multiagentv2.RewriteCodexMultiAgentV2Input(ctx, headers, payload, cfg)} // TranslateRequestWithCodexMultiAgentV2 normalizes official Codex multi-agent// input before translating it to a non-Codex target protocol.func TranslateRequestWithCodexMultiAgentV2(ctx context.Context, headers http.Header, cfg *config.Config, from, to sdktranslator.Format, model string, payload []byte, stream bool) []byte {	return multiagentv2.TranslateRequestWithCodexMultiAgentV2(ctx, headers, cfg, from, to, model, payload, stream)} // TranslateRequestWithAPIKeyModelCompatibility preserves empty Claude thinking// blocks when a configured API-key model explicitly enables compatibility mode.func TranslateRequestWithAPIKeyModelCompatibility(ctx context.Context, headers http.Header, cfg *config.Config, from, to sdktranslator.Format, model string, payload []byte, stream, isCompat bool) []byte {	if !isCompat {		return TranslateRequestWithCodexMultiAgentV2(ctx, headers, cfg, from, to, model, payload, stream)	}	if from == sdktranslator.FormatOpenAIResponse && to != sdktranslator.FormatCodex && to != sdktranslator.FormatOpenAIResponse {		payload = multiagentv2.RewriteCodexMultiAgentV2Input(ctx, headers, payload, cfg)	} 	var translated []byte	switch {	case from == sdktranslator.FormatClaude && to == sdktranslator.FormatCodex:		translated = codexclaude.ConvertClaudeRequestToCodexWithCompat(model, payload, stream)	case from == sdktranslator.FormatClaude && to == sdktranslator.FormatGemini:		translated = geminiclaude.ConvertClaudeRequestToGeminiWithCompat(model, payload, stream)	case from == sdktranslator.FormatClaude && to == sdktranslator.FormatInteractions:		translated = interactionsclaude.ConvertClaudeRequestToInteractionsWithCompat(model, payload, stream)	case from == sdktranslator.FormatClaude && to == sdktranslator.FormatOpenAI:		translated = openaiclaude.ConvertClaudeRequestToOpenAIWithCompat(model, payload, stream)	case from == sdktranslator.FormatOpenAI && to == sdktranslator.FormatClaude:		translated = openaichatclaude.ConvertOpenAIRequestToClaudeWithCompat(model, payload, stream)	case from == sdktranslator.FormatOpenAIResponse && to == sdktranslator.FormatClaude:		translated = responsesclaude.ConvertOpenAIResponsesRequestToClaudeWithCompat(model, payload, stream)	default:		return TranslateRequestWithCodexMultiAgentV2(ctx, headers, cfg, from, to, model, payload, stream)	} 	summaryConfig := thinking.ExtractSummaryConfig(payload, from.String())	return thinking.ApplySummaryConfigForModel(translated, to.String(), model, summaryConfig)} // OptimizeCodexMultiAgentV2Request rewrites an eligible spawn_agent request and// reports whether the collaboration namespace was renamed for upstream use.func OptimizeCodexMultiAgentV2Request(ctx context.Context, headers http.Header, payload []byte, cfg *config.Config) ([]byte, bool) {	return multiagentv2.OptimizeCodexMultiAgentV2Request(ctx, headers, payload, cfg)} // OptimizeCodexMultiAgentV2RequestForAuth applies the standard Codex MultiAgentV2// request optimization and, when the selected codex-api-key model has is-compat// enabled, also converts agent_message items into portable message/user input.func OptimizeCodexMultiAgentV2RequestForAuth(ctx context.Context, headers http.Header, payload []byte, cfg *config.Config, auth *cliproxyauth.Auth, model string) ([]byte, bool) {	updated, optimized := multiagentv2.OptimizeCodexMultiAgentV2Request(ctx, headers, payload, cfg)	if cliproxyauth.CodexAPIKeyModelIsCompat(cfg, auth, model) {		updated = multiagentv2.RewriteCodexMultiAgentV2Input(ctx, headers, updated, cfg)	}	return updated, optimized} // RestoreCodexMultiAgentV2Response restores optimized collaboration namespace// values before an upstream response is translated and returned to the client.func RestoreCodexMultiAgentV2Response(payload []byte, optimized bool) []byte {	return multiagentv2.RestoreCodexMultiAgentV2Response(payload, optimized)}