import { createGoogleThinkingPayloadWrapper, sanitizeGoogleThinkingPayload, } from "../agents/pi-embedded-runner/google-stream-wrappers.js"; import { createMinimaxFastModeWrapper } from "../agents/pi-embedded-runner/minimax-stream-wrappers.js"; import { resolveMoonshotThinkingKeep } from "../agents/pi-embedded-runner/moonshot-thinking-stream-wrappers.js"; import { createCodexNativeWebSearchWrapper, createOpenAIAttributionHeadersWrapper, createOpenAIFastModeWrapper, createOpenAIReasoningCompatibilityWrapper, createOpenAIResponsesContextManagementWrapper, createOpenAIServiceTierWrapper, createOpenAIStringContentWrapper, createOpenAITextVerbosityWrapper, createOpenAIThinkingLevelWrapper, resolveOpenAIFastMode, resolveOpenAIServiceTier, resolveOpenAITextVerbosity, } from "../agents/pi-embedded-runner/openai-stream-wrappers.js"; import { createKilocodeWrapper, createOpenRouterSystemCacheWrapper, createOpenRouterWrapper, isProxyReasoningUnsupported, } from "../agents/pi-embedded-runner/proxy-stream-wrappers.js"; import type { ProviderPlugin } from "../plugins/types.js"; import type { ProviderWrapStreamFnContext } from "./plugin-entry.js"; import { createMoonshotThinkingWrapper, createToolStreamWrapper, resolveMoonshotThinkingType, } from "./provider-stream-shared.js"; export { applyAnthropicEphemeralCacheControlMarkers, applyAnthropicPayloadPolicyToParams, buildCopilotDynamicHeaders, composeProviderStreamWrappers, createAnthropicThinkingPrefillPayloadWrapper, createBedrockNoCacheWrapper, createMoonshotThinkingWrapper, createToolStreamWrapper, createZaiToolStreamWrapper, defaultToolStreamExtraParams, hasCopilotVisionInput, isAnthropicBedrockModel, isOpenAICompatibleThinkingEnabled, type ProviderStreamWrapperFactory, resolveAnthropicPayloadPolicy, resolveMoonshotThinkingType, streamWithPayloadPatch, stripTrailingAnthropicAssistantPrefillWhenThinking, } from "./provider-stream-shared.js"; export type ProviderStreamFamily = | "google-thinking" | "kilocode-thinking" | "moonshot-thinking" | "minimax-fast-mode" | "openai-responses-defaults" | "openrouter-thinking" | "tool-stream-default-on"; type ProviderStreamFamilyHooks = Pick; export function buildProviderStreamFamilyHooks( family: ProviderStreamFamily, ): ProviderStreamFamilyHooks { switch (family) { case "google-thinking": return { wrapStreamFn: (ctx: ProviderWrapStreamFnContext) => createGoogleThinkingPayloadWrapper(ctx.streamFn, ctx.thinkingLevel), }; case "moonshot-thinking": return { wrapStreamFn: (ctx: ProviderWrapStreamFnContext) => { const thinkingType = resolveMoonshotThinkingType({ configuredThinking: ctx.extraParams?.thinking, thinkingLevel: ctx.thinkingLevel, }); const thinkingKeep = resolveMoonshotThinkingKeep({ configuredThinking: ctx.extraParams?.thinking, }); return createMoonshotThinkingWrapper(ctx.streamFn, thinkingType, thinkingKeep); }, }; case "kilocode-thinking": return { wrapStreamFn: (ctx: ProviderWrapStreamFnContext) => { const thinkingLevel = ctx.modelId === "kilo/auto" || isProxyReasoningUnsupported(ctx.modelId) ? undefined : ctx.thinkingLevel; return createKilocodeWrapper(ctx.streamFn, thinkingLevel); }, }; case "minimax-fast-mode": return { wrapStreamFn: (ctx: ProviderWrapStreamFnContext) => createMinimaxFastModeWrapper(ctx.streamFn, ctx.extraParams?.fastMode === true), }; case "openai-responses-defaults": return { wrapStreamFn: (ctx: ProviderWrapStreamFnContext) => { let nextStreamFn = createOpenAIAttributionHeadersWrapper(ctx.streamFn); if (resolveOpenAIFastMode(ctx.extraParams)) { nextStreamFn = createOpenAIFastModeWrapper(nextStreamFn); } const serviceTier = resolveOpenAIServiceTier(ctx.extraParams); if (serviceTier) { nextStreamFn = createOpenAIServiceTierWrapper(nextStreamFn, serviceTier); } const textVerbosity = resolveOpenAITextVerbosity(ctx.extraParams); if (textVerbosity) { nextStreamFn = createOpenAITextVerbosityWrapper(nextStreamFn, textVerbosity); } nextStreamFn = createCodexNativeWebSearchWrapper(nextStreamFn, { config: ctx.config, agentDir: ctx.agentDir, }); nextStreamFn = createOpenAIStringContentWrapper(nextStreamFn); return createOpenAIResponsesContextManagementWrapper( createOpenAIReasoningCompatibilityWrapper( createOpenAIThinkingLevelWrapper(nextStreamFn, ctx.thinkingLevel), ), ctx.extraParams, ); }, }; case "openrouter-thinking": return { wrapStreamFn: (ctx: ProviderWrapStreamFnContext) => { const thinkingLevel = ctx.modelId === "auto" || isProxyReasoningUnsupported(ctx.modelId) ? undefined : ctx.thinkingLevel; return createOpenRouterWrapper(ctx.streamFn, thinkingLevel, ctx.extraParams); }, }; case "tool-stream-default-on": return { wrapStreamFn: (ctx: ProviderWrapStreamFnContext) => createToolStreamWrapper(ctx.streamFn, ctx.extraParams?.tool_stream !== false), }; } throw new Error("Unsupported provider stream family"); } export const GOOGLE_THINKING_STREAM_HOOKS = buildProviderStreamFamilyHooks("google-thinking"); export const KILOCODE_THINKING_STREAM_HOOKS = buildProviderStreamFamilyHooks("kilocode-thinking"); export const MOONSHOT_THINKING_STREAM_HOOKS = buildProviderStreamFamilyHooks("moonshot-thinking"); export const MINIMAX_FAST_MODE_STREAM_HOOKS = buildProviderStreamFamilyHooks("minimax-fast-mode"); export const OPENAI_RESPONSES_STREAM_HOOKS = buildProviderStreamFamilyHooks( "openai-responses-defaults", ); export const OPENROUTER_THINKING_STREAM_HOOKS = buildProviderStreamFamilyHooks("openrouter-thinking"); export const TOOL_STREAM_DEFAULT_ON_HOOKS = buildProviderStreamFamilyHooks("tool-stream-default-on"); // Public stream-wrapper helpers for provider plugins. export { createAnthropicToolPayloadCompatibilityWrapper, createOpenAIAnthropicToolPayloadCompatibilityWrapper, } from "../agents/pi-embedded-runner/anthropic-family-tool-payload-compat.js"; export { createGoogleThinkingPayloadWrapper, sanitizeGoogleThinkingPayload, } from "../agents/pi-embedded-runner/google-stream-wrappers.js"; export { createKilocodeWrapper, createOpenRouterSystemCacheWrapper, createOpenRouterWrapper, isProxyReasoningUnsupported, } from "../agents/pi-embedded-runner/proxy-stream-wrappers.js"; export { createMinimaxFastModeWrapper } from "../agents/pi-embedded-runner/minimax-stream-wrappers.js"; export { createOpenAIAttributionHeadersWrapper, createCodexNativeWebSearchWrapper, createOpenAIDefaultTransportWrapper, createOpenAIFastModeWrapper, createOpenAIReasoningCompatibilityWrapper, createOpenAIResponsesContextManagementWrapper, createOpenAIServiceTierWrapper, createOpenAITextVerbosityWrapper, resolveOpenAIFastMode, resolveOpenAIServiceTier, resolveOpenAITextVerbosity, } from "../agents/pi-embedded-runner/openai-stream-wrappers.js"; export { getOpenRouterModelCapabilities, loadOpenRouterModelCapabilities, } from "../agents/pi-embedded-runner/openrouter-model-capabilities.js";