@standardagents/google 0.0.1-dev.ffffff
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -0
- package/dist/index.d.ts +69 -0
- package/dist/index.js +1140 -0
- package/dist/index.js.map +1 -0
- package/package.json +52 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/GoogleProvider.ts","../src/icons.ts","../src/pricing.ts","../src/providerOptions.ts","../src/index.ts"],"sourcesContent":["import {\n GoogleGenAI,\n FunctionCallingConfigMode,\n createPartFromBase64,\n createPartFromFunctionResponse,\n RawReferenceImage,\n} from '@google/genai/web';\nimport type { Model as GoogleModel, Part } from '@google/genai/web';\nimport type {\n InspectedRequest,\n LLMProviderInterface as Provider,\n ModelCapabilities,\n ProviderFactoryConfig,\n ProviderFinishReason,\n ProviderGeneratedImage,\n ProviderMessage,\n ProviderModelInfo,\n ProviderRequest,\n ProviderResponse,\n ProviderStreamChunk,\n ProviderTool,\n ProviderToolCallPart,\n ProviderUsage,\n} from '@standardagents/spec';\nimport { ProviderError } from '@standardagents/spec';\nimport { getGoogleIconDataUri } from './icons';\nimport { calculateGoogleUsageCost } from './pricing';\n\ninterface GoogleStaticModelEntry {\n id: string;\n name: string;\n description: string;\n capabilities: ModelCapabilities;\n}\n\nconst STATIC_MODELS: GoogleStaticModelEntry[] = [\n {\n id: 'gemma-4-31b-it',\n name: 'Gemma 4 31B IT',\n description: 'Hosted Gemma 4 instruction-tuned model with image input and optional thinking.',\n capabilities: {\n supportsImages: true,\n supportsToolCalls: false,\n supportsStreaming: true,\n supportsJsonMode: false,\n maxContextTokens: 262144,\n reasoningLevels: { 0: null, 100: 'high' },\n },\n },\n {\n id: 'gemini-2.5-pro',\n name: 'Gemini 2.5 Pro',\n description: 'State-of-the-art Gemini model for coding and reasoning.',\n capabilities: {\n supportsImages: true,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 1048576,\n reasoningLevels: { 0: null, 50: 'medium', 100: 'high' },\n },\n },\n {\n id: 'gemini-2.5-flash',\n name: 'Gemini 2.5 Flash',\n description: 'Fast multimodal Gemini model for general-purpose tasks.',\n capabilities: {\n supportsImages: true,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 1048576,\n },\n },\n {\n id: 'gemini-2.5-flash-lite',\n name: 'Gemini 2.5 Flash-Lite',\n description: 'Low-cost Gemini model for high-volume workloads.',\n capabilities: {\n supportsImages: true,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: true,\n maxContextTokens: 1048576,\n },\n },\n {\n id: 'gemini-2.5-flash-image',\n name: 'Gemini 2.5 Flash Image',\n description: 'Gemini image generation model with native image output.',\n capabilities: {\n supportsImages: true,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: false,\n maxContextTokens: 1048576,\n },\n },\n {\n id: 'gemini-3-pro-image-preview',\n name: 'Gemini 3 Pro Image Preview',\n description: 'High-end Gemini image-preview model with image generation output.',\n capabilities: {\n supportsImages: true,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: false,\n maxContextTokens: 1048576,\n },\n },\n {\n id: 'gemini-3.1-flash-image-preview',\n name: 'Gemini 3.1 Flash Image Preview',\n description: 'Fast Gemini image-preview model with image output.',\n capabilities: {\n supportsImages: true,\n supportsToolCalls: true,\n supportsStreaming: true,\n supportsJsonMode: false,\n maxContextTokens: 1048576,\n },\n },\n {\n id: 'imagen-4.0-generate-001',\n name: 'Imagen 4 Generate',\n description: 'Google Imagen model for image generation.',\n capabilities: {\n supportsImages: true,\n supportsToolCalls: false,\n supportsStreaming: false,\n supportsJsonMode: false,\n maxContextTokens: 0,\n },\n },\n {\n id: 'imagen-3.0-capability-001',\n name: 'Imagen 3 Capability',\n description: 'Google Imagen model for image editing.',\n capabilities: {\n supportsImages: true,\n supportsToolCalls: false,\n supportsStreaming: false,\n supportsJsonMode: false,\n maxContextTokens: 0,\n },\n },\n];\n\nfunction normalizeModelId(modelId: string): string {\n return modelId\n .trim()\n .replace(/^google\\//, '')\n .replace(/^models\\//, '')\n .replace(/^publishers\\/google\\/models\\//, '');\n}\n\nfunction isImagenModel(modelId: string): boolean {\n return normalizeModelId(modelId).startsWith('imagen-');\n}\n\nfunction supportsGoogleVision(model: GoogleModel, normalizedId: string): boolean {\n const description = (model.description || '').toLowerCase();\n\n if (isImagenModel(normalizedId)) {\n return true;\n }\n\n if (normalizedId.startsWith('gemini-')) {\n return true;\n }\n\n if (normalizedId.startsWith('gemma-3') || normalizedId.startsWith('gemma-4')) {\n return true;\n }\n\n return ['multimodal', 'image', 'vision', 'video', 'audio'].some((term) => description.includes(term));\n}\n\nfunction supportsGoogleToolCalls(normalizedId: string): boolean {\n return normalizedId.startsWith('gemini-') || normalizedId.startsWith('functiongemma');\n}\n\nfunction inferGoogleReasoningLevels(model: GoogleModel, normalizedId: string): Record<number, string | null> | undefined {\n if (!model.thinking) return undefined;\n\n if (normalizedId.startsWith('gemma-')) {\n return { 0: null, 100: 'high' };\n }\n\n return { 0: null, 50: 'medium', 100: 'high' };\n}\n\nfunction mapDynamicCapabilities(model: GoogleModel): ModelCapabilities {\n const normalizedId = normalizeModelId(model.name || model.displayName || '');\n const supportedActions = new Set(model.supportedActions || []);\n const supportsContentGeneration = supportedActions.has('generateContent') || normalizedId.startsWith('gemini-') || normalizedId.startsWith('gemma-');\n const supportsTools = supportsGoogleToolCalls(normalizedId);\n\n return {\n supportsImages: supportsGoogleVision(model, normalizedId),\n supportsToolCalls: supportsTools,\n supportsStreaming: supportsContentGeneration && !isImagenModel(normalizedId),\n supportsJsonMode: supportsTools,\n maxContextTokens: model.inputTokenLimit,\n maxOutputTokens: model.outputTokenLimit,\n reasoningLevels: inferGoogleReasoningLevels(model, normalizedId),\n };\n}\n\nfunction toProviderModelInfo(model: GoogleModel): ProviderModelInfo {\n const id = normalizeModelId(model.name || model.displayName || '');\n return {\n id,\n name: model.displayName || id,\n description: model.description,\n contextLength: model.inputTokenLimit,\n iconId: getGoogleIconDataUri(),\n slug: id,\n };\n}\n\nfunction mapFinishReason(value: string | undefined): ProviderFinishReason {\n switch (value) {\n case 'MAX_TOKENS':\n return 'length';\n case 'SAFETY':\n case 'IMAGE_SAFETY':\n case 'PROHIBITED_CONTENT':\n case 'IMAGE_PROHIBITED_CONTENT':\n return 'content_filter';\n case 'MALFORMED_FUNCTION_CALL':\n case 'UNEXPECTED_TOOL_CALL':\n return 'error';\n case 'STOP':\n default:\n return 'stop';\n }\n}\n\nfunction toolChoiceToGoogle(choice: ProviderRequest['toolChoice']): { mode: FunctionCallingConfigMode; allowedFunctionNames?: string[] } | undefined {\n if (choice === 'auto') {\n return { mode: FunctionCallingConfigMode.AUTO };\n }\n if (choice === 'none') {\n return { mode: FunctionCallingConfigMode.NONE };\n }\n if (choice === 'required') {\n return { mode: FunctionCallingConfigMode.ANY };\n }\n if (choice && typeof choice === 'object' && 'name' in choice) {\n return {\n mode: FunctionCallingConfigMode.ANY,\n allowedFunctionNames: [choice.name],\n };\n }\n return undefined;\n}\n\nfunction transformTools(tools: ProviderTool[] | undefined): any[] | undefined {\n if (!tools?.length) return undefined;\n\n return [{\n functionDeclarations: tools.map((tool) => ({\n name: tool.function.name,\n description: tool.function.description,\n parameters: tool.function.parameters || {\n type: 'object',\n properties: {},\n required: [],\n },\n })),\n }];\n}\n\nfunction normalizeInlineBytes(\n data: string | undefined,\n mediaType: string | undefined,\n): { data: string; mediaType?: string } {\n const value = data || '';\n const match = value.match(/^data:([^;]+);base64,(.*)$/);\n if (!match) {\n return { data: value, mediaType };\n }\n\n return {\n data: match[2],\n mediaType: match[1] || mediaType,\n };\n}\n\nfunction buildUserParts(message: Extract<ProviderMessage, { role: 'user' }>): Part[] {\n if (typeof message.content === 'string') {\n return [{ text: message.content }];\n }\n\n return message.content.map((part: any) => {\n if (part.type === 'text') {\n return { text: part.text };\n }\n\n if (part.type === 'image') {\n const normalized = normalizeInlineBytes(part.data, part.mediaType || 'image/png');\n return createPartFromBase64(normalized.data, normalized.mediaType || 'image/png');\n }\n\n if (part.type === 'image_url') {\n const url = part.image_url?.url || '';\n if (url.startsWith('data:')) {\n const match = url.match(/^data:([^;]+);base64,(.*)$/);\n if (match) {\n return createPartFromBase64(match[2], match[1]);\n }\n }\n return {\n fileData: {\n mimeType: 'image/*',\n fileUri: url,\n },\n };\n }\n\n return {\n inlineData: {\n mimeType: part.mediaType,\n data: part.data,\n },\n };\n });\n}\n\nfunction buildAssistantParts(message: Extract<ProviderMessage, { role: 'assistant' }>): Part[] {\n const parts: Part[] = [];\n\n if (message.content) {\n parts.push({ text: message.content });\n }\n\n if (message.reasoning) {\n parts.push({ text: message.reasoning, thought: true });\n }\n\n if (message.toolCalls?.length) {\n for (const toolCall of message.toolCalls) {\n parts.push({\n functionCall: {\n id: toolCall.id,\n name: toolCall.name,\n args: toolCall.arguments,\n },\n });\n }\n }\n\n return parts;\n}\n\nfunction buildToolParts(message: Extract<ProviderMessage, { role: 'tool' }>): Part[] {\n const response: Record<string, unknown> = {};\n\n if (typeof message.content === 'string') {\n response.output = message.content;\n } else if ('type' in message.content) {\n if (message.content.type === 'text') response.output = message.content.text;\n else if (message.content.type === 'error') response.error = message.content.error;\n else response.output = message.content;\n } else {\n response.output = message.content;\n }\n\n const imageParts = message.attachments\n ?.filter((attachment: any) => attachment.type === 'image' && attachment.data)\n .map((attachment: any, index: number) => {\n const normalized = normalizeInlineBytes(attachment.data, attachment.mediaType);\n return {\n inlineData: {\n mimeType: normalized.mediaType,\n data: normalized.data,\n },\n partMetadata: { attachmentIndex: index },\n };\n }) || [];\n\n return [\n createPartFromFunctionResponse(\n message.toolCallId,\n message.toolName,\n response,\n imageParts.length ? imageParts.map((part: any) => ({ inlineData: part.inlineData })) : undefined\n ),\n ];\n}\n\nfunction buildContents(messages: ProviderMessage[]): { systemInstruction?: any; contents: any[] } {\n const contents: any[] = [];\n const systemMessages = messages.filter((message) => message.role === 'system').map((message) => message.content);\n const systemInstruction = systemMessages.length\n ? { role: 'user', parts: [{ text: systemMessages.join('\\n\\n') }] }\n : undefined;\n\n for (const message of messages) {\n if (message.role === 'system') continue;\n if (message.role === 'user') {\n contents.push({ role: 'user', parts: buildUserParts(message) });\n continue;\n }\n if (message.role === 'assistant') {\n contents.push({ role: 'model', parts: buildAssistantParts(message) });\n continue;\n }\n contents.push({ role: 'user', parts: buildToolParts(message) });\n }\n\n return { systemInstruction, contents };\n}\n\nfunction extractReasoningFromParts(parts: Part[] | undefined): string | null {\n if (!parts?.length) return null;\n const text = parts\n .filter((part: any) => part.thought && typeof part.text === 'string')\n .map((part: any) => part.text)\n .join('');\n return text || null;\n}\n\nfunction extractImagesFromParts(parts: Part[] | undefined): ProviderGeneratedImage[] | undefined {\n if (!parts?.length) return undefined;\n const images = parts\n .filter((part: any) => part.inlineData?.mimeType?.startsWith('image/'))\n .map((part: any, index: number) => ({\n id: `image_${index}`,\n data: part.inlineData?.data || '',\n mediaType: part.inlineData?.mimeType || 'image/png',\n }));\n return images.length ? images : undefined;\n}\n\nfunction extractToolCalls(parts: Part[] | undefined): ProviderToolCallPart[] | undefined {\n if (!parts?.length) return undefined;\n const toolCalls = parts\n .filter((part: any) => part.functionCall?.name)\n .map((part: any) => ({\n id: part.functionCall?.id || crypto.randomUUID(),\n name: part.functionCall?.name || 'tool',\n arguments: (part.functionCall?.args || {}) as Record<string, unknown>,\n }));\n\n return toolCalls.length ? toolCalls : undefined;\n}\n\nfunction transformUsage(modelId: string, usage: any, imageCount = 0): ProviderUsage {\n const mapped: ProviderUsage = {\n promptTokens: usage?.promptTokenCount || 0,\n completionTokens: usage?.candidatesTokenCount || 0,\n totalTokens: usage?.totalTokenCount || 0,\n reasoningTokens: usage?.thoughtsTokenCount,\n cachedTokens: usage?.cachedContentTokenCount,\n provider: 'google',\n };\n\n mapped.cost = calculateGoogleUsageCost(\n modelId,\n {\n ...mapped,\n promptTokenDetails: usage?.promptTokensDetails,\n completionTokenDetails: usage?.candidatesTokensDetails || usage?.responseTokensDetails,\n cachedTokenDetails: usage?.cacheTokensDetails,\n },\n imageCount\n );\n return mapped;\n}\n\nexport class GoogleProvider implements Provider {\n readonly name = 'google';\n readonly specificationVersion = '1' as const;\n\n private readonly config: ProviderFactoryConfig;\n private client: GoogleGenAI | null = null;\n\n private static readonly cacheTtl = 5 * 60 * 1000;\n private static modelsCache: ProviderModelInfo[] | null = null;\n private static modelsCacheTime = 0;\n private static modelMetadataCache = new Map<string, GoogleModel>();\n\n constructor(config: ProviderFactoryConfig) {\n this.config = config;\n }\n\n private getClient(): GoogleGenAI {\n if (!this.client) {\n this.client = new GoogleGenAI({\n apiKey: this.config.apiKey,\n });\n }\n return this.client;\n }\n\n supportsModel(modelId: string): boolean {\n return modelId.startsWith('gemini-')\n || modelId.startsWith('gemma-')\n || modelId.startsWith('imagen-')\n || modelId.startsWith('models/');\n }\n\n getIcon(_modelId?: string): string {\n return getGoogleIconDataUri();\n }\n\n private getHttpOptions(): Record<string, unknown> | undefined {\n if (!this.config.baseUrl && !this.config.timeout) return undefined;\n\n return {\n ...(this.config.baseUrl ? { baseUrl: this.config.baseUrl } : {}),\n ...(this.config.timeout ? { timeout: this.config.timeout } : {}),\n };\n }\n\n async getModels(filter?: string): Promise<ProviderModelInfo[]> {\n const now = Date.now();\n if (GoogleProvider.modelsCache && now - GoogleProvider.modelsCacheTime < GoogleProvider.cacheTtl) {\n return this.filterModels(GoogleProvider.modelsCache, filter);\n }\n\n try {\n const models: ProviderModelInfo[] = [];\n const client = this.getClient();\n const pager = await client.models.list({\n config: {\n httpOptions: this.getHttpOptions() as any,\n },\n } as any);\n\n for await (const model of pager as AsyncIterable<GoogleModel>) {\n const id = normalizeModelId(model.name || '');\n if (!id) continue;\n const supportsGeneration = model.supportedActions?.some((action: string) =>\n ['generateContent', 'generateImages', 'editImage', 'predict'].includes(action)\n );\n if (!supportsGeneration) continue;\n GoogleProvider.modelMetadataCache.set(id, model);\n models.push(toProviderModelInfo(model));\n }\n\n for (const staticModel of STATIC_MODELS) {\n if (!models.some((model) => model.id === staticModel.id)) {\n models.push({\n id: staticModel.id,\n name: staticModel.name,\n description: staticModel.description,\n iconId: this.getIcon(staticModel.id),\n slug: staticModel.id,\n });\n }\n }\n\n GoogleProvider.modelsCache = models.sort((a, b) => a.name.localeCompare(b.name));\n GoogleProvider.modelsCacheTime = now;\n return this.filterModels(GoogleProvider.modelsCache, filter);\n } catch (error) {\n console.error('Failed to list Google models:', error);\n return this.filterModels(\n STATIC_MODELS.map((model) => ({\n id: model.id,\n name: model.name,\n description: model.description,\n iconId: this.getIcon(model.id),\n slug: model.id,\n })),\n filter\n );\n }\n }\n\n private filterModels(models: ProviderModelInfo[], filter?: string): ProviderModelInfo[] {\n if (!filter) return models;\n const query = filter.toLowerCase();\n return models.filter((model) =>\n model.id.toLowerCase().includes(query) ||\n model.name.toLowerCase().includes(query) ||\n (model.description?.toLowerCase().includes(query) ?? false)\n );\n }\n\n private async getModelMetadata(modelId: string): Promise<GoogleModel | null> {\n const normalized = normalizeModelId(modelId);\n const cached = GoogleProvider.modelMetadataCache.get(normalized);\n if (cached) {\n return cached;\n }\n\n try {\n const model = await this.getClient().models.get({\n model: normalized,\n config: {\n httpOptions: this.getHttpOptions() as any,\n },\n } as any);\n GoogleProvider.modelMetadataCache.set(normalized, model);\n return model;\n } catch {\n return null;\n }\n }\n\n async getModelCapabilities(modelId: string): Promise<ModelCapabilities | null> {\n const normalized = normalizeModelId(modelId);\n const staticModel = STATIC_MODELS.find((model) => model.id === normalized);\n if (staticModel) {\n return { ...staticModel.capabilities };\n }\n\n try {\n const metadata = await this.getModelMetadata(normalized);\n if (metadata) {\n return mapDynamicCapabilities(metadata);\n }\n\n const models = await this.getModels();\n const found = models.find((model) => model.id === normalized);\n if (!found) return null;\n\n return {\n supportsImages: normalized.startsWith('gemini-') || normalized.startsWith('gemma-') || normalized.includes('image'),\n supportsToolCalls: supportsGoogleToolCalls(normalized),\n supportsStreaming: !isImagenModel(normalized),\n supportsJsonMode: supportsGoogleToolCalls(normalized),\n maxContextTokens: found.contextLength,\n };\n } catch {\n return null;\n }\n }\n\n private buildGenerateContentParams(request: ProviderRequest): Record<string, unknown> {\n const providerOptions = (request.providerOptions || {}) as Record<string, unknown>;\n const { systemInstruction, contents } = buildContents(request.messages);\n\n const config: Record<string, unknown> = {\n ...(this.getHttpOptions() ? { httpOptions: this.getHttpOptions() } : {}),\n ...(systemInstruction ? { systemInstruction } : {}),\n ...(typeof request.temperature === 'number' ? { temperature: request.temperature } : {}),\n ...(typeof request.topP === 'number' ? { topP: request.topP } : {}),\n ...(typeof request.topK === 'number' ? { topK: request.topK } : {}),\n ...(typeof request.maxOutputTokens === 'number' ? { maxOutputTokens: request.maxOutputTokens } : {}),\n ...(request.stopSequences?.length ? { stopSequences: request.stopSequences } : {}),\n ...(request.responseFormat?.type === 'json'\n ? {\n responseMimeType: 'application/json',\n ...(request.responseFormat.schema ? { responseJsonSchema: request.responseFormat.schema } : {}),\n }\n : {}),\n ...(request.tools?.length ? { tools: transformTools(request.tools) } : {}),\n ...(request.tools?.length && toolChoiceToGoogle(request.toolChoice)\n ? { toolConfig: { functionCallingConfig: toolChoiceToGoogle(request.toolChoice) } }\n : {}),\n ...(typeof providerOptions.candidateCount === 'number' ? { candidateCount: providerOptions.candidateCount } : {}),\n ...(Array.isArray(providerOptions.responseModalities) ? { responseModalities: providerOptions.responseModalities } : {}),\n ...(typeof providerOptions.mediaResolution === 'string' ? { mediaResolution: providerOptions.mediaResolution } : {}),\n ...(typeof providerOptions.cachedContent === 'string' ? { cachedContent: providerOptions.cachedContent } : {}),\n ...(typeof providerOptions.enableEnhancedCivicAnswers === 'boolean'\n ? { enableEnhancedCivicAnswers: providerOptions.enableEnhancedCivicAnswers }\n : {}),\n ...(providerOptions.labels ? { labels: providerOptions.labels } : {}),\n ...(providerOptions.safetySettings ? { safetySettings: providerOptions.safetySettings } : {}),\n ...(providerOptions.thinkingConfig ? { thinkingConfig: providerOptions.thinkingConfig } : {}),\n ...(providerOptions.imageConfig ? { imageConfig: providerOptions.imageConfig } : {}),\n ...(typeof request.reasoning?.maxTokens === 'number'\n ? { thinkingConfig: { ...(providerOptions.thinkingConfig as Record<string, unknown> || {}), thinkingBudget: request.reasoning.maxTokens } }\n : {}),\n };\n\n return {\n model: normalizeModelId(request.model),\n contents,\n config,\n };\n }\n\n private extractImagenRequest(request: ProviderRequest): {\n prompt: string;\n referenceImages?: RawReferenceImage[];\n body: Record<string, unknown>;\n } {\n const providerOptions = (request.providerOptions || {}) as Record<string, unknown>;\n const latestUser = [...request.messages].reverse().find((message) => message.role === 'user');\n const prompt = latestUser ? (typeof latestUser.content === 'string'\n ? latestUser.content\n : latestUser.content.filter((part: any) => part.type === 'text').map((part: any) => part.text).join('\\n')) : '';\n\n const referenceImages = latestUser && typeof latestUser.content !== 'string'\n ? latestUser.content\n .filter((part: any) => part.type === 'image')\n .map((part: any, index: number) => {\n const normalized = normalizeInlineBytes(part.data, part.mediaType);\n const image = new RawReferenceImage();\n image.referenceId = index + 1;\n image.referenceImage = {\n imageBytes: normalized.data,\n mimeType: normalized.mediaType,\n };\n return image;\n })\n : [];\n\n const body: Record<string, unknown> = {\n model: normalizeModelId(request.model),\n prompt,\n ...(referenceImages.length ? { referenceImages: '[binary images omitted]' } : {}),\n config: {\n ...(this.getHttpOptions() ? { httpOptions: this.getHttpOptions() } : {}),\n ...(typeof providerOptions.numberOfImages === 'number' ? { numberOfImages: providerOptions.numberOfImages } : {}),\n ...(typeof providerOptions.negativePrompt === 'string' ? { negativePrompt: providerOptions.negativePrompt } : {}),\n ...(typeof providerOptions.aspectRatio === 'string' ? { aspectRatio: providerOptions.aspectRatio } : {}),\n ...(typeof providerOptions.guidanceScale === 'number' ? { guidanceScale: providerOptions.guidanceScale } : {}),\n ...(typeof providerOptions.seed === 'number' ? { seed: providerOptions.seed } : {}),\n ...(typeof providerOptions.safetyFilterLevel === 'string' ? { safetyFilterLevel: providerOptions.safetyFilterLevel } : {}),\n ...(typeof providerOptions.personGeneration === 'string' ? { personGeneration: providerOptions.personGeneration } : {}),\n ...(typeof providerOptions.includeSafetyAttributes === 'boolean' ? { includeSafetyAttributes: providerOptions.includeSafetyAttributes } : {}),\n ...(typeof providerOptions.includeRaiReason === 'boolean' ? { includeRaiReason: providerOptions.includeRaiReason } : {}),\n ...(typeof providerOptions.language === 'string' ? { language: providerOptions.language } : {}),\n ...(typeof providerOptions.outputMimeType === 'string' ? { outputMimeType: providerOptions.outputMimeType } : {}),\n ...(typeof providerOptions.outputCompressionQuality === 'number' ? { outputCompressionQuality: providerOptions.outputCompressionQuality } : {}),\n ...(typeof providerOptions.addWatermark === 'boolean' ? { addWatermark: providerOptions.addWatermark } : {}),\n ...(providerOptions.labels ? { labels: providerOptions.labels } : {}),\n ...(typeof providerOptions.imageSize === 'string' ? { imageSize: providerOptions.imageSize } : {}),\n ...(typeof providerOptions.enhancePrompt === 'boolean' ? { enhancePrompt: providerOptions.enhancePrompt } : {}),\n ...(typeof providerOptions.editMode === 'string' ? { editMode: providerOptions.editMode } : {}),\n ...(typeof providerOptions.baseSteps === 'number' ? { baseSteps: providerOptions.baseSteps } : {}),\n },\n };\n\n return {\n prompt,\n referenceImages: referenceImages.length ? referenceImages : undefined,\n body,\n };\n }\n\n async inspectRequest(request: ProviderRequest): Promise<InspectedRequest> {\n if (isImagenModel(request.model)) {\n const imagen = this.extractImagenRequest(request);\n return {\n body: imagen.body,\n messagesPath: 'prompt',\n metadata: {\n endpoint: imagen.referenceImages?.length\n ? `${this.config.baseUrl || 'https://generativelanguage.googleapis.com'}/editImage`\n : `${this.config.baseUrl || 'https://generativelanguage.googleapis.com'}/generateImages`,\n headers: { 'Content-Type': 'application/json' },\n },\n };\n }\n\n return {\n body: this.buildGenerateContentParams(request),\n messagesPath: 'contents',\n metadata: {\n endpoint: `${this.config.baseUrl || 'https://generativelanguage.googleapis.com'}/generateContent`,\n headers: { 'Content-Type': 'application/json' },\n },\n };\n }\n\n async generate(request: ProviderRequest): Promise<ProviderResponse> {\n if (isImagenModel(request.model)) {\n return this.generateImagen(request);\n }\n\n try {\n const client = this.getClient();\n const response = await client.models.generateContent(this.buildGenerateContentParams(request) as any);\n const candidate = response.candidates?.[0];\n const parts = candidate?.content?.parts;\n const images = extractImagesFromParts(parts);\n const usage = transformUsage(normalizeModelId(request.model), response.usageMetadata, images?.length || 0);\n\n return {\n content: response.text || null,\n reasoning: extractReasoningFromParts(parts),\n reasoningDetails: extractReasoningFromParts(parts)\n ? [{ type: 'text', text: extractReasoningFromParts(parts) || undefined, format: 'google-gemini-v1' }]\n : undefined,\n toolCalls: extractToolCalls(parts),\n images,\n finishReason: mapFinishReason(candidate?.finishReason),\n usage,\n metadata: {\n provider: 'google',\n responseId: response.responseId,\n modelVersion: response.modelVersion,\n promptFeedback: response.promptFeedback,\n },\n };\n } catch (error) {\n throw this.toProviderError(error);\n }\n }\n\n private async generateImagen(request: ProviderRequest): Promise<ProviderResponse> {\n try {\n const client = this.getClient();\n const imagen = this.extractImagenRequest(request);\n const model = normalizeModelId(request.model);\n\n const response = imagen.referenceImages?.length\n ? await client.models.editImage({\n model,\n prompt: imagen.prompt,\n referenceImages: imagen.referenceImages,\n config: imagen.body.config as any,\n })\n : await client.models.generateImages({\n model,\n prompt: imagen.prompt,\n config: imagen.body.config as any,\n });\n\n const images: ProviderGeneratedImage[] = (response.generatedImages || [])\n .filter((image: any) => image.image?.imageBytes)\n .map((image: any, index: number) => ({\n id: `image_${index}`,\n data: image.image?.imageBytes || '',\n mediaType: image.image?.mimeType || 'image/png',\n revisedPrompt: image.enhancedPrompt,\n }));\n\n return {\n content: null,\n images,\n finishReason: 'stop',\n usage: {\n promptTokens: 0,\n completionTokens: 0,\n totalTokens: 0,\n cost: calculateGoogleUsageCost(model, { promptTokens: 0, completionTokens: 0, cachedTokens: 0 }, images.length),\n provider: 'google',\n },\n metadata: {\n provider: 'google',\n },\n };\n } catch (error) {\n throw this.toProviderError(error);\n }\n }\n\n async stream(request: ProviderRequest): Promise<AsyncIterable<ProviderStreamChunk>> {\n if (isImagenModel(request.model)) {\n throw new ProviderError('Imagen models do not support streaming in Standard Agents.', 'invalid_request');\n }\n\n const self = this;\n\n try {\n const client = this.getClient();\n const stream = await client.models.generateContentStream(this.buildGenerateContentParams(request) as any);\n\n return {\n async *[Symbol.asyncIterator]() {\n let sawContent = false;\n let sawReasoning = false;\n let finishReason: ProviderFinishReason = 'stop';\n let finalUsage: ProviderUsage = {\n promptTokens: 0,\n completionTokens: 0,\n totalTokens: 0,\n provider: 'google',\n };\n let imageIndex = 0;\n\n try {\n for await (const chunk of stream) {\n const candidate = chunk.candidates?.[0];\n const parts = candidate?.content?.parts || [];\n\n for (const part of parts) {\n if (part.text && !part.thought) {\n sawContent = true;\n yield { type: 'content-delta', delta: part.text };\n } else if (part.text && part.thought) {\n sawReasoning = true;\n yield { type: 'reasoning-delta', delta: part.text };\n } else if (part.functionCall?.name) {\n const id = part.functionCall.id || crypto.randomUUID();\n yield { type: 'tool-call-start', id, name: part.functionCall.name };\n yield { type: 'tool-call-done', id, arguments: (part.functionCall.args || {}) as Record<string, unknown> };\n } else if (part.inlineData?.mimeType?.startsWith('image/')) {\n const image: ProviderGeneratedImage = {\n id: `image_${imageIndex}`,\n data: part.inlineData.data || '',\n mediaType: part.inlineData.mimeType || 'image/png',\n };\n yield { type: 'image-done', index: imageIndex, image };\n imageIndex += 1;\n }\n }\n\n if (chunk.usageMetadata) {\n finalUsage = transformUsage(normalizeModelId(request.model), chunk.usageMetadata, imageIndex);\n }\n\n if (candidate?.finishReason) {\n finishReason = mapFinishReason(candidate.finishReason);\n }\n }\n\n if (sawContent) yield { type: 'content-done' };\n if (sawReasoning) yield { type: 'reasoning-done' };\n yield { type: 'finish', finishReason, usage: finalUsage };\n } catch (error) {\n yield { type: 'error', error: self.toProviderError(error).message };\n }\n },\n };\n } catch (error) {\n throw this.toProviderError(error);\n }\n }\n\n private toProviderError(error: unknown): ProviderError {\n if (error instanceof ProviderError) return error;\n\n if (error instanceof Error) {\n const candidate = error as Error & { status?: number; statusCode?: number };\n const status = candidate.status || candidate.statusCode;\n if (status === 429) return new ProviderError(error.message, 'rate_limit', status);\n if (status === 401 || status === 403) return new ProviderError(error.message, 'auth_error', status);\n if (status === 400) return new ProviderError(error.message, 'invalid_request', status);\n if (status && status >= 500) return new ProviderError(error.message, 'server_error', status);\n if (error.name === 'AbortError') return new ProviderError(error.message, 'timeout');\n return new ProviderError(error.message, 'unknown', status);\n }\n\n return new ProviderError(String(error), 'unknown');\n }\n}\n","const GOOGLE_ICON = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 64 64\" fill=\"none\"><rect width=\"64\" height=\"64\" rx=\"16\" fill=\"#fff\"/><path d=\"M54 32.73c0-1.58-.14-3.1-.4-4.55H32v8.61h12.33c-.53 2.85-2.14 5.27-4.56 6.9v5.73h7.38C51.47 45.44 54 39.61 54 32.73Z\" fill=\"#4285F4\"/><path d=\"M32 55c6.2 0 11.4-2.05 15.2-5.58l-7.38-5.73c-2.05 1.37-4.67 2.18-7.82 2.18-6 0-11.08-4.05-12.9-9.49h-7.62v5.96A22.98 22.98 0 0 0 32 55Z\" fill=\"#34A853\"/><path d=\"M19.1 36.38A13.8 13.8 0 0 1 18.38 32c0-1.52.26-3 .72-4.38v-5.96h-7.62A22.98 22.98 0 0 0 9 32c0 3.67.88 7.13 2.48 10.34l7.62-5.96Z\" fill=\"#FBBC05\"/><path d=\"M32 18.9c3.37 0 6.4 1.16 8.79 3.45l6.59-6.59C43.39 12.05 38.19 9 32 9A22.98 22.98 0 0 0 11.48 21.66l7.62 5.96C20.92 22.95 26 18.9 32 18.9Z\" fill=\"#EA4335\"/></svg>`;\n\nexport function svgToDataUri(svg: string): string {\n return `data:image/svg+xml;charset=utf-8,${encodeURIComponent(svg)}`;\n}\n\nexport function getGoogleIconDataUri(): string {\n return svgToDataUri(GOOGLE_ICON);\n}\n","import type { ProviderUsage } from '@standardagents/spec';\n\ntype GooglePricingModality = 'text' | 'image' | 'video' | 'audio' | 'document' | 'unspecified';\n\ninterface GoogleModalityTokenCount {\n modality?: string;\n tokenCount?: number;\n}\n\nexport interface GoogleModelPricing {\n inputPerMillion: number;\n longInputPerMillion?: number;\n outputPerMillion?: number;\n longOutputPerMillion?: number;\n cachedInputPerMillion?: number;\n longCachedInputPerMillion?: number;\n outputImagePerImage?: number;\n inputByModalityPerMillion?: Partial<Record<GooglePricingModality, number>>;\n outputByModalityPerMillion?: Partial<Record<GooglePricingModality, number>>;\n cachedByModalityPerMillion?: Partial<Record<GooglePricingModality, number>>;\n longContextThreshold?: number;\n}\n\nconst MODEL_PRICING: Record<string, GoogleModelPricing> = {\n 'gemini-3-pro-preview': {\n inputPerMillion: 2,\n outputPerMillion: 12,\n cachedInputPerMillion: 0.2,\n },\n 'gemini-3.1-pro-preview': {\n inputPerMillion: 2,\n longInputPerMillion: 4,\n outputPerMillion: 12,\n longOutputPerMillion: 18,\n cachedInputPerMillion: 0.2,\n longCachedInputPerMillion: 0.4,\n longContextThreshold: 200000,\n },\n 'gemini-2.5-pro': {\n inputPerMillion: 1.25,\n longInputPerMillion: 2.5,\n outputPerMillion: 10,\n longOutputPerMillion: 15,\n cachedInputPerMillion: 0.125,\n longCachedInputPerMillion: 0.25,\n longContextThreshold: 200000,\n },\n 'gemini-2.5-flash': {\n inputPerMillion: 0.3,\n outputPerMillion: 2.5,\n cachedInputPerMillion: 0.03,\n },\n 'gemini-2.5-flash-lite': {\n inputPerMillion: 0.1,\n outputPerMillion: 0.4,\n cachedInputPerMillion: 0.01,\n },\n 'gemini-3-flash-preview': {\n inputPerMillion: 0.5,\n outputPerMillion: 3,\n cachedInputPerMillion: 0.05,\n inputByModalityPerMillion: {\n text: 0.5,\n image: 0.5,\n video: 0.5,\n audio: 1,\n },\n cachedByModalityPerMillion: {\n text: 0.05,\n image: 0.05,\n video: 0.05,\n audio: 0.1,\n },\n },\n 'gemini-3.1-flash-lite-preview': {\n inputPerMillion: 0.25,\n outputPerMillion: 1.5,\n cachedInputPerMillion: 0.025,\n inputByModalityPerMillion: {\n text: 0.25,\n image: 0.25,\n video: 0.25,\n audio: 0.5,\n },\n cachedByModalityPerMillion: {\n text: 0.025,\n image: 0.025,\n video: 0.025,\n audio: 0.05,\n },\n },\n 'deep-research-pro-preview-12-2025': {\n inputPerMillion: 2,\n outputPerMillion: 12,\n cachedInputPerMillion: 0.2,\n },\n 'gemini-2.0-flash': {\n inputPerMillion: 0.1,\n outputPerMillion: 0.4,\n cachedInputPerMillion: 0.025,\n inputByModalityPerMillion: {\n text: 0.1,\n image: 0.1,\n video: 0.1,\n audio: 0.7,\n },\n cachedByModalityPerMillion: {\n text: 0.025,\n image: 0.025,\n video: 0.025,\n audio: 0.175,\n },\n },\n 'gemini-2.0-flash-001': {\n inputPerMillion: 0.1,\n outputPerMillion: 0.4,\n cachedInputPerMillion: 0.025,\n inputByModalityPerMillion: {\n text: 0.1,\n image: 0.1,\n video: 0.1,\n audio: 0.7,\n },\n cachedByModalityPerMillion: {\n text: 0.025,\n image: 0.025,\n video: 0.025,\n audio: 0.175,\n },\n },\n 'gemini-2.0-flash-lite': {\n inputPerMillion: 0.075,\n outputPerMillion: 0.3,\n },\n 'gemini-2.0-flash-lite-001': {\n inputPerMillion: 0.075,\n outputPerMillion: 0.3,\n },\n 'gemini-2.5-computer-use-preview-10-2025': {\n inputPerMillion: 1.25,\n longInputPerMillion: 2.5,\n outputPerMillion: 10,\n longOutputPerMillion: 15,\n longContextThreshold: 200000,\n },\n 'gemini-2.5-flash-preview-tts': {\n inputPerMillion: 0.5,\n outputPerMillion: 10,\n outputByModalityPerMillion: {\n audio: 10,\n },\n },\n 'gemini-2.5-pro-preview-tts': {\n inputPerMillion: 1,\n outputPerMillion: 20,\n outputByModalityPerMillion: {\n audio: 20,\n },\n },\n 'gemini-robotics-er-1.5-preview': {\n inputPerMillion: 0.3,\n outputPerMillion: 2.5,\n inputByModalityPerMillion: {\n text: 0.3,\n image: 0.3,\n video: 0.3,\n audio: 1,\n },\n },\n 'gemini-2.5-flash-image': {\n inputPerMillion: 0.3,\n outputImagePerImage: 0.039,\n },\n 'gemini-3.1-flash-image-preview': {\n inputPerMillion: 0.5,\n outputPerMillion: 3,\n outputImagePerImage: 0.045,\n },\n 'gemini-3-pro-image-preview': {\n inputPerMillion: 2,\n outputPerMillion: 12,\n outputImagePerImage: 0.134,\n },\n 'nano-banana-pro-preview': {\n inputPerMillion: 2,\n outputPerMillion: 12,\n outputImagePerImage: 0.134,\n },\n 'imagen-4.0-generate-001': {\n inputPerMillion: 0,\n outputImagePerImage: 0.04,\n },\n 'imagen-4.0-fast-generate-001': {\n inputPerMillion: 0,\n outputImagePerImage: 0.02,\n },\n 'imagen-4.0-ultra-generate-001': {\n inputPerMillion: 0,\n outputImagePerImage: 0.06,\n },\n 'imagen-3.0-capability-001': {\n inputPerMillion: 0,\n outputImagePerImage: 0.04,\n },\n 'gemma-4-31b-it': {\n inputPerMillion: 0,\n outputPerMillion: 0,\n cachedInputPerMillion: 0,\n },\n};\n\nconst MODEL_PRICING_PREFIXES: Array<{ prefix: string; pricing: GoogleModelPricing }> = [\n {\n prefix: 'gemini-3.1-pro-preview',\n pricing: MODEL_PRICING['gemini-3.1-pro-preview'],\n },\n {\n prefix: 'gemini-3-pro-preview',\n pricing: MODEL_PRICING['gemini-3-pro-preview'],\n },\n {\n prefix: 'gemini-3-flash-preview',\n pricing: MODEL_PRICING['gemini-3-flash-preview'],\n },\n {\n prefix: 'gemini-3.1-flash-lite-preview',\n pricing: MODEL_PRICING['gemini-3.1-flash-lite-preview'],\n },\n {\n prefix: 'gemini-2.5-flash-lite-preview-',\n pricing: MODEL_PRICING['gemini-2.5-flash-lite'],\n },\n {\n prefix: 'gemini-flash-latest',\n pricing: MODEL_PRICING['gemini-2.5-flash'],\n },\n {\n prefix: 'gemini-flash-lite-latest',\n pricing: MODEL_PRICING['gemini-2.5-flash-lite'],\n },\n {\n prefix: 'gemini-pro-latest',\n pricing: MODEL_PRICING['gemini-2.5-pro'],\n },\n {\n prefix: 'gemma-4-',\n pricing: {\n inputPerMillion: 0,\n outputPerMillion: 0,\n cachedInputPerMillion: 0,\n },\n },\n {\n prefix: 'gemma-3-',\n pricing: {\n inputPerMillion: 0,\n outputPerMillion: 0,\n cachedInputPerMillion: 0,\n },\n },\n {\n prefix: 'gemma-3n-',\n pricing: {\n inputPerMillion: 0,\n outputPerMillion: 0,\n cachedInputPerMillion: 0,\n },\n },\n];\n\nfunction normalizeGoogleModelId(modelId: string): string {\n return modelId\n .trim()\n .toLowerCase()\n .replace(/^google\\//, '')\n .replace(/^models\\//, '')\n .replace(/^publishers\\/google\\/models\\//, '');\n}\n\nfunction normalizeModality(modality: string | undefined): GooglePricingModality {\n const normalized = (modality || '').trim().toLowerCase();\n\n if (normalized === 'text') return 'text';\n if (normalized === 'image') return 'image';\n if (normalized === 'video') return 'video';\n if (normalized === 'audio') return 'audio';\n if (normalized === 'document') return 'document';\n return 'unspecified';\n}\n\nfunction toModalityCounts(\n details: GoogleModalityTokenCount[] | undefined\n): Partial<Record<GooglePricingModality, number>> {\n const counts: Partial<Record<GooglePricingModality, number>> = {};\n\n for (const detail of details || []) {\n const modality = normalizeModality(detail.modality);\n const tokenCount = Math.max(detail.tokenCount ?? 0, 0);\n counts[modality] = (counts[modality] ?? 0) + tokenCount;\n }\n\n return counts;\n}\n\nfunction sumModalityCosts(\n counts: Partial<Record<GooglePricingModality, number>>,\n modalityRates: Partial<Record<GooglePricingModality, number>> | undefined,\n defaultRate: number\n): number {\n let total = 0;\n\n for (const [modality, tokenCount] of Object.entries(counts)) {\n if (!tokenCount) continue;\n const rate = modalityRates?.[modality as GooglePricingModality] ?? defaultRate;\n total += (tokenCount / 1_000_000) * rate;\n }\n\n return total;\n}\n\nexport function getGoogleModelPricing(modelId: string): GoogleModelPricing | undefined {\n const normalizedModelId = normalizeGoogleModelId(modelId);\n const exact = MODEL_PRICING[normalizedModelId];\n if (exact) return exact;\n\n return MODEL_PRICING_PREFIXES.find((entry) => normalizedModelId.startsWith(entry.prefix))?.pricing;\n}\n\nexport function calculateGoogleUsageCost(\n modelId: string,\n usage: Pick<ProviderUsage, 'promptTokens' | 'completionTokens' | 'reasoningTokens' | 'cachedTokens'> & {\n promptTokenDetails?: GoogleModalityTokenCount[];\n completionTokenDetails?: GoogleModalityTokenCount[];\n cachedTokenDetails?: GoogleModalityTokenCount[];\n },\n imageCount = 0\n): number | undefined {\n const pricing = getGoogleModelPricing(modelId);\n if (!pricing) return undefined;\n\n const cachedTokens = usage.cachedTokens ?? 0;\n const uncachedPromptTokens = Math.max(0, usage.promptTokens - cachedTokens);\n const useLongContext = pricing.longContextThreshold != null && usage.promptTokens > pricing.longContextThreshold;\n\n const inputRate = useLongContext ? (pricing.longInputPerMillion ?? pricing.inputPerMillion) : pricing.inputPerMillion;\n const outputRate = useLongContext\n ? (pricing.longOutputPerMillion ?? pricing.outputPerMillion ?? 0)\n : (pricing.outputPerMillion ?? 0);\n const cachedRate = useLongContext\n ? (pricing.longCachedInputPerMillion ?? pricing.cachedInputPerMillion ?? 0)\n : (pricing.cachedInputPerMillion ?? 0);\n const billableOutputTokens = usage.completionTokens + (usage.reasoningTokens ?? 0);\n const promptModalityCounts = toModalityCounts(usage.promptTokenDetails);\n const cachedModalityCounts = toModalityCounts(usage.cachedTokenDetails);\n const uncachedPromptModalityCounts: Partial<Record<GooglePricingModality, number>> = {};\n\n for (const modality of new Set<GooglePricingModality>([\n ...Object.keys(promptModalityCounts) as GooglePricingModality[],\n ...Object.keys(cachedModalityCounts) as GooglePricingModality[],\n ])) {\n uncachedPromptModalityCounts[modality] = Math.max(\n (promptModalityCounts[modality] ?? 0) - (cachedModalityCounts[modality] ?? 0),\n 0\n );\n }\n\n const completionModalityCounts = toModalityCounts(usage.completionTokenDetails);\n if (usage.reasoningTokens) {\n completionModalityCounts.text = (completionModalityCounts.text ?? 0) + usage.reasoningTokens;\n }\n\n const hasPromptModalityPricing = Object.keys(uncachedPromptModalityCounts).length > 0 && pricing.inputByModalityPerMillion;\n const hasCachedModalityPricing = Object.keys(cachedModalityCounts).length > 0 && pricing.cachedByModalityPerMillion;\n const hasOutputModalityPricing = Object.keys(completionModalityCounts).length > 0 && pricing.outputByModalityPerMillion;\n\n const inputCost = hasPromptModalityPricing\n ? sumModalityCosts(uncachedPromptModalityCounts, pricing.inputByModalityPerMillion, inputRate)\n : (uncachedPromptTokens / 1_000_000) * inputRate;\n const cachedCost = hasCachedModalityPricing\n ? sumModalityCosts(cachedModalityCounts, pricing.cachedByModalityPerMillion, cachedRate)\n : (cachedTokens / 1_000_000) * cachedRate;\n const outputCost = hasOutputModalityPricing\n ? sumModalityCosts(completionModalityCounts, pricing.outputByModalityPerMillion, outputRate)\n : (billableOutputTokens / 1_000_000) * outputRate;\n const imageCost = imageCount * (pricing.outputImagePerImage ?? 0);\n\n return Number((inputCost + cachedCost + outputCost + imageCost).toFixed(12));\n}\n","import { z } from 'zod';\n\nexport const googleProviderOptions = z.object({\n candidateCount: z.number().int().min(1).max(8).optional(),\n responseModalities: z.array(z.enum(['TEXT', 'IMAGE', 'AUDIO'])).optional(),\n mediaResolution: z.string().optional(),\n cachedContent: z.string().optional(),\n enableEnhancedCivicAnswers: z.boolean().optional(),\n labels: z.record(z.string(), z.string()).optional(),\n safetySettings: z.array(z.record(z.string(), z.unknown())).optional(),\n thinkingConfig: z.record(z.string(), z.unknown()).optional(),\n imageConfig: z.record(z.string(), z.unknown()).optional(),\n\n numberOfImages: z.number().int().min(1).max(4).optional(),\n negativePrompt: z.string().optional(),\n aspectRatio: z.string().optional(),\n guidanceScale: z.number().optional(),\n safetyFilterLevel: z.string().optional(),\n personGeneration: z.string().optional(),\n includeSafetyAttributes: z.boolean().optional(),\n includeRaiReason: z.boolean().optional(),\n language: z.string().optional(),\n outputMimeType: z.string().optional(),\n outputCompressionQuality: z.number().int().optional(),\n addWatermark: z.boolean().optional(),\n imageSize: z.string().optional(),\n enhancePrompt: z.boolean().optional(),\n editMode: z.string().optional(),\n baseSteps: z.number().int().optional(),\n}).passthrough();\n\nexport type GoogleProviderOptions = z.infer<typeof googleProviderOptions>;\n","import type { ProviderFactoryConfig, ProviderFactoryWithOptions } from '@standardagents/spec';\nimport { GoogleProvider } from './GoogleProvider';\nimport { googleProviderOptions } from './providerOptions';\n\n/**\n * Google Gemini / Imagen provider factory for Standard Agents.\n */\nexport const google: ProviderFactoryWithOptions<typeof googleProviderOptions> = Object.assign(\n (config: ProviderFactoryConfig) => new GoogleProvider(config),\n { providerOptions: googleProviderOptions }\n);\n\nexport { googleProviderOptions, type GoogleProviderOptions } from './providerOptions';\nexport { GoogleProvider } from './GoogleProvider';\n"],"mappings":";AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAkBP,SAAS,qBAAqB;;;ACxB9B,IAAM,cAAc;AAEb,SAAS,aAAa,KAAqB;AAChD,SAAO,oCAAoC,mBAAmB,GAAG,CAAC;AACpE;AAEO,SAAS,uBAA+B;AAC7C,SAAO,aAAa,WAAW;AACjC;;;ACeA,IAAM,gBAAoD;AAAA,EACxD,wBAAwB;AAAA,IACtB,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,IAClB,uBAAuB;AAAA,EACzB;AAAA,EACA,0BAA0B;AAAA,IACxB,iBAAiB;AAAA,IACjB,qBAAqB;AAAA,IACrB,kBAAkB;AAAA,IAClB,sBAAsB;AAAA,IACtB,uBAAuB;AAAA,IACvB,2BAA2B;AAAA,IAC3B,sBAAsB;AAAA,EACxB;AAAA,EACA,kBAAkB;AAAA,IAChB,iBAAiB;AAAA,IACjB,qBAAqB;AAAA,IACrB,kBAAkB;AAAA,IAClB,sBAAsB;AAAA,IACtB,uBAAuB;AAAA,IACvB,2BAA2B;AAAA,IAC3B,sBAAsB;AAAA,EACxB;AAAA,EACA,oBAAoB;AAAA,IAClB,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,IAClB,uBAAuB;AAAA,EACzB;AAAA,EACA,yBAAyB;AAAA,IACvB,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,IAClB,uBAAuB;AAAA,EACzB;AAAA,EACA,0BAA0B;AAAA,IACxB,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,IAClB,uBAAuB;AAAA,IACvB,2BAA2B;AAAA,MACzB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,IACA,4BAA4B;AAAA,MAC1B,MAAM;AAAA,MACN,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,iCAAiC;AAAA,IAC/B,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,IAClB,uBAAuB;AAAA,IACvB,2BAA2B;AAAA,MACzB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,IACA,4BAA4B;AAAA,MAC1B,MAAM;AAAA,MACN,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,qCAAqC;AAAA,IACnC,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,IAClB,uBAAuB;AAAA,EACzB;AAAA,EACA,oBAAoB;AAAA,IAClB,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,IAClB,uBAAuB;AAAA,IACvB,2BAA2B;AAAA,MACzB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,IACA,4BAA4B;AAAA,MAC1B,MAAM;AAAA,MACN,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,wBAAwB;AAAA,IACtB,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,IAClB,uBAAuB;AAAA,IACvB,2BAA2B;AAAA,MACzB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,IACA,4BAA4B;AAAA,MAC1B,MAAM;AAAA,MACN,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,yBAAyB;AAAA,IACvB,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,EACpB;AAAA,EACA,6BAA6B;AAAA,IAC3B,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,EACpB;AAAA,EACA,2CAA2C;AAAA,IACzC,iBAAiB;AAAA,IACjB,qBAAqB;AAAA,IACrB,kBAAkB;AAAA,IAClB,sBAAsB;AAAA,IACtB,sBAAsB;AAAA,EACxB;AAAA,EACA,gCAAgC;AAAA,IAC9B,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,IAClB,4BAA4B;AAAA,MAC1B,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,8BAA8B;AAAA,IAC5B,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,IAClB,4BAA4B;AAAA,MAC1B,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,kCAAkC;AAAA,IAChC,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,IAClB,2BAA2B;AAAA,MACzB,MAAM;AAAA,MACN,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,0BAA0B;AAAA,IACxB,iBAAiB;AAAA,IACjB,qBAAqB;AAAA,EACvB;AAAA,EACA,kCAAkC;AAAA,IAChC,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,IAClB,qBAAqB;AAAA,EACvB;AAAA,EACA,8BAA8B;AAAA,IAC5B,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,IAClB,qBAAqB;AAAA,EACvB;AAAA,EACA,2BAA2B;AAAA,IACzB,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,IAClB,qBAAqB;AAAA,EACvB;AAAA,EACA,2BAA2B;AAAA,IACzB,iBAAiB;AAAA,IACjB,qBAAqB;AAAA,EACvB;AAAA,EACA,gCAAgC;AAAA,IAC9B,iBAAiB;AAAA,IACjB,qBAAqB;AAAA,EACvB;AAAA,EACA,iCAAiC;AAAA,IAC/B,iBAAiB;AAAA,IACjB,qBAAqB;AAAA,EACvB;AAAA,EACA,6BAA6B;AAAA,IAC3B,iBAAiB;AAAA,IACjB,qBAAqB;AAAA,EACvB;AAAA,EACA,kBAAkB;AAAA,IAChB,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,IAClB,uBAAuB;AAAA,EACzB;AACF;AAEA,IAAM,yBAAiF;AAAA,EACrF;AAAA,IACE,QAAQ;AAAA,IACR,SAAS,cAAc,wBAAwB;AAAA,EACjD;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,SAAS,cAAc,sBAAsB;AAAA,EAC/C;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,SAAS,cAAc,wBAAwB;AAAA,EACjD;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,SAAS,cAAc,+BAA+B;AAAA,EACxD;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,SAAS,cAAc,uBAAuB;AAAA,EAChD;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,SAAS,cAAc,kBAAkB;AAAA,EAC3C;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,SAAS,cAAc,uBAAuB;AAAA,EAChD;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,SAAS,cAAc,gBAAgB;AAAA,EACzC;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,SAAS;AAAA,MACP,iBAAiB;AAAA,MACjB,kBAAkB;AAAA,MAClB,uBAAuB;AAAA,IACzB;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,SAAS;AAAA,MACP,iBAAiB;AAAA,MACjB,kBAAkB;AAAA,MAClB,uBAAuB;AAAA,IACzB;AAAA,EACF;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,IACR,SAAS;AAAA,MACP,iBAAiB;AAAA,MACjB,kBAAkB;AAAA,MAClB,uBAAuB;AAAA,IACzB;AAAA,EACF;AACF;AAEA,SAAS,uBAAuB,SAAyB;AACvD,SAAO,QACJ,KAAK,EACL,YAAY,EACZ,QAAQ,aAAa,EAAE,EACvB,QAAQ,aAAa,EAAE,EACvB,QAAQ,iCAAiC,EAAE;AAChD;AAEA,SAAS,kBAAkB,UAAqD;AAC9E,QAAM,cAAc,YAAY,IAAI,KAAK,EAAE,YAAY;AAEvD,MAAI,eAAe,OAAQ,QAAO;AAClC,MAAI,eAAe,QAAS,QAAO;AACnC,MAAI,eAAe,QAAS,QAAO;AACnC,MAAI,eAAe,QAAS,QAAO;AACnC,MAAI,eAAe,WAAY,QAAO;AACtC,SAAO;AACT;AAEA,SAAS,iBACP,SACgD;AAChD,QAAM,SAAyD,CAAC;AAEhE,aAAW,UAAU,WAAW,CAAC,GAAG;AAClC,UAAM,WAAW,kBAAkB,OAAO,QAAQ;AAClD,UAAM,aAAa,KAAK,IAAI,OAAO,cAAc,GAAG,CAAC;AACrD,WAAO,QAAQ,KAAK,OAAO,QAAQ,KAAK,KAAK;AAAA,EAC/C;AAEA,SAAO;AACT;AAEA,SAAS,iBACP,QACA,eACA,aACQ;AACR,MAAI,QAAQ;AAEZ,aAAW,CAAC,UAAU,UAAU,KAAK,OAAO,QAAQ,MAAM,GAAG;AAC3D,QAAI,CAAC,WAAY;AACjB,UAAM,OAAO,gBAAgB,QAAiC,KAAK;AACnE,aAAU,aAAa,MAAa;AAAA,EACtC;AAEA,SAAO;AACT;AAEO,SAAS,sBAAsB,SAAiD;AACrF,QAAM,oBAAoB,uBAAuB,OAAO;AACxD,QAAM,QAAQ,cAAc,iBAAiB;AAC7C,MAAI,MAAO,QAAO;AAElB,SAAO,uBAAuB,KAAK,CAAC,UAAU,kBAAkB,WAAW,MAAM,MAAM,CAAC,GAAG;AAC7F;AAEO,SAAS,yBACd,SACA,OAKA,aAAa,GACO;AACpB,QAAM,UAAU,sBAAsB,OAAO;AAC7C,MAAI,CAAC,QAAS,QAAO;AAErB,QAAM,eAAe,MAAM,gBAAgB;AAC3C,QAAM,uBAAuB,KAAK,IAAI,GAAG,MAAM,eAAe,YAAY;AAC1E,QAAM,iBAAiB,QAAQ,wBAAwB,QAAQ,MAAM,eAAe,QAAQ;AAE5F,QAAM,YAAY,iBAAkB,QAAQ,uBAAuB,QAAQ,kBAAmB,QAAQ;AACtG,QAAM,aAAa,iBACd,QAAQ,wBAAwB,QAAQ,oBAAoB,IAC5D,QAAQ,oBAAoB;AACjC,QAAM,aAAa,iBACd,QAAQ,6BAA6B,QAAQ,yBAAyB,IACtE,QAAQ,yBAAyB;AACtC,QAAM,uBAAuB,MAAM,oBAAoB,MAAM,mBAAmB;AAChF,QAAM,uBAAuB,iBAAiB,MAAM,kBAAkB;AACtE,QAAM,uBAAuB,iBAAiB,MAAM,kBAAkB;AACtE,QAAM,+BAA+E,CAAC;AAEtF,aAAW,YAAY,oBAAI,IAA2B;AAAA,IACpD,GAAG,OAAO,KAAK,oBAAoB;AAAA,IACnC,GAAG,OAAO,KAAK,oBAAoB;AAAA,EACrC,CAAC,GAAG;AACF,iCAA6B,QAAQ,IAAI,KAAK;AAAA,OAC3C,qBAAqB,QAAQ,KAAK,MAAM,qBAAqB,QAAQ,KAAK;AAAA,MAC3E;AAAA,IACF;AAAA,EACF;AAEA,QAAM,2BAA2B,iBAAiB,MAAM,sBAAsB;AAC9E,MAAI,MAAM,iBAAiB;AACzB,6BAAyB,QAAQ,yBAAyB,QAAQ,KAAK,MAAM;AAAA,EAC/E;AAEA,QAAM,2BAA2B,OAAO,KAAK,4BAA4B,EAAE,SAAS,KAAK,QAAQ;AACjG,QAAM,2BAA2B,OAAO,KAAK,oBAAoB,EAAE,SAAS,KAAK,QAAQ;AACzF,QAAM,2BAA2B,OAAO,KAAK,wBAAwB,EAAE,SAAS,KAAK,QAAQ;AAE7F,QAAM,YAAY,2BACd,iBAAiB,8BAA8B,QAAQ,2BAA2B,SAAS,IAC1F,uBAAuB,MAAa;AACzC,QAAM,aAAa,2BACf,iBAAiB,sBAAsB,QAAQ,4BAA4B,UAAU,IACpF,eAAe,MAAa;AACjC,QAAM,aAAa,2BACf,iBAAiB,0BAA0B,QAAQ,4BAA4B,UAAU,IACxF,uBAAuB,MAAa;AACzC,QAAM,YAAY,cAAc,QAAQ,uBAAuB;AAE/D,SAAO,QAAQ,YAAY,aAAa,aAAa,WAAW,QAAQ,EAAE,CAAC;AAC7E;;;AFhWA,IAAM,gBAA0C;AAAA,EAC9C;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,gBAAgB;AAAA,MAChB,mBAAmB;AAAA,MACnB,mBAAmB;AAAA,MACnB,kBAAkB;AAAA,MAClB,kBAAkB;AAAA,MAClB,iBAAiB,EAAE,GAAG,MAAM,KAAK,OAAO;AAAA,IAC1C;AAAA,EACF;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,gBAAgB;AAAA,MAChB,mBAAmB;AAAA,MACnB,mBAAmB;AAAA,MACnB,kBAAkB;AAAA,MAClB,kBAAkB;AAAA,MAClB,iBAAiB,EAAE,GAAG,MAAM,IAAI,UAAU,KAAK,OAAO;AAAA,IACxD;AAAA,EACF;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,gBAAgB;AAAA,MAChB,mBAAmB;AAAA,MACnB,mBAAmB;AAAA,MACnB,kBAAkB;AAAA,MAClB,kBAAkB;AAAA,IACpB;AAAA,EACF;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,gBAAgB;AAAA,MAChB,mBAAmB;AAAA,MACnB,mBAAmB;AAAA,MACnB,kBAAkB;AAAA,MAClB,kBAAkB;AAAA,IACpB;AAAA,EACF;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,gBAAgB;AAAA,MAChB,mBAAmB;AAAA,MACnB,mBAAmB;AAAA,MACnB,kBAAkB;AAAA,MAClB,kBAAkB;AAAA,IACpB;AAAA,EACF;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,gBAAgB;AAAA,MAChB,mBAAmB;AAAA,MACnB,mBAAmB;AAAA,MACnB,kBAAkB;AAAA,MAClB,kBAAkB;AAAA,IACpB;AAAA,EACF;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,gBAAgB;AAAA,MAChB,mBAAmB;AAAA,MACnB,mBAAmB;AAAA,MACnB,kBAAkB;AAAA,MAClB,kBAAkB;AAAA,IACpB;AAAA,EACF;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,gBAAgB;AAAA,MAChB,mBAAmB;AAAA,MACnB,mBAAmB;AAAA,MACnB,kBAAkB;AAAA,MAClB,kBAAkB;AAAA,IACpB;AAAA,EACF;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,gBAAgB;AAAA,MAChB,mBAAmB;AAAA,MACnB,mBAAmB;AAAA,MACnB,kBAAkB;AAAA,MAClB,kBAAkB;AAAA,IACpB;AAAA,EACF;AACF;AAEA,SAAS,iBAAiB,SAAyB;AACjD,SAAO,QACJ,KAAK,EACL,QAAQ,aAAa,EAAE,EACvB,QAAQ,aAAa,EAAE,EACvB,QAAQ,iCAAiC,EAAE;AAChD;AAEA,SAAS,cAAc,SAA0B;AAC/C,SAAO,iBAAiB,OAAO,EAAE,WAAW,SAAS;AACvD;AAEA,SAAS,qBAAqB,OAAoB,cAA+B;AAC/E,QAAM,eAAe,MAAM,eAAe,IAAI,YAAY;AAE1D,MAAI,cAAc,YAAY,GAAG;AAC/B,WAAO;AAAA,EACT;AAEA,MAAI,aAAa,WAAW,SAAS,GAAG;AACtC,WAAO;AAAA,EACT;AAEA,MAAI,aAAa,WAAW,SAAS,KAAK,aAAa,WAAW,SAAS,GAAG;AAC5E,WAAO;AAAA,EACT;AAEA,SAAO,CAAC,cAAc,SAAS,UAAU,SAAS,OAAO,EAAE,KAAK,CAAC,SAAS,YAAY,SAAS,IAAI,CAAC;AACtG;AAEA,SAAS,wBAAwB,cAA+B;AAC9D,SAAO,aAAa,WAAW,SAAS,KAAK,aAAa,WAAW,eAAe;AACtF;AAEA,SAAS,2BAA2B,OAAoB,cAAiE;AACvH,MAAI,CAAC,MAAM,SAAU,QAAO;AAE5B,MAAI,aAAa,WAAW,QAAQ,GAAG;AACrC,WAAO,EAAE,GAAG,MAAM,KAAK,OAAO;AAAA,EAChC;AAEA,SAAO,EAAE,GAAG,MAAM,IAAI,UAAU,KAAK,OAAO;AAC9C;AAEA,SAAS,uBAAuB,OAAuC;AACrE,QAAM,eAAe,iBAAiB,MAAM,QAAQ,MAAM,eAAe,EAAE;AAC3E,QAAM,mBAAmB,IAAI,IAAI,MAAM,oBAAoB,CAAC,CAAC;AAC7D,QAAM,4BAA4B,iBAAiB,IAAI,iBAAiB,KAAK,aAAa,WAAW,SAAS,KAAK,aAAa,WAAW,QAAQ;AACnJ,QAAM,gBAAgB,wBAAwB,YAAY;AAE1D,SAAO;AAAA,IACL,gBAAgB,qBAAqB,OAAO,YAAY;AAAA,IACxD,mBAAmB;AAAA,IACnB,mBAAmB,6BAA6B,CAAC,cAAc,YAAY;AAAA,IAC3E,kBAAkB;AAAA,IAClB,kBAAkB,MAAM;AAAA,IACxB,iBAAiB,MAAM;AAAA,IACvB,iBAAiB,2BAA2B,OAAO,YAAY;AAAA,EACjE;AACF;AAEA,SAAS,oBAAoB,OAAuC;AAClE,QAAM,KAAK,iBAAiB,MAAM,QAAQ,MAAM,eAAe,EAAE;AACjE,SAAO;AAAA,IACL;AAAA,IACA,MAAM,MAAM,eAAe;AAAA,IAC3B,aAAa,MAAM;AAAA,IACnB,eAAe,MAAM;AAAA,IACrB,QAAQ,qBAAqB;AAAA,IAC7B,MAAM;AAAA,EACR;AACF;AAEA,SAAS,gBAAgB,OAAiD;AACxE,UAAQ,OAAO;AAAA,IACb,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AAAA,IACL;AACE,aAAO;AAAA,EACX;AACF;AAEA,SAAS,mBAAmB,QAAyH;AACnJ,MAAI,WAAW,QAAQ;AACrB,WAAO,EAAE,MAAM,0BAA0B,KAAK;AAAA,EAChD;AACA,MAAI,WAAW,QAAQ;AACrB,WAAO,EAAE,MAAM,0BAA0B,KAAK;AAAA,EAChD;AACA,MAAI,WAAW,YAAY;AACzB,WAAO,EAAE,MAAM,0BAA0B,IAAI;AAAA,EAC/C;AACA,MAAI,UAAU,OAAO,WAAW,YAAY,UAAU,QAAQ;AAC5D,WAAO;AAAA,MACL,MAAM,0BAA0B;AAAA,MAChC,sBAAsB,CAAC,OAAO,IAAI;AAAA,IACpC;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,eAAe,OAAsD;AAC5E,MAAI,CAAC,OAAO,OAAQ,QAAO;AAE3B,SAAO,CAAC;AAAA,IACN,sBAAsB,MAAM,IAAI,CAAC,UAAU;AAAA,MACzC,MAAM,KAAK,SAAS;AAAA,MACpB,aAAa,KAAK,SAAS;AAAA,MAC3B,YAAY,KAAK,SAAS,cAAc;AAAA,QACtC,MAAM;AAAA,QACN,YAAY,CAAC;AAAA,QACb,UAAU,CAAC;AAAA,MACb;AAAA,IACF,EAAE;AAAA,EACJ,CAAC;AACH;AAEA,SAAS,qBACP,MACA,WACsC;AACtC,QAAM,QAAQ,QAAQ;AACtB,QAAM,QAAQ,MAAM,MAAM,4BAA4B;AACtD,MAAI,CAAC,OAAO;AACV,WAAO,EAAE,MAAM,OAAO,UAAU;AAAA,EAClC;AAEA,SAAO;AAAA,IACL,MAAM,MAAM,CAAC;AAAA,IACb,WAAW,MAAM,CAAC,KAAK;AAAA,EACzB;AACF;AAEA,SAAS,eAAe,SAA6D;AACnF,MAAI,OAAO,QAAQ,YAAY,UAAU;AACvC,WAAO,CAAC,EAAE,MAAM,QAAQ,QAAQ,CAAC;AAAA,EACnC;AAEA,SAAO,QAAQ,QAAQ,IAAI,CAAC,SAAc;AACxC,QAAI,KAAK,SAAS,QAAQ;AACxB,aAAO,EAAE,MAAM,KAAK,KAAK;AAAA,IAC3B;AAEA,QAAI,KAAK,SAAS,SAAS;AACzB,YAAM,aAAa,qBAAqB,KAAK,MAAM,KAAK,aAAa,WAAW;AAChF,aAAO,qBAAqB,WAAW,MAAM,WAAW,aAAa,WAAW;AAAA,IAClF;AAEA,QAAI,KAAK,SAAS,aAAa;AAC7B,YAAM,MAAM,KAAK,WAAW,OAAO;AACnC,UAAI,IAAI,WAAW,OAAO,GAAG;AAC3B,cAAM,QAAQ,IAAI,MAAM,4BAA4B;AACpD,YAAI,OAAO;AACT,iBAAO,qBAAqB,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC;AAAA,QAChD;AAAA,MACF;AACA,aAAO;AAAA,QACL,UAAU;AAAA,UACR,UAAU;AAAA,UACV,SAAS;AAAA,QACX;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,MACL,YAAY;AAAA,QACV,UAAU,KAAK;AAAA,QACf,MAAM,KAAK;AAAA,MACb;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEA,SAAS,oBAAoB,SAAkE;AAC7F,QAAM,QAAgB,CAAC;AAEvB,MAAI,QAAQ,SAAS;AACnB,UAAM,KAAK,EAAE,MAAM,QAAQ,QAAQ,CAAC;AAAA,EACtC;AAEA,MAAI,QAAQ,WAAW;AACrB,UAAM,KAAK,EAAE,MAAM,QAAQ,WAAW,SAAS,KAAK,CAAC;AAAA,EACvD;AAEA,MAAI,QAAQ,WAAW,QAAQ;AAC7B,eAAW,YAAY,QAAQ,WAAW;AACxC,YAAM,KAAK;AAAA,QACT,cAAc;AAAA,UACZ,IAAI,SAAS;AAAA,UACb,MAAM,SAAS;AAAA,UACf,MAAM,SAAS;AAAA,QACjB;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,eAAe,SAA6D;AACnF,QAAM,WAAoC,CAAC;AAE3C,MAAI,OAAO,QAAQ,YAAY,UAAU;AACvC,aAAS,SAAS,QAAQ;AAAA,EAC5B,WAAW,UAAU,QAAQ,SAAS;AACpC,QAAI,QAAQ,QAAQ,SAAS,OAAQ,UAAS,SAAS,QAAQ,QAAQ;AAAA,aAC9D,QAAQ,QAAQ,SAAS,QAAS,UAAS,QAAQ,QAAQ,QAAQ;AAAA,QACvE,UAAS,SAAS,QAAQ;AAAA,EACjC,OAAO;AACL,aAAS,SAAS,QAAQ;AAAA,EAC5B;AAEA,QAAM,aAAa,QAAQ,aACvB,OAAO,CAAC,eAAoB,WAAW,SAAS,WAAW,WAAW,IAAI,EAC3E,IAAI,CAAC,YAAiB,UAAkB;AACvC,UAAM,aAAa,qBAAqB,WAAW,MAAM,WAAW,SAAS;AAC7E,WAAO;AAAA,MACL,YAAY;AAAA,QACV,UAAU,WAAW;AAAA,QACrB,MAAM,WAAW;AAAA,MACnB;AAAA,MACA,cAAc,EAAE,iBAAiB,MAAM;AAAA,IACzC;AAAA,EACF,CAAC,KAAK,CAAC;AAET,SAAO;AAAA,IACL;AAAA,MACE,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR;AAAA,MACA,WAAW,SAAS,WAAW,IAAI,CAAC,UAAe,EAAE,YAAY,KAAK,WAAW,EAAE,IAAI;AAAA,IACzF;AAAA,EACF;AACF;AAEA,SAAS,cAAc,UAA2E;AAChG,QAAM,WAAkB,CAAC;AACzB,QAAM,iBAAiB,SAAS,OAAO,CAAC,YAAY,QAAQ,SAAS,QAAQ,EAAE,IAAI,CAAC,YAAY,QAAQ,OAAO;AAC/G,QAAM,oBAAoB,eAAe,SACrC,EAAE,MAAM,QAAQ,OAAO,CAAC,EAAE,MAAM,eAAe,KAAK,MAAM,EAAE,CAAC,EAAE,IAC/D;AAEJ,aAAW,WAAW,UAAU;AAC9B,QAAI,QAAQ,SAAS,SAAU;AAC/B,QAAI,QAAQ,SAAS,QAAQ;AAC3B,eAAS,KAAK,EAAE,MAAM,QAAQ,OAAO,eAAe,OAAO,EAAE,CAAC;AAC9D;AAAA,IACF;AACA,QAAI,QAAQ,SAAS,aAAa;AAChC,eAAS,KAAK,EAAE,MAAM,SAAS,OAAO,oBAAoB,OAAO,EAAE,CAAC;AACpE;AAAA,IACF;AACA,aAAS,KAAK,EAAE,MAAM,QAAQ,OAAO,eAAe,OAAO,EAAE,CAAC;AAAA,EAChE;AAEA,SAAO,EAAE,mBAAmB,SAAS;AACvC;AAEA,SAAS,0BAA0B,OAA0C;AAC3E,MAAI,CAAC,OAAO,OAAQ,QAAO;AAC3B,QAAM,OAAO,MACV,OAAO,CAAC,SAAc,KAAK,WAAW,OAAO,KAAK,SAAS,QAAQ,EACnE,IAAI,CAAC,SAAc,KAAK,IAAI,EAC5B,KAAK,EAAE;AACV,SAAO,QAAQ;AACjB;AAEA,SAAS,uBAAuB,OAAiE;AAC/F,MAAI,CAAC,OAAO,OAAQ,QAAO;AAC3B,QAAM,SAAS,MACZ,OAAO,CAAC,SAAc,KAAK,YAAY,UAAU,WAAW,QAAQ,CAAC,EACrE,IAAI,CAAC,MAAW,WAAmB;AAAA,IAClC,IAAI,SAAS,KAAK;AAAA,IAClB,MAAM,KAAK,YAAY,QAAQ;AAAA,IAC/B,WAAW,KAAK,YAAY,YAAY;AAAA,EAC1C,EAAE;AACJ,SAAO,OAAO,SAAS,SAAS;AAClC;AAEA,SAAS,iBAAiB,OAA+D;AACvF,MAAI,CAAC,OAAO,OAAQ,QAAO;AAC3B,QAAM,YAAY,MACf,OAAO,CAAC,SAAc,KAAK,cAAc,IAAI,EAC7C,IAAI,CAAC,UAAe;AAAA,IACnB,IAAI,KAAK,cAAc,MAAM,OAAO,WAAW;AAAA,IAC/C,MAAM,KAAK,cAAc,QAAQ;AAAA,IACjC,WAAY,KAAK,cAAc,QAAQ,CAAC;AAAA,EAC1C,EAAE;AAEJ,SAAO,UAAU,SAAS,YAAY;AACxC;AAEA,SAAS,eAAe,SAAiB,OAAY,aAAa,GAAkB;AAClF,QAAM,SAAwB;AAAA,IAC5B,cAAc,OAAO,oBAAoB;AAAA,IACzC,kBAAkB,OAAO,wBAAwB;AAAA,IACjD,aAAa,OAAO,mBAAmB;AAAA,IACvC,iBAAiB,OAAO;AAAA,IACxB,cAAc,OAAO;AAAA,IACrB,UAAU;AAAA,EACZ;AAEA,SAAO,OAAO;AAAA,IACZ;AAAA,IACA;AAAA,MACE,GAAG;AAAA,MACH,oBAAoB,OAAO;AAAA,MAC3B,wBAAwB,OAAO,2BAA2B,OAAO;AAAA,MACjE,oBAAoB,OAAO;AAAA,IAC7B;AAAA,IACA;AAAA,EACF;AACA,SAAO;AACT;AAEO,IAAM,iBAAN,MAAM,gBAAmC;AAAA,EACrC,OAAO;AAAA,EACP,uBAAuB;AAAA,EAEf;AAAA,EACT,SAA6B;AAAA,EAErC,OAAwB,WAAW,IAAI,KAAK;AAAA,EAC5C,OAAe,cAA0C;AAAA,EACzD,OAAe,kBAAkB;AAAA,EACjC,OAAe,qBAAqB,oBAAI,IAAyB;AAAA,EAEjE,YAAY,QAA+B;AACzC,SAAK,SAAS;AAAA,EAChB;AAAA,EAEQ,YAAyB;AAC/B,QAAI,CAAC,KAAK,QAAQ;AAChB,WAAK,SAAS,IAAI,YAAY;AAAA,QAC5B,QAAQ,KAAK,OAAO;AAAA,MACtB,CAAC;AAAA,IACH;AACA,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,cAAc,SAA0B;AACtC,WAAO,QAAQ,WAAW,SAAS,KAC9B,QAAQ,WAAW,QAAQ,KAC3B,QAAQ,WAAW,SAAS,KAC5B,QAAQ,WAAW,SAAS;AAAA,EACnC;AAAA,EAEA,QAAQ,UAA2B;AACjC,WAAO,qBAAqB;AAAA,EAC9B;AAAA,EAEQ,iBAAsD;AAC5D,QAAI,CAAC,KAAK,OAAO,WAAW,CAAC,KAAK,OAAO,QAAS,QAAO;AAEzD,WAAO;AAAA,MACL,GAAI,KAAK,OAAO,UAAU,EAAE,SAAS,KAAK,OAAO,QAAQ,IAAI,CAAC;AAAA,MAC9D,GAAI,KAAK,OAAO,UAAU,EAAE,SAAS,KAAK,OAAO,QAAQ,IAAI,CAAC;AAAA,IAChE;AAAA,EACF;AAAA,EAEA,MAAM,UAAU,QAA+C;AAC7D,UAAM,MAAM,KAAK,IAAI;AACrB,QAAI,gBAAe,eAAe,MAAM,gBAAe,kBAAkB,gBAAe,UAAU;AAChG,aAAO,KAAK,aAAa,gBAAe,aAAa,MAAM;AAAA,IAC7D;AAEA,QAAI;AACF,YAAM,SAA8B,CAAC;AACrC,YAAM,SAAS,KAAK,UAAU;AAC9B,YAAM,QAAQ,MAAM,OAAO,OAAO,KAAK;AAAA,QACrC,QAAQ;AAAA,UACN,aAAa,KAAK,eAAe;AAAA,QACnC;AAAA,MACF,CAAQ;AAER,uBAAiB,SAAS,OAAqC;AAC7D,cAAM,KAAK,iBAAiB,MAAM,QAAQ,EAAE;AAC5C,YAAI,CAAC,GAAI;AACT,cAAM,qBAAqB,MAAM,kBAAkB;AAAA,UAAK,CAAC,WACvD,CAAC,mBAAmB,kBAAkB,aAAa,SAAS,EAAE,SAAS,MAAM;AAAA,QAC/E;AACA,YAAI,CAAC,mBAAoB;AACzB,wBAAe,mBAAmB,IAAI,IAAI,KAAK;AAC/C,eAAO,KAAK,oBAAoB,KAAK,CAAC;AAAA,MACxC;AAEA,iBAAW,eAAe,eAAe;AACvC,YAAI,CAAC,OAAO,KAAK,CAAC,UAAU,MAAM,OAAO,YAAY,EAAE,GAAG;AACxD,iBAAO,KAAK;AAAA,YACV,IAAI,YAAY;AAAA,YAChB,MAAM,YAAY;AAAA,YAClB,aAAa,YAAY;AAAA,YACzB,QAAQ,KAAK,QAAQ,YAAY,EAAE;AAAA,YACnC,MAAM,YAAY;AAAA,UACpB,CAAC;AAAA,QACH;AAAA,MACF;AAEA,sBAAe,cAAc,OAAO,KAAK,CAAC,GAAG,MAAM,EAAE,KAAK,cAAc,EAAE,IAAI,CAAC;AAC/E,sBAAe,kBAAkB;AACjC,aAAO,KAAK,aAAa,gBAAe,aAAa,MAAM;AAAA,IAC7D,SAAS,OAAO;AACd,cAAQ,MAAM,iCAAiC,KAAK;AACpD,aAAO,KAAK;AAAA,QACV,cAAc,IAAI,CAAC,WAAW;AAAA,UAC5B,IAAI,MAAM;AAAA,UACV,MAAM,MAAM;AAAA,UACZ,aAAa,MAAM;AAAA,UACnB,QAAQ,KAAK,QAAQ,MAAM,EAAE;AAAA,UAC7B,MAAM,MAAM;AAAA,QACd,EAAE;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,aAAa,QAA6B,QAAsC;AACtF,QAAI,CAAC,OAAQ,QAAO;AACpB,UAAM,QAAQ,OAAO,YAAY;AACjC,WAAO,OAAO;AAAA,MAAO,CAAC,UACpB,MAAM,GAAG,YAAY,EAAE,SAAS,KAAK,KACrC,MAAM,KAAK,YAAY,EAAE,SAAS,KAAK,MACtC,MAAM,aAAa,YAAY,EAAE,SAAS,KAAK,KAAK;AAAA,IACvD;AAAA,EACF;AAAA,EAEA,MAAc,iBAAiB,SAA8C;AAC3E,UAAM,aAAa,iBAAiB,OAAO;AAC3C,UAAM,SAAS,gBAAe,mBAAmB,IAAI,UAAU;AAC/D,QAAI,QAAQ;AACV,aAAO;AAAA,IACT;AAEA,QAAI;AACF,YAAM,QAAQ,MAAM,KAAK,UAAU,EAAE,OAAO,IAAI;AAAA,QAC9C,OAAO;AAAA,QACP,QAAQ;AAAA,UACN,aAAa,KAAK,eAAe;AAAA,QACnC;AAAA,MACF,CAAQ;AACR,sBAAe,mBAAmB,IAAI,YAAY,KAAK;AACvD,aAAO;AAAA,IACT,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,qBAAqB,SAAoD;AAC7E,UAAM,aAAa,iBAAiB,OAAO;AAC3C,UAAM,cAAc,cAAc,KAAK,CAAC,UAAU,MAAM,OAAO,UAAU;AACzE,QAAI,aAAa;AACf,aAAO,EAAE,GAAG,YAAY,aAAa;AAAA,IACvC;AAEA,QAAI;AACF,YAAM,WAAW,MAAM,KAAK,iBAAiB,UAAU;AACvD,UAAI,UAAU;AACZ,eAAO,uBAAuB,QAAQ;AAAA,MACxC;AAEA,YAAM,SAAS,MAAM,KAAK,UAAU;AACpC,YAAM,QAAQ,OAAO,KAAK,CAAC,UAAU,MAAM,OAAO,UAAU;AAC5D,UAAI,CAAC,MAAO,QAAO;AAEnB,aAAO;AAAA,QACL,gBAAgB,WAAW,WAAW,SAAS,KAAK,WAAW,WAAW,QAAQ,KAAK,WAAW,SAAS,OAAO;AAAA,QAClH,mBAAmB,wBAAwB,UAAU;AAAA,QACrD,mBAAmB,CAAC,cAAc,UAAU;AAAA,QAC5C,kBAAkB,wBAAwB,UAAU;AAAA,QACpD,kBAAkB,MAAM;AAAA,MAC1B;AAAA,IACF,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEQ,2BAA2B,SAAmD;AACpF,UAAM,kBAAmB,QAAQ,mBAAmB,CAAC;AACrD,UAAM,EAAE,mBAAmB,SAAS,IAAI,cAAc,QAAQ,QAAQ;AAEtE,UAAM,SAAkC;AAAA,MACtC,GAAI,KAAK,eAAe,IAAI,EAAE,aAAa,KAAK,eAAe,EAAE,IAAI,CAAC;AAAA,MACtE,GAAI,oBAAoB,EAAE,kBAAkB,IAAI,CAAC;AAAA,MACjD,GAAI,OAAO,QAAQ,gBAAgB,WAAW,EAAE,aAAa,QAAQ,YAAY,IAAI,CAAC;AAAA,MACtF,GAAI,OAAO,QAAQ,SAAS,WAAW,EAAE,MAAM,QAAQ,KAAK,IAAI,CAAC;AAAA,MACjE,GAAI,OAAO,QAAQ,SAAS,WAAW,EAAE,MAAM,QAAQ,KAAK,IAAI,CAAC;AAAA,MACjE,GAAI,OAAO,QAAQ,oBAAoB,WAAW,EAAE,iBAAiB,QAAQ,gBAAgB,IAAI,CAAC;AAAA,MAClG,GAAI,QAAQ,eAAe,SAAS,EAAE,eAAe,QAAQ,cAAc,IAAI,CAAC;AAAA,MAChF,GAAI,QAAQ,gBAAgB,SAAS,SACjC;AAAA,QACE,kBAAkB;AAAA,QAClB,GAAI,QAAQ,eAAe,SAAS,EAAE,oBAAoB,QAAQ,eAAe,OAAO,IAAI,CAAC;AAAA,MAC/F,IACA,CAAC;AAAA,MACL,GAAI,QAAQ,OAAO,SAAS,EAAE,OAAO,eAAe,QAAQ,KAAK,EAAE,IAAI,CAAC;AAAA,MACxE,GAAI,QAAQ,OAAO,UAAU,mBAAmB,QAAQ,UAAU,IAC9D,EAAE,YAAY,EAAE,uBAAuB,mBAAmB,QAAQ,UAAU,EAAE,EAAE,IAChF,CAAC;AAAA,MACL,GAAI,OAAO,gBAAgB,mBAAmB,WAAW,EAAE,gBAAgB,gBAAgB,eAAe,IAAI,CAAC;AAAA,MAC/G,GAAI,MAAM,QAAQ,gBAAgB,kBAAkB,IAAI,EAAE,oBAAoB,gBAAgB,mBAAmB,IAAI,CAAC;AAAA,MACtH,GAAI,OAAO,gBAAgB,oBAAoB,WAAW,EAAE,iBAAiB,gBAAgB,gBAAgB,IAAI,CAAC;AAAA,MAClH,GAAI,OAAO,gBAAgB,kBAAkB,WAAW,EAAE,eAAe,gBAAgB,cAAc,IAAI,CAAC;AAAA,MAC5G,GAAI,OAAO,gBAAgB,+BAA+B,YACtD,EAAE,4BAA4B,gBAAgB,2BAA2B,IACzE,CAAC;AAAA,MACL,GAAI,gBAAgB,SAAS,EAAE,QAAQ,gBAAgB,OAAO,IAAI,CAAC;AAAA,MACnE,GAAI,gBAAgB,iBAAiB,EAAE,gBAAgB,gBAAgB,eAAe,IAAI,CAAC;AAAA,MAC3F,GAAI,gBAAgB,iBAAiB,EAAE,gBAAgB,gBAAgB,eAAe,IAAI,CAAC;AAAA,MAC3F,GAAI,gBAAgB,cAAc,EAAE,aAAa,gBAAgB,YAAY,IAAI,CAAC;AAAA,MAClF,GAAI,OAAO,QAAQ,WAAW,cAAc,WACxC,EAAE,gBAAgB,EAAE,GAAI,gBAAgB,kBAA6C,CAAC,GAAI,gBAAgB,QAAQ,UAAU,UAAU,EAAE,IACxI,CAAC;AAAA,IACP;AAEA,WAAO;AAAA,MACL,OAAO,iBAAiB,QAAQ,KAAK;AAAA,MACrC;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,qBAAqB,SAI3B;AACA,UAAM,kBAAmB,QAAQ,mBAAmB,CAAC;AACrD,UAAM,aAAa,CAAC,GAAG,QAAQ,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,YAAY,QAAQ,SAAS,MAAM;AAC5F,UAAM,SAAS,aAAc,OAAO,WAAW,YAAY,WACvD,WAAW,UACX,WAAW,QAAQ,OAAO,CAAC,SAAc,KAAK,SAAS,MAAM,EAAE,IAAI,CAAC,SAAc,KAAK,IAAI,EAAE,KAAK,IAAI,IAAK;AAE/G,UAAM,kBAAkB,cAAc,OAAO,WAAW,YAAY,WAChE,WAAW,QACR,OAAO,CAAC,SAAc,KAAK,SAAS,OAAO,EAC3C,IAAI,CAAC,MAAW,UAAkB;AACjC,YAAM,aAAa,qBAAqB,KAAK,MAAM,KAAK,SAAS;AACjE,YAAM,QAAQ,IAAI,kBAAkB;AACpC,YAAM,cAAc,QAAQ;AAC5B,YAAM,iBAAiB;AAAA,QACrB,YAAY,WAAW;AAAA,QACvB,UAAU,WAAW;AAAA,MACvB;AACA,aAAO;AAAA,IACT,CAAC,IACH,CAAC;AAEL,UAAM,OAAgC;AAAA,MACpC,OAAO,iBAAiB,QAAQ,KAAK;AAAA,MACrC;AAAA,MACA,GAAI,gBAAgB,SAAS,EAAE,iBAAiB,0BAA0B,IAAI,CAAC;AAAA,MAC/E,QAAQ;AAAA,QACN,GAAI,KAAK,eAAe,IAAI,EAAE,aAAa,KAAK,eAAe,EAAE,IAAI,CAAC;AAAA,QACtE,GAAI,OAAO,gBAAgB,mBAAmB,WAAW,EAAE,gBAAgB,gBAAgB,eAAe,IAAI,CAAC;AAAA,QAC/G,GAAI,OAAO,gBAAgB,mBAAmB,WAAW,EAAE,gBAAgB,gBAAgB,eAAe,IAAI,CAAC;AAAA,QAC/G,GAAI,OAAO,gBAAgB,gBAAgB,WAAW,EAAE,aAAa,gBAAgB,YAAY,IAAI,CAAC;AAAA,QACtG,GAAI,OAAO,gBAAgB,kBAAkB,WAAW,EAAE,eAAe,gBAAgB,cAAc,IAAI,CAAC;AAAA,QAC5G,GAAI,OAAO,gBAAgB,SAAS,WAAW,EAAE,MAAM,gBAAgB,KAAK,IAAI,CAAC;AAAA,QACjF,GAAI,OAAO,gBAAgB,sBAAsB,WAAW,EAAE,mBAAmB,gBAAgB,kBAAkB,IAAI,CAAC;AAAA,QACxH,GAAI,OAAO,gBAAgB,qBAAqB,WAAW,EAAE,kBAAkB,gBAAgB,iBAAiB,IAAI,CAAC;AAAA,QACrH,GAAI,OAAO,gBAAgB,4BAA4B,YAAY,EAAE,yBAAyB,gBAAgB,wBAAwB,IAAI,CAAC;AAAA,QAC3I,GAAI,OAAO,gBAAgB,qBAAqB,YAAY,EAAE,kBAAkB,gBAAgB,iBAAiB,IAAI,CAAC;AAAA,QACtH,GAAI,OAAO,gBAAgB,aAAa,WAAW,EAAE,UAAU,gBAAgB,SAAS,IAAI,CAAC;AAAA,QAC7F,GAAI,OAAO,gBAAgB,mBAAmB,WAAW,EAAE,gBAAgB,gBAAgB,eAAe,IAAI,CAAC;AAAA,QAC/G,GAAI,OAAO,gBAAgB,6BAA6B,WAAW,EAAE,0BAA0B,gBAAgB,yBAAyB,IAAI,CAAC;AAAA,QAC7I,GAAI,OAAO,gBAAgB,iBAAiB,YAAY,EAAE,cAAc,gBAAgB,aAAa,IAAI,CAAC;AAAA,QAC1G,GAAI,gBAAgB,SAAS,EAAE,QAAQ,gBAAgB,OAAO,IAAI,CAAC;AAAA,QACnE,GAAI,OAAO,gBAAgB,cAAc,WAAW,EAAE,WAAW,gBAAgB,UAAU,IAAI,CAAC;AAAA,QAChG,GAAI,OAAO,gBAAgB,kBAAkB,YAAY,EAAE,eAAe,gBAAgB,cAAc,IAAI,CAAC;AAAA,QAC7G,GAAI,OAAO,gBAAgB,aAAa,WAAW,EAAE,UAAU,gBAAgB,SAAS,IAAI,CAAC;AAAA,QAC7F,GAAI,OAAO,gBAAgB,cAAc,WAAW,EAAE,WAAW,gBAAgB,UAAU,IAAI,CAAC;AAAA,MAClG;AAAA,IACF;AAEA,WAAO;AAAA,MACL;AAAA,MACA,iBAAiB,gBAAgB,SAAS,kBAAkB;AAAA,MAC5D;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,eAAe,SAAqD;AACxE,QAAI,cAAc,QAAQ,KAAK,GAAG;AAChC,YAAM,SAAS,KAAK,qBAAqB,OAAO;AAChD,aAAO;AAAA,QACL,MAAM,OAAO;AAAA,QACb,cAAc;AAAA,QACd,UAAU;AAAA,UACR,UAAU,OAAO,iBAAiB,SAC9B,GAAG,KAAK,OAAO,WAAW,2CAA2C,eACrE,GAAG,KAAK,OAAO,WAAW,2CAA2C;AAAA,UACzE,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,QAChD;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,MACL,MAAM,KAAK,2BAA2B,OAAO;AAAA,MAC7C,cAAc;AAAA,MACd,UAAU;AAAA,QACR,UAAU,GAAG,KAAK,OAAO,WAAW,2CAA2C;AAAA,QAC/E,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,MAChD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,SAAS,SAAqD;AAClE,QAAI,cAAc,QAAQ,KAAK,GAAG;AAChC,aAAO,KAAK,eAAe,OAAO;AAAA,IACpC;AAEA,QAAI;AACF,YAAM,SAAS,KAAK,UAAU;AAC9B,YAAM,WAAW,MAAM,OAAO,OAAO,gBAAgB,KAAK,2BAA2B,OAAO,CAAQ;AACpG,YAAM,YAAY,SAAS,aAAa,CAAC;AACzC,YAAM,QAAQ,WAAW,SAAS;AAClC,YAAM,SAAS,uBAAuB,KAAK;AAC3C,YAAM,QAAQ,eAAe,iBAAiB,QAAQ,KAAK,GAAG,SAAS,eAAe,QAAQ,UAAU,CAAC;AAEzG,aAAO;AAAA,QACL,SAAS,SAAS,QAAQ;AAAA,QAC1B,WAAW,0BAA0B,KAAK;AAAA,QAC1C,kBAAkB,0BAA0B,KAAK,IAC7C,CAAC,EAAE,MAAM,QAAQ,MAAM,0BAA0B,KAAK,KAAK,QAAW,QAAQ,mBAAmB,CAAC,IAClG;AAAA,QACJ,WAAW,iBAAiB,KAAK;AAAA,QACjC;AAAA,QACA,cAAc,gBAAgB,WAAW,YAAY;AAAA,QACrD;AAAA,QACA,UAAU;AAAA,UACR,UAAU;AAAA,UACV,YAAY,SAAS;AAAA,UACrB,cAAc,SAAS;AAAA,UACvB,gBAAgB,SAAS;AAAA,QAC3B;AAAA,MACF;AAAA,IACF,SAAS,OAAO;AACd,YAAM,KAAK,gBAAgB,KAAK;AAAA,IAClC;AAAA,EACF;AAAA,EAEA,MAAc,eAAe,SAAqD;AAChF,QAAI;AACF,YAAM,SAAS,KAAK,UAAU;AAC9B,YAAM,SAAS,KAAK,qBAAqB,OAAO;AAChD,YAAM,QAAQ,iBAAiB,QAAQ,KAAK;AAE5C,YAAM,WAAW,OAAO,iBAAiB,SACrC,MAAM,OAAO,OAAO,UAAU;AAAA,QAC5B;AAAA,QACA,QAAQ,OAAO;AAAA,QACf,iBAAiB,OAAO;AAAA,QACxB,QAAQ,OAAO,KAAK;AAAA,MACtB,CAAC,IACD,MAAM,OAAO,OAAO,eAAe;AAAA,QACjC;AAAA,QACA,QAAQ,OAAO;AAAA,QACf,QAAQ,OAAO,KAAK;AAAA,MACtB,CAAC;AAEL,YAAM,UAAoC,SAAS,mBAAmB,CAAC,GACpE,OAAO,CAAC,UAAe,MAAM,OAAO,UAAU,EAC9C,IAAI,CAAC,OAAY,WAAmB;AAAA,QACnC,IAAI,SAAS,KAAK;AAAA,QAClB,MAAM,MAAM,OAAO,cAAc;AAAA,QACjC,WAAW,MAAM,OAAO,YAAY;AAAA,QACpC,eAAe,MAAM;AAAA,MACvB,EAAE;AAEJ,aAAO;AAAA,QACL,SAAS;AAAA,QACT;AAAA,QACA,cAAc;AAAA,QACd,OAAO;AAAA,UACL,cAAc;AAAA,UACd,kBAAkB;AAAA,UAClB,aAAa;AAAA,UACb,MAAM,yBAAyB,OAAO,EAAE,cAAc,GAAG,kBAAkB,GAAG,cAAc,EAAE,GAAG,OAAO,MAAM;AAAA,UAC9G,UAAU;AAAA,QACZ;AAAA,QACA,UAAU;AAAA,UACR,UAAU;AAAA,QACZ;AAAA,MACF;AAAA,IACF,SAAS,OAAO;AACd,YAAM,KAAK,gBAAgB,KAAK;AAAA,IAClC;AAAA,EACF;AAAA,EAEA,MAAM,OAAO,SAAuE;AAClF,QAAI,cAAc,QAAQ,KAAK,GAAG;AAChC,YAAM,IAAI,cAAc,8DAA8D,iBAAiB;AAAA,IACzG;AAEA,UAAM,OAAO;AAEb,QAAI;AACF,YAAM,SAAS,KAAK,UAAU;AAC9B,YAAM,SAAS,MAAM,OAAO,OAAO,sBAAsB,KAAK,2BAA2B,OAAO,CAAQ;AAExG,aAAO;AAAA,QACL,QAAQ,OAAO,aAAa,IAAI;AAC9B,cAAI,aAAa;AACjB,cAAI,eAAe;AACnB,cAAI,eAAqC;AACzC,cAAI,aAA4B;AAAA,YAC9B,cAAc;AAAA,YACd,kBAAkB;AAAA,YAClB,aAAa;AAAA,YACb,UAAU;AAAA,UACZ;AACA,cAAI,aAAa;AAEjB,cAAI;AACF,6BAAiB,SAAS,QAAQ;AAChC,oBAAM,YAAY,MAAM,aAAa,CAAC;AACtC,oBAAM,QAAQ,WAAW,SAAS,SAAS,CAAC;AAE5C,yBAAW,QAAQ,OAAO;AACxB,oBAAI,KAAK,QAAQ,CAAC,KAAK,SAAS;AAC9B,+BAAa;AACb,wBAAM,EAAE,MAAM,iBAAiB,OAAO,KAAK,KAAK;AAAA,gBAClD,WAAW,KAAK,QAAQ,KAAK,SAAS;AACpC,iCAAe;AACf,wBAAM,EAAE,MAAM,mBAAmB,OAAO,KAAK,KAAK;AAAA,gBACpD,WAAW,KAAK,cAAc,MAAM;AAClC,wBAAM,KAAK,KAAK,aAAa,MAAM,OAAO,WAAW;AACrD,wBAAM,EAAE,MAAM,mBAAmB,IAAI,MAAM,KAAK,aAAa,KAAK;AAClE,wBAAM,EAAE,MAAM,kBAAkB,IAAI,WAAY,KAAK,aAAa,QAAQ,CAAC,EAA8B;AAAA,gBAC3G,WAAW,KAAK,YAAY,UAAU,WAAW,QAAQ,GAAG;AAC1D,wBAAM,QAAgC;AAAA,oBACpC,IAAI,SAAS,UAAU;AAAA,oBACvB,MAAM,KAAK,WAAW,QAAQ;AAAA,oBAC9B,WAAW,KAAK,WAAW,YAAY;AAAA,kBACzC;AACA,wBAAM,EAAE,MAAM,cAAc,OAAO,YAAY,MAAM;AACrD,gCAAc;AAAA,gBAChB;AAAA,cACF;AAEA,kBAAI,MAAM,eAAe;AACvB,6BAAa,eAAe,iBAAiB,QAAQ,KAAK,GAAG,MAAM,eAAe,UAAU;AAAA,cAC9F;AAEA,kBAAI,WAAW,cAAc;AAC3B,+BAAe,gBAAgB,UAAU,YAAY;AAAA,cACvD;AAAA,YACF;AAEA,gBAAI,WAAY,OAAM,EAAE,MAAM,eAAe;AAC7C,gBAAI,aAAc,OAAM,EAAE,MAAM,iBAAiB;AACjD,kBAAM,EAAE,MAAM,UAAU,cAAc,OAAO,WAAW;AAAA,UAC1D,SAAS,OAAO;AACd,kBAAM,EAAE,MAAM,SAAS,OAAO,KAAK,gBAAgB,KAAK,EAAE,QAAQ;AAAA,UACpE;AAAA,QACF;AAAA,MACF;AAAA,IACF,SAAS,OAAO;AACd,YAAM,KAAK,gBAAgB,KAAK;AAAA,IAClC;AAAA,EACF;AAAA,EAEQ,gBAAgB,OAA+B;AACrD,QAAI,iBAAiB,cAAe,QAAO;AAE3C,QAAI,iBAAiB,OAAO;AAC1B,YAAM,YAAY;AAClB,YAAM,SAAS,UAAU,UAAU,UAAU;AAC7C,UAAI,WAAW,IAAK,QAAO,IAAI,cAAc,MAAM,SAAS,cAAc,MAAM;AAChF,UAAI,WAAW,OAAO,WAAW,IAAK,QAAO,IAAI,cAAc,MAAM,SAAS,cAAc,MAAM;AAClG,UAAI,WAAW,IAAK,QAAO,IAAI,cAAc,MAAM,SAAS,mBAAmB,MAAM;AACrF,UAAI,UAAU,UAAU,IAAK,QAAO,IAAI,cAAc,MAAM,SAAS,gBAAgB,MAAM;AAC3F,UAAI,MAAM,SAAS,aAAc,QAAO,IAAI,cAAc,MAAM,SAAS,SAAS;AAClF,aAAO,IAAI,cAAc,MAAM,SAAS,WAAW,MAAM;AAAA,IAC3D;AAEA,WAAO,IAAI,cAAc,OAAO,KAAK,GAAG,SAAS;AAAA,EACnD;AACF;;;AGv6BA,SAAS,SAAS;AAEX,IAAM,wBAAwB,EAAE,OAAO;AAAA,EAC5C,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EACxD,oBAAoB,EAAE,MAAM,EAAE,KAAK,CAAC,QAAQ,SAAS,OAAO,CAAC,CAAC,EAAE,SAAS;AAAA,EACzE,iBAAiB,EAAE,OAAO,EAAE,SAAS;AAAA,EACrC,eAAe,EAAE,OAAO,EAAE,SAAS;AAAA,EACnC,4BAA4B,EAAE,QAAQ,EAAE,SAAS;AAAA,EACjD,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EAClD,gBAAgB,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,QAAQ,CAAC,CAAC,EAAE,SAAS;AAAA,EACpE,gBAAgB,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,QAAQ,CAAC,EAAE,SAAS;AAAA,EAC3D,aAAa,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,QAAQ,CAAC,EAAE,SAAS;AAAA,EAExD,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EACxD,gBAAgB,EAAE,OAAO,EAAE,SAAS;AAAA,EACpC,aAAa,EAAE,OAAO,EAAE,SAAS;AAAA,EACjC,eAAe,EAAE,OAAO,EAAE,SAAS;AAAA,EACnC,mBAAmB,EAAE,OAAO,EAAE,SAAS;AAAA,EACvC,kBAAkB,EAAE,OAAO,EAAE,SAAS;AAAA,EACtC,yBAAyB,EAAE,QAAQ,EAAE,SAAS;AAAA,EAC9C,kBAAkB,EAAE,QAAQ,EAAE,SAAS;AAAA,EACvC,UAAU,EAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,gBAAgB,EAAE,OAAO,EAAE,SAAS;AAAA,EACpC,0BAA0B,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EACpD,cAAc,EAAE,QAAQ,EAAE,SAAS;AAAA,EACnC,WAAW,EAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,eAAe,EAAE,QAAQ,EAAE,SAAS;AAAA,EACpC,UAAU,EAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AACvC,CAAC,EAAE,YAAY;;;ACtBR,IAAM,SAAmE,OAAO;AAAA,EACrF,CAAC,WAAkC,IAAI,eAAe,MAAM;AAAA,EAC5D,EAAE,iBAAiB,sBAAsB;AAC3C;","names":[]}
|
package/package.json
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@standardagents/google",
|
|
3
|
+
"version": "0.0.1-dev.ffffff",
|
|
4
|
+
"private": false,
|
|
5
|
+
"publishConfig": {
|
|
6
|
+
"access": "restricted",
|
|
7
|
+
"registry": "https://registry.npmjs.org/"
|
|
8
|
+
},
|
|
9
|
+
"type": "module",
|
|
10
|
+
"description": "Google Gemini provider for Standard Agents",
|
|
11
|
+
"main": "./dist/index.js",
|
|
12
|
+
"types": "./dist/index.d.ts",
|
|
13
|
+
"exports": {
|
|
14
|
+
".": {
|
|
15
|
+
"types": "./dist/index.d.ts",
|
|
16
|
+
"import": "./dist/index.js"
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"files": [
|
|
20
|
+
"dist",
|
|
21
|
+
"README.md"
|
|
22
|
+
],
|
|
23
|
+
"scripts": {
|
|
24
|
+
"build": "tsup",
|
|
25
|
+
"dev": "tsup --watch",
|
|
26
|
+
"typecheck": "tsc --noEmit",
|
|
27
|
+
"test": "cd ../.. && vitest --dir packages/google",
|
|
28
|
+
"test:run": "cd ../.. && vitest run --dir packages/google"
|
|
29
|
+
},
|
|
30
|
+
"dependencies": {
|
|
31
|
+
"@google/genai": "^1.47.0",
|
|
32
|
+
"zod": "^4.3.5"
|
|
33
|
+
},
|
|
34
|
+
"peerDependencies": {
|
|
35
|
+
"@standardagents/spec": "^0.10.0"
|
|
36
|
+
},
|
|
37
|
+
"devDependencies": {
|
|
38
|
+
"@standardagents/spec": "workspace:*",
|
|
39
|
+
"tsup": "^8.3.5",
|
|
40
|
+
"typescript": "^5.9.0"
|
|
41
|
+
},
|
|
42
|
+
"keywords": [
|
|
43
|
+
"standardagents",
|
|
44
|
+
"google",
|
|
45
|
+
"gemini",
|
|
46
|
+
"provider",
|
|
47
|
+
"ai",
|
|
48
|
+
"llm"
|
|
49
|
+
],
|
|
50
|
+
"author": "FormKit Inc.",
|
|
51
|
+
"license": "UNLICENSED"
|
|
52
|
+
}
|