@elizaos/plugin-elizacloud 2.0.0-alpha.5 → 2.0.0-alpha.537
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/LICENSE +21 -0
- package/README.md +185 -0
- package/dist/actions/check-credits.d.ts.map +1 -1
- package/dist/actions/confirmation.d.ts +7 -0
- package/dist/actions/confirmation.d.ts.map +1 -0
- package/dist/actions/freeze-agent.d.ts.map +1 -1
- package/dist/actions/provision-agent.d.ts.map +1 -1
- package/dist/actions/resume-agent.d.ts.map +1 -1
- package/dist/browser/index.browser.js +22 -19
- package/dist/browser/index.browser.js.map +37 -31
- package/dist/cjs/index.node.cjs +1298 -451
- package/dist/cjs/index.node.js.map +37 -31
- package/dist/cloud-providers/cloud-status.d.ts.map +1 -1
- package/dist/cloud-providers/container-health.d.ts.map +1 -1
- package/dist/cloud-providers/credit-balance.d.ts.map +1 -1
- package/dist/cloud-providers/model-registry.d.ts.map +1 -1
- package/dist/index.browser.d.ts +2 -1
- package/dist/index.browser.d.ts.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.node.d.ts +2 -1
- package/dist/index.node.d.ts.map +1 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/models/embeddings.d.ts.map +1 -1
- package/dist/models/image.d.ts.map +1 -1
- package/dist/models/index.d.ts +1 -1
- package/dist/models/index.d.ts.map +1 -1
- package/dist/models/object.d.ts.map +1 -1
- package/dist/models/research.d.ts.map +1 -1
- package/dist/models/speech.d.ts.map +1 -1
- package/dist/models/text.d.ts +5 -2
- package/dist/models/text.d.ts.map +1 -1
- package/dist/models/tokenization.d.ts.map +1 -1
- package/dist/models/transcription.d.ts.map +1 -1
- package/dist/node/index.node.js +1280 -428
- package/dist/node/index.node.js.map +37 -31
- package/dist/providers/openai.d.ts.map +1 -1
- package/dist/services/cloud-auth.d.ts +140 -4
- package/dist/services/cloud-auth.d.ts.map +1 -1
- package/dist/services/cloud-backup.d.ts.map +1 -1
- package/dist/services/cloud-bootstrap.d.ts +38 -0
- package/dist/services/cloud-bootstrap.d.ts.map +1 -0
- package/dist/services/cloud-bridge.d.ts +1 -1
- package/dist/services/cloud-bridge.d.ts.map +1 -1
- package/dist/services/cloud-container.d.ts.map +1 -1
- package/dist/services/cloud-managed-gateway-relay.d.ts +38 -0
- package/dist/services/cloud-managed-gateway-relay.d.ts.map +1 -0
- package/dist/services/cloud-model-registry.d.ts +0 -1
- package/dist/services/cloud-model-registry.d.ts.map +1 -1
- package/dist/types/cloud.d.ts +41 -19
- package/dist/types/cloud.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/cloud-api.d.ts +2 -27
- package/dist/utils/cloud-api.d.ts.map +1 -1
- package/dist/utils/config.d.ts +6 -3
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/events.d.ts.map +1 -1
- package/dist/utils/forwarded-settings.d.ts +1 -1
- package/dist/utils/forwarded-settings.d.ts.map +1 -1
- package/dist/utils/helpers.d.ts.map +1 -1
- package/dist/utils/responses-output.d.ts +6 -0
- package/dist/utils/responses-output.d.ts.map +1 -0
- package/dist/utils/sdk-client.d.ts +5 -0
- package/dist/utils/sdk-client.d.ts.map +1 -0
- package/package.json +84 -16
- package/types/cloud.ts +54 -41
- package/types/index.ts +6 -0
- package/dist/actions/index.d.ts +0 -5
- package/dist/actions/index.d.ts.map +0 -1
- package/dist/build.d.ts +0 -3
- package/dist/build.d.ts.map +0 -1
- package/dist/cloud-providers/index.d.ts +0 -4
- package/dist/cloud-providers/index.d.ts.map +0 -1
- package/dist/generated/specs/specs.d.ts +0 -55
- package/dist/generated/specs/specs.d.ts.map +0 -1
- package/dist/services/index.d.ts +0 -5
- package/dist/services/index.d.ts.map +0 -1
|
@@ -1,37 +1,43 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../index.ts", "../../actions/check-credits.ts", "../../actions/freeze-agent.ts", "../../actions/provision-agent.ts", "../../types/cloud.ts", "../../utils/forwarded-settings.ts", "../../actions/resume-agent.ts", "../../cloud-providers/cloud-status.ts", "../../cloud-providers/container-health.ts", "../../cloud-providers/credit-balance.ts", "../../cloud-providers/model-registry.ts", "../../init.ts", "../../utils/config.ts", "../../models/embeddings.ts", "../../utils/events.ts", "../../models/image.ts", "../../utils/helpers.ts", "../../models/object.ts", "../../
|
|
3
|
+
"sources": ["../../index.ts", "../../actions/check-credits.ts", "../../actions/confirmation.ts", "../../actions/freeze-agent.ts", "../../actions/provision-agent.ts", "../../types/cloud.ts", "../../utils/forwarded-settings.ts", "../../actions/resume-agent.ts", "../../cloud-providers/cloud-status.ts", "../../cloud-providers/container-health.ts", "../../cloud-providers/credit-balance.ts", "../../cloud-providers/model-registry.ts", "../../init.ts", "../../utils/config.ts", "../../utils/sdk-client.ts", "../../models/embeddings.ts", "../../utils/events.ts", "../../models/image.ts", "../../utils/helpers.ts", "../../models/object.ts", "../../utils/responses-output.ts", "../../models/research.ts", "../../models/speech.ts", "../../models/text.ts", "../../providers/openai.ts", "../../services/cloud-auth.ts", "../../utils/cloud-api.ts", "../../services/cloud-backup.ts", "../../services/cloud-bootstrap.ts", "../../services/cloud-bridge.ts", "../../services/cloud-container.ts", "../../services/cloud-managed-gateway-relay.ts", "../../services/cloud-model-registry.ts", "../../index.node.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"import type { IAgentRuntime, Plugin } from \"@elizaos/core\";\nimport { logger, ModelType } from \"@elizaos/core\";\nimport { checkCloudCreditsAction } from \"./actions/check-credits\";\nimport { freezeCloudAgentAction } from \"./actions/freeze-agent\";\n// Cloud actions\nimport { provisionCloudAgentAction } from \"./actions/provision-agent\";\nimport { resumeCloudAgentAction } from \"./actions/resume-agent\";\n// Cloud providers\nimport { cloudStatusProvider } from \"./cloud-providers/cloud-status\";\nimport { containerHealthProvider } from \"./cloud-providers/container-health\";\nimport { creditBalanceProvider } from \"./cloud-providers/credit-balance\";\nimport { modelRegistryProvider } from \"./cloud-providers/model-registry\";\nimport { initializeOpenAI } from \"./init\";\nimport {\n fetchTextToSpeech,\n handleImageDescription,\n handleImageGeneration,\n handleObjectLarge,\n handleObjectSmall,\n handleResearch,\n handleTextEmbedding,\n handleTextLarge,\n handleTextReasoningLarge,\n handleTextReasoningSmall,\n handleTextSmall,\n} from \"./models\";\n// Cloud services\nimport { CloudAuthService } from \"./services/cloud-auth\";\nimport { CloudBackupService } from \"./services/cloud-backup\";\nimport { CloudBridgeService } from \"./services/cloud-bridge\";\nimport { CloudContainerService } from \"./services/cloud-container\";\nimport { CloudModelRegistryService } from \"./services/cloud-model-registry\";\nimport { getApiKey, getBaseURL } from \"./utils/config\";\n\ntype ProcessEnvLike = Record<string, string | undefined>;\n\nfunction getProcessEnv(): ProcessEnvLike {\n if (typeof process === \"undefined\") {\n return {};\n }\n return process.env as ProcessEnvLike;\n}\n\nconst env = getProcessEnv();\n\nexport const elizaOSCloudPlugin: Plugin = {\n name: \"elizaOSCloud\",\n description:\n \"ElizaOS Cloud plugin — Multi-model AI generation, container provisioning, agent bridge, and billing management\",\n\n config: {\n ELIZAOS_CLOUD_API_KEY: env.ELIZAOS_CLOUD_API_KEY ?? null,\n ELIZAOS_CLOUD_BASE_URL: env.ELIZAOS_CLOUD_BASE_URL ?? null,\n ELIZAOS_CLOUD_ENABLED: env.ELIZAOS_CLOUD_ENABLED ?? null,\n // Text models\n ELIZAOS_CLOUD_SMALL_MODEL: env.ELIZAOS_CLOUD_SMALL_MODEL ?? null,\n ELIZAOS_CLOUD_LARGE_MODEL: env.ELIZAOS_CLOUD_LARGE_MODEL ?? null,\n SMALL_MODEL: env.SMALL_MODEL ?? null,\n LARGE_MODEL: env.LARGE_MODEL ?? null,\n // Reasoning models\n ELIZAOS_CLOUD_REASONING_SMALL_MODEL:\n env.ELIZAOS_CLOUD_REASONING_SMALL_MODEL ?? null,\n ELIZAOS_CLOUD_REASONING_LARGE_MODEL:\n env.ELIZAOS_CLOUD_REASONING_LARGE_MODEL ?? null,\n REASONING_SMALL_MODEL: env.REASONING_SMALL_MODEL ?? null,\n REASONING_LARGE_MODEL: env.REASONING_LARGE_MODEL ?? null,\n // Research model\n ELIZAOS_CLOUD_RESEARCH_MODEL: env.ELIZAOS_CLOUD_RESEARCH_MODEL ?? null,\n RESEARCH_MODEL: env.RESEARCH_MODEL ?? null,\n // Embedding\n ELIZAOS_CLOUD_EMBEDDING_MODEL: env.ELIZAOS_CLOUD_EMBEDDING_MODEL ?? null,\n ELIZAOS_CLOUD_EMBEDDING_API_KEY:\n env.ELIZAOS_CLOUD_EMBEDDING_API_KEY ?? null,\n ELIZAOS_CLOUD_EMBEDDING_URL: env.ELIZAOS_CLOUD_EMBEDDING_URL ?? null,\n ELIZAOS_CLOUD_EMBEDDING_DIMENSIONS:\n env.ELIZAOS_CLOUD_EMBEDDING_DIMENSIONS ?? null,\n // Image\n ELIZAOS_CLOUD_IMAGE_DESCRIPTION_MODEL:\n env.ELIZAOS_CLOUD_IMAGE_DESCRIPTION_MODEL ?? null,\n ELIZAOS_CLOUD_IMAGE_DESCRIPTION_MAX_TOKENS:\n env.ELIZAOS_CLOUD_IMAGE_DESCRIPTION_MAX_TOKENS ?? null,\n ELIZAOS_CLOUD_IMAGE_GENERATION_MODEL:\n env.ELIZAOS_CLOUD_IMAGE_GENERATION_MODEL ?? null,\n // Audio\n ELIZAOS_CLOUD_TTS_MODEL: env.ELIZAOS_CLOUD_TTS_MODEL ?? null,\n ELIZAOS_CLOUD_TRANSCRIPTION_MODEL:\n env.ELIZAOS_CLOUD_TRANSCRIPTION_MODEL ?? null,\n // Telemetry\n ELIZAOS_CLOUD_EXPERIMENTAL_TELEMETRY:\n env.ELIZAOS_CLOUD_EXPERIMENTAL_TELEMETRY ?? null,\n },\n\n async init(config, runtime) {\n // Initialize inference (OpenAI-compatible client)\n initializeOpenAI(config, runtime);\n },\n\n // ─── Cloud Services ──────────────────────────────────────────────────\n // Services are registered in dependency order:\n // 1. CloudAuthService — must start first (other services depend on it)\n // 2. CloudContainerService — needs auth to list/create containers\n // 3. CloudBridgeService — needs auth for WebSocket connections\n // 4. CloudBackupService — needs auth for snapshot API calls\n services: [\n CloudAuthService,\n CloudModelRegistryService,\n CloudContainerService,\n CloudBridgeService,\n CloudBackupService,\n ],\n\n // ─── Cloud Actions ───────────────────────────────────────────────────\n actions: [\n provisionCloudAgentAction,\n freezeCloudAgentAction,\n resumeCloudAgentAction,\n checkCloudCreditsAction,\n ],\n\n // ─── Cloud Providers ─────────────────────────────────────────────────\n providers: [\n cloudStatusProvider,\n creditBalanceProvider,\n containerHealthProvider,\n modelRegistryProvider,\n ],\n\n // ─── Inference Model Handlers ────────────────────────────────────────\n models: {\n [ModelType.TEXT_EMBEDDING]: handleTextEmbedding,\n [ModelType.TEXT_SMALL]: handleTextSmall,\n [ModelType.TEXT_LARGE]: handleTextLarge,\n [ModelType.TEXT_REASONING_SMALL]: handleTextReasoningSmall,\n [ModelType.TEXT_REASONING_LARGE]: handleTextReasoningLarge,\n [ModelType.RESEARCH]: handleResearch,\n [ModelType.IMAGE]: handleImageGeneration,\n [ModelType.IMAGE_DESCRIPTION]: handleImageDescription,\n [ModelType.OBJECT_SMALL]: handleObjectSmall,\n [ModelType.OBJECT_LARGE]: handleObjectLarge,\n },\n\n tests: [\n {\n name: \"ELIZAOS_CLOUD_plugin_tests\",\n tests: [\n {\n name: \"ELIZAOS_CLOUD_test_url_and_api_key_validation\",\n fn: async (runtime: IAgentRuntime) => {\n const baseURL = getBaseURL(runtime);\n const response = await fetch(`${baseURL}/models`, {\n headers: {\n Authorization: `Bearer ${getApiKey(runtime)}`,\n },\n });\n const data = await response.json();\n logger.log(\n {\n data:\n (data as { data?: Array<Record<string, never>> })?.data\n ?.length ?? \"N/A\",\n },\n \"Models Available\",\n );\n if (!response.ok) {\n throw new Error(\n `Failed to validate OpenAI API key: ${response.statusText}`,\n );\n }\n },\n },\n {\n name: \"ELIZAOS_CLOUD_test_text_embedding\",\n fn: async (runtime: IAgentRuntime) => {\n const embedding = await runtime.useModel(ModelType.TEXT_EMBEDDING, {\n text: \"Hello, world!\",\n });\n logger.log({ embedding }, \"embedding\");\n },\n },\n {\n name: \"ELIZAOS_CLOUD_test_text_large\",\n fn: async (runtime: IAgentRuntime) => {\n const text = await runtime.useModel(ModelType.TEXT_LARGE, {\n prompt: \"What is the nature of reality in 10 words?\",\n });\n if (text.length === 0) {\n throw new Error(\"Failed to generate text\");\n }\n logger.log({ text }, \"generated with test_text_large\");\n },\n },\n {\n name: \"ELIZAOS_CLOUD_test_text_small\",\n fn: async (runtime: IAgentRuntime) => {\n const text = await runtime.useModel(ModelType.TEXT_SMALL, {\n prompt: \"What is the nature of reality in 10 words?\",\n });\n if (text.length === 0) {\n throw new Error(\"Failed to generate text\");\n }\n logger.log({ text }, \"generated with test_text_small\");\n },\n },\n {\n name: \"ELIZAOS_CLOUD_test_image_generation\",\n fn: async (runtime: IAgentRuntime) => {\n logger.log(\"ELIZAOS_CLOUD_test_image_generation\");\n const image = await runtime.useModel(ModelType.IMAGE, {\n prompt: \"A beautiful sunset over a calm ocean\",\n count: 1,\n size: \"1024x1024\",\n });\n logger.log({ image }, \"generated with test_image_generation\");\n },\n },\n {\n name: \"image-description\",\n fn: async (runtime: IAgentRuntime) => {\n logger.log(\"ELIZAOS_CLOUD_test_image_description\");\n const result = await runtime.useModel(\n ModelType.IMAGE_DESCRIPTION,\n \"https://upload.wikimedia.org/wikipedia/commons/thumb/1/1c/Vitalik_Buterin_TechCrunch_London_2015_%28cropped%29.jpg/537px-Vitalik_Buterin_TechCrunch_London_2015_%28cropped%29.jpg\",\n );\n\n if (\n result &&\n typeof result === \"object\" &&\n \"title\" in result &&\n \"description\" in result\n ) {\n logger.log({ result }, \"Image description\");\n } else {\n logger.error(\n `Invalid image description result format: ${JSON.stringify(result)}`,\n );\n }\n },\n },\n {\n name: \"ELIZAOS_CLOUD_test_transcription\",\n fn: async (runtime: IAgentRuntime) => {\n logger.log(\"ELIZAOS_CLOUD_test_transcription\");\n const response = await fetch(\n \"https://upload.wikimedia.org/wikipedia/en/4/40/Chris_Benoit_Voice_Message.ogg\",\n );\n const arrayBuffer = await response.arrayBuffer();\n const transcription = await runtime.useModel(\n ModelType.TRANSCRIPTION,\n Buffer.from(new Uint8Array(arrayBuffer)),\n );\n logger.log({ transcription }, \"generated with test_transcription\");\n },\n },\n {\n name: \"ELIZAOS_CLOUD_test_text_tokenizer_encode\",\n fn: async (runtime: IAgentRuntime) => {\n const prompt = \"Hello tokenizer encode!\";\n const tokens = await runtime.useModel(\n ModelType.TEXT_TOKENIZER_ENCODE,\n {\n prompt,\n modelType: ModelType.TEXT_SMALL,\n },\n );\n if (!Array.isArray(tokens) || tokens.length === 0) {\n throw new Error(\n \"Failed to tokenize text: expected non-empty array of tokens\",\n );\n }\n logger.log({ tokens }, \"Tokenized output\");\n },\n },\n {\n name: \"ELIZAOS_CLOUD_test_text_tokenizer_decode\",\n fn: async (runtime: IAgentRuntime) => {\n const prompt = \"Hello tokenizer decode!\";\n const tokens = await runtime.useModel(\n ModelType.TEXT_TOKENIZER_ENCODE,\n {\n prompt,\n modelType: ModelType.TEXT_SMALL,\n },\n );\n const decodedText = await runtime.useModel(\n ModelType.TEXT_TOKENIZER_DECODE,\n {\n tokens,\n modelType: ModelType.TEXT_SMALL,\n },\n );\n if (decodedText !== prompt) {\n throw new Error(\n `Decoded text does not match original. Expected \"${prompt}\", got \"${decodedText}\"`,\n );\n }\n logger.log({ decodedText }, \"Decoded text\");\n },\n },\n {\n name: \"ELIZAOS_CLOUD_test_text_to_speech\",\n fn: async (runtime: IAgentRuntime) => {\n const response = await fetchTextToSpeech(runtime, {\n text: \"Hello, this is a test for text-to-speech.\",\n });\n if (!response) {\n throw new Error(\"Failed to generate speech\");\n }\n logger.log(\"Generated speech successfully\");\n },\n },\n ],\n },\n ],\n};\n\nexport default elizaOSCloudPlugin;\n",
|
|
6
|
-
"/**\n * CHECK_CLOUD_CREDITS — Query ElizaCloud credit balance and usage.\n */\n\nimport type {\n Action,\n ActionResult,\n HandlerCallback,\n IAgentRuntime,\n Memory,\n State,\n} from \"@elizaos/core\";\nimport type { CloudAuthService } from \"../services/cloud-auth\";\nimport type { CloudContainerService } from \"../services/cloud-container\";\nimport type {
|
|
7
|
-
"
|
|
8
|
-
"/**\n *
|
|
9
|
-
"/**\n *
|
|
10
|
-
"/**\n *
|
|
11
|
-
"/**\n *
|
|
12
|
-
"/**\n *
|
|
13
|
-
"/**\n *
|
|
14
|
-
"
|
|
15
|
-
"/**
|
|
16
|
-
"
|
|
17
|
-
"import type
|
|
18
|
-
"import type { IAgentRuntime
|
|
19
|
-
"import {
|
|
20
|
-
"import type {
|
|
21
|
-
"import {
|
|
22
|
-
"import type {
|
|
23
|
-
"import {
|
|
24
|
-
"
|
|
25
|
-
"
|
|
26
|
-
"
|
|
27
|
-
"
|
|
28
|
-
"/**\n * HTTP client for ElizaCloud API.\n *\n * Typed request methods with automatic auth headers,\n * structured error handling, and WS URL construction.\n */\n\nimport { logger } from \"@elizaos/core\";\nimport {\n CloudApiError,\n type CloudApiErrorBody,\n InsufficientCreditsError,\n} from \"../types/cloud\";\n\nexport class CloudApiClient {\n private baseUrl: string;\n private apiKey: string | undefined;\n\n constructor(baseUrl: string, apiKey?: string) {\n this.baseUrl = baseUrl.replace(/\\/+$/, \"\");\n this.apiKey = apiKey;\n }\n\n setApiKey(key: string): void {\n this.apiKey = key;\n }\n setBaseUrl(url: string): void {\n this.baseUrl = url.replace(/\\/+$/, \"\");\n }\n getBaseUrl(): string {\n return this.baseUrl;\n }\n getApiKey(): string | undefined {\n return this.apiKey;\n }\n\n /** Build a WebSocket URL from the base URL, replacing http(s) with ws(s). */\n buildWsUrl(path: string): string {\n return `${this.baseUrl.replace(/^http/, \"ws\")}${path}`;\n }\n\n async get<T>(path: string): Promise<T> {\n return this.request<T>(\"GET\", path);\n }\n\n async post<T>(path: string, body: Record<string, unknown>): Promise<T> {\n return this.request<T>(\"POST\", path, body);\n }\n\n async delete<T>(path: string): Promise<T> {\n return this.request<T>(\"DELETE\", path);\n }\n\n /**\n * POST without auth header — used for device-auth which doesn't\n * require a pre-existing API key.\n */\n async postUnauthenticated<T>(\n path: string,\n body: Record<string, unknown>,\n ): Promise<T> {\n return this.request<T>(\"POST\", path, body, true);\n }\n\n // ── internals ──────────────────────────────────────────────────────\n\n private async request<T>(\n method: string,\n path: string,\n body?: Record<string, unknown>,\n skipAuth = false,\n ): Promise<T> {\n const url = `${this.baseUrl}${path}`;\n logger.debug(`[CloudAPI] ${method} ${url}`);\n\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n };\n if (!skipAuth && this.apiKey) {\n headers.Authorization = `Bearer ${this.apiKey}`;\n }\n\n const response = await fetch(url, {\n method,\n headers,\n ...(body ? { body: JSON.stringify(body) } : {}),\n });\n\n return this.handleResponse<T>(response);\n }\n\n private async handleResponse<T>(response: Response): Promise<T> {\n const contentType = response.headers.get(\"content-type\") ?? \"\";\n\n if (!contentType.includes(\"application/json\")) {\n if (!response.ok) {\n throw new CloudApiError(response.status, {\n success: false,\n error: `HTTP ${response.status}: ${response.statusText}`,\n });\n }\n return { success: true } as T;\n }\n\n const body = await response.json();\n\n if (!response.ok) {\n const err = body as CloudApiErrorBody;\n throw response.status === 402\n ? new InsufficientCreditsError(err)\n : new CloudApiError(response.status, err);\n }\n\n return body as T;\n }\n}\n",
|
|
29
|
-
"
|
|
30
|
-
"/**\n * CloudBridgeService — WebSocket bridge to cloud-hosted agents.\n *\n * Establishes a JSON-RPC 2.0 WebSocket connection per container, allowing\n * the local milaidy client to send messages to and receive events from\n * cloud-hosted ElizaOS agents. Handles reconnection with exponential\n * backoff and heartbeat keepalive.\n */\n\nimport { type IAgentRuntime, logger, Service } from \"@elizaos/core\";\nimport { WebSocket } from \"undici\";\nimport type {\n BridgeConnection,\n BridgeConnectionState,\n BridgeMessage,\n BridgeMessageHandler,\n} from \"../types/cloud\";\nimport { DEFAULT_CLOUD_CONFIG } from \"../types/cloud\";\nimport type { CloudAuthService } from \"./cloud-auth\";\n\ninterface ActiveConnection {\n ws: WebSocket;\n state: BridgeConnectionState;\n connectedAt: number | null;\n lastHeartbeat: number | null;\n reconnectAttempts: number;\n heartbeatTimer: ReturnType<typeof setInterval> | null;\n reconnectTimer: ReturnType<typeof setTimeout> | null;\n handlers: Set<BridgeMessageHandler>;\n pendingRequests: Map<\n string | number,\n {\n resolve: (value: unknown) => void;\n reject: (reason: Error) => void;\n timeout: ReturnType<typeof setTimeout>;\n }\n >;\n nextRequestId: number;\n}\n\nexport class CloudBridgeService extends Service {\n static serviceType = \"CLOUD_BRIDGE\";\n capabilityDescription = \"WebSocket bridge to cloud-hosted ElizaOS agents\";\n\n private authService!: CloudAuthService;\n private readonly bridgeConfig = DEFAULT_CLOUD_CONFIG.bridge;\n private connections: Map<string, ActiveConnection> = new Map();\n\n static async start(runtime: IAgentRuntime): Promise<Service> {\n const service = new CloudBridgeService(runtime);\n await service.initialize();\n return service;\n }\n\n async stop(): Promise<void> {\n for (const [containerId] of this.connections) {\n await this.disconnect(containerId);\n }\n logger.info(\"[CloudBridge] Service stopped\");\n }\n\n private async initialize(): Promise<void> {\n const auth = this.runtime.getService(\"CLOUD_AUTH\");\n if (!auth) {\n logger.warn(\"[CloudBridge] CloudAuthService not available\");\n return;\n }\n this.authService = auth as CloudAuthService;\n logger.info(\"[CloudBridge] Service initialized\");\n }\n\n // ─── Connection Management ─────────────────────────────────────────────\n\n async connect(containerId: string): Promise<void> {\n if (this.connections.has(containerId)) {\n const existing = this.connections.get(containerId)!;\n if (existing.state === \"connected\" || existing.state === \"connecting\") {\n logger.debug(\n `[CloudBridge] Already connected/connecting to ${containerId}`,\n );\n return;\n }\n }\n\n await this.establishConnection(containerId, 0);\n }\n\n async disconnect(containerId: string): Promise<void> {\n const conn = this.connections.get(containerId);\n if (!conn) return;\n\n if (conn.heartbeatTimer) clearInterval(conn.heartbeatTimer);\n if (conn.reconnectTimer) clearTimeout(conn.reconnectTimer);\n\n // Reject all pending requests\n for (const [, pending] of conn.pendingRequests) {\n clearTimeout(pending.timeout);\n pending.reject(new Error(\"Bridge disconnected\"));\n }\n conn.pendingRequests.clear();\n\n if (\n conn.ws.readyState === WebSocket.OPEN ||\n conn.ws.readyState === WebSocket.CONNECTING\n ) {\n conn.ws.close(1000, \"Client disconnect\");\n }\n\n this.connections.delete(containerId);\n logger.info(`[CloudBridge] Disconnected from ${containerId}`);\n }\n\n private async establishConnection(\n containerId: string,\n reconnectAttempts: number,\n ): Promise<void> {\n const client = this.authService.getClient();\n const apiKey = this.authService.getApiKey();\n const wsUrl = client.buildWsUrl(`/agent-bridge/${containerId}`);\n\n // Append API key as query parameter for WebSocket auth\n const authUrl = apiKey\n ? `${wsUrl}?token=${encodeURIComponent(apiKey)}`\n : wsUrl;\n\n const conn: ActiveConnection = {\n ws: new WebSocket(authUrl),\n state: \"connecting\",\n connectedAt: null,\n lastHeartbeat: null,\n reconnectAttempts,\n heartbeatTimer: null,\n reconnectTimer: null,\n handlers: this.connections.get(containerId)?.handlers ?? new Set(),\n pendingRequests: new Map(),\n nextRequestId: 1,\n };\n\n this.connections.set(containerId, conn);\n\n conn.ws.addEventListener(\"open\", () => {\n conn.state = \"connected\";\n conn.connectedAt = Date.now();\n conn.reconnectAttempts = 0;\n logger.info(`[CloudBridge] Connected to agent ${containerId}`);\n\n // Start heartbeat\n conn.heartbeatTimer = setInterval(() => {\n this.sendHeartbeat(containerId);\n }, this.bridgeConfig.heartbeatIntervalMs);\n });\n\n conn.ws.addEventListener(\"message\", (event) => {\n const raw = event.data;\n const data =\n typeof raw === \"string\"\n ? raw\n : raw instanceof Buffer\n ? raw.toString(\"utf-8\")\n : String(raw);\n const message = JSON.parse(data) as BridgeMessage;\n\n // Handle heartbeat responses\n if (message.method === \"heartbeat.ack\") {\n conn.lastHeartbeat = Date.now();\n return;\n }\n\n // Handle responses to pending requests\n if (message.id !== undefined && !message.method) {\n const pending = conn.pendingRequests.get(message.id);\n if (pending) {\n clearTimeout(pending.timeout);\n conn.pendingRequests.delete(message.id);\n if (message.error) {\n pending.reject(new Error(message.error.message));\n } else {\n pending.resolve(message.result);\n }\n return;\n }\n }\n\n // Dispatch to handlers\n for (const handler of conn.handlers) {\n handler(message);\n }\n });\n\n conn.ws.addEventListener(\"close\", (event: CloseEvent) => {\n conn.state = \"disconnected\";\n if (conn.heartbeatTimer) clearInterval(conn.heartbeatTimer);\n\n // Don't reconnect on clean close\n if (event.code === 1000) {\n logger.info(`[CloudBridge] Clean disconnect from ${containerId}`);\n return;\n }\n\n logger.warn(\n `[CloudBridge] Connection lost to ${containerId} (code=${event.code}, reason=${event.reason})`,\n );\n this.scheduleReconnect(containerId, conn.reconnectAttempts + 1);\n });\n\n conn.ws.addEventListener(\"error\", () => {\n logger.error(`[CloudBridge] WebSocket error for ${containerId}`);\n });\n }\n\n private scheduleReconnect(containerId: string, attempt: number): void {\n if (attempt > this.bridgeConfig.maxReconnectAttempts) {\n logger.error(\n `[CloudBridge] Max reconnect attempts (${this.bridgeConfig.maxReconnectAttempts}) reached for ${containerId}`,\n );\n this.connections.delete(containerId);\n return;\n }\n\n // Exponential backoff with jitter: base * 2^attempt + random jitter\n const base = this.bridgeConfig.reconnectIntervalMs;\n const delay = Math.min(base * 2 ** Math.min(attempt, 5), 120_000);\n const jitter = Math.floor(Math.random() * 1000);\n\n logger.info(\n `[CloudBridge] Reconnecting to ${containerId} in ${Math.round((delay + jitter) / 1000)}s (attempt ${attempt})`,\n );\n\n const conn = this.connections.get(containerId);\n if (conn) {\n conn.state = \"reconnecting\";\n conn.reconnectTimer = setTimeout(() => {\n this.establishConnection(containerId, attempt);\n }, delay + jitter);\n }\n }\n\n private sendHeartbeat(containerId: string): void {\n const conn = this.connections.get(containerId);\n if (!conn || conn.state !== \"connected\") return;\n\n const message: BridgeMessage = {\n jsonrpc: \"2.0\",\n method: \"heartbeat\",\n params: { timestamp: Date.now() },\n };\n\n conn.ws.send(JSON.stringify(message));\n }\n\n // ─── Messaging ─────────────────────────────────────────────────────────\n\n /**\n * Send a JSON-RPC request and wait for a response.\n */\n async sendRequest(\n containerId: string,\n method: string,\n params: Record<string, unknown>,\n timeoutMs = 60_000,\n ): Promise<unknown> {\n const conn = this.connections.get(containerId);\n if (!conn || conn.state !== \"connected\") {\n throw new Error(`Not connected to container ${containerId}`);\n }\n\n const id = conn.nextRequestId++;\n const message: BridgeMessage = {\n jsonrpc: \"2.0\",\n id,\n method,\n params,\n };\n\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(() => {\n conn.pendingRequests.delete(id);\n reject(new Error(`Request ${method} timed out after ${timeoutMs}ms`));\n }, timeoutMs);\n\n conn.pendingRequests.set(id, { resolve, reject, timeout });\n conn.ws.send(JSON.stringify(message));\n });\n }\n\n /**\n * Send a one-way notification (no response expected).\n */\n sendNotification(\n containerId: string,\n method: string,\n params: Record<string, unknown>,\n ): void {\n const conn = this.connections.get(containerId);\n if (!conn || conn.state !== \"connected\") {\n throw new Error(`Not connected to container ${containerId}`);\n }\n\n const message: BridgeMessage = {\n jsonrpc: \"2.0\",\n method,\n params,\n };\n\n conn.ws.send(JSON.stringify(message));\n }\n\n /**\n * Send a chat message to the cloud agent and get the response.\n */\n async sendChatMessage(\n containerId: string,\n text: string,\n roomId?: string,\n metadata?: Record<string, unknown>,\n ): Promise<{ text: string; metadata?: Record<string, unknown> }> {\n const result = await this.sendRequest(containerId, \"message.send\", {\n text,\n roomId,\n metadata,\n });\n return result as { text: string; metadata?: Record<string, unknown> };\n }\n\n /**\n * Request the cloud agent's current status.\n */\n async getAgentStatus(containerId: string): Promise<Record<string, unknown>> {\n const result = await this.sendRequest(containerId, \"status.get\", {});\n return result as Record<string, unknown>;\n }\n\n /**\n * Update the cloud agent's configuration.\n */\n async updateAgentConfig(\n containerId: string,\n config: Record<string, unknown>,\n ): Promise<void> {\n await this.sendRequest(containerId, \"config.update\", config);\n }\n\n // ─── Event Handlers ────────────────────────────────────────────────────\n\n onMessage(containerId: string, handler: BridgeMessageHandler): () => void {\n let conn = this.connections.get(containerId);\n if (!conn) {\n // Pre-register handler before connection is established\n conn = {\n ws: null as unknown as WebSocket,\n state: \"disconnected\",\n connectedAt: null,\n lastHeartbeat: null,\n reconnectAttempts: 0,\n heartbeatTimer: null,\n reconnectTimer: null,\n handlers: new Set(),\n pendingRequests: new Map(),\n nextRequestId: 1,\n };\n this.connections.set(containerId, conn);\n }\n\n conn.handlers.add(handler);\n\n // Return unsubscribe function\n return () => {\n conn.handlers.delete(handler);\n };\n }\n\n // ─── Accessors ─────────────────────────────────────────────────────────\n\n getConnectionState(containerId: string): BridgeConnectionState {\n return this.connections.get(containerId)?.state ?? \"disconnected\";\n }\n\n getConnectionInfo(containerId: string): BridgeConnection | null {\n const conn = this.connections.get(containerId);\n if (!conn) return null;\n\n return {\n containerId,\n state: conn.state,\n connectedAt: conn.connectedAt,\n lastHeartbeat: conn.lastHeartbeat,\n reconnectAttempts: conn.reconnectAttempts,\n };\n }\n\n getConnectedContainerIds(): string[] {\n const ids: string[] = [];\n for (const [id, conn] of this.connections) {\n if (conn.state === \"connected\") ids.push(id);\n }\n return ids;\n }\n}\n",
|
|
31
|
-
"/**\n * CloudContainerService — Manages container lifecycle through ElizaCloud API.\n *\n * Handles creation, listing, status polling, health monitoring, and deletion\n * of ECS-backed containers. Deployments are async (CloudFormation takes 8-12\n * minutes), so `waitForDeployment` polls with exponential backoff.\n */\n\nimport { type IAgentRuntime, logger, Service } from \"@elizaos/core\";\nimport type {\n CloudContainer,\n ContainerDeleteResponse,\n ContainerGetResponse,\n ContainerHealthResponse,\n ContainerListResponse,\n CreateContainerRequest,\n CreateContainerResponse,\n} from \"../types/cloud\";\nimport { DEFAULT_CLOUD_CONFIG } from \"../types/cloud\";\nimport type { CloudApiClient } from \"../utils/cloud-api\";\nimport type { CloudAuthService } from \"./cloud-auth\";\n\n/** Active containers tracked locally for quick access. */\ninterface TrackedContainer {\n container: CloudContainer;\n pollingTimer: ReturnType<typeof setTimeout> | null;\n healthTimer: ReturnType<typeof setInterval> | null;\n}\n\nexport class CloudContainerService extends Service {\n static serviceType = \"CLOUD_CONTAINER\";\n capabilityDescription =\n \"ElizaCloud container provisioning and lifecycle management\";\n\n private authService!: CloudAuthService;\n private readonly containerDefaults = DEFAULT_CLOUD_CONFIG.container;\n private tracked: Map<string, TrackedContainer> = new Map();\n\n static async start(runtime: IAgentRuntime): Promise<Service> {\n const service = new CloudContainerService(runtime);\n await service.initialize();\n return service;\n }\n\n async stop(): Promise<void> {\n for (const [, tracked] of this.tracked) {\n if (tracked.pollingTimer) clearTimeout(tracked.pollingTimer);\n if (tracked.healthTimer) clearInterval(tracked.healthTimer);\n }\n this.tracked.clear();\n }\n\n private async initialize(): Promise<void> {\n // Get auth service reference\n const auth = this.runtime.getService(\"CLOUD_AUTH\");\n if (!auth) {\n logger.warn(\n \"[CloudContainer] CloudAuthService not available, container operations will fail\",\n );\n return;\n }\n this.authService = auth as CloudAuthService;\n\n // Load existing containers\n if (this.authService.isAuthenticated()) {\n const containers = await this.listContainers();\n for (const container of containers) {\n this.tracked.set(container.id, {\n container,\n pollingTimer: null,\n healthTimer: null,\n });\n\n // Resume polling for containers that are still deploying\n if (\n container.status === \"pending\" ||\n container.status === \"building\" ||\n container.status === \"deploying\"\n ) {\n this.startPolling(container.id);\n }\n\n // Start health monitoring for running containers\n if (container.status === \"running\") {\n this.startHealthMonitoring(container.id);\n }\n }\n logger.info(\n `[CloudContainer] Loaded ${containers.length} existing container(s)`,\n );\n }\n }\n\n private getClient(): CloudApiClient {\n return this.authService.getClient();\n }\n\n // ─── CRUD ───────────────────────────────────────────────────────────────\n\n async createContainer(\n request: CreateContainerRequest,\n ): Promise<CreateContainerResponse> {\n const client = this.getClient();\n const defaults = this.containerDefaults;\n\n const payload: Record<string, unknown> = {\n name: request.name,\n project_name: request.project_name,\n description: request.description,\n port: request.port ?? defaults.defaultPort,\n desired_count: request.desired_count ?? 1,\n cpu: request.cpu ?? defaults.defaultCpu,\n memory: request.memory ?? defaults.defaultMemory,\n environment_vars: request.environment_vars ?? {},\n health_check_path: request.health_check_path ?? \"/health\",\n ecr_image_uri: request.ecr_image_uri,\n ecr_repository_uri: request.ecr_repository_uri,\n image_tag: request.image_tag,\n architecture: request.architecture ?? defaults.defaultArchitecture,\n };\n\n const response = await client.post<CreateContainerResponse>(\n \"/containers\",\n payload,\n );\n\n // Track the new container\n this.tracked.set(response.data.id, {\n container: response.data,\n pollingTimer: null,\n healthTimer: null,\n });\n\n // Start polling for deployment completion\n this.startPolling(response.data.id);\n\n logger.info(\n `[CloudContainer] Created container \"${request.name}\" (id=${response.data.id}, stack=${response.stackName})`,\n );\n\n return response;\n }\n\n async listContainers(): Promise<CloudContainer[]> {\n const client = this.getClient();\n const response = await client.get<ContainerListResponse>(\"/containers\");\n return response.data;\n }\n\n async getContainer(containerId: string): Promise<CloudContainer> {\n const client = this.getClient();\n const response = await client.get<ContainerGetResponse>(\n `/containers/${containerId}`,\n );\n\n // Update local tracking\n const existing = this.tracked.get(containerId);\n if (existing) {\n existing.container = response.data;\n }\n\n return response.data;\n }\n\n async deleteContainer(containerId: string): Promise<void> {\n const client = this.getClient();\n await client.delete<ContainerDeleteResponse>(`/containers/${containerId}`);\n\n // Stop tracking\n const tracked = this.tracked.get(containerId);\n if (tracked) {\n if (tracked.pollingTimer) clearTimeout(tracked.pollingTimer);\n if (tracked.healthTimer) clearInterval(tracked.healthTimer);\n this.tracked.delete(containerId);\n }\n\n logger.info(`[CloudContainer] Deleted container ${containerId}`);\n }\n\n // ─── Deployment Polling ────────────────────────────────────────────────\n\n /**\n * Poll container status until it reaches a terminal state (running, failed, stopped).\n * Uses exponential backoff: 5s, 10s, 20s, 30s, 30s, ...\n */\n private startPolling(containerId: string): void {\n const tracked = this.tracked.get(containerId);\n if (!tracked) return;\n\n let attempt = 0;\n const maxAttempts = 120; // ~1 hour with backoff\n const baseInterval = 5_000;\n const maxInterval = 30_000;\n\n const poll = async () => {\n attempt++;\n if (attempt > maxAttempts) {\n logger.error(\n `[CloudContainer] Polling timed out for container ${containerId} after ${maxAttempts} attempts`,\n );\n return;\n }\n\n const container = await this.getContainer(containerId);\n const status = container.status;\n\n logger.debug(\n `[CloudContainer] Poll #${attempt} for ${containerId}: status=${status}`,\n );\n\n if (status === \"running\") {\n logger.info(\n `[CloudContainer] Container ${containerId} is now running at ${container.load_balancer_url}`,\n );\n this.startHealthMonitoring(containerId);\n return;\n }\n\n if (\n status === \"failed\" ||\n status === \"stopped\" ||\n status === \"suspended\"\n ) {\n logger.warn(\n `[CloudContainer] Container ${containerId} reached terminal state: ${status}`,\n );\n if (container.error_message) {\n logger.error(`[CloudContainer] Error: ${container.error_message}`);\n }\n return;\n }\n\n // Schedule next poll with exponential backoff\n const delay = Math.min(\n baseInterval * 2 ** Math.min(attempt - 1, 3),\n maxInterval,\n );\n tracked.pollingTimer = setTimeout(poll, delay);\n };\n\n tracked.pollingTimer = setTimeout(poll, baseInterval);\n }\n\n /**\n * Wait for a container to reach \"running\" status. Returns the updated container.\n * This is the synchronous API for actions that need to block.\n */\n async waitForDeployment(\n containerId: string,\n timeoutMs = 900_000,\n ): Promise<CloudContainer> {\n const deadline = Date.now() + timeoutMs;\n let interval = 5_000;\n const maxInterval = 30_000;\n\n while (Date.now() < deadline) {\n const container = await this.getContainer(containerId);\n\n if (container.status === \"running\") return container;\n if (container.status === \"failed\") {\n throw new Error(\n `Container deployment failed: ${container.error_message ?? \"unknown error\"}`,\n );\n }\n if (container.status === \"stopped\" || container.status === \"suspended\") {\n throw new Error(\n `Container reached terminal state: ${container.status}`,\n );\n }\n\n await new Promise((resolve) => setTimeout(resolve, interval));\n interval = Math.min(interval * 1.5, maxInterval);\n }\n\n throw new Error(\n `Container deployment timed out after ${Math.round(timeoutMs / 1000)}s`,\n );\n }\n\n // ─── Health Monitoring ─────────────────────────────────────────────────\n\n private startHealthMonitoring(containerId: string): void {\n const tracked = this.tracked.get(containerId);\n if (!tracked || tracked.healthTimer) return;\n\n const interval = 60_000; // Check every 60 seconds\n\n tracked.healthTimer = setInterval(() => {\n this.getContainerHealth(containerId)\n .then((health) => {\n if (!health.data.healthy) {\n logger.warn(\n `[CloudContainer] Container ${containerId} unhealthy: ${health.data.status}`,\n );\n }\n })\n .catch((err: Error) => {\n logger.error(\n `[CloudContainer] Health check failed for ${containerId}: ${err.message}`,\n );\n });\n }, interval);\n }\n\n async getContainerHealth(\n containerId: string,\n ): Promise<ContainerHealthResponse> {\n const client = this.getClient();\n return client.get<ContainerHealthResponse>(\n `/containers/${containerId}/health`,\n );\n }\n\n // ─── Accessors ─────────────────────────────────────────────────────────\n\n getTrackedContainers(): CloudContainer[] {\n return Array.from(this.tracked.values()).map((t) => t.container);\n }\n\n getTrackedContainer(containerId: string): CloudContainer | undefined {\n return this.tracked.get(containerId)?.container;\n }\n\n isContainerRunning(containerId: string): boolean {\n return this.tracked.get(containerId)?.container.status === \"running\";\n }\n\n getContainerUrl(containerId: string): string | null {\n return this.tracked.get(containerId)?.container.load_balancer_url ?? null;\n }\n}\n",
|
|
32
|
-
"
|
|
5
|
+
"import type { IAgentRuntime, Plugin } from \"@elizaos/core\";\nimport { logger, ModelType } from \"@elizaos/core\";\nimport { checkCloudCreditsAction } from \"./actions/check-credits\";\nimport { freezeCloudAgentAction } from \"./actions/freeze-agent\";\n// Cloud actions\nimport { provisionCloudAgentAction } from \"./actions/provision-agent\";\nimport { resumeCloudAgentAction } from \"./actions/resume-agent\";\n// Cloud providers\nimport { cloudStatusProvider } from \"./cloud-providers/cloud-status\";\nimport { containerHealthProvider } from \"./cloud-providers/container-health\";\nimport { creditBalanceProvider } from \"./cloud-providers/credit-balance\";\nimport { modelRegistryProvider } from \"./cloud-providers/model-registry\";\nimport { initializeOpenAI } from \"./init\";\nimport {\n fetchTextToSpeech,\n handleActionPlanner,\n handleImageDescription,\n handleImageGeneration,\n handleObjectLarge,\n handleObjectSmall,\n handleResearch,\n handleResponseHandler,\n handleTextEmbedding,\n handleTextLarge,\n handleTextMedium,\n handleTextMega,\n handleTextNano,\n handleTextSmall,\n} from \"./models\";\n// Cloud services\nimport { CloudAuthService } from \"./services/cloud-auth\";\nimport { CloudBackupService } from \"./services/cloud-backup\";\nimport { CloudBootstrapServiceImpl } from \"./services/cloud-bootstrap\";\nimport { CloudBridgeService } from \"./services/cloud-bridge\";\nimport { CloudContainerService } from \"./services/cloud-container\";\nimport { CloudManagedGatewayRelayService } from \"./services/cloud-managed-gateway-relay\";\nimport { CloudModelRegistryService } from \"./services/cloud-model-registry\";\nimport { createCloudApiClient } from \"./utils/sdk-client\";\n\nconst TEXT_NANO_MODEL_TYPE = (ModelType.TEXT_NANO ?? \"TEXT_NANO\") as string;\nconst TEXT_MEDIUM_MODEL_TYPE = (ModelType.TEXT_MEDIUM ?? \"TEXT_MEDIUM\") as string;\nconst TEXT_MEGA_MODEL_TYPE = (ModelType.TEXT_MEGA ?? \"TEXT_MEGA\") as string;\nconst RESPONSE_HANDLER_MODEL_TYPE = (ModelType.RESPONSE_HANDLER ?? \"RESPONSE_HANDLER\") as string;\nconst ACTION_PLANNER_MODEL_TYPE = (ModelType.ACTION_PLANNER ?? \"ACTION_PLANNER\") as string;\n\ntype ProcessEnvLike = Record<string, string | undefined>;\n\nfunction getProcessEnv(): ProcessEnvLike {\n if (typeof process === \"undefined\") {\n return {};\n }\n return process.env as ProcessEnvLike;\n}\n\nconst env = getProcessEnv();\n\nexport const elizaOSCloudPlugin: Plugin = {\n name: \"elizaOSCloud\",\n description:\n \"ElizaOS Cloud plugin — Multi-model AI generation, container provisioning, agent bridge, and billing management\",\n\n config: {\n ELIZAOS_CLOUD_API_KEY: env.ELIZAOS_CLOUD_API_KEY ?? null,\n ELIZAOS_CLOUD_BASE_URL: env.ELIZAOS_CLOUD_BASE_URL ?? null,\n ELIZAOS_CLOUD_ENABLED: env.ELIZAOS_CLOUD_ENABLED ?? null,\n // Text models\n ELIZAOS_CLOUD_NANO_MODEL: env.ELIZAOS_CLOUD_NANO_MODEL ?? null,\n ELIZAOS_CLOUD_MEDIUM_MODEL: env.ELIZAOS_CLOUD_MEDIUM_MODEL ?? null,\n ELIZAOS_CLOUD_SMALL_MODEL: env.ELIZAOS_CLOUD_SMALL_MODEL ?? null,\n ELIZAOS_CLOUD_LARGE_MODEL: env.ELIZAOS_CLOUD_LARGE_MODEL ?? null,\n ELIZAOS_CLOUD_MEGA_MODEL: env.ELIZAOS_CLOUD_MEGA_MODEL ?? null,\n ELIZAOS_CLOUD_RESPONSE_HANDLER_MODEL: env.ELIZAOS_CLOUD_RESPONSE_HANDLER_MODEL ?? null,\n ELIZAOS_CLOUD_SHOULD_RESPOND_MODEL: env.ELIZAOS_CLOUD_SHOULD_RESPOND_MODEL ?? null,\n ELIZAOS_CLOUD_ACTION_PLANNER_MODEL: env.ELIZAOS_CLOUD_ACTION_PLANNER_MODEL ?? null,\n ELIZAOS_CLOUD_PLANNER_MODEL: env.ELIZAOS_CLOUD_PLANNER_MODEL ?? null,\n ELIZAOS_CLOUD_RESPONSE_MODEL: env.ELIZAOS_CLOUD_RESPONSE_MODEL ?? null,\n NANO_MODEL: env.NANO_MODEL ?? null,\n MEDIUM_MODEL: env.MEDIUM_MODEL ?? null,\n SMALL_MODEL: env.SMALL_MODEL ?? null,\n LARGE_MODEL: env.LARGE_MODEL ?? null,\n MEGA_MODEL: env.MEGA_MODEL ?? null,\n RESPONSE_HANDLER_MODEL: env.RESPONSE_HANDLER_MODEL ?? null,\n SHOULD_RESPOND_MODEL: env.SHOULD_RESPOND_MODEL ?? null,\n ACTION_PLANNER_MODEL: env.ACTION_PLANNER_MODEL ?? null,\n PLANNER_MODEL: env.PLANNER_MODEL ?? null,\n RESPONSE_MODEL: env.RESPONSE_MODEL ?? null,\n // Research model\n ELIZAOS_CLOUD_RESEARCH_MODEL: env.ELIZAOS_CLOUD_RESEARCH_MODEL ?? null,\n RESEARCH_MODEL: env.RESEARCH_MODEL ?? null,\n // Embedding\n ELIZAOS_CLOUD_EMBEDDING_MODEL: env.ELIZAOS_CLOUD_EMBEDDING_MODEL ?? null,\n ELIZAOS_CLOUD_EMBEDDING_API_KEY: env.ELIZAOS_CLOUD_EMBEDDING_API_KEY ?? null,\n ELIZAOS_CLOUD_EMBEDDING_URL: env.ELIZAOS_CLOUD_EMBEDDING_URL ?? null,\n ELIZAOS_CLOUD_EMBEDDING_DIMENSIONS: env.ELIZAOS_CLOUD_EMBEDDING_DIMENSIONS ?? null,\n // Image\n ELIZAOS_CLOUD_IMAGE_DESCRIPTION_MODEL: env.ELIZAOS_CLOUD_IMAGE_DESCRIPTION_MODEL ?? null,\n ELIZAOS_CLOUD_IMAGE_DESCRIPTION_MAX_TOKENS:\n env.ELIZAOS_CLOUD_IMAGE_DESCRIPTION_MAX_TOKENS ?? null,\n ELIZAOS_CLOUD_IMAGE_GENERATION_MODEL: env.ELIZAOS_CLOUD_IMAGE_GENERATION_MODEL ?? null,\n // Audio\n ELIZAOS_CLOUD_TTS_MODEL: env.ELIZAOS_CLOUD_TTS_MODEL ?? null,\n ELIZAOS_CLOUD_TRANSCRIPTION_MODEL: env.ELIZAOS_CLOUD_TRANSCRIPTION_MODEL ?? null,\n // Telemetry\n ELIZAOS_CLOUD_EXPERIMENTAL_TELEMETRY: env.ELIZAOS_CLOUD_EXPERIMENTAL_TELEMETRY ?? null,\n },\n\n async init(config, runtime) {\n // Initialize inference (OpenAI-compatible client)\n initializeOpenAI(config, runtime);\n },\n\n // ─── Cloud Services ──────────────────────────────────────────────────\n // Services are registered in dependency order:\n // 1. CloudAuthService — must start first (other services depend on it)\n // 2. CloudBootstrapServiceImpl — pure trust-anchor accessor; no deps\n // 3. CloudManagedGatewayRelayService — optional local-runtime relay via shared cloud ingress\n // 4. CloudContainerService — needs auth to list/create containers\n // 5. CloudBridgeService — needs auth for WebSocket connections\n // 6. CloudBackupService — needs auth for snapshot API calls\n services: [\n CloudAuthService,\n CloudBootstrapServiceImpl,\n CloudManagedGatewayRelayService,\n CloudModelRegistryService,\n CloudContainerService,\n CloudBridgeService,\n CloudBackupService,\n ],\n\n // ─── Cloud Actions ───────────────────────────────────────────────────\n actions: [\n provisionCloudAgentAction,\n freezeCloudAgentAction,\n resumeCloudAgentAction,\n checkCloudCreditsAction,\n ],\n\n // ─── Cloud Providers ─────────────────────────────────────────────────\n providers: [\n cloudStatusProvider,\n creditBalanceProvider,\n containerHealthProvider,\n modelRegistryProvider,\n ],\n\n // ─── Inference Model Handlers ────────────────────────────────────────\n models: {\n [ModelType.TEXT_EMBEDDING]: handleTextEmbedding,\n [TEXT_NANO_MODEL_TYPE]: handleTextNano,\n [TEXT_MEDIUM_MODEL_TYPE]: handleTextMedium,\n [ModelType.TEXT_SMALL]: handleTextSmall,\n [ModelType.TEXT_LARGE]: handleTextLarge,\n [TEXT_MEGA_MODEL_TYPE]: handleTextMega,\n [RESPONSE_HANDLER_MODEL_TYPE]: handleResponseHandler,\n [ACTION_PLANNER_MODEL_TYPE]: handleActionPlanner,\n [ModelType.RESEARCH]: handleResearch,\n [ModelType.IMAGE]: handleImageGeneration,\n [ModelType.IMAGE_DESCRIPTION]: handleImageDescription,\n [ModelType.OBJECT_SMALL]: handleObjectSmall,\n [ModelType.OBJECT_LARGE]: handleObjectLarge,\n },\n\n tests: [\n {\n name: \"ELIZAOS_CLOUD_plugin_tests\",\n tests: [\n {\n name: \"ELIZAOS_CLOUD_test_url_and_api_key_validation\",\n fn: async (runtime: IAgentRuntime) => {\n const data = await createCloudApiClient(runtime).get<{\n data?: Array<Record<string, never>>;\n }>(\"/models\");\n logger.log(\n {\n data: data.data?.length ?? \"N/A\",\n },\n \"Models Available\"\n );\n },\n },\n {\n name: \"ELIZAOS_CLOUD_test_text_embedding\",\n fn: async (runtime: IAgentRuntime) => {\n const embedding = await runtime.useModel(ModelType.TEXT_EMBEDDING, {\n text: \"Hello, world!\",\n });\n logger.log({ embedding }, \"embedding\");\n },\n },\n {\n name: \"ELIZAOS_CLOUD_test_text_large\",\n fn: async (runtime: IAgentRuntime) => {\n const text = await runtime.useModel(ModelType.TEXT_LARGE, {\n prompt: \"What is the nature of reality in 10 words?\",\n });\n if (text.length === 0) {\n throw new Error(\"Failed to generate text\");\n }\n logger.log({ text }, \"generated with test_text_large\");\n },\n },\n {\n name: \"ELIZAOS_CLOUD_test_text_small\",\n fn: async (runtime: IAgentRuntime) => {\n const text = await runtime.useModel(ModelType.TEXT_SMALL, {\n prompt: \"What is the nature of reality in 10 words?\",\n });\n if (text.length === 0) {\n throw new Error(\"Failed to generate text\");\n }\n logger.log({ text }, \"generated with test_text_small\");\n },\n },\n {\n name: \"ELIZAOS_CLOUD_test_image_generation\",\n fn: async (runtime: IAgentRuntime) => {\n logger.log(\"ELIZAOS_CLOUD_test_image_generation\");\n const image = await runtime.useModel(ModelType.IMAGE, {\n prompt: \"A beautiful sunset over a calm ocean\",\n count: 1,\n size: \"1024x1024\",\n });\n logger.log({ image }, \"generated with test_image_generation\");\n },\n },\n {\n name: \"image-description\",\n fn: async (runtime: IAgentRuntime) => {\n logger.log(\"ELIZAOS_CLOUD_test_image_description\");\n const result = await runtime.useModel(\n ModelType.IMAGE_DESCRIPTION,\n \"https://upload.wikimedia.org/wikipedia/commons/thumb/1/1c/Vitalik_Buterin_TechCrunch_London_2015_%28cropped%29.jpg/537px-Vitalik_Buterin_TechCrunch_London_2015_%28cropped%29.jpg\"\n );\n\n if (\n result &&\n typeof result === \"object\" &&\n \"title\" in result &&\n \"description\" in result\n ) {\n logger.log({ result }, \"Image description\");\n } else {\n logger.error(`Invalid image description result format: ${JSON.stringify(result)}`);\n }\n },\n },\n {\n name: \"ELIZAOS_CLOUD_test_transcription\",\n fn: async (runtime: IAgentRuntime) => {\n logger.log(\"ELIZAOS_CLOUD_test_transcription\");\n const response = await fetch(\n \"https://upload.wikimedia.org/wikipedia/en/4/40/Chris_Benoit_Voice_Message.ogg\"\n );\n const arrayBuffer = await response.arrayBuffer();\n const transcription = await runtime.useModel(\n ModelType.TRANSCRIPTION,\n Buffer.from(new Uint8Array(arrayBuffer))\n );\n logger.log({ transcription }, \"generated with test_transcription\");\n },\n },\n {\n name: \"ELIZAOS_CLOUD_test_text_tokenizer_encode\",\n fn: async (runtime: IAgentRuntime) => {\n const prompt = \"Hello tokenizer encode!\";\n const tokens = await runtime.useModel(ModelType.TEXT_TOKENIZER_ENCODE, {\n prompt,\n modelType: ModelType.TEXT_SMALL,\n });\n if (!Array.isArray(tokens) || tokens.length === 0) {\n throw new Error(\"Failed to tokenize text: expected non-empty array of tokens\");\n }\n logger.log({ tokens }, \"Tokenized output\");\n },\n },\n {\n name: \"ELIZAOS_CLOUD_test_text_tokenizer_decode\",\n fn: async (runtime: IAgentRuntime) => {\n const prompt = \"Hello tokenizer decode!\";\n const tokens = await runtime.useModel(ModelType.TEXT_TOKENIZER_ENCODE, {\n prompt,\n modelType: ModelType.TEXT_SMALL,\n });\n const decodedText = await runtime.useModel(ModelType.TEXT_TOKENIZER_DECODE, {\n tokens,\n modelType: ModelType.TEXT_SMALL,\n });\n if (decodedText !== prompt) {\n throw new Error(\n `Decoded text does not match original. Expected \"${prompt}\", got \"${decodedText}\"`\n );\n }\n logger.log({ decodedText }, \"Decoded text\");\n },\n },\n {\n name: \"ELIZAOS_CLOUD_test_text_to_speech\",\n fn: async (runtime: IAgentRuntime) => {\n const response = await fetchTextToSpeech(runtime, {\n text: \"Hello, this is a test for text-to-speech.\",\n });\n if (!response) {\n throw new Error(\"Failed to generate speech\");\n }\n logger.log(\"Generated speech successfully\");\n },\n },\n ],\n },\n ],\n};\n\nexport default elizaOSCloudPlugin;\n",
|
|
6
|
+
"/**\n * CHECK_CLOUD_CREDITS — Query ElizaCloud credit balance and usage.\n */\n\nimport type {\n Action,\n ActionResult,\n HandlerCallback,\n HandlerOptions,\n IAgentRuntime,\n Memory,\n State,\n} from \"@elizaos/core\";\nimport type { CloudAuthService } from \"../services/cloud-auth\";\nimport type { CloudContainerService } from \"../services/cloud-container\";\nimport type { CreditBalanceResponse, CreditSummaryResponse } from \"../types/cloud\";\n\nconst DAILY_COST_PER_CONTAINER = 0.67;\n\nexport const checkCloudCreditsAction: Action = {\n name: \"CHECK_CLOUD_CREDITS\",\n description: \"Check ElizaCloud credit balance, container costs, and estimated remaining runtime.\",\n descriptionCompressed: \"Check ElizaCloud credits, container costs, remaining runtime.\",\n similes: [\"check credits\", \"check balance\", \"how much credit\", \"cloud billing\"],\n tags: [\"cloud\", \"billing\"],\n parameters: [\n {\n name: \"detailed\",\n description: \"Include transaction history\",\n required: false,\n schema: { type: \"boolean\" },\n },\n ],\n\n validate: async (\n runtime: IAgentRuntime,\n message: Memory,\n state?: State,\n options?: HandlerOptions\n ): Promise<boolean> => {\n const __avTextRaw = typeof message?.content?.text === \"string\" ? message.content.text : \"\";\n const __avText = __avTextRaw.toLowerCase();\n const __avKeywords = [\"check\", \"cloud\", \"credits\"];\n const __avKeywordOk =\n __avKeywords.length > 0 && __avKeywords.some((kw) => kw.length > 0 && __avText.includes(kw));\n const __avRegex = /\\b(?:check|cloud|credits)\\b/i;\n const __avRegexOk = Boolean(__avText.match(__avRegex));\n const __avSource = String(message?.content?.source ?? \"\");\n const __avExpectedSource = \"\";\n const __avSourceOk = __avExpectedSource\n ? __avSource === __avExpectedSource\n : Boolean(__avSource || state || runtime?.agentId || runtime?.getService);\n const __avOptions = options && typeof options === \"object\" ? options : {};\n const __avInputOk =\n __avText.trim().length > 0 ||\n Object.keys(__avOptions as Record<string, unknown>).length > 0 ||\n Boolean(message?.content && typeof message.content === \"object\");\n\n if (!(__avKeywordOk && __avRegexOk && __avSourceOk && __avInputOk)) {\n return false;\n }\n\n const __avLegacyValidate = async (runtime: IAgentRuntime) => {\n return !!(\n runtime.getService(\"CLOUD_AUTH\") as CloudAuthService | undefined\n )?.isAuthenticated();\n };\n try {\n return Boolean(await __avLegacyValidate(runtime));\n } catch {\n return false;\n }\n },\n\n async handler(\n runtime: IAgentRuntime,\n message: Memory,\n _state?: State,\n options?: Record<string, unknown>,\n callback?: HandlerCallback\n ): Promise<ActionResult> {\n const auth = runtime.getService(\"CLOUD_AUTH\") as CloudAuthService;\n const containerSvc = runtime.getService(\"CLOUD_CONTAINER\") as CloudContainerService | undefined;\n const client = auth.getClient();\n\n const detailed =\n options?.detailed === true ||\n (message.metadata as Record<string, unknown> | undefined)?.detailed === true;\n\n const {\n data: { balance },\n } = await client.get<CreditBalanceResponse>(\"/credits/balance\");\n\n const running =\n containerSvc?.getTrackedContainers().filter((c) => c.status === \"running\").length ?? 0;\n const dailyCost = running * DAILY_COST_PER_CONTAINER;\n const daysRemaining = dailyCost > 0 ? balance / dailyCost : null;\n\n const lines = [\n `ElizaCloud credits: $${balance.toFixed(2)}`,\n running > 0\n ? `Active containers: ${running} ($${dailyCost.toFixed(2)}/day) — ~${daysRemaining?.toFixed(1)} days remaining`\n : \"No active containers.\",\n ];\n\n if (detailed) {\n const { data } = await client.get<CreditSummaryResponse>(\"/credits/summary\");\n lines.push(\n `Total spent: $${data.totalSpent.toFixed(2)} | Total added: $${data.totalAdded.toFixed(2)}`\n );\n for (const tx of data.recentTransactions.slice(0, 10)) {\n const sign = tx.amount >= 0 ? \"+\" : \"\";\n lines.push(\n ` ${sign}$${tx.amount.toFixed(2)} — ${tx.description} (${new Date(tx.created_at).toLocaleDateString()})`\n );\n }\n }\n\n const text = lines.join(\"\\n\");\n if (callback) await callback({ text, actions: [\"CHECK_CLOUD_CREDITS\"] });\n\n return {\n success: true,\n text,\n data: {\n balance,\n runningContainers: running,\n dailyCost,\n estimatedDaysRemaining: daysRemaining,\n },\n };\n },\n};\n",
|
|
7
|
+
"import type { ActionResult, HandlerOptions } from \"@elizaos/core\";\n\ntype OptionsRecord = Record<string, unknown>;\n\nexport function mergedOptions(options?: HandlerOptions): OptionsRecord {\n const direct = (options ?? {}) as OptionsRecord;\n const parameters =\n direct.parameters && typeof direct.parameters === \"object\"\n ? (direct.parameters as OptionsRecord)\n : {};\n return { ...direct, ...parameters };\n}\n\nexport function isConfirmed(options?: HandlerOptions): boolean {\n const raw = mergedOptions(options).confirmed;\n return raw === true || raw === \"true\";\n}\n\nexport function confirmationRequired(preview: string, data: OptionsRecord): ActionResult {\n return {\n success: false,\n text: preview,\n data: { requiresConfirmation: true, preview, ...data },\n };\n}\n",
|
|
8
|
+
"/**\n * FREEZE_CLOUD_AGENT — Snapshot and stop a cloud agent.\n *\n * Creates a state snapshot, disconnects bridge, cancels auto-backup,\n * stops the container. Resume later with RESUME_CLOUD_AGENT.\n */\n\nimport type {\n Action,\n ActionResult,\n HandlerCallback,\n HandlerOptions,\n IAgentRuntime,\n Memory,\n State,\n} from \"@elizaos/core\";\nimport type { CloudAuthService } from \"../services/cloud-auth\";\nimport type { CloudBackupService } from \"../services/cloud-backup\";\nimport type { CloudBridgeService } from \"../services/cloud-bridge\";\nimport type { CloudContainerService } from \"../services/cloud-container\";\nimport { confirmationRequired, isConfirmed, mergedOptions } from \"./confirmation\";\n\nfunction getContainerId(message: Memory, options?: HandlerOptions): string | null {\n const params = mergedOptions(options);\n if (params.containerId) return String(params.containerId);\n const meta = (message.metadata as Record<string, unknown> | undefined)?.actionParams as\n | Record<string, unknown>\n | undefined;\n return meta?.containerId ? String(meta.containerId) : null;\n}\n\nexport const freezeCloudAgentAction: Action = {\n name: \"FREEZE_CLOUD_AGENT\",\n description: \"Freeze a cloud agent: snapshot state, disconnect bridge, stop container.\",\n descriptionCompressed: \"Freeze cloud agent: snapshot, disconnect, stop container.\",\n similes: [\"freeze agent\", \"hibernate agent\", \"pause agent\", \"stop cloud agent\"],\n tags: [\"cloud\", \"container\", \"backup\"],\n parameters: [\n {\n name: \"containerId\",\n description: \"ID of the container to freeze\",\n required: true,\n schema: { type: \"string\" },\n },\n {\n name: \"confirmed\",\n description: \"Must be true to freeze the cloud agent after preview.\",\n required: false,\n schema: { type: \"boolean\", default: false },\n },\n ],\n\n validate: async (\n runtime: IAgentRuntime,\n message: Memory,\n state?: State,\n options?: HandlerOptions\n ): Promise<boolean> => {\n const __avTextRaw = typeof message?.content?.text === \"string\" ? message.content.text : \"\";\n const __avText = __avTextRaw.toLowerCase();\n const __avKeywords = [\"freeze\", \"cloud\"];\n const __avKeywordOk =\n __avKeywords.length > 0 && __avKeywords.some((kw) => kw.length > 0 && __avText.includes(kw));\n const __avRegex = /\\b(?:freeze|cloud)\\b/i;\n const __avRegexOk = Boolean(__avText.match(__avRegex));\n const __avSource = String(message?.content?.source ?? \"\");\n const __avExpectedSource = \"\";\n const __avSourceOk = __avExpectedSource\n ? __avSource === __avExpectedSource\n : Boolean(__avSource || state || runtime?.agentId || runtime?.getService);\n const __avOptions = options && typeof options === \"object\" ? options : {};\n const __avInputOk =\n __avText.trim().length > 0 ||\n Object.keys(__avOptions as Record<string, unknown>).length > 0 ||\n Boolean(message?.content && typeof message.content === \"object\");\n\n if (!(__avKeywordOk && __avRegexOk && __avSourceOk && __avInputOk)) {\n return false;\n }\n\n const __avLegacyValidate = async (runtime: IAgentRuntime) => {\n return !!(\n runtime.getService(\"CLOUD_AUTH\") as CloudAuthService | undefined\n )?.isAuthenticated();\n };\n try {\n return Boolean(await __avLegacyValidate(runtime));\n } catch {\n return false;\n }\n },\n\n async handler(\n runtime: IAgentRuntime,\n message: Memory,\n _state?: State,\n options?: HandlerOptions,\n callback?: HandlerCallback\n ): Promise<ActionResult> {\n const containers = runtime.getService(\"CLOUD_CONTAINER\") as CloudContainerService;\n const bridge = runtime.getService(\"CLOUD_BRIDGE\") as CloudBridgeService | undefined;\n const backup = runtime.getService(\"CLOUD_BACKUP\") as CloudBackupService | undefined;\n\n const containerId = getContainerId(message, options);\n if (!containerId) return { success: false, error: \"Missing containerId\" };\n\n const container = await containers.getContainer(containerId);\n if (container.status !== \"running\") {\n return {\n success: false,\n error: `Container not running (status: ${container.status})`,\n };\n }\n\n const preview = [\n \"Confirmation required before freezing Eliza Cloud agent:\",\n `Container: ${container.name}`,\n `ID: ${containerId}`,\n \"Effects: create snapshot, disconnect bridge, stop container.\",\n ].join(\"\\n\");\n if (!isConfirmed(options)) {\n await callback?.({ text: preview, actions: [\"FREEZE_CLOUD_AGENT\"] });\n return confirmationRequired(preview, {\n containerId,\n containerName: container.name,\n });\n }\n\n const notify = async (text: string) => {\n if (callback) await callback({ text, actions: [\"FREEZE_CLOUD_AGENT\"] });\n };\n await notify(`Freezing \"${container.name}\"... Creating snapshot.`);\n\n // Snapshot → disconnect → stop\n let snapshotId: string | null = null;\n if (backup) {\n const snap = await backup.createSnapshot(containerId, \"manual\", {\n trigger: \"user-freeze\",\n containerName: container.name,\n });\n snapshotId = snap.id;\n backup.cancelAutoBackup(containerId);\n }\n\n if (bridge) await bridge.disconnect(containerId);\n await containers.deleteContainer(containerId);\n\n await notify(`\"${container.name}\" frozen.${snapshotId ? ` Snapshot: ${snapshotId}` : \"\"}`);\n\n return {\n success: true,\n text: `Agent \"${container.name}\" frozen`,\n data: { containerId, containerName: container.name, snapshotId },\n };\n },\n};\n",
|
|
9
|
+
"/**\n * PROVISION_CLOUD_AGENT — Deploys an ElizaOS agent to ElizaCloud.\n *\n * Creates a container, waits for deployment, connects bridge, starts backup.\n */\n\nimport type {\n Action,\n ActionResult,\n HandlerCallback,\n HandlerOptions,\n IAgentRuntime,\n Memory,\n State,\n} from \"@elizaos/core\";\nimport { logger } from \"@elizaos/core\";\nimport type { CloudAuthService } from \"../services/cloud-auth\";\nimport type { CloudBackupService } from \"../services/cloud-backup\";\nimport type { CloudBridgeService } from \"../services/cloud-bridge\";\nimport type { CloudContainerService } from \"../services/cloud-container\";\nimport type { CreateContainerRequest } from \"../types/cloud\";\nimport { DEFAULT_CLOUD_CONFIG } from \"../types/cloud\";\nimport { collectEnvVars } from \"../utils/forwarded-settings\";\nimport { confirmationRequired, isConfirmed, mergedOptions } from \"./confirmation\";\n\nfunction extractParams(message: Memory, options?: HandlerOptions): Record<string, unknown> {\n const params = mergedOptions(options);\n if (Object.keys(params).length > 0) return params;\n const meta = message.metadata as Record<string, unknown> | undefined;\n if (meta?.actionParams) return meta.actionParams as Record<string, unknown>;\n // Regex fallback from free-text\n const text = (message.content as { text?: string })?.text ?? \"\";\n const name = text.match(/name[:\\s]+[\"']?([^\"',]+)[\"']?/i)?.[1]?.trim();\n const project = text.match(/project[:\\s]+[\"']?([^\"',\\s]+)[\"']?/i)?.[1]?.trim();\n return { name, project_name: project };\n}\n\nexport const provisionCloudAgentAction: Action = {\n name: \"PROVISION_CLOUD_AGENT\",\n description:\n \"Deploy an ElizaOS agent to ElizaCloud. Provisions a container, waits for deployment, connects the bridge, and starts auto-backup.\",\n descriptionCompressed:\n \"Deploy agent to ElizaCloud. Provisions container, connects bridge, starts backup.\",\n similes: [\n \"deploy agent to cloud\",\n \"launch cloud agent\",\n \"start remote agent\",\n \"provision container\",\n ],\n tags: [\"cloud\", \"container\", \"deployment\"],\n parameters: [\n {\n name: \"name\",\n description: \"Human-readable name for the cloud agent\",\n required: true,\n schema: { type: \"string\" },\n },\n {\n name: \"project_name\",\n description: \"Unique project identifier (lowercase, no spaces)\",\n required: true,\n schema: { type: \"string\" },\n },\n {\n name: \"description\",\n description: \"Optional description\",\n required: false,\n schema: { type: \"string\" },\n },\n {\n name: \"environment_vars\",\n description: \"Additional environment variables\",\n required: false,\n schema: { type: \"object\" },\n },\n {\n name: \"auto_backup\",\n description: \"Enable periodic auto-backup (default: true)\",\n required: false,\n schema: { type: \"boolean\" },\n },\n {\n name: \"confirmed\",\n description: \"Must be true to provision the cloud agent after preview.\",\n required: false,\n schema: { type: \"boolean\", default: false },\n },\n ],\n\n validate: async (\n runtime: IAgentRuntime,\n message: Memory,\n state?: State,\n options?: HandlerOptions\n ): Promise<boolean> => {\n const __avTextRaw = typeof message?.content?.text === \"string\" ? message.content.text : \"\";\n const __avText = __avTextRaw.toLowerCase();\n const __avKeywords = [\"provision\", \"cloud\"];\n const __avKeywordOk =\n __avKeywords.length > 0 && __avKeywords.some((kw) => kw.length > 0 && __avText.includes(kw));\n const __avRegex = /\\b(?:provision|cloud)\\b/i;\n const __avRegexOk = Boolean(__avText.match(__avRegex));\n const __avSource = String(message?.content?.source ?? \"\");\n const __avExpectedSource = \"\";\n const __avSourceOk = __avExpectedSource\n ? __avSource === __avExpectedSource\n : Boolean(__avSource || state || runtime?.agentId || runtime?.getService);\n const __avOptions = options && typeof options === \"object\" ? options : {};\n const __avInputOk =\n __avText.trim().length > 0 ||\n Object.keys(__avOptions as Record<string, unknown>).length > 0 ||\n Boolean(message?.content && typeof message.content === \"object\");\n\n if (!(__avKeywordOk && __avRegexOk && __avSourceOk && __avInputOk)) {\n return false;\n }\n\n const __avLegacyValidate = async (runtime: IAgentRuntime) => {\n const auth = runtime.getService(\"CLOUD_AUTH\") as CloudAuthService | undefined;\n return !!auth?.isAuthenticated();\n };\n try {\n return Boolean(await __avLegacyValidate(runtime));\n } catch {\n return false;\n }\n },\n\n async handler(\n runtime: IAgentRuntime,\n message: Memory,\n _state?: State,\n options?: HandlerOptions,\n callback?: HandlerCallback\n ): Promise<ActionResult> {\n const auth = runtime.getService(\"CLOUD_AUTH\") as CloudAuthService;\n const containers = runtime.getService(\"CLOUD_CONTAINER\") as CloudContainerService;\n const bridge = runtime.getService(\"CLOUD_BRIDGE\") as CloudBridgeService | undefined;\n const backup = runtime.getService(\"CLOUD_BACKUP\") as CloudBackupService | undefined;\n\n if (!auth?.isAuthenticated() || !containers) {\n return {\n success: false,\n error: \"ElizaCloud not authenticated or container service unavailable\",\n };\n }\n\n const params = extractParams(message, options);\n if (!params.name || !params.project_name) {\n return {\n success: false,\n error: \"Missing required parameters: name and project_name\",\n };\n }\n\n const autoBackup = params.auto_backup !== false;\n const preview = [\n \"Confirmation required before provisioning Eliza Cloud agent:\",\n `Name: ${String(params.name)}`,\n `Project: ${String(params.project_name)}`,\n `Auto-backup: ${autoBackup ? \"enabled\" : \"disabled\"}`,\n ].join(\"\\n\");\n if (!isConfirmed(options)) {\n await callback?.({ text: preview, actions: [\"PROVISION_CLOUD_AGENT\"] });\n return confirmationRequired(preview, {\n name: String(params.name),\n project_name: String(params.project_name),\n auto_backup: autoBackup,\n });\n }\n\n const notify = async (text: string) => {\n if (callback) await callback({ text, actions: [\"PROVISION_CLOUD_AGENT\"] });\n };\n await notify(`Provisioning cloud agent \"${params.name}\"... This typically takes 8-12 minutes.`);\n\n const defs = DEFAULT_CLOUD_CONFIG.container;\n const request: CreateContainerRequest = {\n name: params.name as string,\n project_name: params.project_name as string,\n description: params.description as string | undefined,\n port: defs.defaultPort,\n cpu: defs.defaultCpu,\n memory: defs.defaultMemory,\n architecture: defs.defaultArchitecture,\n ecr_image_uri: defs.defaultImage,\n environment_vars: {\n ...collectEnvVars(runtime),\n ...(params.environment_vars as Record<string, string> | undefined),\n },\n health_check_path: \"/health\",\n };\n\n const created = await containers.createContainer(request);\n const id = created.data.id;\n await notify(\n `Container created (id: ${id}). Credits: -$${created.creditsDeducted.toFixed(2)} ($${created.creditsRemaining.toFixed(2)} remaining).`\n );\n\n const running = await containers.waitForDeployment(id);\n await notify(`Container running at ${running.load_balancer_url}`);\n\n if (bridge) {\n await bridge.connect(id);\n logger.info(`[PROVISION] Bridge connected to ${id}`);\n }\n\n if (autoBackup && backup) backup.scheduleAutoBackup(id);\n\n await notify(`Agent \"${params.name}\" deployed.${autoBackup ? \" Auto-backup enabled.\" : \"\"}`);\n\n return {\n success: true,\n text: `Cloud agent \"${params.name}\" deployed`,\n data: {\n containerId: id,\n containerUrl: running.load_balancer_url,\n status: running.status,\n creditsDeducted: created.creditsDeducted,\n creditsRemaining: created.creditsRemaining,\n bridgeConnected: bridge?.getConnectionState(id) === \"connected\",\n autoBackupEnabled: autoBackup,\n },\n };\n },\n};\n",
|
|
10
|
+
"/**\n * Cloud-specific types for ElizaCloud integration.\n *\n * These types mirror the eliza-cloud-v2 database schemas and API contracts\n * for containers, auth, credits, bridge messaging, and agent state snapshots.\n */\n\n// ─── Container Types ────────────────────────────────────────────────────────\n\nexport type ContainerStatus =\n | \"pending\"\n | \"building\"\n | \"deploying\"\n | \"running\"\n | \"stopped\"\n | \"failed\"\n | \"suspended\";\n\nexport type ContainerBillingStatus =\n | \"active\"\n | \"warning\"\n | \"suspended\"\n | \"shutdown_pending\"\n | \"archived\";\n\nexport type ContainerArchitecture = \"arm64\" | \"x86_64\";\n\nexport interface CloudContainer {\n id: string;\n name: string;\n project_name: string;\n description: string | null;\n organization_id: string;\n user_id: string;\n status: ContainerStatus;\n image_tag: string | null;\n port: number;\n desired_count: number;\n cpu: number;\n memory: number;\n architecture: ContainerArchitecture;\n environment_vars: Record<string, string>;\n health_check_path: string;\n load_balancer_url: string | null;\n ecr_repository_uri: string | null;\n ecr_image_tag: string | null;\n cloudformation_stack_name: string | null;\n billing_status: ContainerBillingStatus;\n total_billed: string;\n last_deployed_at: string | null;\n last_health_check: string | null;\n deployment_log: string | null;\n error_message: string | null;\n metadata: Record<string, unknown>;\n created_at: string;\n updated_at: string;\n}\n\nexport interface CreateContainerRequest {\n name: string;\n project_name: string;\n description?: string;\n port?: number;\n desired_count?: number;\n cpu?: number;\n memory?: number;\n environment_vars?: Record<string, string>;\n health_check_path?: string;\n ecr_image_uri: string;\n ecr_repository_uri?: string;\n image_tag?: string;\n architecture?: ContainerArchitecture;\n}\n\nexport interface CreateContainerResponse {\n success: boolean;\n data: CloudContainer;\n message: string;\n creditsDeducted: number;\n creditsRemaining: number;\n stackName: string;\n polling: {\n endpoint: string;\n intervalMs: number;\n expectedDurationMs: number;\n };\n}\n\nexport interface ContainerListResponse {\n success: boolean;\n data: CloudContainer[];\n}\n\nexport interface ContainerGetResponse {\n success: boolean;\n data: CloudContainer;\n}\n\nexport interface ContainerDeleteResponse {\n success: boolean;\n message?: string;\n}\n\nexport interface ContainerHealthResponse {\n success: boolean;\n data: {\n status: string;\n healthy: boolean;\n lastCheck: string | null;\n uptime: number | null;\n };\n}\n\n// ─── Auth Types ─────────────────────────────────────────────────────────────\n\nexport type DevicePlatform = \"ios\" | \"android\" | \"macos\" | \"windows\" | \"linux\" | \"web\";\n\nexport interface DeviceAuthRequest {\n deviceId: string;\n platform: DevicePlatform;\n appVersion: string;\n deviceName?: string;\n}\n\nexport interface DeviceAuthResponse {\n success: boolean;\n data: {\n apiKey: string;\n userId: string;\n organizationId: string;\n credits: number;\n isNew: boolean;\n };\n}\n\nexport interface CloudCredentials {\n apiKey: string;\n userId: string;\n organizationId: string;\n authenticatedAt: number;\n}\n\n// ─── Credits Types ──────────────────────────────────────────────────────────\n\nexport interface CreditBalanceResponse {\n success: boolean;\n data: {\n balance: number;\n currency: string;\n };\n}\n\nexport interface CreditSummaryResponse {\n success: boolean;\n data: {\n balance: number;\n totalSpent: number;\n totalAdded: number;\n recentTransactions: CreditTransaction[];\n };\n}\n\nexport interface CreditTransaction {\n id: string;\n amount: number;\n description: string;\n type: \"credit\" | \"debit\";\n created_at: string;\n}\n\n// ─── Bridge Types ───────────────────────────────────────────────────────────\n\nexport type BridgeConnectionState = \"disconnected\" | \"connecting\" | \"connected\" | \"reconnecting\";\n\nexport interface BridgeMessage {\n jsonrpc: \"2.0\";\n id?: string | number;\n method?: string;\n params?: Record<string, unknown>;\n result?: unknown;\n error?: BridgeError;\n}\n\nexport interface BridgeError {\n code: number;\n message: string;\n data?: unknown;\n}\n\nexport type BridgeMessageHandler = (message: BridgeMessage) => void;\n\nexport interface BridgeConnection {\n containerId: string;\n state: BridgeConnectionState;\n connectedAt: number | null;\n lastHeartbeat: number | null;\n reconnectAttempts: number;\n}\n\n// ─── Managed Gateway Relay Types ───────────────────────────────────────────\n\nexport interface GatewayRelaySession {\n id: string;\n organizationId: string;\n userId: string;\n runtimeAgentId: string;\n agentName: string | null;\n platform: \"local-runtime\";\n createdAt: string;\n lastSeenAt: string;\n}\n\nexport interface GatewayRelayRequest {\n jsonrpc: \"2.0\";\n id?: string | number;\n method: string;\n params?: Record<string, unknown>;\n}\n\nexport interface GatewayRelayResponse {\n jsonrpc: \"2.0\";\n id?: string | number;\n result?: Record<string, unknown>;\n error?: BridgeError;\n}\n\nexport interface GatewayRelayRequestEnvelope {\n requestId: string;\n rpc: GatewayRelayRequest;\n queuedAt: string;\n}\n\nexport interface RegisterGatewayRelaySessionResponse {\n success: boolean;\n data: {\n session: GatewayRelaySession;\n };\n}\n\nexport interface PollGatewayRelayResponse {\n success: boolean;\n data: {\n request: GatewayRelayRequestEnvelope | null;\n };\n}\n\n// ─── Snapshot / Backup Types ────────────────────────────────────────────────\n\nexport type SnapshotType = \"manual\" | \"auto\" | \"pre-eviction\";\n\nexport interface AgentSnapshot {\n id: string;\n containerId: string;\n organizationId: string;\n snapshotType: SnapshotType;\n storageUrl: string;\n sizeBytes: number;\n agentConfig: Record<string, unknown>;\n metadata: Record<string, unknown>;\n created_at: string;\n}\n\nexport interface CreateSnapshotRequest {\n snapshotType?: SnapshotType;\n metadata?: Record<string, unknown>;\n}\n\nexport interface CreateSnapshotResponse {\n success: boolean;\n data: AgentSnapshot;\n}\n\nexport interface SnapshotListResponse {\n success: boolean;\n data: AgentSnapshot[];\n}\n\nexport interface RestoreSnapshotRequest {\n snapshotId: string;\n}\n\nexport interface RestoreSnapshotResponse {\n success: boolean;\n message: string;\n}\n\n// ─── Cloud Config Types ─────────────────────────────────────────────────────\n\nexport type InferenceMode = \"cloud\" | \"byok\" | \"local\";\n\nexport interface CloudPluginConfig {\n /** Enable ElizaCloud integration. */\n enabled: boolean;\n /** ElizaCloud API base URL. */\n baseUrl: string;\n /** Stored API key for authenticated requests. */\n apiKey?: string;\n /** Device ID used for auto-signup authentication. */\n deviceId?: string;\n /** Platform identifier. */\n platform?: DevicePlatform;\n /** Inference mode: cloud (ElizaCloud proxied), byok (user keys), local (no cloud). */\n inferenceMode: InferenceMode;\n /** Auto-deploy agents to cloud on creation. */\n autoProvision: boolean;\n /** Bridge reconnection settings. */\n bridge: {\n reconnectIntervalMs: number;\n maxReconnectAttempts: number;\n heartbeatIntervalMs: number;\n };\n /** Auto-backup settings. */\n backup: {\n autoBackupIntervalMs: number;\n maxSnapshots: number;\n };\n /** Default container settings for new deployments. */\n container: {\n defaultImage: string;\n defaultArchitecture: ContainerArchitecture;\n defaultCpu: number;\n defaultMemory: number;\n defaultPort: number;\n };\n}\n\nexport const DEFAULT_CLOUD_CONFIG: CloudPluginConfig = {\n enabled: false,\n baseUrl: \"https://www.elizacloud.ai/api/v1\",\n inferenceMode: \"cloud\",\n autoProvision: false,\n bridge: {\n reconnectIntervalMs: 3000,\n maxReconnectAttempts: 20,\n heartbeatIntervalMs: 30_000,\n },\n backup: {\n autoBackupIntervalMs: 3_600_000, // 1 hour\n maxSnapshots: 10,\n },\n container: {\n defaultImage: \"elizaos/agent:latest\",\n defaultArchitecture: \"arm64\",\n defaultCpu: 1792,\n defaultMemory: 1792,\n defaultPort: 3000,\n },\n};\n\n// ─── API Error Types ────────────────────────────────────────────────────────\n\nexport type { CloudApiErrorBody } from \"@elizaos/cloud-sdk\";\nexport {\n CloudApiError,\n InsufficientCreditsError,\n} from \"@elizaos/cloud-sdk\";\n",
|
|
11
|
+
"/**\n * Runtime settings keys forwarded into cloud containers as environment\n * variables. Used by both PROVISION_CLOUD_AGENT and RESUME_CLOUD_AGENT.\n */\n\nimport type { IAgentRuntime } from \"@elizaos/core\";\n\nexport const FORWARDED_SETTINGS = [\n \"OPENAI_API_KEY\",\n \"ANTHROPIC_API_KEY\",\n \"GROQ_API_KEY\",\n \"ELIZAOS_CLOUD_API_KEY\",\n \"NANO_MODEL\",\n \"MEDIUM_MODEL\",\n \"SMALL_MODEL\",\n \"LARGE_MODEL\",\n \"MEGA_MODEL\",\n \"RESPONSE_HANDLER_MODEL\",\n \"ACTION_PLANNER_MODEL\",\n \"SHOULD_RESPOND_MODEL\",\n \"PLANNER_MODEL\",\n \"RESPONSE_MODEL\",\n \"ELIZAOS_CLOUD_SMALL_MODEL\",\n \"ELIZAOS_CLOUD_NANO_MODEL\",\n \"ELIZAOS_CLOUD_MEDIUM_MODEL\",\n \"ELIZAOS_CLOUD_LARGE_MODEL\",\n \"ELIZAOS_CLOUD_MEGA_MODEL\",\n \"ELIZAOS_CLOUD_RESPONSE_HANDLER_MODEL\",\n \"ELIZAOS_CLOUD_ACTION_PLANNER_MODEL\",\n \"ELIZAOS_CLOUD_SHOULD_RESPOND_MODEL\",\n \"ELIZAOS_CLOUD_PLANNER_MODEL\",\n \"ELIZAOS_CLOUD_RESPONSE_MODEL\",\n] as const;\n\nexport function collectEnvVars(runtime: IAgentRuntime): Record<string, string> {\n const vars: Record<string, string> = {};\n for (const key of FORWARDED_SETTINGS) {\n const val = runtime.getSetting(key);\n if (val) vars[key] = String(val);\n }\n return vars;\n}\n",
|
|
12
|
+
"/**\n * RESUME_CLOUD_AGENT — Restore a frozen agent from snapshot.\n *\n * Re-provisions the container, restores state from the most recent (or\n * specified) snapshot, reconnects bridge, resumes auto-backup.\n */\n\nimport type {\n Action,\n ActionResult,\n HandlerCallback,\n HandlerOptions,\n IAgentRuntime,\n Memory,\n State,\n} from \"@elizaos/core\";\nimport type { CloudAuthService } from \"../services/cloud-auth\";\nimport type { CloudBackupService } from \"../services/cloud-backup\";\nimport type { CloudBridgeService } from \"../services/cloud-bridge\";\nimport type { CloudContainerService } from \"../services/cloud-container\";\nimport type { AgentSnapshot, CreateContainerRequest } from \"../types/cloud\";\nimport { DEFAULT_CLOUD_CONFIG } from \"../types/cloud\";\nimport { collectEnvVars } from \"../utils/forwarded-settings\";\nimport { confirmationRequired, isConfirmed, mergedOptions } from \"./confirmation\";\n\nfunction extractParams(message: Memory, options?: HandlerOptions): Record<string, unknown> {\n const params = mergedOptions(options);\n if (Object.keys(params).length > 0) return params;\n const meta = message.metadata as Record<string, unknown> | undefined;\n return (meta?.actionParams as Record<string, unknown>) ?? {};\n}\n\nasync function findLatestProjectSnapshot(\n backup: CloudBackupService,\n containers: CloudContainerService,\n projectName: string\n): Promise<AgentSnapshot | null> {\n const all = await containers.listContainers();\n const projectIds = all.filter((c) => c.project_name === projectName).map((c) => c.id);\n const snapshots: AgentSnapshot[] = [];\n for (const id of projectIds) {\n snapshots.push(...(await backup.listSnapshots(id)));\n }\n snapshots.sort((a, b) => new Date(b.created_at).getTime() - new Date(a.created_at).getTime());\n return snapshots[0] ?? null;\n}\n\nexport const resumeCloudAgentAction: Action = {\n name: \"RESUME_CLOUD_AGENT\",\n description:\n \"Resume a frozen cloud agent from snapshot. Re-provisions, restores state, reconnects bridge.\",\n descriptionCompressed: \"Resume frozen cloud agent from snapshot.\",\n similes: [\"resume agent\", \"unfreeze agent\", \"restart cloud agent\", \"restore agent\"],\n tags: [\"cloud\", \"container\", \"restore\"],\n parameters: [\n {\n name: \"name\",\n description: \"Name for the restored agent\",\n required: true,\n schema: { type: \"string\" },\n },\n {\n name: \"project_name\",\n description: \"Project identifier (must match original)\",\n required: true,\n schema: { type: \"string\" },\n },\n {\n name: \"snapshotId\",\n description: \"Specific snapshot ID (defaults to latest)\",\n required: false,\n schema: { type: \"string\" },\n },\n {\n name: \"environment_vars\",\n description: \"Additional environment variables\",\n required: false,\n schema: { type: \"object\" },\n },\n {\n name: \"confirmed\",\n description: \"Must be true to resume the cloud agent after preview.\",\n required: false,\n schema: { type: \"boolean\", default: false },\n },\n ],\n\n validate: async (\n runtime: IAgentRuntime,\n message: Memory,\n state?: State,\n options?: HandlerOptions\n ): Promise<boolean> => {\n const __avTextRaw = typeof message?.content?.text === \"string\" ? message.content.text : \"\";\n const __avText = __avTextRaw.toLowerCase();\n const __avKeywords = [\"resume\", \"cloud\"];\n const __avKeywordOk =\n __avKeywords.length > 0 && __avKeywords.some((kw) => kw.length > 0 && __avText.includes(kw));\n const __avRegex = /\\b(?:resume|cloud)\\b/i;\n const __avRegexOk = Boolean(__avText.match(__avRegex));\n const __avSource = String(message?.content?.source ?? \"\");\n const __avExpectedSource = \"\";\n const __avSourceOk = __avExpectedSource\n ? __avSource === __avExpectedSource\n : Boolean(__avSource || state || runtime?.agentId || runtime?.getService);\n const __avOptions = options && typeof options === \"object\" ? options : {};\n const __avInputOk =\n __avText.trim().length > 0 ||\n Object.keys(__avOptions as Record<string, unknown>).length > 0 ||\n Boolean(message?.content && typeof message.content === \"object\");\n\n if (!(__avKeywordOk && __avRegexOk && __avSourceOk && __avInputOk)) {\n return false;\n }\n\n const __avLegacyValidate = async (runtime: IAgentRuntime) => {\n return !!(\n runtime.getService(\"CLOUD_AUTH\") as CloudAuthService | undefined\n )?.isAuthenticated();\n };\n try {\n return Boolean(await __avLegacyValidate(runtime));\n } catch {\n return false;\n }\n },\n\n async handler(\n runtime: IAgentRuntime,\n message: Memory,\n _state?: State,\n options?: HandlerOptions,\n callback?: HandlerCallback\n ): Promise<ActionResult> {\n const containerSvc = runtime.getService(\"CLOUD_CONTAINER\") as CloudContainerService;\n const bridge = runtime.getService(\"CLOUD_BRIDGE\") as CloudBridgeService | undefined;\n const backup = runtime.getService(\"CLOUD_BACKUP\") as CloudBackupService | undefined;\n const params = extractParams(message, options);\n\n if (!params.name || !params.project_name) {\n return {\n success: false,\n error: \"Missing required parameters: name and project_name\",\n };\n }\n\n const explicitSnapshot =\n typeof params.snapshotId === \"string\" && params.snapshotId.length > 0\n ? params.snapshotId\n : null;\n const preview = [\n \"Confirmation required before resuming Eliza Cloud agent:\",\n `Name: ${String(params.name)}`,\n `Project: ${String(params.project_name)}`,\n `Snapshot: ${explicitSnapshot ?? \"latest available\"}`,\n ].join(\"\\n\");\n if (!isConfirmed(options)) {\n await callback?.({ text: preview, actions: [\"RESUME_CLOUD_AGENT\"] });\n return confirmationRequired(preview, {\n name: String(params.name),\n project_name: String(params.project_name),\n snapshotId: explicitSnapshot,\n });\n }\n\n const notify = async (text: string) => {\n if (callback) await callback({ text, actions: [\"RESUME_CLOUD_AGENT\"] });\n };\n await notify(`Resuming cloud agent \"${params.name}\"...`);\n\n const defs = DEFAULT_CLOUD_CONFIG.container;\n const request: CreateContainerRequest = {\n name: params.name as string,\n project_name: params.project_name as string,\n port: defs.defaultPort,\n cpu: defs.defaultCpu,\n memory: defs.defaultMemory,\n architecture: defs.defaultArchitecture,\n ecr_image_uri: defs.defaultImage,\n environment_vars: {\n ...collectEnvVars(runtime),\n ...(params.environment_vars as Record<string, string> | undefined),\n },\n health_check_path: \"/health\",\n };\n\n const created = await containerSvc.createContainer(request);\n const id = created.data.id;\n await notify(`Container re-provisioned (${id}). Waiting for infrastructure...`);\n\n const running = await containerSvc.waitForDeployment(id);\n\n // Restore from snapshot\n let restoredId: string | null = null;\n if (backup) {\n const explicit = explicitSnapshot ?? undefined;\n if (explicit) {\n await backup.restoreSnapshot(id, explicit);\n restoredId = explicit;\n } else {\n const latest = await findLatestProjectSnapshot(\n backup,\n containerSvc,\n params.project_name as string\n );\n if (latest) {\n await backup.restoreSnapshot(id, latest.id);\n restoredId = latest.id;\n }\n }\n backup.scheduleAutoBackup(id);\n }\n\n if (bridge) await bridge.connect(id);\n\n await notify(\n `Agent \"${params.name}\" resumed at ${running.load_balancer_url}.` +\n (restoredId ? ` Restored snapshot ${restoredId}.` : \" No snapshot to restore.\")\n );\n\n return {\n success: true,\n text: `Cloud agent \"${params.name}\" resumed`,\n data: {\n containerId: id,\n containerUrl: running.load_balancer_url,\n restoredSnapshotId: restoredId,\n creditsDeducted: created.creditsDeducted,\n creditsRemaining: created.creditsRemaining,\n },\n };\n },\n};\n",
|
|
13
|
+
"/**\n * cloudStatusProvider — Container and connection status in agent state.\n */\n\nimport type { IAgentRuntime, Memory, Provider, ProviderResult, State } from \"@elizaos/core\";\nimport type { CloudAuthService } from \"../services/cloud-auth\";\nimport type { CloudBridgeService } from \"../services/cloud-bridge\";\nimport type { CloudContainerService } from \"../services/cloud-container\";\n\nexport const cloudStatusProvider: Provider = {\n name: \"elizacloud_status\",\n description: \"ElizaCloud container and connection status\",\n descriptionCompressed: \"ElizaCloud container/connection status.\",\n dynamic: true,\n position: 90,\n async get(runtime: IAgentRuntime, _message: Memory, _state: State): Promise<ProviderResult> {\n const auth = runtime.getService(\"CLOUD_AUTH\") as CloudAuthService | undefined;\n if (!auth?.isAuthenticated()) {\n return {\n text: \"ElizaCloud: Not authenticated\",\n values: { cloudAuthenticated: false },\n };\n }\n\n const containerSvc = runtime.getService(\"CLOUD_CONTAINER\") as CloudContainerService | undefined;\n const bridgeSvc = runtime.getService(\"CLOUD_BRIDGE\") as CloudBridgeService | undefined;\n const containers = containerSvc?.getTrackedContainers() ?? [];\n const connected = bridgeSvc?.getConnectedContainerIds() ?? [];\n\n const running = containers.filter((c) => c.status === \"running\").length;\n const deploying = containers.filter(\n (c) => c.status === \"pending\" || c.status === \"building\" || c.status === \"deploying\"\n ).length;\n\n const summaries = containers.map((c) => ({\n id: c.id,\n name: c.name,\n status: c.status,\n url: c.load_balancer_url,\n billing: c.billing_status,\n bridged: connected.includes(c.id),\n }));\n\n const lines = [\n `ElizaCloud: ${containers.length} container(s), ${running} running, ${connected.length} bridged`,\n ...summaries.map(\n (c) =>\n ` - ${c.name} [${c.status}]${c.url ? ` @ ${c.url}` : \"\"}${c.bridged ? \" (bridged)\" : \"\"}`\n ),\n ];\n\n return {\n text: lines.join(\"\\n\"),\n values: {\n cloudAuthenticated: true,\n totalContainers: containers.length,\n runningContainers: running,\n deployingContainers: deploying,\n },\n data: { containers: summaries },\n };\n },\n};\n",
|
|
14
|
+
"/**\n * containerHealthProvider — Container health in agent state (private, on-demand).\n */\n\nimport type { IAgentRuntime, Memory, Provider, ProviderResult, State } from \"@elizaos/core\";\nimport type { CloudAuthService } from \"../services/cloud-auth\";\nimport type { CloudContainerService } from \"../services/cloud-container\";\n\nexport const containerHealthProvider: Provider = {\n name: \"elizacloud_health\",\n description: \"ElizaCloud container health\",\n descriptionCompressed: \"ElizaCloud container health.\",\n dynamic: true,\n position: 92,\n private: true,\n async get(runtime: IAgentRuntime, _message: Memory, _state: State): Promise<ProviderResult> {\n const auth = runtime.getService(\"CLOUD_AUTH\") as CloudAuthService | undefined;\n if (!auth?.isAuthenticated()) return { text: \"\" };\n\n const svc = runtime.getService(\"CLOUD_CONTAINER\") as CloudContainerService | undefined;\n const running = svc?.getTrackedContainers().filter((c) => c.status === \"running\") ?? [];\n if (running.length === 0)\n return {\n text: \"No running containers.\",\n values: { healthyContainers: 0 },\n };\n\n // NOTE: True health would require hitting each container's health_check_path\n // endpoint over the network. We approximate here using locally-cached state:\n // a container is considered healthy when it is running, billing is active,\n // and there is no recorded error message.\n const reports = running.map((c) => ({\n id: c.id,\n name: c.name,\n healthy: c.status === \"running\" && c.billing_status === \"active\" && !c.error_message,\n status: c.status,\n billing: c.billing_status,\n }));\n\n const healthy = reports.filter((r) => r.healthy).length;\n const text = [\n `Health: ${healthy}/${reports.length} healthy`,\n ...reports.map(\n (r) =>\n ` - ${r.name}: ${r.healthy ? \"OK\" : \"UNHEALTHY\"} (status=${r.status}, billing=${r.billing})`\n ),\n ].join(\"\\n\");\n\n return {\n text,\n values: {\n healthyContainers: healthy,\n unhealthyContainers: reports.length - healthy,\n },\n data: { reports },\n };\n },\n};\n",
|
|
15
|
+
"/** Credit balance in agent state (60s cache). */\n\nimport type { IAgentRuntime, Memory, Provider, ProviderResult, State } from \"@elizaos/core\";\nimport { logger } from \"@elizaos/core\";\nimport type { CloudAuthService } from \"../services/cloud-auth\";\nimport type { CreditBalanceResponse } from \"../types/cloud\";\n\nconst TOP_UP_URL = \"https://www.elizacloud.ai/dashboard/settings?tab=billing\";\nconst creditCaches = new WeakMap<IAgentRuntime, { value: number; at: number }>();\nconst TTL = 60_000;\n\nexport const creditBalanceProvider: Provider = {\n name: \"elizacloud_credits\",\n description: \"ElizaCloud credit balance\",\n descriptionCompressed: \"ElizaCloud credit balance.\",\n dynamic: true,\n position: 91,\n async get(runtime: IAgentRuntime, _message: Memory, _state: State): Promise<ProviderResult> {\n const auth = runtime.getService(\"CLOUD_AUTH\") as CloudAuthService | undefined;\n if (!auth?.isAuthenticated()) return { text: \"\" };\n\n const cached = creditCaches.get(runtime);\n if (cached && Date.now() - cached.at < TTL) return format(cached.value);\n\n let balance: number;\n try {\n const { data } = await auth.getClient().get<CreditBalanceResponse>(\"/credits/balance\");\n balance = data.balance;\n } catch (err) {\n logger.warn(\n `[CloudCredits] Failed to fetch balance: ${err instanceof Error ? err.message : err}`\n );\n if (cached) return format(cached.value);\n return { text: \"\" };\n }\n creditCaches.set(runtime, { value: balance, at: Date.now() });\n\n if (balance < 1.0) logger.warn(`[CloudCredits] Low balance: $${balance.toFixed(2)}`);\n return format(balance);\n },\n};\n\nfunction format(balance: number): ProviderResult {\n const low = balance < 2.0;\n const critical = balance < 0.5;\n let text = `ElizaCloud credits: $${balance.toFixed(2)}`;\n if (critical) text += ` (CRITICAL — top up at ${TOP_UP_URL})`;\n else if (low) text += ` (LOW — top up at ${TOP_UP_URL})`;\n return {\n text,\n values: {\n cloudCredits: balance,\n cloudCreditsLow: low,\n cloudCreditsCritical: critical,\n cloudTopUpUrl: TOP_UP_URL,\n },\n };\n}\n",
|
|
16
|
+
"/** Exposes available cloud models in agent state. */\n\nimport type { IAgentRuntime, Memory, Provider, ProviderResult, State } from \"@elizaos/core\";\nimport type { CloudModelRegistryService, ModelsByProvider } from \"../services/cloud-model-registry\";\n\nconst TTL = 300_000; // 5 minutes\n\n/**\n * Per-runtime cache using a WeakMap keyed by the runtime object.\n * This avoids sharing stale model data between different agent instances\n * running in the same process.\n */\nconst runtimeCaches = new WeakMap<IAgentRuntime, { value: ModelsByProvider; at: number }>();\n\nexport const modelRegistryProvider: Provider = {\n name: \"elizacloud_models\",\n description: \"Available AI models from ElizaCloud grouped by provider\",\n descriptionCompressed: \"Available AI models from ElizaCloud by provider.\",\n dynamic: true,\n position: 92,\n async get(runtime: IAgentRuntime, _message: Memory, _state: State): Promise<ProviderResult> {\n const registry = runtime.getService(\"CLOUD_MODEL_REGISTRY\") as\n | CloudModelRegistryService\n | undefined;\n\n if (!registry) return { text: \"\" };\n\n const cached = runtimeCaches.get(runtime);\n if (cached && Date.now() - cached.at < TTL) {\n return formatModels(cached.value);\n }\n\n const byProvider = await registry.getModelsByProvider();\n\n if (Object.keys(byProvider).length === 0) {\n return { text: \"\" };\n }\n\n runtimeCaches.set(runtime, { value: byProvider, at: Date.now() });\n return formatModels(byProvider);\n },\n};\n\nfunction formatModels(byProvider: ModelsByProvider): ProviderResult {\n const providers = Object.keys(byProvider).sort();\n const total = Object.values(byProvider).reduce((n, m) => n + m.length, 0);\n\n return {\n text: `ElizaCloud: ${total} models (${providers.join(\", \")})`,\n values: {\n cloudModelProviders: providers.join(\",\"),\n cloudModelCount: total,\n },\n };\n}\n",
|
|
17
|
+
"import { type IAgentRuntime, logger } from \"@elizaos/core\";\nimport { getApiKey, isBrowser } from \"./utils/config\";\nimport { createCloudApiClient } from \"./utils/sdk-client\";\n\nexport function initializeOpenAI(\n _config: Record<string, string | null>,\n runtime: IAgentRuntime\n): void {\n void (async () => {\n try {\n if (!getApiKey(runtime) && !isBrowser()) {\n logger.warn(\n \"ELIZAOS_CLOUD_API_KEY is not set in environment - ElizaOS Cloud functionality will be limited\"\n );\n logger.info(\"Get your API key from https://www.elizacloud.ai/dashboard/api-keys\");\n return;\n }\n try {\n await createCloudApiClient(runtime).get(\"/models\");\n logger.log(\"ElizaOS Cloud API key validated successfully\");\n } catch (fetchError) {\n const message = fetchError instanceof Error ? fetchError.message : String(fetchError);\n logger.warn(`ElizaOS Cloud API key validation failed: ${message}`);\n logger.warn(\n \"ElizaOS Cloud functionality will be limited until a valid API key is provided\"\n );\n }\n } catch (error) {\n const message =\n (error as { errors?: Array<{ message: string }> })?.errors\n ?.map((e) => e.message)\n .join(\", \") || (error instanceof Error ? error.message : String(error));\n logger.warn(\n `ElizaOS Cloud plugin configuration issue: ${message} - You need to configure the ELIZAOS_CLOUD_API_KEY in your environment variables`\n );\n logger.info(\"Get your API key from https://www.elizacloud.ai/dashboard/api-keys\");\n }\n })();\n}\n",
|
|
18
|
+
"import type { IAgentRuntime } from \"@elizaos/core\";\nimport { logger } from \"@elizaos/core\";\n\nfunction getEnvValue(key: string): string | undefined {\n if (typeof process === \"undefined\") {\n return undefined;\n }\n const value = process.env[key];\n return value === undefined ? undefined : String(value);\n}\n\nexport function getSetting(\n runtime: IAgentRuntime,\n key: string,\n defaultValue?: string\n): string | undefined {\n const value = runtime.getSetting(key);\n if (value !== undefined && value !== null) {\n return String(value);\n }\n return getEnvValue(key) ?? defaultValue;\n}\n\nexport function isBrowser(): boolean {\n return (\n typeof globalThis !== \"undefined\" &&\n typeof (globalThis as { document?: Document }).document !== \"undefined\"\n );\n}\n\nexport function isProxyMode(runtime: IAgentRuntime): boolean {\n return isBrowser() && !!getSetting(runtime, \"ELIZAOS_CLOUD_BROWSER_BASE_URL\");\n}\n\nexport function getBaseURL(runtime: IAgentRuntime): string {\n const browserURL = getSetting(runtime, \"ELIZAOS_CLOUD_BROWSER_BASE_URL\");\n const baseURL = (\n isBrowser() && browserURL\n ? browserURL\n : getSetting(runtime, \"ELIZAOS_CLOUD_BASE_URL\", \"https://www.elizacloud.ai/api/v1\")\n ) as string;\n return baseURL;\n}\n\nexport function getEmbeddingBaseURL(runtime: IAgentRuntime): string {\n const embeddingURL = isBrowser()\n ? getSetting(runtime, \"ELIZAOS_CLOUD_BROWSER_EMBEDDING_URL\") ||\n getSetting(runtime, \"ELIZAOS_CLOUD_BROWSER_BASE_URL\")\n : getSetting(runtime, \"ELIZAOS_CLOUD_EMBEDDING_URL\");\n if (embeddingURL) {\n logger.debug(`[ELIZAOS_CLOUD] Using specific embedding base URL: ${embeddingURL}`);\n return embeddingURL;\n }\n logger.debug(\"[ELIZAOS_CLOUD] Falling back to general base URL for embeddings.\");\n return getBaseURL(runtime);\n}\n\nexport function getApiKey(runtime: IAgentRuntime): string | undefined {\n return getSetting(runtime, \"ELIZAOS_CLOUD_API_KEY\");\n}\n\nexport function getEmbeddingApiKey(runtime: IAgentRuntime): string | undefined {\n const embeddingApiKey = getSetting(runtime, \"ELIZAOS_CLOUD_EMBEDDING_API_KEY\");\n if (embeddingApiKey) {\n logger.debug(\"[ELIZAOS_CLOUD] Using specific embedding API key (present)\");\n return embeddingApiKey;\n }\n logger.debug(\"[ELIZAOS_CLOUD] Falling back to general API key for embeddings.\");\n return getApiKey(runtime);\n}\n\nexport function getSmallModel(runtime: IAgentRuntime): string {\n return (\n getSetting(runtime, \"ELIZAOS_CLOUD_SMALL_MODEL\") ??\n (getSetting(runtime, \"SMALL_MODEL\", \"openai/gpt-5.4-mini\") as string)\n );\n}\n\nexport function getNanoModel(runtime: IAgentRuntime): string {\n return (\n getSetting(runtime, \"ELIZAOS_CLOUD_NANO_MODEL\") ??\n getSetting(runtime, \"NANO_MODEL\") ??\n getSmallModel(runtime)\n );\n}\n\nexport function getMediumModel(runtime: IAgentRuntime): string {\n return (\n getSetting(runtime, \"ELIZAOS_CLOUD_MEDIUM_MODEL\") ??\n getSetting(runtime, \"MEDIUM_MODEL\") ??\n getSmallModel(runtime)\n );\n}\n\nexport function getLargeModel(runtime: IAgentRuntime): string {\n return (\n getSetting(runtime, \"ELIZAOS_CLOUD_LARGE_MODEL\") ??\n (getSetting(runtime, \"LARGE_MODEL\", \"anthropic/claude-sonnet-4.6\") as string)\n );\n}\n\nexport function getMegaModel(runtime: IAgentRuntime): string {\n return (\n getSetting(runtime, \"ELIZAOS_CLOUD_MEGA_MODEL\") ??\n getSetting(runtime, \"MEGA_MODEL\") ??\n getLargeModel(runtime)\n );\n}\n\nexport function getResponseHandlerModel(runtime: IAgentRuntime): string {\n return (\n getSetting(runtime, \"ELIZAOS_CLOUD_RESPONSE_HANDLER_MODEL\") ??\n getSetting(runtime, \"ELIZAOS_CLOUD_SHOULD_RESPOND_MODEL\") ??\n getSetting(runtime, \"RESPONSE_HANDLER_MODEL\") ??\n getSetting(runtime, \"SHOULD_RESPOND_MODEL\") ??\n getNanoModel(runtime)\n );\n}\n\nexport function getActionPlannerModel(runtime: IAgentRuntime): string {\n return (\n getSetting(runtime, \"ELIZAOS_CLOUD_ACTION_PLANNER_MODEL\") ??\n getSetting(runtime, \"ELIZAOS_CLOUD_PLANNER_MODEL\") ??\n getSetting(runtime, \"ACTION_PLANNER_MODEL\") ??\n getSetting(runtime, \"PLANNER_MODEL\") ??\n getMediumModel(runtime)\n );\n}\n\nexport function getResponseModel(runtime: IAgentRuntime): string {\n return (\n getSetting(runtime, \"ELIZAOS_CLOUD_RESPONSE_MODEL\") ??\n getSetting(runtime, \"RESPONSE_MODEL\") ??\n getLargeModel(runtime)\n );\n}\n\nexport function getImageDescriptionModel(runtime: IAgentRuntime): string {\n return getSetting(runtime, \"ELIZAOS_CLOUD_IMAGE_DESCRIPTION_MODEL\", \"gpt-5.4-mini\") as string;\n}\n\nexport function getImageGenerationModel(runtime: IAgentRuntime): string {\n return (\n getSetting(runtime, \"ELIZAOS_CLOUD_IMAGE_GENERATION_MODEL\", \"google/gemini-2.5-flash-image\") ??\n \"google/gemini-2.5-flash-image\"\n );\n}\n\nexport function getResearchModel(runtime: IAgentRuntime): string {\n return (\n getSetting(runtime, \"ELIZAOS_CLOUD_RESEARCH_MODEL\") ??\n (getSetting(runtime, \"RESEARCH_MODEL\", \"o3-deep-research\") as string)\n );\n}\n\nexport function getTTSModel(runtime: IAgentRuntime): string {\n return getSetting(runtime, \"ELIZAOS_CLOUD_TTS_MODEL\", \"gpt-5-mini-tts\") as string;\n}\n\nexport function getTranscriptionModel(runtime: IAgentRuntime): string {\n return getSetting(\n runtime,\n \"ELIZAOS_CLOUD_TRANSCRIPTION_MODEL\",\n \"gpt-5-mini-transcribe\"\n ) as string;\n}\n\nexport function getExperimentalTelemetry(runtime: IAgentRuntime): boolean {\n const setting = getSetting(runtime, \"ELIZAOS_CLOUD_EXPERIMENTAL_TELEMETRY\", \"false\");\n return String(setting).toLowerCase() === \"true\";\n}\n",
|
|
19
|
+
"import { CloudApiClient, ElizaCloudClient } from \"@elizaos/cloud-sdk\";\nimport type { IAgentRuntime } from \"@elizaos/core\";\nimport {\n getApiKey,\n getBaseURL,\n getEmbeddingApiKey,\n getEmbeddingBaseURL,\n isBrowser,\n} from \"./config\";\n\nfunction trimTrailingSlash(value: string): string {\n return value.replace(/\\/+$/, \"\");\n}\n\nfunction apiBaseToSiteBaseUrl(apiBaseUrl: string): string {\n const trimmed = trimTrailingSlash(apiBaseUrl);\n return trimmed.endsWith(\"/api/v1\") ? trimmed.slice(0, -\"/api/v1\".length) : trimmed;\n}\n\nfunction apiKeyForRuntime(runtime: IAgentRuntime, embedding = false): string | undefined {\n if (isBrowser()) return undefined;\n return embedding ? getEmbeddingApiKey(runtime) : getApiKey(runtime);\n}\n\nexport function createCloudApiClient(runtime: IAgentRuntime, embedding = false): CloudApiClient {\n const baseUrl = embedding ? getEmbeddingBaseURL(runtime) : getBaseURL(runtime);\n return new CloudApiClient(trimTrailingSlash(baseUrl), apiKeyForRuntime(runtime, embedding));\n}\n\nexport function createElizaCloudClient(runtime: IAgentRuntime): ElizaCloudClient {\n const apiBaseUrl = trimTrailingSlash(getBaseURL(runtime));\n return new ElizaCloudClient({\n apiBaseUrl,\n baseUrl: apiBaseToSiteBaseUrl(apiBaseUrl),\n apiKey: apiKeyForRuntime(runtime),\n });\n}\n",
|
|
20
|
+
"import type { IAgentRuntime, TextEmbeddingParams } from \"@elizaos/core\";\nimport { logger, ModelType, VECTOR_DIMS } from \"@elizaos/core\";\nimport { getSetting } from \"../utils/config\";\nimport { emitModelUsageEvent } from \"../utils/events\";\nimport { createCloudApiClient } from \"../utils/sdk-client\";\n\nconst MAX_BATCH_SIZE = 100;\nfunction extractRateLimitInfo(response: Response): {\n remainingRequests?: number;\n remainingTokens?: number;\n limitRequests?: number;\n limitTokens?: number;\n resetRequests?: string;\n resetTokens?: string;\n retryAfter?: number;\n} {\n return {\n remainingRequests:\n parseInt(response.headers.get(\"x-ratelimit-remaining-requests\") || \"\", 10) || undefined,\n remainingTokens:\n parseInt(response.headers.get(\"x-ratelimit-remaining-tokens\") || \"\", 10) || undefined,\n limitRequests:\n parseInt(response.headers.get(\"x-ratelimit-limit-requests\") || \"\", 10) || undefined,\n limitTokens: parseInt(response.headers.get(\"x-ratelimit-limit-tokens\") || \"\", 10) || undefined,\n resetRequests: response.headers.get(\"x-ratelimit-reset-requests\") || undefined,\n resetTokens: response.headers.get(\"x-ratelimit-reset-tokens\") || undefined,\n retryAfter: parseInt(response.headers.get(\"retry-after\") || \"\", 10) || undefined,\n };\n}\n\nfunction getEmbeddingConfig(runtime: IAgentRuntime) {\n const embeddingModelName = getSetting(\n runtime,\n \"ELIZAOS_CLOUD_EMBEDDING_MODEL\",\n \"text-embedding-3-small\"\n );\n const embeddingDimension = Number.parseInt(\n getSetting(runtime, \"ELIZAOS_CLOUD_EMBEDDING_DIMENSIONS\", \"1536\") || \"1536\",\n 10\n ) as (typeof VECTOR_DIMS)[keyof typeof VECTOR_DIMS];\n\n if (!Object.values(VECTOR_DIMS).includes(embeddingDimension)) {\n const errorMsg = `Invalid embedding dimension: ${embeddingDimension}. Must be one of: ${Object.values(VECTOR_DIMS).join(\", \")}`;\n logger.error(errorMsg);\n throw new Error(errorMsg);\n }\n\n return { embeddingModelName, embeddingDimension };\n}\n\nfunction createErrorVector(dimension: number, marker: number): number[] {\n const vector = Array(dimension).fill(0);\n vector[0] = marker;\n return vector;\n}\n\nexport interface BatchEmbeddingParams {\n texts: string[];\n}\n\nexport async function handleTextEmbedding(\n runtime: IAgentRuntime,\n params: TextEmbeddingParams | string | null\n): Promise<number[]> {\n const { embeddingDimension } = getEmbeddingConfig(runtime);\n\n if (params === null) {\n logger.debug(\"Creating test embedding for initialization\");\n return createErrorVector(embeddingDimension, 0.1);\n }\n\n let text: string;\n if (typeof params === \"string\") {\n text = params;\n } else if (typeof params === \"object\" && params.text) {\n text = params.text;\n } else {\n logger.warn(\"Invalid input format for embedding\");\n return createErrorVector(embeddingDimension, 0.2);\n }\n\n if (!text.trim()) {\n logger.warn(\"Empty text for embedding\");\n return createErrorVector(embeddingDimension, 0.3);\n }\n\n const results = await handleBatchTextEmbedding(runtime, [text]);\n return results[0];\n}\n\nexport interface BatchEmbeddingResult {\n embedding: number[];\n index: number;\n success: boolean;\n error?: string;\n}\n\nexport async function handleBatchTextEmbedding(\n runtime: IAgentRuntime,\n texts: string[]\n): Promise<number[][]> {\n const { embeddingModelName, embeddingDimension } = getEmbeddingConfig(runtime);\n const client = createCloudApiClient(runtime, true);\n\n if (!texts || texts.length === 0) {\n logger.warn(\"[BatchEmbeddings] Empty texts array\");\n return [];\n }\n\n const validTexts: { text: string; originalIndex: number }[] = [];\n const results: number[][] = new Array(texts.length);\n\n for (let i = 0; i < texts.length; i++) {\n const text = texts[i]?.trim();\n if (text) {\n validTexts.push({ text, originalIndex: i });\n } else {\n results[i] = createErrorVector(embeddingDimension, 0.3);\n }\n }\n\n if (validTexts.length === 0) {\n logger.warn(\"[BatchEmbeddings] All texts were empty\");\n return results;\n }\n\n for (let batchStart = 0; batchStart < validTexts.length; batchStart += MAX_BATCH_SIZE) {\n const batchEnd = Math.min(batchStart + MAX_BATCH_SIZE, validTexts.length);\n const batch = validTexts.slice(batchStart, batchEnd);\n const batchTexts = batch.map((b) => b.text);\n\n logger.info(\n `[BatchEmbeddings] Processing batch ${Math.floor(batchStart / MAX_BATCH_SIZE) + 1}/${Math.ceil(validTexts.length / MAX_BATCH_SIZE)}: ${batch.length} texts`\n );\n\n try {\n const response = await client.requestRaw(\"POST\", \"/embeddings\", {\n json: {\n model: embeddingModelName,\n input: batchTexts,\n },\n });\n\n const rateLimitInfo = extractRateLimitInfo(response);\n\n if (rateLimitInfo.remainingRequests !== undefined && rateLimitInfo.remainingRequests < 50) {\n logger.warn(\n `[BatchEmbeddings] Rate limit: ${rateLimitInfo.remainingRequests}/${rateLimitInfo.limitRequests} requests remaining`\n );\n }\n\n if (response.status === 429) {\n const retryAfter = rateLimitInfo.retryAfter || 30;\n logger.warn(`[BatchEmbeddings] Rate limited, waiting ${retryAfter}s...`);\n await new Promise((resolve) => setTimeout(resolve, retryAfter * 1000));\n\n const retryResponse = await client.requestRaw(\"POST\", \"/embeddings\", {\n json: {\n model: embeddingModelName,\n input: batchTexts,\n },\n });\n\n if (!retryResponse.ok) {\n logger.error(`[BatchEmbeddings] Retry failed: ${retryResponse.status}`);\n for (const item of batch) {\n results[item.originalIndex] = createErrorVector(embeddingDimension, 0.4);\n }\n continue;\n }\n\n const retryData = (await retryResponse.json()) as {\n data: Array<{ embedding: number[]; index: number }>;\n };\n\n if (retryData?.data) {\n for (const item of retryData.data) {\n const originalIndex = batch[item.index].originalIndex;\n results[originalIndex] = item.embedding;\n }\n logger.info(`[BatchEmbeddings] Retry successful for ${batch.length} embeddings`);\n }\n continue;\n }\n\n if (!response.ok) {\n logger.error(`[BatchEmbeddings] API error: ${response.status} - ${response.statusText}`);\n for (const item of batch) {\n results[item.originalIndex] = createErrorVector(embeddingDimension, 0.4);\n }\n continue;\n }\n\n const data = (await response.json()) as {\n data: Array<{ embedding: number[]; index: number }>;\n usage?: { prompt_tokens: number; total_tokens: number };\n };\n\n if (!data?.data || !Array.isArray(data.data)) {\n logger.error(\"[BatchEmbeddings] API returned invalid structure\");\n for (const item of batch) {\n results[item.originalIndex] = createErrorVector(embeddingDimension, 0.5);\n }\n continue;\n }\n\n for (const item of data.data) {\n const originalIndex = batch[item.index].originalIndex;\n results[originalIndex] = item.embedding;\n }\n\n if (data.usage) {\n const usage = {\n inputTokens: data.usage.prompt_tokens,\n outputTokens: 0,\n totalTokens: data.usage.total_tokens,\n };\n emitModelUsageEvent(runtime, ModelType.TEXT_EMBEDDING, `batch:${batch.length}`, usage);\n }\n\n logger.debug(\n `[BatchEmbeddings] Got ${batch.length} embeddings (${embeddingDimension}d), remaining: ${rateLimitInfo.remainingRequests ?? \"unknown\"}`\n );\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`[BatchEmbeddings] Error: ${message}`);\n for (const item of batch) {\n results[item.originalIndex] = createErrorVector(embeddingDimension, 0.6);\n }\n }\n }\n\n return results;\n}\n",
|
|
21
|
+
"import {\n EventType,\n type IAgentRuntime,\n type ModelEventPayload,\n type ModelTypeName,\n} from \"@elizaos/core\";\nimport type { LanguageModelUsage } from \"ai\";\n\nexport function emitModelUsageEvent(\n runtime: IAgentRuntime,\n type: ModelTypeName,\n _prompt: string,\n usage: Partial<LanguageModelUsage> & {\n inputTokens?: number;\n outputTokens?: number;\n totalTokens?: number;\n }\n) {\n const inputTokens = Number(usage.inputTokens || 0);\n const outputTokens = Number(usage.outputTokens || 0);\n const totalTokens = Number(\n usage.totalTokens != null ? usage.totalTokens : inputTokens + outputTokens\n );\n\n const payload: ModelEventPayload = {\n runtime,\n source: \"elizacloud\",\n type,\n tokens: {\n prompt: inputTokens,\n completion: outputTokens,\n total: totalTokens,\n },\n };\n\n runtime.emitEvent(EventType.MODEL_USED, payload);\n}\n",
|
|
22
|
+
"import type { IAgentRuntime, ImageDescriptionParams, ImageGenerationParams } from \"@elizaos/core\";\nimport { logger, ModelType } from \"@elizaos/core\";\nimport { getImageDescriptionModel, getImageGenerationModel, getSetting } from \"../utils/config\";\nimport { emitModelUsageEvent } from \"../utils/events\";\nimport { parseImageDescriptionResponse } from \"../utils/helpers\";\nimport { createElizaCloudClient } from \"../utils/sdk-client\";\n\nexport async function handleImageGeneration(\n runtime: IAgentRuntime,\n params: ImageGenerationParams\n): Promise<{ url: string }[]> {\n const numImages = params.count || 1;\n const size = params.size || \"1024x1024\";\n const prompt = params.prompt;\n const modelName = getImageGenerationModel(runtime);\n logger.log(`[ELIZAOS_CLOUD] Using IMAGE model: ${modelName}`);\n\n const aspectRatioMap: Record<string, string> = {\n \"1024x1024\": \"1:1\",\n \"1792x1024\": \"16:9\",\n \"1024x1792\": \"9:16\",\n };\n const aspectRatio = aspectRatioMap[size] || \"1:1\";\n\n try {\n const requestBody = {\n prompt: prompt,\n numImages: numImages,\n aspectRatio: aspectRatio,\n model: modelName,\n };\n\n const typedData = await createElizaCloudClient(runtime).generateImage(requestBody);\n\n const result = typedData.images.map((img) => ({\n url: img.url || img.image,\n }));\n return result;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`[ELIZAOS_CLOUD] Image generation error: ${message}`);\n throw error;\n }\n}\n\nexport async function handleImageDescription(\n runtime: IAgentRuntime,\n params: ImageDescriptionParams | string\n): Promise<{ title: string; description: string }> {\n let imageUrl: string;\n let promptText: string | undefined;\n const modelName = getImageDescriptionModel(runtime);\n logger.log(`[ELIZAOS_CLOUD] Using IMAGE_DESCRIPTION model: ${modelName}`);\n const maxTokens = Number.parseInt(\n getSetting(runtime, \"ELIZAOS_CLOUD_IMAGE_DESCRIPTION_MAX_TOKENS\", \"8192\") || \"8192\",\n 10\n );\n\n if (typeof params === \"string\") {\n imageUrl = params;\n promptText = \"Please analyze this image and provide a title and detailed description.\";\n } else {\n imageUrl = params.imageUrl;\n promptText =\n params.prompt || \"Please analyze this image and provide a title and detailed description.\";\n }\n\n const messages = [\n {\n role: \"user\",\n content: [\n { type: \"text\", text: promptText },\n { type: \"image_url\", image_url: { url: imageUrl } },\n ],\n },\n ];\n\n const client = createElizaCloudClient(runtime);\n\n try {\n const requestBody: Record<string, unknown> = {\n model: modelName,\n messages: messages,\n max_tokens: maxTokens,\n };\n\n // Retry with exponential backoff for transient errors (429 rate limit)\n let response: Response | null = null;\n for (let attempt = 0; attempt < 3; attempt++) {\n response = await client.routes.postApiV1ChatCompletionsRaw({\n json: requestBody,\n });\n\n if (response.status === 429 && attempt < 2) {\n const wait = (attempt + 1) * 2000; // 2s, 4s\n logger.warn(\n `[ELIZAOS_CLOUD] Image analysis rate-limited (429), retrying in ${wait / 1000}s...`\n );\n await new Promise((r) => setTimeout(r, wait));\n continue;\n }\n break;\n }\n\n if (!response?.ok) {\n const status = response?.status ?? 0;\n if (status === 402) {\n throw new Error(\n \"Eliza Cloud credits exhausted — top up at https://www.elizacloud.ai/dashboard/settings?tab=billing\"\n );\n }\n throw new Error(`ElizaOS Cloud API error: ${status}`);\n }\n\n type OpenAIResponseType = {\n choices?: Array<{\n message?: { content?: string };\n finish_reason?: string;\n }>;\n usage?: {\n prompt_tokens: number;\n completion_tokens: number;\n total_tokens: number;\n };\n };\n\n const typedResult = (await response.json()) as OpenAIResponseType;\n const content = typedResult.choices?.[0]?.message?.content;\n\n if (typedResult.usage) {\n emitModelUsageEvent(\n runtime,\n ModelType.IMAGE_DESCRIPTION,\n typeof params === \"string\" ? params : params.prompt || \"\",\n {\n inputTokens: typedResult.usage.prompt_tokens,\n outputTokens: typedResult.usage.completion_tokens,\n totalTokens: typedResult.usage.total_tokens,\n }\n );\n }\n\n if (!content) {\n return {\n title: \"Failed to analyze image\",\n description: \"No response from API\",\n };\n }\n\n return parseImageDescriptionResponse(content);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`Error analyzing image: ${message}`);\n return {\n title: \"Failed to analyze image\",\n description: `Error: ${message}`,\n };\n }\n}\n",
|
|
23
|
+
"import { logger } from \"@elizaos/core\";\nimport { JSONParseError } from \"ai\";\nimport type { ImageDescriptionResult } from \"../types\";\n\nexport function getJsonRepairFunction(): (params: {\n text: string;\n error: unknown;\n}) => Promise<string | null> {\n return async ({ text, error }: { text: string; error: unknown }) => {\n try {\n if (error instanceof JSONParseError) {\n const cleanedText = text.replace(/```json\\n|\\n```|```/g, \"\");\n JSON.parse(cleanedText);\n return cleanedText;\n }\n return null;\n } catch (jsonError) {\n const message = jsonError instanceof Error ? jsonError.message : String(jsonError);\n logger.warn(`Failed to repair JSON text: ${message}`);\n return null;\n }\n };\n}\n\nexport function detectAudioMimeType(buffer: Buffer): string {\n if (buffer.length < 12) {\n return \"application/octet-stream\";\n }\n\n if (\n buffer[0] === 0x52 &&\n buffer[1] === 0x49 &&\n buffer[2] === 0x46 &&\n buffer[3] === 0x46 &&\n buffer[8] === 0x57 &&\n buffer[9] === 0x41 &&\n buffer[10] === 0x56 &&\n buffer[11] === 0x45\n ) {\n return \"audio/wav\";\n }\n\n if (\n (buffer[0] === 0x49 && buffer[1] === 0x44 && buffer[2] === 0x33) || // ID3\n (buffer[0] === 0xff && (buffer[1] & 0xe0) === 0xe0) // MPEG sync\n ) {\n return \"audio/mpeg\";\n }\n\n if (buffer[0] === 0x4f && buffer[1] === 0x67 && buffer[2] === 0x67 && buffer[3] === 0x53) {\n return \"audio/ogg\";\n }\n\n if (buffer[0] === 0x66 && buffer[1] === 0x4c && buffer[2] === 0x61 && buffer[3] === 0x43) {\n return \"audio/flac\";\n }\n\n if (buffer[4] === 0x66 && buffer[5] === 0x74 && buffer[6] === 0x79 && buffer[7] === 0x70) {\n return \"audio/mp4\";\n }\n\n if (buffer[0] === 0x1a && buffer[1] === 0x45 && buffer[2] === 0xdf && buffer[3] === 0xa3) {\n return \"audio/webm\";\n }\n\n logger.warn(\"Could not detect audio format from buffer, using generic binary type\");\n return \"application/octet-stream\";\n}\n\nexport async function webStreamToNodeStream(webStream: ReadableStream<Uint8Array>) {\n try {\n const { Readable } = await import(\"node:stream\");\n const reader = webStream.getReader();\n\n return new Readable({\n async read() {\n try {\n const { done, value } = await reader.read();\n if (done) {\n this.push(null);\n } else {\n this.push(value);\n }\n } catch (error) {\n this.destroy(error as Error);\n }\n },\n destroy(error, callback) {\n reader.cancel().finally(() => callback(error));\n },\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`Failed to load node:stream module: ${message}`);\n throw new Error(\n `Cannot convert stream: node:stream module unavailable. This feature requires a Node.js environment.`\n );\n }\n}\n\nexport function parseImageDescriptionResponse(responseText: string): ImageDescriptionResult {\n const titleMatch = responseText.match(/title[:\\s]+(.+?)(?:\\n|$)/i);\n const title = titleMatch?.[1]?.trim() || \"Image Analysis\";\n const description = responseText.replace(/title[:\\s]+(.+?)(?:\\n|$)/i, \"\").trim();\n\n return { title, description };\n}\n",
|
|
24
|
+
"import type { IAgentRuntime, JsonValue, ObjectGenerationParams } from \"@elizaos/core\";\nimport { logger, ModelType } from \"@elizaos/core\";\nimport { getLargeModel, getSmallModel } from \"../utils/config\";\nimport { emitModelUsageEvent } from \"../utils/events\";\nimport { getJsonRepairFunction } from \"../utils/helpers\";\nimport { extractResponsesOutputText } from \"../utils/responses-output\";\nimport { createCloudApiClient } from \"../utils/sdk-client\";\n\n/**\n * Models that are reasoning-class and don't support temperature.\n */\nconst REASONING_MODEL_PATTERNS = [\n \"o1\",\n \"o3\",\n \"o4\",\n \"deepseek-r1\",\n \"deepseek-reasoner\",\n \"claude-opus-4.7\",\n \"claude-opus-4-7\",\n \"gpt-5\",\n] as const;\n\ntype ResponsesApiResponse = Record<string, unknown> & {\n error?: {\n message?: string;\n };\n usage?: {\n input_tokens?: number;\n output_tokens?: number;\n total_tokens?: number;\n };\n};\n\nfunction isReasoningModel(modelName: string): boolean {\n const lower = modelName.toLowerCase();\n return REASONING_MODEL_PATTERNS.some((pattern) => lower.includes(pattern));\n}\n\nasync function generateObjectByModelType(\n runtime: IAgentRuntime,\n params: ObjectGenerationParams,\n modelType: string,\n getModelFn: (runtime: IAgentRuntime) => string\n): Promise<Record<string, JsonValue>> {\n const modelName = getModelFn(runtime);\n logger.log(`[ELIZAOS_CLOUD] Using ${modelType} model: ${modelName}`);\n\n const reasoning = isReasoningModel(modelName);\n const input: Array<{\n role: \"system\" | \"user\";\n content: Array<{ type: \"input_text\"; text: string }>;\n }> = [];\n if (runtime.character.system) {\n input.push({\n role: \"system\",\n content: [{ type: \"input_text\", text: runtime.character.system }],\n });\n }\n input.push({\n role: \"user\",\n content: [{ type: \"input_text\", text: params.prompt }],\n });\n\n const requestBody: Record<string, unknown> = {\n model: modelName,\n input,\n max_output_tokens: params.maxTokens ?? 8192,\n // Enforce JSON output at the API layer. Without this, the model\n // can ignore the caller's `schema` parameter and return prose\n // (\"I'll help you...\") or markdown-fenced JSON, both of which\n // choke the JSON.parse below.\n text: { format: { type: \"json_object\" } },\n };\n if (!reasoning && typeof params.temperature === \"number\") {\n requestBody.temperature = params.temperature;\n }\n\n const response = await createCloudApiClient(runtime).requestRaw(\"POST\", \"/responses\", {\n json: requestBody,\n });\n const responseText = await response.text();\n let data: ResponsesApiResponse = {};\n if (responseText) {\n try {\n data = JSON.parse(responseText) as ResponsesApiResponse;\n } catch (parseErr) {\n logger.error(\n `[generateObject] Failed to parse Eliza Cloud JSON: ${\n parseErr instanceof Error ? parseErr.message : String(parseErr)\n }`\n );\n }\n }\n\n if (!response.ok) {\n const errorBody = typeof data === \"object\" && data ? data.error : undefined;\n const errorMessage =\n typeof errorBody?.message === \"string\" && errorBody.message.trim()\n ? errorBody.message.trim()\n : `elizaOS Cloud error ${response.status}`;\n const requestError = new Error(errorMessage) as Error & {\n status?: number;\n error?: unknown;\n };\n requestError.status = response.status;\n if (errorBody) {\n requestError.error = errorBody;\n }\n throw requestError;\n }\n\n if (data.usage) {\n emitModelUsageEvent(runtime, modelType as never, params.prompt, {\n inputTokens: data.usage.input_tokens ?? 0,\n outputTokens: data.usage.output_tokens ?? 0,\n totalTokens: data.usage.total_tokens ?? 0,\n });\n }\n\n let jsonText = extractResponsesOutputText(data);\n if (!jsonText.trim()) {\n throw new Error(\"Object generation returned empty response\");\n }\n\n // Strip leading/trailing markdown code fences before JSON.parse. Models\n // routinely wrap structured output in ```json ... ``` even when JSON is\n // requested, and the repair function does not handle the leading backtick.\n jsonText = jsonText\n .replace(/^[\\s]*```(?:json)?\\s*\\n?/i, \"\")\n .replace(/\\n?```\\s*$/i, \"\")\n .trim();\n\n try {\n return JSON.parse(jsonText) as Record<string, JsonValue>;\n } catch (error) {\n const repairFunction = getJsonRepairFunction();\n const repairedJsonString = await repairFunction({\n text: jsonText,\n error,\n });\n\n if (repairedJsonString) {\n try {\n const repairedObject = JSON.parse(repairedJsonString);\n logger.info(\"[generateObject] Successfully repaired JSON.\");\n return repairedObject as Record<string, JsonValue>;\n } catch (repairParseError) {\n const message =\n repairParseError instanceof Error ? repairParseError.message : String(repairParseError);\n logger.error(`[generateObject] Failed to parse repaired JSON: ${message}`);\n throw repairParseError;\n }\n }\n\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`[generateObject] Failed to parse JSON: ${message}`);\n throw error;\n }\n}\n\nexport async function handleObjectSmall(\n runtime: IAgentRuntime,\n params: ObjectGenerationParams\n): Promise<Record<string, JsonValue>> {\n return generateObjectByModelType(runtime, params, ModelType.OBJECT_SMALL, getSmallModel);\n}\n\nexport async function handleObjectLarge(\n runtime: IAgentRuntime,\n params: ObjectGenerationParams\n): Promise<Record<string, JsonValue>> {\n return generateObjectByModelType(runtime, params, ModelType.OBJECT_LARGE, getLargeModel);\n}\n",
|
|
25
|
+
"type JsonRecord = Record<string, unknown>;\n\nfunction asRecord(value: unknown): JsonRecord | null {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return null;\n }\n return value as JsonRecord;\n}\n\nfunction normalizeContentItems(value: unknown): unknown[] {\n if (Array.isArray(value)) return value;\n if (typeof value === \"string\") return [{ type: \"text\", text: value }];\n return value && typeof value === \"object\" ? [value] : [];\n}\n\nfunction extractTextFromContentItem(value: unknown): string[] {\n if (typeof value === \"string\") {\n return [value];\n }\n\n const record = asRecord(value);\n if (!record) return [];\n\n const text =\n typeof record.text === \"string\"\n ? record.text\n : typeof record.output_text === \"string\"\n ? record.output_text\n : typeof record.content === \"string\"\n ? record.content\n : \"\";\n const type = typeof record.type === \"string\" ? record.type : undefined;\n\n if (text && (!type || type === \"output_text\" || type === \"text\")) {\n return [text];\n }\n\n return [];\n}\n\nfunction extractTextFromOutputItem(value: unknown): string[] {\n const record = asRecord(value);\n if (!record) return [];\n\n const directContent = normalizeContentItems(record.content);\n if (directContent.length > 0) {\n return directContent.flatMap(extractTextFromContentItem);\n }\n\n const nestedMessage = asRecord(record.message);\n if (nestedMessage) {\n return normalizeContentItems(nestedMessage.content).flatMap(extractTextFromContentItem);\n }\n\n const type = typeof record.type === \"string\" ? record.type : undefined;\n const text =\n typeof record.text === \"string\"\n ? record.text\n : typeof record.output_text === \"string\"\n ? record.output_text\n : \"\";\n if (text && (type === \"output_text\" || type === \"text\")) {\n return [text];\n }\n\n return [];\n}\n\nfunction extractTextFromChoice(value: unknown): string[] {\n const record = asRecord(value);\n if (!record) return [];\n\n if (typeof record.text === \"string\" && record.text) {\n return [record.text];\n }\n\n const message = asRecord(record.message);\n if (!message) {\n return [];\n }\n\n return normalizeContentItems(message.content).flatMap(extractTextFromContentItem);\n}\n\n/**\n * Recover text from Responses-style payloads, tolerating both the documented\n * `output_text` field and the common structured `output` item variants.\n */\nexport function extractResponsesOutputText(data: unknown): string {\n const record = asRecord(data);\n if (!record) return \"\";\n\n const segments: string[] = [];\n if (typeof record.output_text === \"string\" && record.output_text) {\n segments.push(record.output_text);\n }\n\n if (Array.isArray(record.output)) {\n segments.push(...record.output.flatMap(extractTextFromOutputItem));\n }\n\n if (Array.isArray(record.choices)) {\n segments.push(...record.choices.flatMap(extractTextFromChoice));\n }\n\n return segments.join(\"\");\n}\n",
|
|
26
|
+
"/** Research model handler — calls /responses for deep-research models. */\n\nimport type {\n IAgentRuntime,\n ResearchAnnotation,\n ResearchOutputItem,\n ResearchParams,\n ResearchResult,\n} from \"@elizaos/core\";\nimport { logger, ModelType } from \"@elizaos/core\";\nimport { getResearchModel } from \"../utils/config\";\nimport { emitModelUsageEvent } from \"../utils/events\";\nimport { createCloudApiClient } from \"../utils/sdk-client\";\n\ninterface ResponsesAPIOutput {\n id: string;\n status: string;\n output: Array<{\n type: string;\n id?: string;\n status?: string;\n content?: Array<{\n type: string;\n text?: string;\n annotations?: Array<{\n type: string;\n url?: string;\n title?: string;\n start_index?: number;\n end_index?: number;\n }>;\n }>;\n action?: {\n type: string;\n query?: string;\n url?: string;\n };\n query?: string;\n results?: Array<{\n file_id: string;\n file_name: string;\n score: number;\n }>;\n code?: string;\n output?: string;\n server_label?: string;\n tool_name?: string;\n arguments?: Record<string, unknown>;\n result?: unknown;\n }>;\n usage?: {\n input_tokens: number;\n output_tokens: number;\n total_tokens: number;\n };\n}\n\ntype ResponsesAPIInput =\n | string\n | Array<{\n role: \"user\" | \"system\" | \"assistant\";\n content: Array<{\n type: \"input_text\";\n text: string;\n }>;\n }>;\n\nfunction normalizeInput(input: ResearchParams[\"input\"]): ResponsesAPIInput {\n if (typeof input !== \"string\") {\n return input as ResponsesAPIInput;\n }\n\n return [\n {\n role: \"user\",\n content: [\n {\n type: \"input_text\",\n text: input,\n },\n ],\n },\n ];\n}\n\nfunction buildResearchApiError(status: number, errorText: string): Error {\n try {\n const parsed = JSON.parse(errorText) as {\n error?: { message?: string; param?: string; code?: string };\n };\n const message = parsed.error?.message;\n const param = parsed.error?.param;\n if (param === \"tools.0.type\" && message?.includes('expected \"function\"')) {\n return new Error(\n `Research API error: ${status} Eliza Cloud /responses rejected deep-research tool types; the provider currently only accepts function tools on this route`\n );\n }\n } catch {\n // Fall through to the raw error text.\n }\n\n return new Error(`Research API error: ${status} ${errorText}`);\n}\n\nfunction parseAnnotations(\n raw: Array<{\n type: string;\n url?: string;\n title?: string;\n start_index?: number;\n end_index?: number;\n }>\n): ResearchAnnotation[] {\n return raw\n .filter((a) => a.url !== undefined)\n .map((a) => ({\n url: a.url as string,\n title: a.title ?? \"\",\n startIndex: a.start_index ?? 0,\n endIndex: a.end_index ?? 0,\n }));\n}\n\nfunction parseOutputItems(raw: ResponsesAPIOutput[\"output\"]): ResearchOutputItem[] {\n const items: ResearchOutputItem[] = [];\n\n for (const item of raw) {\n switch (item.type) {\n case \"web_search_call\":\n items.push({\n id: item.id ?? \"\",\n type: \"web_search_call\",\n status: (item.status as \"completed\" | \"failed\") ?? \"completed\",\n action: {\n type: (item.action?.type as \"search\" | \"open_page\" | \"find_in_page\") ?? \"search\",\n query: item.action?.query,\n url: item.action?.url,\n },\n });\n break;\n case \"file_search_call\":\n items.push({\n id: item.id ?? \"\",\n type: \"file_search_call\",\n status: (item.status as \"completed\" | \"failed\") ?? \"completed\",\n query: item.query ?? \"\",\n results: item.results?.map((r) => ({\n fileId: r.file_id,\n fileName: r.file_name,\n score: r.score,\n })),\n });\n break;\n case \"code_interpreter_call\":\n items.push({\n id: item.id ?? \"\",\n type: \"code_interpreter_call\",\n status: (item.status as \"completed\" | \"failed\") ?? \"completed\",\n code: item.code ?? \"\",\n output: item.output,\n });\n break;\n case \"mcp_tool_call\":\n items.push({\n id: item.id ?? \"\",\n type: \"mcp_tool_call\",\n status: (item.status as \"completed\" | \"failed\") ?? \"completed\",\n serverLabel: item.server_label ?? \"\",\n toolName: item.tool_name ?? \"\",\n arguments: (item.arguments ?? {}) as Record<string, import(\"@elizaos/core\").JsonValue>,\n result: item.result as import(\"@elizaos/core\").JsonValue | undefined,\n });\n break;\n case \"message\": {\n const content = item.content ?? [];\n items.push({\n type: \"message\",\n content: content\n .filter((c) => c.type === \"output_text\")\n .map((c) => ({\n type: \"output_text\" as const,\n text: c.text ?? \"\",\n annotations: parseAnnotations(c.annotations ?? []),\n })),\n });\n break;\n }\n }\n }\n\n return items;\n}\n\nexport async function handleResearch(\n runtime: IAgentRuntime,\n params: ResearchParams\n): Promise<ResearchResult> {\n const modelName = params.model ?? getResearchModel(runtime);\n logger.log(`[ELIZAOS_CLOUD] Using RESEARCH model: ${modelName}`);\n\n const tools = params.tools ?? [{ type: \"web_search_preview\" }];\n\n const requestBody: Record<string, unknown> = {\n model: modelName,\n input: normalizeInput(params.input),\n tools: tools,\n };\n\n if (params.instructions) {\n requestBody.instructions = params.instructions;\n }\n if (params.background !== undefined) {\n requestBody.background = params.background;\n }\n if (params.maxToolCalls !== undefined) {\n requestBody.max_tool_calls = params.maxToolCalls;\n }\n if (params.reasoningSummary) {\n requestBody.reasoning = { summary: params.reasoningSummary };\n }\n\n const response = await createCloudApiClient(runtime).requestRaw(\"POST\", \"/responses\", {\n json: requestBody,\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n throw buildResearchApiError(response.status, errorText);\n }\n\n const data = (await response.json()) as ResponsesAPIOutput;\n\n if (data.usage) {\n emitModelUsageEvent(runtime, ModelType.RESEARCH, params.input, {\n inputTokens: data.usage.input_tokens,\n outputTokens: data.usage.output_tokens,\n totalTokens: data.usage.total_tokens,\n });\n }\n\n const outputItems = parseOutputItems(data.output);\n\n // Extract final text and annotations from the last message output\n let text = \"\";\n const annotations: ResearchAnnotation[] = [];\n\n for (const item of outputItems) {\n if (item.type === \"message\") {\n for (const content of item.content) {\n if (content.type === \"output_text\") {\n text += content.text;\n annotations.push(...content.annotations);\n }\n }\n }\n }\n\n return {\n id: data.id,\n text,\n annotations,\n outputItems,\n status: data.status as ResearchResult[\"status\"],\n };\n}\n",
|
|
27
|
+
"import type { Readable } from \"node:stream\";\nimport type { IAgentRuntime } from \"@elizaos/core\";\nimport { logger } from \"@elizaos/core\";\nimport type { OpenAITextToSpeechParams } from \"../types\";\nimport { getSetting, isBrowser } from \"../utils/config\";\nimport { webStreamToNodeStream } from \"../utils/helpers\";\nimport { createElizaCloudClient } from \"../utils/sdk-client\";\n\nasync function fetchTextToSpeech(\n runtime: IAgentRuntime,\n options: OpenAITextToSpeechParams\n): Promise<ReadableStream<Uint8Array> | Readable> {\n const defaultModel = getSetting(runtime, \"ELIZAOS_CLOUD_TTS_MODEL\", \"gpt-5-mini-tts\");\n const defaultVoice = getSetting(runtime, \"ELIZAOS_CLOUD_TTS_VOICE\", \"nova\");\n\n const model = options.model || (defaultModel as string);\n const voice = options.voice || (defaultVoice as string);\n const format = options.format || \"mp3\";\n const modelId = model.startsWith(\"elevenlabs/\")\n ? model.split(\"/\").slice(1).join(\"/\")\n : model.startsWith(\"eleven_\")\n ? model\n : undefined;\n const voiceId = voice && voice !== \"nova\" ? voice : undefined;\n\n try {\n const res = await createElizaCloudClient(runtime).routes.postApiV1VoiceTts({\n headers: {\n ...(format === \"mp3\" ? { Accept: \"audio/mpeg\" } : {}),\n },\n json: {\n text: options.text,\n ...(voiceId ? { voiceId } : {}),\n ...(modelId ? { modelId } : {}),\n },\n });\n\n if (!res.ok) {\n const err = await res.text();\n throw new Error(`ElizaOS Cloud TTS error ${res.status}: ${err}`);\n }\n\n if (!res.body) {\n throw new Error(\"ElizaOS Cloud TTS response body is null\");\n }\n\n if (!isBrowser()) {\n return await webStreamToNodeStream(res.body);\n }\n\n return res.body;\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n throw new Error(`Failed to fetch speech from ElizaOS Cloud TTS: ${message}`);\n }\n}\n\nexport async function handleTextToSpeech(\n runtime: IAgentRuntime,\n input: string | OpenAITextToSpeechParams\n): Promise<ReadableStream<Uint8Array> | Readable> {\n const options: OpenAITextToSpeechParams =\n typeof input === \"string\" ? { text: input } : (input as OpenAITextToSpeechParams);\n\n const resolvedModel =\n options.model || (getSetting(runtime, \"ELIZAOS_CLOUD_TTS_MODEL\", \"gpt-5-mini-tts\") as string);\n logger.log(`[ELIZAOS_CLOUD] Using TEXT_TO_SPEECH model: ${resolvedModel}`);\n try {\n const speechStream = await fetchTextToSpeech(runtime, options);\n return speechStream;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(`Error in TEXT_TO_SPEECH: ${message}`);\n throw error;\n }\n}\n\nexport { fetchTextToSpeech };\n",
|
|
28
|
+
"import type {\n GenerateTextParams,\n IAgentRuntime,\n ModelTypeName,\n TextStreamResult,\n} from \"@elizaos/core\";\nimport { logger, ModelType } from \"@elizaos/core\";\nimport type { LanguageModel } from \"ai\";\nimport { createOpenAIClient } from \"../providers/openai\";\nimport {\n getActionPlannerModel,\n getExperimentalTelemetry,\n getLargeModel,\n getMediumModel,\n getMegaModel,\n getNanoModel,\n getResponseHandlerModel,\n getSmallModel,\n} from \"../utils/config\";\nimport { emitModelUsageEvent } from \"../utils/events\";\nimport { extractResponsesOutputText } from \"../utils/responses-output\";\nimport { createCloudApiClient } from \"../utils/sdk-client\";\n\nconst TEXT_NANO_MODEL_TYPE = (ModelType.TEXT_NANO ?? \"TEXT_NANO\") as ModelTypeName;\nconst TEXT_MEDIUM_MODEL_TYPE = (ModelType.TEXT_MEDIUM ?? \"TEXT_MEDIUM\") as ModelTypeName;\nconst TEXT_SMALL_MODEL_TYPE = ModelType.TEXT_SMALL;\nconst TEXT_LARGE_MODEL_TYPE = ModelType.TEXT_LARGE;\nconst TEXT_MEGA_MODEL_TYPE = (ModelType.TEXT_MEGA ?? \"TEXT_MEGA\") as ModelTypeName;\nconst RESPONSE_HANDLER_MODEL_TYPE = (ModelType.RESPONSE_HANDLER ??\n \"RESPONSE_HANDLER\") as ModelTypeName;\nconst ACTION_PLANNER_MODEL_TYPE = (ModelType.ACTION_PLANNER ?? \"ACTION_PLANNER\") as ModelTypeName;\n\ntype ResponsesApiResponse = Record<string, unknown> & {\n error?: {\n message?: string;\n };\n usage?: {\n input_tokens?: number;\n output_tokens?: number;\n total_tokens?: number;\n };\n};\n\n/**\n * Models that are known to be reasoning-class and don't support temperature.\n * These are models that use chain-of-thought internally and reject\n */\nconst REASONING_MODEL_PATTERNS = [\n \"o1\",\n \"o3\",\n \"o4\",\n \"deepseek-r1\",\n \"deepseek-reasoner\",\n \"claude-opus-4.7\",\n \"claude-opus-4-7\",\n \"gpt-5\",\n] as const;\nconst RESPONSES_ROUTED_PREFIXES = [\"openai/\", \"anthropic/\"] as const;\ntype ChatAttachment = {\n data: string | Uint8Array | URL;\n mediaType: string;\n filename?: string;\n};\n\ntype GenerateTextParamsWithAttachments = GenerateTextParams & {\n attachments?: ChatAttachment[];\n};\n\nfunction buildUserContent(params: GenerateTextParamsWithAttachments) {\n const content: Array<\n | { type: \"text\"; text: string }\n | {\n type: \"file\";\n data: string | Uint8Array | URL;\n mediaType: string;\n filename?: string;\n }\n > = [{ type: \"text\", text: params.prompt }];\n\n for (const attachment of params.attachments ?? []) {\n content.push({\n type: \"file\",\n data: attachment.data,\n mediaType: attachment.mediaType,\n ...(attachment.filename ? { filename: attachment.filename } : {}),\n });\n }\n\n return content;\n}\n\nfunction isReasoningModel(modelName: string): boolean {\n const lower = modelName.toLowerCase();\n return REASONING_MODEL_PATTERNS.some((pattern) => lower.includes(pattern));\n}\n\nfunction supportsStopSequences(modelName: string): boolean {\n const lower = modelName.toLowerCase();\n return !RESPONSES_ROUTED_PREFIXES.some((prefix) => lower.startsWith(prefix));\n}\n\ntype TextModelType =\n | typeof TEXT_NANO_MODEL_TYPE\n | typeof TEXT_MEDIUM_MODEL_TYPE\n | typeof TEXT_SMALL_MODEL_TYPE\n | typeof TEXT_LARGE_MODEL_TYPE\n | typeof TEXT_MEGA_MODEL_TYPE\n | typeof RESPONSE_HANDLER_MODEL_TYPE\n | typeof ACTION_PLANNER_MODEL_TYPE;\n\nfunction getPurposeForModelType(modelType: TextModelType): string {\n switch (modelType) {\n case RESPONSE_HANDLER_MODEL_TYPE:\n return \"should_respond\";\n case ACTION_PLANNER_MODEL_TYPE:\n return \"action_planner\";\n default:\n return \"response\";\n }\n}\n\nfunction getModelNameForType(runtime: IAgentRuntime, modelType: TextModelType): string {\n switch (modelType) {\n case TEXT_NANO_MODEL_TYPE:\n return getNanoModel(runtime);\n case TEXT_MEDIUM_MODEL_TYPE:\n return getMediumModel(runtime);\n case TEXT_SMALL_MODEL_TYPE:\n return getSmallModel(runtime);\n case TEXT_LARGE_MODEL_TYPE:\n return getLargeModel(runtime);\n case TEXT_MEGA_MODEL_TYPE:\n return getMegaModel(runtime);\n case RESPONSE_HANDLER_MODEL_TYPE:\n return getResponseHandlerModel(runtime);\n case ACTION_PLANNER_MODEL_TYPE:\n return getActionPlannerModel(runtime);\n default:\n return getLargeModel(runtime);\n }\n}\n\nfunction buildGenerateParams(\n runtime: IAgentRuntime,\n modelType: TextModelType,\n params: GenerateTextParams\n) {\n const paramsWithAttachments = params as GenerateTextParamsWithAttachments;\n const { prompt } = params;\n const maxTokens = params.maxTokens ?? 8192;\n\n const openai = createOpenAIClient(runtime);\n const modelName = getModelNameForType(runtime, modelType);\n const experimentalTelemetry = getExperimentalTelemetry(runtime);\n const userContent =\n (paramsWithAttachments.attachments?.length ?? 0) > 0\n ? buildUserContent(paramsWithAttachments)\n : undefined;\n\n // Use openai.chat() (Chat Completions API) instead of openai.languageModel()\n // (Responses API). The Responses API unconditionally rejects presencePenalty,\n // frequencyPenalty, and stopSequences for ALL models, emitting noisy warnings.\n // The Chat Completions API supports these features natively and handles\n // reasoning models gracefully when the params are omitted.\n const model = openai.chat(modelName) as LanguageModel;\n\n // Reasoning models don't support temperature, frequency/presence penalties,\n // or stopSequences. Detect via model name patterns.\n const reasoning = isReasoningModel(modelName);\n const stopSequences =\n !reasoning &&\n supportsStopSequences(modelName) &&\n Array.isArray(params.stopSequences) &&\n params.stopSequences.length > 0\n ? params.stopSequences\n : undefined;\n\n const generateParams = {\n model,\n ...(userContent\n ? { messages: [{ role: \"user\" as const, content: userContent }] }\n : { prompt: prompt }),\n system: runtime.character.system ?? undefined,\n ...(stopSequences ? { stopSequences } : {}),\n maxOutputTokens: maxTokens,\n experimental_telemetry: {\n isEnabled: experimentalTelemetry,\n },\n };\n\n return { generateParams, modelName, modelType, prompt };\n}\n\nasync function generateTextWithModel(\n runtime: IAgentRuntime,\n modelType: TextModelType,\n params: GenerateTextParams\n): Promise<string | TextStreamResult> {\n const { modelName, prompt } = buildGenerateParams(runtime, modelType, params);\n\n logger.debug(`[ELIZAOS_CLOUD] Generating text with ${modelType} model: ${modelName}`);\n\n if (params.stream) {\n logger.debug(\n \"[ELIZAOS_CLOUD] Streaming text disabled for responses compatibility; falling back to buffered response.\"\n );\n }\n\n logger.log(`[ELIZAOS_CLOUD] Using ${modelType} model: ${modelName}`);\n logger.log(prompt);\n\n const reasoning = isReasoningModel(modelName);\n const input: Array<{\n role: \"system\" | \"user\";\n content: Array<{ type: \"input_text\"; text: string }>;\n }> = [];\n if (runtime.character.system) {\n input.push({\n role: \"system\",\n content: [{ type: \"input_text\", text: runtime.character.system }],\n });\n }\n input.push({\n role: \"user\",\n content: [{ type: \"input_text\", text: prompt }],\n });\n\n const requestBody: Record<string, unknown> = {\n model: modelName,\n input,\n max_output_tokens: params.maxTokens ?? 8192,\n };\n if (!reasoning && typeof params.temperature === \"number\") {\n requestBody.temperature = params.temperature;\n }\n\n const response = await createCloudApiClient(runtime).requestRaw(\"POST\", \"/responses\", {\n headers: {\n \"X-Eliza-Llm-Purpose\": getPurposeForModelType(modelType),\n \"X-Eliza-Model-Type\": modelType,\n },\n json: requestBody,\n });\n const responseText = await response.text();\n let data: ResponsesApiResponse = {};\n if (responseText) {\n try {\n data = JSON.parse(responseText) as ResponsesApiResponse;\n } catch (parseErr) {\n logger.error(\n `[ELIZAOS_CLOUD] Failed to parse responses JSON: ${\n parseErr instanceof Error ? parseErr.message : String(parseErr)\n }`\n );\n }\n }\n\n if (!response.ok) {\n const errorBody = typeof data === \"object\" && data ? data.error : undefined;\n const errorMessage =\n typeof errorBody?.message === \"string\" && errorBody.message.trim()\n ? errorBody.message.trim()\n : `elizaOS Cloud error ${response.status}`;\n const requestError = new Error(errorMessage) as Error & {\n status?: number;\n error?: unknown;\n };\n requestError.status = response.status;\n if (errorBody) {\n requestError.error = errorBody;\n }\n throw requestError;\n }\n\n if (data.usage) {\n emitModelUsageEvent(runtime, modelType, prompt, {\n inputTokens: data.usage.input_tokens ?? 0,\n outputTokens: data.usage.output_tokens ?? 0,\n totalTokens: data.usage.total_tokens ?? 0,\n });\n }\n\n const text = extractResponsesOutputText(data);\n if (!text.trim()) {\n throw new Error(\"elizaOS Cloud returned no text response\");\n }\n\n return text;\n}\n\nexport async function handleTextSmall(\n runtime: IAgentRuntime,\n params: GenerateTextParams\n): Promise<string | TextStreamResult> {\n return generateTextWithModel(runtime, TEXT_SMALL_MODEL_TYPE, params);\n}\n\nexport async function handleTextNano(\n runtime: IAgentRuntime,\n params: GenerateTextParams\n): Promise<string | TextStreamResult> {\n return generateTextWithModel(runtime, TEXT_NANO_MODEL_TYPE, params);\n}\n\nexport async function handleTextMedium(\n runtime: IAgentRuntime,\n params: GenerateTextParams\n): Promise<string | TextStreamResult> {\n return generateTextWithModel(runtime, TEXT_MEDIUM_MODEL_TYPE, params);\n}\n\nexport async function handleTextLarge(\n runtime: IAgentRuntime,\n params: GenerateTextParams\n): Promise<string | TextStreamResult> {\n return generateTextWithModel(runtime, TEXT_LARGE_MODEL_TYPE, params);\n}\n\nexport async function handleTextMega(\n runtime: IAgentRuntime,\n params: GenerateTextParams\n): Promise<string | TextStreamResult> {\n return generateTextWithModel(runtime, TEXT_MEGA_MODEL_TYPE, params);\n}\n\nexport async function handleResponseHandler(\n runtime: IAgentRuntime,\n params: GenerateTextParams\n): Promise<string | TextStreamResult> {\n return generateTextWithModel(runtime, RESPONSE_HANDLER_MODEL_TYPE, params);\n}\n\nexport async function handleActionPlanner(\n runtime: IAgentRuntime,\n params: GenerateTextParams\n): Promise<string | TextStreamResult> {\n return generateTextWithModel(runtime, ACTION_PLANNER_MODEL_TYPE, params);\n}\n",
|
|
29
|
+
"import { createOpenAI } from \"@ai-sdk/openai\";\nimport type { IAgentRuntime } from \"@elizaos/core\";\nimport { getApiKey, getBaseURL, isProxyMode } from \"../utils/config\";\n\nexport function createOpenAIClient(runtime: IAgentRuntime) {\n const baseURL = getBaseURL(runtime);\n const apiKey = getApiKey(runtime) ?? (isProxyMode(runtime) ? \"eliza-proxy\" : undefined);\n // NOTE: Callers must use openai.chat(modelName) instead of openai(modelName)\n // to force the Chat Completions API. The default openai(modelName) routes\n // to the Responses API which does not support presencePenalty,\n // frequencyPenalty, or stopSequences and emits noisy warnings.\n return createOpenAI({\n apiKey: (apiKey ?? \"\") as string,\n baseURL,\n });\n}\n",
|
|
30
|
+
"/**\n * CloudAuthService — Eliza Cloud authentication entry points.\n *\n * Two distinct auth flows live here:\n *\n * 1. **Device auto-signup** (`authenticateWithDevice`) — convenience-only.\n * Derives a hardware fingerprint and exchanges it for a free-tier API key\n * against the cloud signup endpoint. The result is treated as opaque and\n * is **never** trusted as inbound auth for the local Eliza dashboard.\n * See `docs/security/remote-auth-hardening-plan.md` §7 for the explicit\n * demotion rationale.\n *\n * 2. **Eliza Cloud SSO** (`getSsoRedirectUrl` / `exchangeCodeForSession`) —\n * OAuth-style authorization-code flow against the cloud issuer. The\n * callback handler in `app-core` (`api/auth/cloud-sso.ts`) consumes these\n * methods to bind a verified cloud user to a local Identity. All error\n * paths fail closed: the methods throw and the caller MUST refuse the\n * request. There is no partial-claims fallback.\n */\n\nimport { type IAgentRuntime, logger, Service } from \"@elizaos/core\";\nimport {\n type RuntimeEnvRecord,\n resolveApiSecurityConfig,\n resolveDesktopApiPort,\n} from \"@elizaos/shared\";\nimport { createRemoteJWKSet, jwtVerify } from \"jose\";\nimport type { CloudCredentials, DeviceAuthResponse, DevicePlatform } from \"../types/cloud\";\nimport { DEFAULT_CLOUD_CONFIG } from \"../types/cloud\";\nimport { CloudApiClient } from \"../utils/cloud-api\";\nimport type { CloudBootstrapService } from \"./cloud-bootstrap\";\n\n/** SHA-256 hash of hostname + platform + arch + cpu + memory. */\nasync function deriveDeviceId(): Promise<string> {\n const os = await import(\"node:os\");\n const crypto = await import(\"node:crypto\");\n const cpus = os.cpus();\n const raw = [\n os.hostname(),\n os.platform(),\n os.arch(),\n cpus[0]?.model ?? \"?\",\n cpus.length,\n os.totalmem(),\n ].join(\":\");\n return crypto.createHash(\"sha256\").update(raw).digest(\"hex\");\n}\n\nfunction detectPlatform(): DevicePlatform {\n if (typeof process === \"undefined\") return \"web\";\n const map: Record<string, DevicePlatform> = {\n darwin: \"macos\",\n win32: \"windows\",\n linux: \"linux\",\n };\n return map[process.platform] ?? \"linux\";\n}\n\n// ─── Eliza Cloud SSO ───────────────────────────────────────────────────────\n\n/**\n * Required ID-token claims for an Eliza Cloud SSO exchange.\n *\n * `sub` is the cloud user id (canonical identity key). `email` and `name`\n * are surfaced for UI display and identity provisioning. Anything else the\n * cloud issuer adds is preserved on `extra` for callers that need it but\n * is never required for auth decisions.\n */\nexport interface CloudSsoIdTokenClaims {\n iss: string;\n sub: string;\n aud: string | string[];\n exp: number;\n iat: number;\n email: string;\n email_verified?: boolean;\n name: string;\n picture?: string;\n extra: Record<string, unknown>;\n}\n\nexport interface CloudSsoSession {\n cloudUserId: string;\n email: string;\n displayName: string;\n claims: CloudSsoIdTokenClaims;\n}\n\nexport interface SsoRedirectArgs {\n /**\n * Local URL the user should land on after the SSO round-trip\n * (e.g. `/onboarding/setup`). The dashboard's callback route forwards\n * to this once the session cookie is set; it is NOT sent to the cloud\n * issuer.\n */\n returnTo?: string;\n /**\n * State nonce. The caller is responsible for generating this with\n * `crypto.randomBytes(32)` and storing it server-side keyed by the\n * issued cookie / pending exchange.\n */\n state: string;\n /**\n * Override for `ELIZA_CLOUD_CLIENT_ID`. Falls through to the env when\n * unset; explicitly throws when neither is provided.\n */\n clientId?: string;\n /** Allows tests to inject a synthetic env record. */\n env?: RuntimeEnvRecord;\n}\n\nexport interface ExchangeCodeArgs {\n /** Authorization code returned on the SSO callback. */\n code: string;\n /** State value the cloud issuer echoed back on the callback. */\n state: string;\n /**\n * State value the caller originally issued. Compared with `state` and\n * mismatch causes a fail-closed throw before any network call is made.\n */\n expectedState: string;\n /**\n * Source for `getJwksUrl()`. The caller resolves this from the runtime\n * service registry (`runtime.getService(\"CLOUD_BOOTSTRAP\")`) so this\n * file does not import from `app-core` directly.\n */\n bootstrap: CloudBootstrapService;\n /** Allows tests to inject a fake fetch for the token endpoint. */\n fetchImpl?: typeof fetch;\n /** Allows tests to inject a synthetic env record. */\n env?: RuntimeEnvRecord;\n /** Optional override for the redirect URI; defaults to the local callback. */\n redirectUri?: string;\n}\n\ninterface RawTokenResponse {\n id_token?: unknown;\n access_token?: unknown;\n token_type?: unknown;\n expires_in?: unknown;\n scope?: unknown;\n}\n\ninterface ApiKeyAuthInput {\n apiKey: string;\n organizationId?: string;\n userId?: string;\n}\n\ninterface RawIdTokenPayload {\n iss?: unknown;\n sub?: unknown;\n aud?: unknown;\n exp?: unknown;\n iat?: unknown;\n email?: unknown;\n email_verified?: unknown;\n name?: unknown;\n picture?: unknown;\n [otherProperty: string]: unknown;\n}\n\nfunction readEnvKey(env: RuntimeEnvRecord, key: string): string | null {\n const value = env[key];\n if (typeof value !== \"string\") return null;\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : null;\n}\n\nfunction processEnv(): RuntimeEnvRecord {\n if (typeof process === \"undefined\") return {};\n return process.env as RuntimeEnvRecord;\n}\n\n/**\n * Build the local SSO callback URL the cloud issuer will redirect back to.\n *\n * Reads `ELIZA_API_BIND` and the desktop API port from `@elizaos/shared`'s\n * runtime-env helper so the redirect_uri matches whatever the dashboard\n * is actually serving on. Loopback binds default to `http://127.0.0.1:<port>`;\n * non-loopback binds (cloud-provisioned containers) use `https://`.\n */\nfunction defaultRedirectUri(env: RuntimeEnvRecord): string {\n const security = resolveApiSecurityConfig(env);\n const port = resolveDesktopApiPort(env);\n const scheme = security.isLoopbackBind ? \"http\" : \"https\";\n // Strip any IPv6 brackets the bind host might already include.\n const host = security.bindHost.startsWith(\"[\")\n ? security.bindHost\n : security.bindHost.includes(\":\") && !security.bindHost.startsWith(\"[\")\n ? `[${security.bindHost}]`\n : security.bindHost;\n return `${scheme}://${host}:${port}/api/auth/login/sso/callback`;\n}\n\n/**\n * Returns the absolute URL the dashboard should redirect the user to in\n * order to start an Eliza Cloud SSO authorization-code flow.\n *\n * Throws when `ELIZA_CLOUD_CLIENT_ID` is unset and no `clientId` override\n * is provided — there is no built-in default. `ELIZA_CLOUD_ISSUER` is read\n * via the `CloudBootstrapService`'s service-port and must already be set;\n * if not, this method throws via the bootstrap's existing fail-closed\n * behaviour.\n *\n * The `state` argument MUST be generated by the caller with a cryptographic\n * RNG and stored server-side bound to the issued cookie. This method does\n * NOT generate or persist state.\n *\n * @param bootstrap - Service-port that exposes `getExpectedIssuer()`.\n * @param args - Required `state`, optional `clientId` / `returnTo` / `env`.\n */\nexport function getSsoRedirectUrl(bootstrap: CloudBootstrapService, args: SsoRedirectArgs): string {\n const env = args.env ?? processEnv();\n const clientId = args.clientId ?? readEnvKey(env, \"ELIZA_CLOUD_CLIENT_ID\");\n if (!clientId) {\n throw new Error(\"ELIZA_CLOUD_CLIENT_ID is not configured — cannot start Eliza Cloud SSO\");\n }\n if (args.state.length === 0) {\n throw new Error(\"getSsoRedirectUrl requires a non-empty state nonce\");\n }\n const issuer = bootstrap.getExpectedIssuer();\n const redirectUri = defaultRedirectUri(env);\n const params = new URLSearchParams();\n params.set(\"response_type\", \"code\");\n params.set(\"client_id\", clientId);\n params.set(\"redirect_uri\", redirectUri);\n params.set(\"scope\", \"openid profile\");\n params.set(\"state\", args.state);\n if (args.returnTo) {\n // Forwarded through state on the cloud side is not safe (issuer-controlled);\n // we surface it as a separate hint that the local callback honours.\n params.set(\"eliza_return_to\", args.returnTo);\n }\n return `${issuer}/oauth/authorize?${params.toString()}`;\n}\n\nfunction shapeIdTokenClaims(payload: RawIdTokenPayload): CloudSsoIdTokenClaims {\n if (typeof payload.iss !== \"string\" || payload.iss.length === 0) {\n throw new Error(\"id_token missing issuer claim\");\n }\n if (typeof payload.sub !== \"string\" || payload.sub.length === 0) {\n throw new Error(\"id_token missing sub claim\");\n }\n if (\n typeof payload.aud !== \"string\" &&\n !(Array.isArray(payload.aud) && payload.aud.every((value) => typeof value === \"string\"))\n ) {\n throw new Error(\"id_token missing or malformed aud claim\");\n }\n if (typeof payload.exp !== \"number\" || !Number.isFinite(payload.exp)) {\n throw new Error(\"id_token missing exp claim\");\n }\n if (typeof payload.iat !== \"number\" || !Number.isFinite(payload.iat)) {\n throw new Error(\"id_token missing iat claim\");\n }\n if (typeof payload.email !== \"string\" || payload.email.length === 0) {\n throw new Error(\"id_token missing email claim — Eliza Cloud SSO requires it\");\n }\n if (typeof payload.name !== \"string\" || payload.name.length === 0) {\n throw new Error(\"id_token missing name claim — Eliza Cloud SSO requires it\");\n }\n const extra: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(payload)) {\n if (\n key !== \"iss\" &&\n key !== \"sub\" &&\n key !== \"aud\" &&\n key !== \"exp\" &&\n key !== \"iat\" &&\n key !== \"email\" &&\n key !== \"email_verified\" &&\n key !== \"name\" &&\n key !== \"picture\"\n ) {\n extra[key] = value;\n }\n }\n return {\n iss: payload.iss,\n sub: payload.sub,\n aud: payload.aud as string | string[],\n exp: payload.exp,\n iat: payload.iat,\n email: payload.email,\n email_verified:\n typeof payload.email_verified === \"boolean\" ? payload.email_verified : undefined,\n name: payload.name,\n picture: typeof payload.picture === \"string\" ? payload.picture : undefined,\n extra,\n };\n}\n\nfunction shapeTokenResponse(payload: unknown): { idToken: string } {\n if (!payload || typeof payload !== \"object\") {\n throw new Error(\"Eliza Cloud token endpoint returned a non-object body\");\n }\n const raw = payload as RawTokenResponse;\n if (typeof raw.id_token !== \"string\" || raw.id_token.length === 0) {\n throw new Error(\"Eliza Cloud token endpoint did not return an id_token\");\n }\n return { idToken: raw.id_token };\n}\n\n/**\n * Exchange an authorization code for a verified Eliza Cloud session.\n *\n * Steps:\n * 1. Compare `state === expectedState`. Mismatch throws.\n * 2. POST to `${ELIZA_CLOUD_ISSUER}/oauth/token` with the code,\n * `client_id`, and `client_secret` (the latter from\n * `ELIZA_CLOUD_CLIENT_SECRET`).\n * 3. Verify the returned `id_token` against the JWKS exposed by\n * `CloudBootstrapService.getJwksUrl()`. RS256 only.\n * 4. Project the claims onto a `CloudSsoSession`.\n *\n * Any error in fetch / signature verify / claim shape throws — this method\n * NEVER returns a partial or fallback session.\n */\nexport async function exchangeCodeForSession(args: ExchangeCodeArgs): Promise<CloudSsoSession> {\n if (args.code.length === 0) {\n throw new Error(\"exchangeCodeForSession requires a non-empty code\");\n }\n if (!args.state || !args.expectedState || args.state !== args.expectedState) {\n throw new Error(\"Eliza Cloud SSO state mismatch — refusing to exchange code (possible CSRF)\");\n }\n\n const env = args.env ?? processEnv();\n const clientId = readEnvKey(env, \"ELIZA_CLOUD_CLIENT_ID\");\n if (!clientId) {\n throw new Error(\"ELIZA_CLOUD_CLIENT_ID is not configured — cannot complete Eliza Cloud SSO\");\n }\n const clientSecret = readEnvKey(env, \"ELIZA_CLOUD_CLIENT_SECRET\");\n if (!clientSecret) {\n throw new Error(\n \"ELIZA_CLOUD_CLIENT_SECRET is not configured — cannot complete Eliza Cloud SSO\"\n );\n }\n\n const issuer = args.bootstrap.getExpectedIssuer();\n const redirectUri = args.redirectUri ?? defaultRedirectUri(env);\n const tokenUrl = `${issuer}/oauth/token`;\n\n const fetchImpl = args.fetchImpl ?? fetch;\n const body = new URLSearchParams();\n body.set(\"grant_type\", \"authorization_code\");\n body.set(\"code\", args.code);\n body.set(\"redirect_uri\", redirectUri);\n body.set(\"client_id\", clientId);\n body.set(\"client_secret\", clientSecret);\n\n const response = await fetchImpl(tokenUrl, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/x-www-form-urlencoded\",\n accept: \"application/json\",\n },\n body: body.toString(),\n });\n if (!response.ok) {\n throw new Error(\n `Eliza Cloud token endpoint returned HTTP ${response.status} for code exchange`\n );\n }\n const payload: unknown = await response.json();\n const { idToken } = shapeTokenResponse(payload);\n\n const jwksUrl = args.bootstrap.getJwksUrl();\n const remoteJwks = createRemoteJWKSet(new URL(jwksUrl));\n\n const verified = await jwtVerify(idToken, remoteJwks, {\n algorithms: [\"RS256\"],\n issuer,\n audience: clientId,\n });\n\n const claims = shapeIdTokenClaims(verified.payload as RawIdTokenPayload);\n\n return {\n cloudUserId: claims.sub,\n email: claims.email,\n displayName: claims.name,\n claims,\n };\n}\n\n// ─── Service ───────────────────────────────────────────────────────────────\n\nexport class CloudAuthService extends Service {\n static serviceType = \"CLOUD_AUTH\";\n capabilityDescription = \"Eliza Cloud device authentication and SSO session helpers\";\n\n private client: CloudApiClient;\n private credentials: CloudCredentials | null = null;\n\n constructor(runtime?: IAgentRuntime) {\n super(runtime);\n this.client = new CloudApiClient(DEFAULT_CLOUD_CONFIG.baseUrl);\n }\n\n static async start(runtime: IAgentRuntime): Promise<Service> {\n const service = new CloudAuthService(runtime);\n await service.initialize();\n return service;\n }\n\n async stop(): Promise<void> {\n this.credentials = null;\n }\n\n private async initialize(): Promise<void> {\n const baseUrl = String(\n this.runtime.getSetting(\"ELIZAOS_CLOUD_BASE_URL\") ?? DEFAULT_CLOUD_CONFIG.baseUrl\n );\n this.client.setBaseUrl(baseUrl);\n\n // Try existing API key first. If the key is present in settings\n // (persisted via config file or character secrets in the DB), trust it\n // immediately so the agent is functional even when the cloud API is\n // temporarily unreachable. A background validation fires to confirm\n // the key — if it turns out to be revoked the next model call will\n // surface the error, but the agent won't stall on startup.\n const existingKey = this.runtime.getSetting(\"ELIZAOS_CLOUD_API_KEY\");\n if (existingKey) {\n const key = String(existingKey);\n this.client.setApiKey(key);\n\n // Accept the key optimistically — no blocking network call.\n this.credentials = {\n apiKey: key,\n userId: String(this.runtime.getSetting(\"ELIZAOS_CLOUD_USER_ID\") ?? \"\"),\n organizationId: String(\n this.runtime.getSetting(\"ELIZAOS_CLOUD_ORG_ID\") ??\n this.runtime.getSetting(\"ELIZA_CLOUD_ORGANIZATION_ID\") ??\n \"\"\n ),\n authenticatedAt: Date.now(),\n };\n logger.info(\"[CloudAuth] Authenticated with saved API key\");\n\n // Non-blocking validation — if the key is invalid the next model\n // call will surface the error; we just log a warning here.\n this.validateApiKey(key)\n .then((valid) => {\n if (!valid) {\n logger.warn(\n \"[CloudAuth] Saved API key could not be validated (cloud may be unreachable or key revoked) — model calls will use the key anyway\"\n );\n }\n })\n .catch(() => {\n // Swallow — already logged inside validateApiKey\n });\n return;\n }\n\n // Device-based auto-signup when explicitly enabled\n const enabled = this.runtime.getSetting(\"ELIZAOS_CLOUD_ENABLED\");\n if (enabled === \"true\" || enabled === \"1\") {\n try {\n await this.authenticateWithDevice();\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n logger.warn(`[CloudAuth] Device auth failed (cloud may be unreachable): ${msg}`);\n logger.info(\n \"[CloudAuth] Service will start unauthenticated — cloud features disabled until connectivity is restored\"\n );\n }\n } else {\n logger.info(\"[CloudAuth] Cloud not enabled (set ELIZAOS_CLOUD_ENABLED=true)\");\n }\n }\n\n private async validateApiKey(key: string): Promise<boolean> {\n try {\n const validationClient = new CloudApiClient(this.client.getBaseUrl(), key);\n await validationClient.get(\"/models\", { timeoutMs: 10_000 });\n return true;\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n logger.warn(`[CloudAuth] Could not reach cloud API to validate key: ${msg}`);\n return false;\n }\n }\n\n /**\n * Free-tier device auto-signup. **Convenience only — not a security\n * primitive.** The hardware fingerprint is treated as opaque material the\n * cloud signup endpoint can use to mint a fresh API key + $5 free credit\n * for new installs. The result is usable for outbound LLM calls; it never\n * authorizes inbound dashboard access.\n *\n * See `docs/security/remote-auth-hardening-plan.md` §7.\n */\n async authenticateWithDevice(): Promise<CloudCredentials> {\n const deviceId = await deriveDeviceId();\n const platform = detectPlatform();\n const appVersion = process.env.ELIZAOS_CLOUD_APP_VERSION ?? \"2.0.0-alpha\";\n const os = await import(\"node:os\");\n\n logger.info(`[CloudAuth] Authenticating device (platform=${platform})`);\n\n const response = await this.client.postUnauthenticated<DeviceAuthResponse>(\"/device-auth\", {\n deviceId,\n platform,\n appVersion,\n deviceName: os.hostname(),\n });\n\n this.credentials = {\n apiKey: response.data.apiKey,\n userId: response.data.userId,\n organizationId: response.data.organizationId,\n authenticatedAt: Date.now(),\n };\n this.client.setApiKey(response.data.apiKey);\n\n const action = response.data.isNew ? \"New account created\" : \"Authenticated\";\n logger.info(`[CloudAuth] ${action} (credits: $${response.data.credits.toFixed(2)})`);\n\n return this.credentials;\n }\n\n authenticateWithApiKey(input: ApiKeyAuthInput): CloudCredentials {\n const apiKey = input.apiKey.trim();\n if (!apiKey) {\n throw new Error(\"Eliza Cloud API key is required\");\n }\n\n this.client.setApiKey(apiKey);\n this.credentials = {\n apiKey,\n userId: input.userId ?? \"\",\n organizationId: input.organizationId ?? \"\",\n authenticatedAt: Date.now(),\n };\n\n logger.info(\"[CloudAuth] Authenticated with API key\");\n return this.credentials;\n }\n\n clearAuth(): void {\n this.credentials = null;\n this.client.setApiKey(undefined);\n }\n\n isAuthenticated(): boolean {\n return this.credentials !== null;\n }\n getCredentials(): CloudCredentials | null {\n return this.credentials;\n }\n getApiKey(): string | undefined {\n return this.credentials?.apiKey ?? this.client.getApiKey();\n }\n getClient(): CloudApiClient {\n return this.client;\n }\n getUserId(): string | undefined {\n return this.credentials?.userId;\n }\n getOrganizationId(): string | undefined {\n return this.credentials?.organizationId;\n }\n}\n",
|
|
31
|
+
"export type {\n CloudApiErrorBody,\n CloudRequestOptions,\n} from \"@elizaos/cloud-sdk\";\nexport {\n CloudApiClient,\n CloudApiError,\n ElizaCloudHttpClient,\n InsufficientCreditsError,\n} from \"@elizaos/cloud-sdk\";\n",
|
|
32
|
+
"/**\n * CloudBackupService — Agent state snapshots and restore.\n *\n * Creates, lists, and restores agent state snapshots through the ElizaCloud\n * API. Supports manual snapshots, periodic auto-backup, and pre-eviction\n * snapshots triggered by the billing system's low-credit warning.\n */\n\nimport { type IAgentRuntime, logger, Service } from \"@elizaos/core\";\nimport type {\n AgentSnapshot,\n CreateSnapshotResponse,\n RestoreSnapshotResponse,\n SnapshotListResponse,\n SnapshotType,\n} from \"../types/cloud\";\nimport { DEFAULT_CLOUD_CONFIG } from \"../types/cloud\";\nimport type { CloudAuthService } from \"./cloud-auth\";\n\ninterface AutoBackupEntry {\n containerId: string;\n timer: ReturnType<typeof setInterval>;\n lastBackupAt: number | null;\n}\n\nexport class CloudBackupService extends Service {\n static serviceType = \"CLOUD_BACKUP\";\n capabilityDescription = \"ElizaCloud agent state backup and restore\";\n\n private authService!: CloudAuthService;\n private autoBackups: Map<string, AutoBackupEntry> = new Map();\n private readonly maxSnapshots = DEFAULT_CLOUD_CONFIG.backup.maxSnapshots;\n private readonly backupIntervalMs = DEFAULT_CLOUD_CONFIG.backup.autoBackupIntervalMs;\n\n static async start(runtime: IAgentRuntime): Promise<Service> {\n const service = new CloudBackupService(runtime);\n await service.initialize();\n return service;\n }\n\n async stop(): Promise<void> {\n for (const [, entry] of this.autoBackups) {\n clearInterval(entry.timer);\n }\n this.autoBackups.clear();\n logger.info(\"[CloudBackup] Service stopped\");\n }\n\n private async initialize(): Promise<void> {\n const auth = this.runtime.getService(\"CLOUD_AUTH\");\n if (!auth) {\n logger.debug(\"[CloudBackup] CloudAuthService not available\");\n return;\n }\n this.authService = auth as CloudAuthService;\n logger.info(\"[CloudBackup] Service initialized\");\n }\n\n // ─── Snapshot CRUD ─────────────────────────────────────────────────────\n\n async createSnapshot(\n containerId: string,\n snapshotType: SnapshotType = \"manual\",\n metadata?: Record<string, unknown>\n ): Promise<AgentSnapshot> {\n const client = this.authService.getClient();\n const response = await client.post<CreateSnapshotResponse>(\n `/agent-state/${containerId}/snapshot`,\n { snapshotType, metadata }\n );\n\n logger.info(\n `[CloudBackup] Created ${snapshotType} snapshot for container ${containerId} (id=${response.data.id}, size=${formatBytes(response.data.sizeBytes)})`\n );\n\n // Update last backup timestamp for auto-backup tracking\n const autoEntry = this.autoBackups.get(containerId);\n if (autoEntry) {\n autoEntry.lastBackupAt = Date.now();\n }\n\n return response.data;\n }\n\n async listSnapshots(containerId: string): Promise<AgentSnapshot[]> {\n const client = this.authService.getClient();\n const response = await client.get<SnapshotListResponse>(\n `/agent-state/${containerId}/snapshots`\n );\n return response.data;\n }\n\n async restoreSnapshot(containerId: string, snapshotId: string): Promise<void> {\n const client = this.authService.getClient();\n\n await client.post<RestoreSnapshotResponse>(`/agent-state/${containerId}/restore`, {\n snapshotId,\n });\n\n logger.info(`[CloudBackup] Restored snapshot ${snapshotId} for container ${containerId}`);\n }\n\n async getLatestSnapshot(containerId: string): Promise<AgentSnapshot | null> {\n const snapshots = await this.listSnapshots(containerId);\n if (snapshots.length === 0) return null;\n\n // Sort by created_at descending and return the most recent\n snapshots.sort((a, b) => new Date(b.created_at).getTime() - new Date(a.created_at).getTime());\n return snapshots[0];\n }\n\n // ─── Auto-Backup Scheduling ────────────────────────────────────────────\n\n scheduleAutoBackup(containerId: string, intervalMs?: number): void {\n // Don't double-schedule\n if (this.autoBackups.has(containerId)) {\n logger.debug(`[CloudBackup] Auto-backup already scheduled for ${containerId}`);\n return;\n }\n\n const interval = intervalMs ?? this.backupIntervalMs;\n\n const timer = setInterval(() => {\n logger.debug(`[CloudBackup] Running auto-backup for container ${containerId}`);\n this.createSnapshot(containerId, \"auto\", {\n trigger: \"scheduled\",\n scheduledIntervalMs: interval,\n })\n .then(() => this.pruneSnapshots(containerId))\n .catch((err: Error) => {\n logger.error(`[CloudBackup] Auto-backup failed for ${containerId}: ${err.message}`);\n });\n }, interval);\n\n this.autoBackups.set(containerId, {\n containerId,\n timer,\n lastBackupAt: null,\n });\n\n logger.info(\n `[CloudBackup] Scheduled auto-backup for ${containerId} every ${Math.round(interval / 60_000)} minutes`\n );\n }\n\n cancelAutoBackup(containerId: string): void {\n const entry = this.autoBackups.get(containerId);\n if (!entry) return;\n\n clearInterval(entry.timer);\n this.autoBackups.delete(containerId);\n logger.info(`[CloudBackup] Cancelled auto-backup for ${containerId}`);\n }\n\n /**\n * Create a pre-eviction snapshot. Called when the billing system sends\n * a low-credit warning before shutting down the container.\n */\n async createPreEvictionSnapshot(containerId: string): Promise<AgentSnapshot> {\n logger.info(`[CloudBackup] Creating pre-eviction snapshot for ${containerId}`);\n return this.createSnapshot(containerId, \"pre-eviction\", {\n trigger: \"billing-eviction\",\n createdAt: new Date().toISOString(),\n });\n }\n\n // ─── Snapshot Pruning ──────────────────────────────────────────────────\n\n /**\n * Remove the oldest auto snapshots beyond maxSnapshots limit.\n * Manual and pre-eviction snapshots are never pruned.\n */\n private async pruneSnapshots(containerId: string): Promise<void> {\n const snapshots = await this.listSnapshots(containerId);\n\n const autoSnapshots = snapshots\n .filter((s) => s.snapshotType === \"auto\")\n .sort((a, b) => new Date(b.created_at).getTime() - new Date(a.created_at).getTime());\n\n const excess = autoSnapshots.slice(this.maxSnapshots);\n if (excess.length === 0) return;\n\n const client = this.authService.getClient();\n for (const snapshot of excess) {\n await client.delete(`/agent-state/${containerId}/snapshots/${snapshot.id}`);\n logger.debug(`[CloudBackup] Pruned old auto snapshot ${snapshot.id} for ${containerId}`);\n }\n\n logger.info(`[CloudBackup] Pruned ${excess.length} old auto snapshot(s) for ${containerId}`);\n }\n\n // ─── Accessors ─────────────────────────────────────────────────────────\n\n isAutoBackupScheduled(containerId: string): boolean {\n return this.autoBackups.has(containerId);\n }\n\n getLastBackupTime(containerId: string): number | null {\n return this.autoBackups.get(containerId)?.lastBackupAt ?? null;\n }\n}\n\nfunction formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n if (bytes < 1024 * 1024 * 1024) return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n return `${(bytes / (1024 * 1024 * 1024)).toFixed(1)} GB`;\n}\n",
|
|
33
|
+
"/**\n * CloudBootstrapService — service-port that exposes Eliza Cloud bootstrap\n * verification endpoints to `app-core` via the runtime service registry.\n *\n * The actual JWKS fetch / cache and bootstrap-token verify path lives in\n * `app-core` (`services/cloud-jwks-store.ts` and `api/auth/bootstrap-token.ts`).\n * This service intentionally has a minimal surface: it answers questions\n * about the cloud trust anchor (issuer, JWKS URL, revocation list URL,\n * expected container id) so that `app-core` does not need to import\n * directly from `@elizaos/plugin-elizacloud`.\n *\n * Hard rule (per remote-auth-hardening-plan §3.2): no fail-open. If the\n * cloud issuer is not configured, `getExpectedIssuer()` throws and the\n * consumer must reject the bootstrap exchange — the runtime never silently\n * trusts a default URL.\n */\n\nimport { type IAgentRuntime, logger, Service } from \"@elizaos/core\";\n\nexport interface CloudBootstrapService {\n /** Returns `${ELIZA_CLOUD_ISSUER}/.well-known/jwks.json`. */\n getJwksUrl(): string;\n /** Returns `${ELIZA_CLOUD_ISSUER}/.well-known/revocations.json`. */\n getRevocationListUrl(): string;\n /** Returns the configured `ELIZA_CLOUD_ISSUER`. Throws when unset. */\n getExpectedIssuer(): string;\n /** Returns the configured `ELIZA_CLOUD_CONTAINER_ID`, or `null` when unset. */\n getExpectedContainerId(): string | null;\n}\n\ntype ProcessEnvLike = Record<string, string | undefined>;\n\nfunction readEnv(): ProcessEnvLike {\n if (typeof process === \"undefined\") {\n return {};\n }\n return process.env as ProcessEnvLike;\n}\n\nfunction readSetting(runtime: IAgentRuntime | undefined, key: string): string | null {\n if (runtime && typeof runtime.getSetting === \"function\") {\n const value = runtime.getSetting(key);\n if (typeof value === \"string\" && value.length > 0) {\n return value;\n }\n }\n const fromEnv = readEnv()[key];\n if (typeof fromEnv === \"string\" && fromEnv.length > 0) {\n return fromEnv;\n }\n return null;\n}\n\nfunction trimTrailingSlash(input: string): string {\n let end = input.length;\n while (end > 0 && input.charCodeAt(end - 1) === 0x2f) {\n end -= 1;\n }\n return end === input.length ? input : input.slice(0, end);\n}\n\nexport class CloudBootstrapServiceImpl extends Service implements CloudBootstrapService {\n static serviceType = \"CLOUD_BOOTSTRAP\";\n capabilityDescription =\n \"Exposes Eliza Cloud bootstrap-token trust anchor (issuer, JWKS URL, revocation list URL, expected container id) to app-core\";\n\n static async start(runtime: IAgentRuntime): Promise<Service> {\n const service = new CloudBootstrapServiceImpl(runtime);\n const issuer = readSetting(runtime, \"ELIZA_CLOUD_ISSUER\");\n const containerId = readSetting(runtime, \"ELIZA_CLOUD_CONTAINER_ID\");\n if (issuer) {\n logger.info(\n `[CloudBootstrap] Trust anchor configured (issuer=${issuer}, containerId=${containerId ?? \"<unset>\"})`\n );\n } else {\n logger.debug(\n \"[CloudBootstrap] ELIZA_CLOUD_ISSUER unset — bootstrap-token verification will reject until configured\"\n );\n }\n return service;\n }\n\n async stop(): Promise<void> {\n // No persistent state to tear down.\n }\n\n getExpectedIssuer(): string {\n const issuer = readSetting(this.runtime, \"ELIZA_CLOUD_ISSUER\");\n if (!issuer) {\n throw new Error(\n \"ELIZA_CLOUD_ISSUER is not configured — bootstrap-token verification cannot proceed\"\n );\n }\n return trimTrailingSlash(issuer);\n }\n\n getJwksUrl(): string {\n return `${this.getExpectedIssuer()}/.well-known/jwks.json`;\n }\n\n getRevocationListUrl(): string {\n return `${this.getExpectedIssuer()}/.well-known/revocations.json`;\n }\n\n getExpectedContainerId(): string | null {\n return readSetting(this.runtime, \"ELIZA_CLOUD_CONTAINER_ID\");\n }\n}\n",
|
|
34
|
+
"/**\n * CloudBridgeService — WebSocket bridge to cloud-hosted agents.\n *\n * Establishes a JSON-RPC 2.0 WebSocket connection per container, allowing\n * the local eliza client to send messages to and receive events from\n * cloud-hosted ElizaOS agents. Handles reconnection with exponential\n * backoff and heartbeat keepalive.\n */\n\nimport { type IAgentRuntime, logger, Service } from \"@elizaos/core\";\nimport { WebSocket } from \"undici\";\nimport type {\n BridgeConnection,\n BridgeConnectionState,\n BridgeMessage,\n BridgeMessageHandler,\n} from \"../types/cloud\";\nimport { DEFAULT_CLOUD_CONFIG } from \"../types/cloud\";\nimport type { CloudAuthService } from \"./cloud-auth\";\n\ninterface ActiveConnection {\n ws: WebSocket;\n state: BridgeConnectionState;\n connectedAt: number | null;\n lastHeartbeat: number | null;\n reconnectAttempts: number;\n heartbeatTimer: ReturnType<typeof setInterval> | null;\n reconnectTimer: ReturnType<typeof setTimeout> | null;\n handlers: Set<BridgeMessageHandler>;\n pendingRequests: Map<\n string | number,\n {\n resolve: (value: unknown) => void;\n reject: (reason: Error) => void;\n timeout: ReturnType<typeof setTimeout>;\n }\n >;\n nextRequestId: number;\n}\n\nexport class CloudBridgeService extends Service {\n static serviceType = \"CLOUD_BRIDGE\";\n capabilityDescription = \"WebSocket bridge to cloud-hosted ElizaOS agents\";\n\n private authService!: CloudAuthService;\n private readonly bridgeConfig = DEFAULT_CLOUD_CONFIG.bridge;\n private connections: Map<string, ActiveConnection> = new Map();\n\n static async start(runtime: IAgentRuntime): Promise<Service> {\n const service = new CloudBridgeService(runtime);\n await service.initialize();\n return service;\n }\n\n async stop(): Promise<void> {\n for (const [containerId] of this.connections) {\n await this.disconnect(containerId);\n }\n logger.info(\"[CloudBridge] Service stopped\");\n }\n\n private async initialize(): Promise<void> {\n const auth = this.runtime.getService(\"CLOUD_AUTH\");\n if (!auth) {\n logger.debug(\"[CloudBridge] CloudAuthService not available\");\n return;\n }\n this.authService = auth as CloudAuthService;\n logger.info(\"[CloudBridge] Service initialized\");\n }\n\n // ─── Connection Management ─────────────────────────────────────────────\n\n async connect(containerId: string): Promise<void> {\n const existing = this.connections.get(containerId);\n if (existing) {\n if (existing.state === \"connected\" || existing.state === \"connecting\") {\n logger.debug(`[CloudBridge] Already connected/connecting to ${containerId}`);\n return;\n }\n }\n\n await this.establishConnection(containerId, 0);\n }\n\n async disconnect(containerId: string): Promise<void> {\n const conn = this.connections.get(containerId);\n if (!conn) return;\n\n if (conn.heartbeatTimer) clearInterval(conn.heartbeatTimer);\n if (conn.reconnectTimer) clearTimeout(conn.reconnectTimer);\n\n // Reject all pending requests\n for (const [, pending] of conn.pendingRequests) {\n clearTimeout(pending.timeout);\n pending.reject(new Error(\"Bridge disconnected\"));\n }\n conn.pendingRequests.clear();\n\n if (conn.ws.readyState === WebSocket.OPEN || conn.ws.readyState === WebSocket.CONNECTING) {\n conn.ws.close(1000, \"Client disconnect\");\n }\n\n this.connections.delete(containerId);\n logger.info(`[CloudBridge] Disconnected from ${containerId}`);\n }\n\n private async establishConnection(containerId: string, reconnectAttempts: number): Promise<void> {\n const client = this.authService.getClient();\n const apiKey = this.authService.getApiKey();\n const wsUrl = client.buildWsUrl(`/agent-bridge/${containerId}`);\n\n // Append API key as query parameter for WebSocket auth\n const authUrl = apiKey ? `${wsUrl}?token=${encodeURIComponent(apiKey)}` : wsUrl;\n\n const conn: ActiveConnection = {\n ws: new WebSocket(authUrl),\n state: \"connecting\",\n connectedAt: null,\n lastHeartbeat: null,\n reconnectAttempts,\n heartbeatTimer: null,\n reconnectTimer: null,\n handlers: this.connections.get(containerId)?.handlers ?? new Set(),\n pendingRequests: new Map(),\n nextRequestId: 1,\n };\n\n this.connections.set(containerId, conn);\n\n conn.ws.addEventListener(\"open\", () => {\n conn.state = \"connected\";\n conn.connectedAt = Date.now();\n conn.reconnectAttempts = 0;\n logger.info(`[CloudBridge] Connected to agent ${containerId}`);\n\n // Start heartbeat\n conn.heartbeatTimer = setInterval(() => {\n this.sendHeartbeat(containerId);\n }, this.bridgeConfig.heartbeatIntervalMs);\n });\n\n conn.ws.addEventListener(\"message\", (event) => {\n const raw = event.data;\n const data =\n typeof raw === \"string\" ? raw : raw instanceof Buffer ? raw.toString(\"utf-8\") : String(raw);\n const message = JSON.parse(data) as BridgeMessage;\n\n // Handle heartbeat responses\n if (message.method === \"heartbeat.ack\") {\n conn.lastHeartbeat = Date.now();\n return;\n }\n\n // Handle responses to pending requests\n if (message.id !== undefined && !message.method) {\n const pending = conn.pendingRequests.get(message.id);\n if (pending) {\n clearTimeout(pending.timeout);\n conn.pendingRequests.delete(message.id);\n if (message.error) {\n pending.reject(new Error(message.error.message));\n } else {\n pending.resolve(message.result);\n }\n return;\n }\n }\n\n // Dispatch to handlers\n for (const handler of conn.handlers) {\n handler(message);\n }\n });\n\n conn.ws.addEventListener(\"close\", (event: CloseEvent) => {\n conn.state = \"disconnected\";\n if (conn.heartbeatTimer) clearInterval(conn.heartbeatTimer);\n\n // Don't reconnect on clean close\n if (event.code === 1000) {\n logger.info(`[CloudBridge] Clean disconnect from ${containerId}`);\n return;\n }\n\n logger.warn(\n `[CloudBridge] Connection lost to ${containerId} (code=${event.code}, reason=${event.reason})`\n );\n this.scheduleReconnect(containerId, conn.reconnectAttempts + 1);\n });\n\n conn.ws.addEventListener(\"error\", () => {\n logger.error(`[CloudBridge] WebSocket error for ${containerId}`);\n });\n }\n\n private scheduleReconnect(containerId: string, attempt: number): void {\n if (attempt > this.bridgeConfig.maxReconnectAttempts) {\n logger.error(\n `[CloudBridge] Max reconnect attempts (${this.bridgeConfig.maxReconnectAttempts}) reached for ${containerId}`\n );\n this.connections.delete(containerId);\n return;\n }\n\n // Exponential backoff with jitter: base * 2^attempt + random jitter\n const base = this.bridgeConfig.reconnectIntervalMs;\n const delay = Math.min(base * 2 ** Math.min(attempt, 5), 120_000);\n const jitter = Math.floor(Math.random() * 1000);\n\n logger.info(\n `[CloudBridge] Reconnecting to ${containerId} in ${Math.round((delay + jitter) / 1000)}s (attempt ${attempt})`\n );\n\n const conn = this.connections.get(containerId);\n if (conn) {\n conn.state = \"reconnecting\";\n conn.reconnectTimer = setTimeout(() => {\n this.establishConnection(containerId, attempt);\n }, delay + jitter);\n }\n }\n\n private sendHeartbeat(containerId: string): void {\n const conn = this.connections.get(containerId);\n if (!conn || conn.state !== \"connected\") return;\n\n const message: BridgeMessage = {\n jsonrpc: \"2.0\",\n method: \"heartbeat\",\n params: { timestamp: Date.now() },\n };\n\n conn.ws.send(JSON.stringify(message));\n }\n\n // ─── Messaging ─────────────────────────────────────────────────────────\n\n /**\n * Send a JSON-RPC request and wait for a response.\n */\n async sendRequest(\n containerId: string,\n method: string,\n params: Record<string, unknown>,\n timeoutMs = 60_000\n ): Promise<unknown> {\n const conn = this.connections.get(containerId);\n if (!conn || conn.state !== \"connected\") {\n throw new Error(`Not connected to container ${containerId}`);\n }\n\n const id = conn.nextRequestId++;\n const message: BridgeMessage = {\n jsonrpc: \"2.0\",\n id,\n method,\n params,\n };\n\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(() => {\n conn.pendingRequests.delete(id);\n reject(new Error(`Request ${method} timed out after ${timeoutMs}ms`));\n }, timeoutMs);\n\n conn.pendingRequests.set(id, { resolve, reject, timeout });\n conn.ws.send(JSON.stringify(message));\n });\n }\n\n /**\n * Send a one-way notification (no response expected).\n */\n sendNotification(containerId: string, method: string, params: Record<string, unknown>): void {\n const conn = this.connections.get(containerId);\n if (!conn || conn.state !== \"connected\") {\n throw new Error(`Not connected to container ${containerId}`);\n }\n\n const message: BridgeMessage = {\n jsonrpc: \"2.0\",\n method,\n params,\n };\n\n conn.ws.send(JSON.stringify(message));\n }\n\n /**\n * Send a chat message to the cloud agent and get the response.\n */\n async sendChatMessage(\n containerId: string,\n text: string,\n roomId?: string,\n metadata?: Record<string, unknown>\n ): Promise<{ text: string; metadata?: Record<string, unknown> }> {\n const result = await this.sendRequest(containerId, \"message.send\", {\n text,\n roomId,\n metadata,\n });\n return result as { text: string; metadata?: Record<string, unknown> };\n }\n\n /**\n * Request the cloud agent's current status.\n */\n async getAgentStatus(containerId: string): Promise<Record<string, unknown>> {\n const result = await this.sendRequest(containerId, \"status.get\", {});\n return result as Record<string, unknown>;\n }\n\n /**\n * Update the cloud agent's configuration.\n */\n async updateAgentConfig(containerId: string, config: Record<string, unknown>): Promise<void> {\n await this.sendRequest(containerId, \"config.update\", config);\n }\n\n // ─── Event Handlers ────────────────────────────────────────────────────\n\n onMessage(containerId: string, handler: BridgeMessageHandler): () => void {\n let conn = this.connections.get(containerId);\n if (!conn) {\n // Pre-register handler before connection is established\n conn = {\n ws: null as unknown as WebSocket,\n state: \"disconnected\",\n connectedAt: null,\n lastHeartbeat: null,\n reconnectAttempts: 0,\n heartbeatTimer: null,\n reconnectTimer: null,\n handlers: new Set(),\n pendingRequests: new Map(),\n nextRequestId: 1,\n };\n this.connections.set(containerId, conn);\n }\n\n conn.handlers.add(handler);\n\n // Return unsubscribe function\n return () => {\n conn.handlers.delete(handler);\n };\n }\n\n // ─── Accessors ─────────────────────────────────────────────────────────\n\n getConnectionState(containerId: string): BridgeConnectionState {\n return this.connections.get(containerId)?.state ?? \"disconnected\";\n }\n\n getConnectionInfo(containerId: string): BridgeConnection | null {\n const conn = this.connections.get(containerId);\n if (!conn) return null;\n\n return {\n containerId,\n state: conn.state,\n connectedAt: conn.connectedAt,\n lastHeartbeat: conn.lastHeartbeat,\n reconnectAttempts: conn.reconnectAttempts,\n };\n }\n\n getConnectedContainerIds(): string[] {\n const ids: string[] = [];\n for (const [id, conn] of this.connections) {\n if (conn.state === \"connected\") ids.push(id);\n }\n return ids;\n }\n}\n",
|
|
35
|
+
"/**\n * CloudContainerService — Manages container lifecycle through ElizaCloud API.\n *\n * Handles creation, listing, status polling, health monitoring, and deletion\n * of ECS-backed containers. Deployments are async (CloudFormation takes 8-12\n * minutes), so `waitForDeployment` polls with exponential backoff.\n */\n\nimport { type IAgentRuntime, logger, Service } from \"@elizaos/core\";\nimport type {\n CloudContainer,\n ContainerDeleteResponse,\n ContainerGetResponse,\n ContainerHealthResponse,\n ContainerListResponse,\n CreateContainerRequest,\n CreateContainerResponse,\n} from \"../types/cloud\";\nimport { DEFAULT_CLOUD_CONFIG } from \"../types/cloud\";\nimport type { CloudApiClient } from \"../utils/cloud-api\";\nimport type { CloudAuthService } from \"./cloud-auth\";\n\n/** Active containers tracked locally for quick access. */\ninterface TrackedContainer {\n container: CloudContainer;\n pollingTimer: ReturnType<typeof setTimeout> | null;\n healthTimer: ReturnType<typeof setInterval> | null;\n}\n\nexport class CloudContainerService extends Service {\n static serviceType = \"CLOUD_CONTAINER\";\n capabilityDescription = \"ElizaCloud container provisioning and lifecycle management\";\n\n private authService!: CloudAuthService;\n private readonly containerDefaults = DEFAULT_CLOUD_CONFIG.container;\n private tracked: Map<string, TrackedContainer> = new Map();\n\n static async start(runtime: IAgentRuntime): Promise<Service> {\n const service = new CloudContainerService(runtime);\n await service.initialize();\n return service;\n }\n\n async stop(): Promise<void> {\n for (const [, tracked] of this.tracked) {\n if (tracked.pollingTimer) clearTimeout(tracked.pollingTimer);\n if (tracked.healthTimer) clearInterval(tracked.healthTimer);\n }\n this.tracked.clear();\n }\n\n private async initialize(): Promise<void> {\n // Get auth service reference\n const auth = this.runtime.getService(\"CLOUD_AUTH\");\n if (!auth) {\n logger.debug(\n \"[CloudContainer] CloudAuthService not available, container operations will fail\"\n );\n return;\n }\n this.authService = auth as CloudAuthService;\n\n // Load existing containers\n if (this.authService.isAuthenticated()) {\n const containers = await this.listContainers();\n for (const container of containers) {\n this.tracked.set(container.id, {\n container,\n pollingTimer: null,\n healthTimer: null,\n });\n\n // Resume polling for containers that are still deploying\n if (\n container.status === \"pending\" ||\n container.status === \"building\" ||\n container.status === \"deploying\"\n ) {\n this.startPolling(container.id);\n }\n\n // Start health monitoring for running containers\n if (container.status === \"running\") {\n this.startHealthMonitoring(container.id);\n }\n }\n logger.info(`[CloudContainer] Loaded ${containers.length} existing container(s)`);\n }\n }\n\n private getClient(): CloudApiClient {\n return this.authService.getClient();\n }\n\n // ─── CRUD ───────────────────────────────────────────────────────────────\n\n async createContainer(request: CreateContainerRequest): Promise<CreateContainerResponse> {\n const client = this.getClient();\n const defaults = this.containerDefaults;\n\n const payload: Record<string, unknown> = {\n name: request.name,\n project_name: request.project_name,\n description: request.description,\n port: request.port ?? defaults.defaultPort,\n desired_count: request.desired_count ?? 1,\n cpu: request.cpu ?? defaults.defaultCpu,\n memory: request.memory ?? defaults.defaultMemory,\n environment_vars: request.environment_vars ?? {},\n health_check_path: request.health_check_path ?? \"/health\",\n ecr_image_uri: request.ecr_image_uri,\n ecr_repository_uri: request.ecr_repository_uri,\n image_tag: request.image_tag,\n architecture: request.architecture ?? defaults.defaultArchitecture,\n };\n\n const response = await client.post<CreateContainerResponse>(\"/containers\", payload);\n\n // Track the new container\n this.tracked.set(response.data.id, {\n container: response.data,\n pollingTimer: null,\n healthTimer: null,\n });\n\n // Start polling for deployment completion\n this.startPolling(response.data.id);\n\n logger.info(\n `[CloudContainer] Created container \"${request.name}\" (id=${response.data.id}, stack=${response.stackName})`\n );\n\n return response;\n }\n\n async listContainers(): Promise<CloudContainer[]> {\n const client = this.getClient();\n const response = await client.get<ContainerListResponse>(\"/containers\");\n return response.data;\n }\n\n async getContainer(containerId: string): Promise<CloudContainer> {\n const client = this.getClient();\n const response = await client.get<ContainerGetResponse>(`/containers/${containerId}`);\n\n // Update local tracking\n const existing = this.tracked.get(containerId);\n if (existing) {\n existing.container = response.data;\n }\n\n return response.data;\n }\n\n async deleteContainer(containerId: string): Promise<void> {\n const client = this.getClient();\n await client.delete<ContainerDeleteResponse>(`/containers/${containerId}`);\n\n // Stop tracking\n const tracked = this.tracked.get(containerId);\n if (tracked) {\n if (tracked.pollingTimer) clearTimeout(tracked.pollingTimer);\n if (tracked.healthTimer) clearInterval(tracked.healthTimer);\n this.tracked.delete(containerId);\n }\n\n logger.info(`[CloudContainer] Deleted container ${containerId}`);\n }\n\n // ─── Deployment Polling ────────────────────────────────────────────────\n\n /**\n * Poll container status until it reaches a terminal state (running, failed, stopped).\n * Uses exponential backoff: 5s, 10s, 20s, 30s, 30s, ...\n */\n private startPolling(containerId: string): void {\n const tracked = this.tracked.get(containerId);\n if (!tracked) return;\n\n let attempt = 0;\n const maxAttempts = 120; // ~1 hour with backoff\n const baseInterval = 5_000;\n const maxInterval = 30_000;\n\n const poll = async () => {\n attempt++;\n if (attempt > maxAttempts) {\n logger.error(\n `[CloudContainer] Polling timed out for container ${containerId} after ${maxAttempts} attempts`\n );\n return;\n }\n\n const container = await this.getContainer(containerId);\n const status = container.status;\n\n logger.debug(`[CloudContainer] Poll #${attempt} for ${containerId}: status=${status}`);\n\n if (status === \"running\") {\n logger.info(\n `[CloudContainer] Container ${containerId} is now running at ${container.load_balancer_url}`\n );\n this.startHealthMonitoring(containerId);\n return;\n }\n\n if (status === \"failed\" || status === \"stopped\" || status === \"suspended\") {\n logger.warn(`[CloudContainer] Container ${containerId} reached terminal state: ${status}`);\n if (container.error_message) {\n logger.error(`[CloudContainer] Error: ${container.error_message}`);\n }\n return;\n }\n\n // Schedule next poll with exponential backoff\n const delay = Math.min(baseInterval * 2 ** Math.min(attempt - 1, 3), maxInterval);\n tracked.pollingTimer = setTimeout(poll, delay);\n };\n\n tracked.pollingTimer = setTimeout(poll, baseInterval);\n }\n\n /**\n * Wait for a container to reach \"running\" status. Returns the updated container.\n * This is the synchronous API for actions that need to block.\n */\n async waitForDeployment(containerId: string, timeoutMs = 900_000): Promise<CloudContainer> {\n const deadline = Date.now() + timeoutMs;\n let interval = 5_000;\n const maxInterval = 30_000;\n\n while (Date.now() < deadline) {\n const container = await this.getContainer(containerId);\n\n if (container.status === \"running\") return container;\n if (container.status === \"failed\") {\n throw new Error(\n `Container deployment failed: ${container.error_message ?? \"unknown error\"}`\n );\n }\n if (container.status === \"stopped\" || container.status === \"suspended\") {\n throw new Error(`Container reached terminal state: ${container.status}`);\n }\n\n await new Promise((resolve) => setTimeout(resolve, interval));\n interval = Math.min(interval * 1.5, maxInterval);\n }\n\n throw new Error(`Container deployment timed out after ${Math.round(timeoutMs / 1000)}s`);\n }\n\n // ─── Health Monitoring ─────────────────────────────────────────────────\n\n private startHealthMonitoring(containerId: string): void {\n const tracked = this.tracked.get(containerId);\n if (!tracked || tracked.healthTimer) return;\n\n const interval = 60_000; // Check every 60 seconds\n\n tracked.healthTimer = setInterval(() => {\n this.getContainerHealth(containerId)\n .then((health) => {\n if (!health.data.healthy) {\n logger.warn(\n `[CloudContainer] Container ${containerId} unhealthy: ${health.data.status}`\n );\n }\n })\n .catch((err: Error) => {\n logger.error(`[CloudContainer] Health check failed for ${containerId}: ${err.message}`);\n });\n }, interval);\n }\n\n async getContainerHealth(containerId: string): Promise<ContainerHealthResponse> {\n const client = this.getClient();\n return client.get<ContainerHealthResponse>(`/containers/${containerId}/health`);\n }\n\n // ─── Accessors ─────────────────────────────────────────────────────────\n\n getTrackedContainers(): CloudContainer[] {\n return Array.from(this.tracked.values()).map((t) => t.container);\n }\n\n getTrackedContainer(containerId: string): CloudContainer | undefined {\n return this.tracked.get(containerId)?.container;\n }\n\n isContainerRunning(containerId: string): boolean {\n return this.tracked.get(containerId)?.container.status === \"running\";\n }\n\n getContainerUrl(containerId: string): string | null {\n return this.tracked.get(containerId)?.container.load_balancer_url ?? null;\n }\n}\n",
|
|
36
|
+
"import {\n ChannelType,\n type Content,\n ContentType,\n createMessageMemory,\n createUniqueUuid,\n type HandlerCallback,\n type IAgentRuntime,\n type JsonValue,\n logger,\n type Memory,\n Service,\n type UUID,\n} from \"@elizaos/core\";\nimport type {\n GatewayRelayRequest,\n GatewayRelayRequestEnvelope,\n GatewayRelayResponse,\n PollGatewayRelayResponse,\n RegisterGatewayRelaySessionResponse,\n} from \"../types/cloud\";\nimport type { CloudAuthService } from \"./cloud-auth\";\n\nconst POLL_TIMEOUT_MS = 25_000;\nconst REQUEST_TIMEOUT_MS = POLL_TIMEOUT_MS + 5_000;\nconst RETRY_DELAY_MS = 2_000;\nconst IDLE_DELAY_MS = 250;\n\ntype RelayRequestMethod = \"GET\" | \"POST\" | \"DELETE\";\ntype RelayRuntimeStatus = \"idle\" | \"registered\" | \"polling\" | \"error\" | \"stopped\";\n\ninterface RelayRequestJsonOptions {\n method: RelayRequestMethod;\n json?: unknown;\n query?: Record<string, string | number | boolean>;\n timeoutMs?: number;\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isUuidLike(value: string): value is UUID {\n return /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value);\n}\n\nfunction asTrimmedString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\nfunction resolveChannelType(value: unknown): ChannelType {\n const candidate = asTrimmedString(value)?.toUpperCase();\n return candidate && candidate in ChannelType\n ? ChannelType[candidate as keyof typeof ChannelType]\n : ChannelType.DM;\n}\n\nfunction isCloudProvisionedRuntime(): boolean {\n if (typeof process === \"undefined\") {\n return false;\n }\n return process.env.ELIZA_CLOUD_PROVISIONED === \"1\";\n}\n\nfunction isNodeHost(): boolean {\n return typeof process !== \"undefined\" && typeof process.versions?.node === \"string\";\n}\n\nfunction normalizeAttachments(value: unknown): Content[\"attachments\"] | undefined {\n if (!Array.isArray(value)) {\n return undefined;\n }\n\n const attachments = value\n .map((entry, index) => {\n if (!isRecord(entry)) {\n return null;\n }\n\n const url = asTrimmedString(entry.url);\n if (!url) {\n return null;\n }\n\n const type = asTrimmedString(entry.type)?.toLowerCase();\n return {\n id: asTrimmedString(entry.id) ?? `${index}:${url}`,\n url,\n source: asTrimmedString(entry.source),\n title: asTrimmedString(entry.title),\n description: asTrimmedString(entry.description),\n text: asTrimmedString(entry.text),\n contentType:\n type === \"image\"\n ? ContentType.IMAGE\n : type === \"video\"\n ? ContentType.VIDEO\n : type === \"audio\"\n ? ContentType.AUDIO\n : type === \"document\"\n ? ContentType.DOCUMENT\n : undefined,\n };\n })\n .filter((entry): entry is NonNullable<typeof entry> => entry !== null);\n\n return attachments.length > 0 ? attachments : undefined;\n}\n\nfunction toJsonRecord(value: unknown): Record<string, unknown> | undefined {\n return isRecord(value) ? value : undefined;\n}\n\nfunction toJsonMetadataRecord(value: unknown): Record<string, JsonValue> | undefined {\n if (!isRecord(value)) {\n return undefined;\n }\n\n return JSON.parse(JSON.stringify(value)) as Record<string, JsonValue>;\n}\n\ntype GatewayMessagePayload = {\n text: string;\n roomKey: string;\n channelType: ChannelType;\n source: string;\n senderId: string;\n senderUserName: string;\n senderName: string;\n attachments?: Content[\"attachments\"];\n senderMetadata?: Record<string, unknown>;\n transportMetadata?: Record<string, unknown>;\n};\n\nfunction buildGatewayMessagePayload(\n runtime: IAgentRuntime,\n rpc: GatewayRelayRequest\n): GatewayMessagePayload | null {\n const params = toJsonRecord(rpc.params);\n const sender = toJsonRecord(params?.sender);\n\n const source = asTrimmedString(params?.source) ?? \"eliza_cloud_gateway\";\n const text = typeof params?.text === \"string\" ? params.text : \"\";\n const senderId = asTrimmedString(sender?.id) ?? `${source}:anonymous`;\n const senderUserName = asTrimmedString(sender?.username) ?? senderId;\n const senderName =\n asTrimmedString(sender?.displayName) ?? asTrimmedString(sender?.name) ?? senderUserName;\n const roomKey =\n asTrimmedString(params?.roomId) ??\n `${source}:${senderId}:${String(rpc.id ?? Date.now())}:${runtime.agentId}`;\n\n if (!text.trim() && !normalizeAttachments(params?.attachments)?.length) {\n return null;\n }\n\n return {\n text: text.trim() || \" \",\n roomKey,\n channelType: resolveChannelType(params?.channelType),\n source,\n senderId,\n senderUserName,\n senderName,\n attachments: normalizeAttachments(params?.attachments),\n senderMetadata: toJsonRecord(sender?.metadata),\n transportMetadata: toJsonRecord(params?.metadata),\n };\n}\n\nfunction buildWorldKey(\n source: string,\n metadata: Record<string, unknown> | undefined,\n roomKey: string\n): string {\n const discord = toJsonRecord(metadata?.discord);\n const guildId = asTrimmedString(discord?.guildId);\n if (guildId) {\n return `gateway:${source}:guild:${guildId}`;\n }\n\n const threadId = asTrimmedString(metadata?.threadId);\n if (threadId) {\n return `gateway:${source}:thread:${threadId}`;\n }\n\n return `gateway:${source}:room:${roomKey}`;\n}\n\nclass SessionMissingError extends Error {\n constructor() {\n super(\"Gateway relay session missing\");\n this.name = \"SessionMissingError\";\n }\n}\n\nexport class CloudManagedGatewayRelayService extends Service {\n static serviceType = \"CLOUD_MANAGED_GATEWAY_RELAY\";\n capabilityDescription =\n \"Registers a local Eliza runtime with the cloud managed gateway and handles inbound relay traffic\";\n\n private authService: CloudAuthService | null = null;\n private loopPromise: Promise<void> | null = null;\n private currentSessionId: string | null = null;\n private stopping = false;\n private activeAbortController: AbortController | null = null;\n private relayStatus: RelayRuntimeStatus = \"idle\";\n private lastSeenAt: string | null = null;\n\n static async start(runtime: IAgentRuntime): Promise<Service> {\n const service = new CloudManagedGatewayRelayService(runtime);\n await service.initialize();\n return service;\n }\n\n async stop(): Promise<void> {\n this.stopping = true;\n this.relayStatus = \"stopped\";\n this.activeAbortController?.abort();\n\n if (this.loopPromise) {\n await this.loopPromise.catch((error) => {\n logger.debug(\n `[CloudManagedGatewayRelay] Ignoring relay loop shutdown error: ${\n error instanceof Error ? error.message : String(error)\n }`\n );\n });\n }\n\n const sessionId = this.currentSessionId;\n this.currentSessionId = null;\n if (sessionId) {\n await this.disconnectSession(sessionId);\n }\n }\n\n private async initialize(): Promise<void> {\n if (!isNodeHost()) {\n logger.debug(\"[CloudManagedGatewayRelay] Skipping gateway relay outside Node.js runtime\");\n this.relayStatus = \"stopped\";\n return;\n }\n\n if (isCloudProvisionedRuntime()) {\n logger.debug(\n \"[CloudManagedGatewayRelay] Skipping local relay inside provisioned cloud runtime\"\n );\n this.relayStatus = \"stopped\";\n return;\n }\n\n if (!this.runtime.messageService) {\n logger.debug(\"[CloudManagedGatewayRelay] Skipping gateway relay without message service\");\n this.relayStatus = \"idle\";\n return;\n }\n\n const auth = this.runtime.getService(\"CLOUD_AUTH\");\n if (!auth) {\n logger.debug(\"[CloudManagedGatewayRelay] CloudAuthService not available\");\n this.relayStatus = \"idle\";\n return;\n }\n\n this.authService = auth as CloudAuthService;\n if (!this.authService.isAuthenticated()) {\n logger.debug(\n \"[CloudManagedGatewayRelay] Skipping gateway relay while cloud auth is inactive\"\n );\n this.relayStatus = \"idle\";\n return;\n }\n\n this.startRelayLoopIfReady();\n }\n\n getSessionInfo(): {\n sessionId: string | null;\n organizationId: string | null;\n userId: string | null;\n agentName: string | null;\n platform: string | null;\n lastSeenAt: string | null;\n status: RelayRuntimeStatus;\n } {\n const auth = this.authService;\n const status =\n this.stopping || this.relayStatus === \"stopped\"\n ? \"stopped\"\n : auth?.isAuthenticated() === false\n ? \"idle\"\n : this.relayStatus;\n\n return {\n sessionId: this.currentSessionId,\n organizationId: auth?.getOrganizationId() ?? null,\n userId: auth?.getUserId() ?? null,\n agentName: this.getAgentName(),\n platform: \"local-runtime\",\n lastSeenAt: this.lastSeenAt,\n status,\n };\n }\n\n startRelayLoopIfReady(): boolean {\n if (this.loopPromise && !this.stopping) {\n return true;\n }\n\n const auth =\n this.authService ?? (this.runtime.getService(\"CLOUD_AUTH\") as CloudAuthService | null);\n if (!auth?.isAuthenticated() || !this.runtime.messageService) {\n this.relayStatus = \"idle\";\n return false;\n }\n\n this.authService = auth;\n this.stopping = false;\n this.relayStatus = \"idle\";\n this.loopPromise = this.runLoop();\n logger.info(\"[CloudManagedGatewayRelay] Local gateway relay loop started\");\n return true;\n }\n\n private async runLoop(): Promise<void> {\n while (!this.stopping) {\n try {\n if (!this.currentSessionId) {\n this.currentSessionId = await this.registerSession();\n this.relayStatus = \"registered\";\n this.lastSeenAt = new Date().toISOString();\n continue;\n }\n\n this.relayStatus = \"polling\";\n const request = await this.pollNextRequest(this.currentSessionId);\n this.lastSeenAt = new Date().toISOString();\n if (!request) {\n this.relayStatus = \"registered\";\n await sleep(IDLE_DELAY_MS);\n continue;\n }\n\n const response = await this.handleRequest(request.rpc);\n await this.submitResponse(this.currentSessionId, request.requestId, response);\n this.relayStatus = \"registered\";\n } catch (error) {\n if (this.stopping) {\n return;\n }\n\n if (error instanceof SessionMissingError) {\n this.currentSessionId = null;\n this.relayStatus = \"idle\";\n await sleep(IDLE_DELAY_MS);\n continue;\n }\n\n this.relayStatus = \"error\";\n logger.warn(\n `[CloudManagedGatewayRelay] Relay loop error: ${\n error instanceof Error ? error.message : String(error)\n }`\n );\n await sleep(RETRY_DELAY_MS);\n }\n }\n }\n\n private getAgentName(): string {\n return this.runtime.character?.name?.trim() || \"Eliza\";\n }\n\n private getClient() {\n const client = this.authService?.getClient();\n if (!client) {\n throw new Error(\"Cloud API client is unavailable\");\n }\n return client;\n }\n\n private async requestJson<T>(\n path: string,\n options: RelayRequestJsonOptions\n ): Promise<{ status: number; body: T }> {\n const timeoutMs = options.timeoutMs ?? REQUEST_TIMEOUT_MS;\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeoutMs);\n this.activeAbortController = controller;\n\n try {\n const response = await this.getClient().requestRaw(options.method, path, {\n headers: {\n Accept: \"application/json\",\n },\n json: options.json,\n query: options.query,\n signal: controller.signal,\n });\n\n const body = (await response.json().catch(() => ({}))) as T;\n return { status: response.status, body };\n } finally {\n clearTimeout(timeoutId);\n if (this.activeAbortController === controller) {\n this.activeAbortController = null;\n }\n }\n }\n\n private async registerSession(): Promise<string> {\n const { status, body } = await this.requestJson<RegisterGatewayRelaySessionResponse>(\n \"/eliza/gateway-relay/sessions\",\n {\n method: \"POST\",\n json: {\n runtimeAgentId: this.runtime.agentId,\n agentName: this.getAgentName(),\n },\n }\n );\n\n if (status >= 400 || !body?.success || !body.data?.session?.id) {\n throw new Error(`Failed to register gateway relay session (status=${status})`);\n }\n\n logger.info(\n `[CloudManagedGatewayRelay] Registered local runtime for managed gateway (${body.data.session.id})`\n );\n return body.data.session.id;\n }\n\n private async disconnectSession(sessionId: string): Promise<void> {\n try {\n await this.requestJson<{ success?: boolean }>(\n `/eliza/gateway-relay/sessions/${encodeURIComponent(sessionId)}`,\n {\n method: \"DELETE\",\n timeoutMs: 10_000,\n }\n );\n } catch (error) {\n logger.debug(\n `[CloudManagedGatewayRelay] Failed to disconnect relay session ${sessionId}: ${\n error instanceof Error ? error.message : String(error)\n }`\n );\n }\n }\n\n private async pollNextRequest(sessionId: string): Promise<GatewayRelayRequestEnvelope | null> {\n const { status, body } = await this.requestJson<PollGatewayRelayResponse>(\n `/eliza/gateway-relay/sessions/${encodeURIComponent(sessionId)}/next`,\n {\n method: \"GET\",\n query: { timeoutMs: POLL_TIMEOUT_MS },\n timeoutMs: POLL_TIMEOUT_MS + 5_000,\n }\n );\n\n if (status === 404) {\n throw new SessionMissingError();\n }\n\n if (status >= 400 || !body?.success) {\n throw new Error(`Failed to poll gateway relay session ${sessionId} (status=${status})`);\n }\n\n return body.data?.request ?? null;\n }\n\n private async submitResponse(\n sessionId: string,\n requestId: string,\n response: GatewayRelayResponse\n ): Promise<void> {\n const { status, body } = await this.requestJson<{ success?: boolean }>(\n `/eliza/gateway-relay/sessions/${encodeURIComponent(sessionId)}/responses`,\n {\n method: \"POST\",\n json: { requestId, response },\n }\n );\n\n if (status === 404) {\n throw new SessionMissingError();\n }\n\n if (status >= 400 || body?.success === false) {\n throw new Error(`Failed to submit gateway relay response (status=${status})`);\n }\n }\n\n private async handleRequest(rpc: GatewayRelayRequest): Promise<GatewayRelayResponse> {\n switch (rpc.method) {\n case \"heartbeat\":\n return {\n jsonrpc: \"2.0\",\n id: rpc.id,\n result: { timestamp: Date.now() },\n };\n case \"status.get\":\n return {\n jsonrpc: \"2.0\",\n id: rpc.id,\n result: {\n status: \"running\",\n runtimeAgentId: this.runtime.agentId,\n agentName: this.getAgentName(),\n },\n };\n case \"message.send\":\n return this.handleMessageSend(rpc);\n default:\n return {\n jsonrpc: \"2.0\",\n id: rpc.id,\n error: {\n code: -32601,\n message: `Unsupported relay method: ${rpc.method}`,\n },\n };\n }\n }\n\n private async handleMessageSend(rpc: GatewayRelayRequest): Promise<GatewayRelayResponse> {\n if (!this.runtime.messageService) {\n return {\n jsonrpc: \"2.0\",\n id: rpc.id,\n error: { code: -32603, message: \"Message service is not available\" },\n };\n }\n\n const payload = buildGatewayMessagePayload(this.runtime, rpc);\n if (!payload) {\n return {\n jsonrpc: \"2.0\",\n id: rpc.id,\n error: { code: -32602, message: \"Invalid message relay payload\" },\n };\n }\n\n const roomId = isUuidLike(payload.roomKey)\n ? payload.roomKey\n : createUniqueUuid(this.runtime, payload.roomKey);\n const worldId = createUniqueUuid(\n this.runtime,\n buildWorldKey(payload.source, payload.transportMetadata, payload.roomKey)\n );\n const entityId = createUniqueUuid(this.runtime, `${payload.source}:${payload.senderId}`);\n const messageServerId = createUniqueUuid(this.runtime, `eliza-cloud-gateway:${payload.source}`);\n const messageId = createUniqueUuid(\n this.runtime,\n `${payload.source}:${payload.roomKey}:${String(rpc.id ?? Date.now())}:inbound`\n );\n\n const transportMetadata = toJsonMetadataRecord(payload.transportMetadata);\n\n await this.runtime.ensureConnection({\n entityId,\n roomId,\n roomName: payload.roomKey,\n worldId,\n worldName: payload.source,\n userName: payload.senderUserName,\n name: payload.senderName,\n source: payload.source,\n channelId: payload.roomKey,\n type: payload.channelType,\n messageServerId,\n metadata: transportMetadata,\n });\n\n const message = createMessageMemory({\n id: messageId,\n entityId,\n agentId: this.runtime.agentId,\n roomId,\n content: {\n text: payload.text,\n source: payload.source,\n channelType: payload.channelType,\n ...(payload.attachments ? { attachments: payload.attachments } : {}),\n },\n });\n\n message.metadata = {\n ...(message.metadata as Record<string, JsonValue>),\n entityName: payload.senderName,\n entityUserName: payload.senderUserName,\n ...(payload.senderMetadata\n ? { gatewaySender: toJsonMetadataRecord(payload.senderMetadata) }\n : {}),\n ...(payload.transportMetadata ? { gatewayMetadata: transportMetadata } : {}),\n } as typeof message.metadata;\n\n const callbackTexts: string[] = [];\n const callback: HandlerCallback = async (content: Content) => {\n const responseText = typeof content.text === \"string\" ? content.text : \"\";\n if (responseText.trim()) {\n callbackTexts.push(responseText);\n }\n\n const responseMemory = createMessageMemory({\n id: createUniqueUuid(\n this.runtime,\n `${payload.source}:${payload.roomKey}:${String(\n rpc.id ?? Date.now()\n )}:response:${callbackTexts.length}`\n ),\n entityId: this.runtime.agentId,\n agentId: this.runtime.agentId,\n roomId,\n content: {\n ...content,\n text: responseText,\n source: payload.source,\n channelType: payload.channelType,\n },\n });\n\n await this.runtime.createMemory(responseMemory, \"messages\");\n return [responseMemory as Memory];\n };\n\n try {\n const result = await this.runtime.messageService.handleMessage(\n this.runtime,\n message,\n callback\n );\n const replyText =\n callbackTexts[callbackTexts.length - 1] ??\n (typeof result.responseContent?.text === \"string\"\n ? result.responseContent.text\n : undefined);\n\n return {\n jsonrpc: \"2.0\",\n id: rpc.id,\n result: {\n didRespond: result.didRespond,\n ...(replyText ? { text: replyText } : {}),\n runtimeAgentId: this.runtime.agentId,\n },\n };\n } catch (error) {\n return {\n jsonrpc: \"2.0\",\n id: rpc.id,\n error: {\n code: -32603,\n message: error instanceof Error ? error.message : String(error),\n },\n };\n }\n }\n}\n",
|
|
37
|
+
"/** Fetches and caches available models from ElizaCloud. */\n\nimport { type IAgentRuntime, logger, Service } from \"@elizaos/core\";\nimport type { CloudAuthService } from \"./cloud-auth\";\n\ninterface ModelListEntry {\n id: string;\n object: string;\n created: number;\n owned_by: string;\n}\n\ninterface ModelListResponse {\n object: string;\n data: ModelListEntry[];\n}\n\nexport interface AvailableModel {\n id: string;\n provider: string;\n name: string;\n createdAt: number;\n}\n\nexport interface ModelsByProvider {\n [provider: string]: AvailableModel[];\n}\n\nconst CACHE_TTL_MS = 30 * 60 * 1000; // 30 minutes\n\nconst PROVIDER_PREFIXES: ReadonlyArray<[string, string]> = [\n [\"gpt-\", \"openai\"],\n [\"o1\", \"openai\"],\n [\"o3\", \"openai\"],\n [\"o4\", \"openai\"],\n [\"dall-e\", \"openai\"],\n [\"whisper\", \"openai\"],\n [\"tts\", \"openai\"],\n [\"claude-\", \"anthropic\"],\n [\"gemini-\", \"google\"],\n [\"llama\", \"meta\"],\n [\"deepseek\", \"deepseek\"],\n [\"grok\", \"xai\"],\n [\"kimi\", \"moonshot\"],\n];\n\nfunction extractProvider(modelId: string): string {\n if (modelId.includes(\"/\")) return modelId.split(\"/\")[0];\n const lower = modelId.toLowerCase();\n for (const [prefix, provider] of PROVIDER_PREFIXES) {\n if (lower.startsWith(prefix)) return provider;\n }\n return \"unknown\";\n}\n\nfunction stripProvider(modelId: string): string {\n if (modelId.includes(\"/\")) {\n return modelId.split(\"/\").slice(1).join(\"/\");\n }\n return modelId;\n}\n\nexport class CloudModelRegistryService extends Service {\n static serviceType = \"CLOUD_MODEL_REGISTRY\";\n capabilityDescription = \"Discovers and caches available AI models from ElizaCloud\";\n\n private models: AvailableModel[] = [];\n private byProvider: ModelsByProvider = {};\n private lastFetchedAt = 0;\n private fetchPromise: Promise<void> | null = null;\n\n static async start(runtime: IAgentRuntime): Promise<Service> {\n const service = new CloudModelRegistryService(runtime);\n await service.initialize();\n return service;\n }\n\n async stop(): Promise<void> {\n this.models = [];\n this.byProvider = {};\n this.lastFetchedAt = 0;\n }\n\n private async initialize(): Promise<void> {\n const auth = this.runtime.getService(\"CLOUD_AUTH\") as CloudAuthService | undefined;\n\n if (!auth?.isAuthenticated()) {\n logger.info(\"[CloudModelRegistry] Auth not available, will fetch models on first access\");\n return;\n }\n\n await this.fetchModels();\n this.validateConfiguredModels();\n }\n\n private async fetchModels(): Promise<void> {\n if (this.fetchPromise) {\n await this.fetchPromise;\n return;\n }\n\n this.fetchPromise = this.doFetchModels();\n await this.fetchPromise;\n this.fetchPromise = null;\n }\n\n private async doFetchModels(): Promise<void> {\n const auth = this.runtime.getService(\"CLOUD_AUTH\") as CloudAuthService | undefined;\n if (!auth?.isAuthenticated()) return;\n\n const client = auth.getClient();\n\n const response = await client.get<ModelListResponse>(\"/models\");\n const entries = response.data ?? [];\n\n this.models = entries.map((entry) => ({\n id: entry.id,\n provider: extractProvider(entry.id),\n name: stripProvider(entry.id),\n createdAt: entry.created,\n }));\n\n this.byProvider = {};\n for (const model of this.models) {\n if (!this.byProvider[model.provider]) {\n this.byProvider[model.provider] = [];\n }\n this.byProvider[model.provider].push(model);\n }\n\n this.lastFetchedAt = Date.now();\n logger.info(\n `[CloudModelRegistry] Loaded ${this.models.length} models from ${Object.keys(this.byProvider).length} providers`\n );\n }\n\n private validateConfiguredModels(): void {\n if (this.models.length === 0) return;\n\n const modelIds = new Set(this.models.map((m) => m.id));\n const nameSet = new Set(this.models.map((m) => m.name));\n\n const settingsToCheck = [\n { key: \"ELIZAOS_CLOUD_NANO_MODEL\", label: \"nano model\" },\n { key: \"ELIZAOS_CLOUD_MEDIUM_MODEL\", label: \"medium model\" },\n { key: \"ELIZAOS_CLOUD_SMALL_MODEL\", label: \"small model\" },\n { key: \"ELIZAOS_CLOUD_LARGE_MODEL\", label: \"large model\" },\n { key: \"ELIZAOS_CLOUD_MEGA_MODEL\", label: \"mega model\" },\n {\n key: \"ELIZAOS_CLOUD_RESPONSE_HANDLER_MODEL\",\n label: \"response handler model\",\n },\n {\n key: \"ELIZAOS_CLOUD_ACTION_PLANNER_MODEL\",\n label: \"action planner model\",\n },\n { key: \"ELIZAOS_CLOUD_RESPONSE_MODEL\", label: \"response model\" },\n { key: \"ELIZAOS_CLOUD_RESEARCH_MODEL\", label: \"research model\" },\n { key: \"ELIZAOS_CLOUD_EMBEDDING_MODEL\", label: \"embedding model\" },\n {\n key: \"ELIZAOS_CLOUD_IMAGE_DESCRIPTION_MODEL\",\n label: \"image description model\",\n },\n {\n key: \"ELIZAOS_CLOUD_IMAGE_GENERATION_MODEL\",\n label: \"image generation model\",\n },\n { key: \"ELIZAOS_CLOUD_TTS_MODEL\", label: \"TTS model\" },\n {\n key: \"ELIZAOS_CLOUD_TRANSCRIPTION_MODEL\",\n label: \"transcription model\",\n },\n ];\n\n for (const { key, label } of settingsToCheck) {\n const value = this.runtime.getSetting(key);\n if (value && typeof value === \"string\") {\n const found = modelIds.has(value) || nameSet.has(value);\n if (!found) {\n logger.warn(\n `[CloudModelRegistry] Configured ${label} \"${value}\" not found in available models. ` +\n \"It may still work if the gateway supports it, but check your configuration.\"\n );\n }\n }\n }\n }\n\n async getAvailableModels(): Promise<AvailableModel[]> {\n if (Date.now() - this.lastFetchedAt > CACHE_TTL_MS) {\n await this.fetchModels();\n }\n return this.models;\n }\n\n async getModelsByProvider(): Promise<ModelsByProvider> {\n if (Date.now() - this.lastFetchedAt > CACHE_TTL_MS) {\n await this.fetchModels();\n }\n return this.byProvider;\n }\n}\n",
|
|
38
|
+
"import pluginDefault from \"./index\";\n\nexport * from \"./index\";\nexport default pluginDefault;\n"
|
|
33
39
|
],
|
|
34
|
-
"mappings": "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",
|
|
35
|
-
"debugId": "
|
|
40
|
+
"mappings": ";;;;AACA,mBAAS,uBAAQ;;;ACgBjB,IAAM,2BAA2B;AAE1B,IAAM,0BAAkC;AAAA,EAC7C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,uBAAuB;AAAA,EACvB,SAAS,CAAC,iBAAiB,iBAAiB,mBAAmB,eAAe;AAAA,EAC9E,MAAM,CAAC,SAAS,SAAS;AAAA,EACzB,YAAY;AAAA,IACV;AAAA,MACE,MAAM;AAAA,MACN,aAAa;AAAA,MACb,UAAU;AAAA,MACV,QAAQ,EAAE,MAAM,UAAU;AAAA,IAC5B;AAAA,EACF;AAAA,EAEA,UAAU,OACR,SACA,SACA,OACA,YACqB;AAAA,IACrB,MAAM,cAAc,OAAO,SAAS,SAAS,SAAS,WAAW,QAAQ,QAAQ,OAAO;AAAA,IACxF,MAAM,WAAW,YAAY,YAAY;AAAA,IACzC,MAAM,eAAe,CAAC,SAAS,SAAS,SAAS;AAAA,IACjD,MAAM,gBACJ,aAAa,SAAS,KAAK,aAAa,KAAK,CAAC,OAAO,GAAG,SAAS,KAAK,SAAS,SAAS,EAAE,CAAC;AAAA,IAC7F,MAAM,YAAY;AAAA,IAClB,MAAM,cAAc,QAAQ,SAAS,MAAM,SAAS,CAAC;AAAA,IACrD,MAAM,aAAa,OAAO,SAAS,SAAS,UAAU,EAAE;AAAA,IACxD,MAAM,qBAAqB;AAAA,IAC3B,MAAM,eAAe,qBACjB,eAAe,qBACf,QAAQ,cAAc,SAAS,SAAS,WAAW,SAAS,UAAU;AAAA,IAC1E,MAAM,cAAc,WAAW,OAAO,YAAY,WAAW,UAAU,CAAC;AAAA,IACxE,MAAM,cACJ,SAAS,KAAK,EAAE,SAAS,KACzB,OAAO,KAAK,WAAsC,EAAE,SAAS,KAC7D,QAAQ,SAAS,WAAW,OAAO,QAAQ,YAAY,QAAQ;AAAA,IAEjE,IAAI,EAAE,iBAAiB,eAAe,gBAAgB,cAAc;AAAA,MAClE,OAAO;AAAA,IACT;AAAA,IAEA,MAAM,qBAAqB,OAAO,aAA2B;AAAA,MAC3D,OAAO,CAAC,CACN,SAAQ,WAAW,YAAY,GAC9B,gBAAgB;AAAA;AAAA,IAErB,IAAI;AAAA,MACF,OAAO,QAAQ,MAAM,mBAAmB,OAAO,CAAC;AAAA,MAChD,MAAM;AAAA,MACN,OAAO;AAAA;AAAA;AAAA,OAIL,QAAO,CACX,SACA,SACA,QACA,SACA,UACuB;AAAA,IACvB,MAAM,OAAO,QAAQ,WAAW,YAAY;AAAA,IAC5C,MAAM,eAAe,QAAQ,WAAW,iBAAiB;AAAA,IACzD,MAAM,SAAS,KAAK,UAAU;AAAA,IAE9B,MAAM,WACJ,SAAS,aAAa,QACrB,QAAQ,UAAkD,aAAa;AAAA,IAE1E;AAAA,MACE,QAAQ;AAAA,QACN,MAAM,OAAO,IAA2B,kBAAkB;AAAA,IAE9D,MAAM,UACJ,cAAc,qBAAqB,EAAE,OAAO,CAAC,MAAM,EAAE,WAAW,SAAS,EAAE,UAAU;AAAA,IACvF,MAAM,YAAY,UAAU;AAAA,IAC5B,MAAM,gBAAgB,YAAY,IAAI,UAAU,YAAY;AAAA,IAE5D,MAAM,QAAQ;AAAA,MACZ,wBAAwB,QAAQ,QAAQ,CAAC;AAAA,MACzC,UAAU,IACN,sBAAsB,aAAa,UAAU,QAAQ,CAAC,aAAY,eAAe,QAAQ,CAAC,qBAC1F;AAAA,IACN;AAAA,IAEA,IAAI,UAAU;AAAA,MACZ,QAAQ,SAAS,MAAM,OAAO,IAA2B,kBAAkB;AAAA,MAC3E,MAAM,KACJ,iBAAiB,KAAK,WAAW,QAAQ,CAAC,qBAAqB,KAAK,WAAW,QAAQ,CAAC,GAC1F;AAAA,MACA,WAAW,MAAM,KAAK,mBAAmB,MAAM,GAAG,EAAE,GAAG;AAAA,QACrD,MAAM,OAAO,GAAG,UAAU,IAAI,MAAM;AAAA,QACpC,MAAM,KACJ,KAAK,QAAQ,GAAG,OAAO,QAAQ,CAAC,OAAM,GAAG,gBAAgB,IAAI,KAAK,GAAG,UAAU,EAAE,mBAAmB,IACtG;AAAA,MACF;AAAA,IACF;AAAA,IAEA,MAAM,OAAO,MAAM,KAAK;AAAA,CAAI;AAAA,IAC5B,IAAI;AAAA,MAAU,MAAM,SAAS,EAAE,MAAM,SAAS,CAAC,qBAAqB,EAAE,CAAC;AAAA,IAEvE,OAAO;AAAA,MACL,SAAS;AAAA,MACT;AAAA,MACA,MAAM;AAAA,QACJ;AAAA,QACA,mBAAmB;AAAA,QACnB;AAAA,QACA,wBAAwB;AAAA,MAC1B;AAAA,IACF;AAAA;AAEJ;;;AChIO,SAAS,aAAa,CAAC,SAAyC;AAAA,EACrE,MAAM,SAAU,WAAW,CAAC;AAAA,EAC5B,MAAM,aACJ,OAAO,cAAc,OAAO,OAAO,eAAe,WAC7C,OAAO,aACR,CAAC;AAAA,EACP,OAAO,KAAK,WAAW,WAAW;AAAA;AAG7B,SAAS,WAAW,CAAC,SAAmC;AAAA,EAC7D,MAAM,MAAM,cAAc,OAAO,EAAE;AAAA,EACnC,OAAO,QAAQ,QAAQ,QAAQ;AAAA;AAG1B,SAAS,oBAAoB,CAAC,SAAiB,MAAmC;AAAA,EACvF,OAAO;AAAA,IACL,SAAS;AAAA,IACT,MAAM;AAAA,IACN,MAAM,EAAE,sBAAsB,MAAM,YAAY,KAAK;AAAA,EACvD;AAAA;;;ACDF,SAAS,cAAc,CAAC,SAAiB,SAAyC;AAAA,EAChF,MAAM,SAAS,cAAc,OAAO;AAAA,EACpC,IAAI,OAAO;AAAA,IAAa,OAAO,OAAO,OAAO,WAAW;AAAA,EACxD,MAAM,OAAQ,QAAQ,UAAkD;AAAA,EAGxE,OAAO,MAAM,cAAc,OAAO,KAAK,WAAW,IAAI;AAAA;AAGjD,IAAM,yBAAiC;AAAA,EAC5C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,uBAAuB;AAAA,EACvB,SAAS,CAAC,gBAAgB,mBAAmB,eAAe,kBAAkB;AAAA,EAC9E,MAAM,CAAC,SAAS,aAAa,QAAQ;AAAA,EACrC,YAAY;AAAA,IACV;AAAA,MACE,MAAM;AAAA,MACN,aAAa;AAAA,MACb,UAAU;AAAA,MACV,QAAQ,EAAE,MAAM,SAAS;AAAA,IAC3B;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,aAAa;AAAA,MACb,UAAU;AAAA,MACV,QAAQ,EAAE,MAAM,WAAW,SAAS,MAAM;AAAA,IAC5C;AAAA,EACF;AAAA,EAEA,UAAU,OACR,SACA,SACA,OACA,YACqB;AAAA,IACrB,MAAM,cAAc,OAAO,SAAS,SAAS,SAAS,WAAW,QAAQ,QAAQ,OAAO;AAAA,IACxF,MAAM,WAAW,YAAY,YAAY;AAAA,IACzC,MAAM,eAAe,CAAC,UAAU,OAAO;AAAA,IACvC,MAAM,gBACJ,aAAa,SAAS,KAAK,aAAa,KAAK,CAAC,OAAO,GAAG,SAAS,KAAK,SAAS,SAAS,EAAE,CAAC;AAAA,IAC7F,MAAM,YAAY;AAAA,IAClB,MAAM,cAAc,QAAQ,SAAS,MAAM,SAAS,CAAC;AAAA,IACrD,MAAM,aAAa,OAAO,SAAS,SAAS,UAAU,EAAE;AAAA,IACxD,MAAM,qBAAqB;AAAA,IAC3B,MAAM,eAAe,qBACjB,eAAe,qBACf,QAAQ,cAAc,SAAS,SAAS,WAAW,SAAS,UAAU;AAAA,IAC1E,MAAM,cAAc,WAAW,OAAO,YAAY,WAAW,UAAU,CAAC;AAAA,IACxE,MAAM,cACJ,SAAS,KAAK,EAAE,SAAS,KACzB,OAAO,KAAK,WAAsC,EAAE,SAAS,KAC7D,QAAQ,SAAS,WAAW,OAAO,QAAQ,YAAY,QAAQ;AAAA,IAEjE,IAAI,EAAE,iBAAiB,eAAe,gBAAgB,cAAc;AAAA,MAClE,OAAO;AAAA,IACT;AAAA,IAEA,MAAM,qBAAqB,OAAO,aAA2B;AAAA,MAC3D,OAAO,CAAC,CACN,SAAQ,WAAW,YAAY,GAC9B,gBAAgB;AAAA;AAAA,IAErB,IAAI;AAAA,MACF,OAAO,QAAQ,MAAM,mBAAmB,OAAO,CAAC;AAAA,MAChD,MAAM;AAAA,MACN,OAAO;AAAA;AAAA;AAAA,OAIL,QAAO,CACX,SACA,SACA,QACA,SACA,UACuB;AAAA,IACvB,MAAM,aAAa,QAAQ,WAAW,iBAAiB;AAAA,IACvD,MAAM,SAAS,QAAQ,WAAW,cAAc;AAAA,IAChD,MAAM,SAAS,QAAQ,WAAW,cAAc;AAAA,IAEhD,MAAM,cAAc,eAAe,SAAS,OAAO;AAAA,IACnD,IAAI,CAAC;AAAA,MAAa,OAAO,EAAE,SAAS,OAAO,OAAO,sBAAsB;AAAA,IAExE,MAAM,YAAY,MAAM,WAAW,aAAa,WAAW;AAAA,IAC3D,IAAI,UAAU,WAAW,WAAW;AAAA,MAClC,OAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO,kCAAkC,UAAU;AAAA,MACrD;AAAA,IACF;AAAA,IAEA,MAAM,UAAU;AAAA,MACd;AAAA,MACA,cAAc,UAAU;AAAA,MACxB,OAAO;AAAA,MACP;AAAA,IACF,EAAE,KAAK;AAAA,CAAI;AAAA,IACX,IAAI,CAAC,YAAY,OAAO,GAAG;AAAA,MACzB,MAAM,WAAW,EAAE,MAAM,SAAS,SAAS,CAAC,oBAAoB,EAAE,CAAC;AAAA,MACnE,OAAO,qBAAqB,SAAS;AAAA,QACnC;AAAA,QACA,eAAe,UAAU;AAAA,MAC3B,CAAC;AAAA,IACH;AAAA,IAEA,MAAM,SAAS,OAAO,SAAiB;AAAA,MACrC,IAAI;AAAA,QAAU,MAAM,SAAS,EAAE,MAAM,SAAS,CAAC,oBAAoB,EAAE,CAAC;AAAA;AAAA,IAExE,MAAM,OAAO,aAAa,UAAU,6BAA6B;AAAA,IAGjE,IAAI,aAA4B;AAAA,IAChC,IAAI,QAAQ;AAAA,MACV,MAAM,OAAO,MAAM,OAAO,eAAe,aAAa,UAAU;AAAA,QAC9D,SAAS;AAAA,QACT,eAAe,UAAU;AAAA,MAC3B,CAAC;AAAA,MACD,aAAa,KAAK;AAAA,MAClB,OAAO,iBAAiB,WAAW;AAAA,IACrC;AAAA,IAEA,IAAI;AAAA,MAAQ,MAAM,OAAO,WAAW,WAAW;AAAA,IAC/C,MAAM,WAAW,gBAAgB,WAAW;AAAA,IAE5C,MAAM,OAAO,IAAI,UAAU,gBAAgB,aAAa,cAAc,eAAe,IAAI;AAAA,IAEzF,OAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM,UAAU,UAAU;AAAA,MAC1B,MAAM,EAAE,aAAa,eAAe,UAAU,MAAM,WAAW;AAAA,IACjE;AAAA;AAEJ;;;AC5IA;;;ACiVA;AAAA;AAAA;AAAA;AA1BO,IAAM,uBAA0C;AAAA,EACrD,SAAS;AAAA,EACT,SAAS;AAAA,EACT,eAAe;AAAA,EACf,eAAe;AAAA,EACf,QAAQ;AAAA,IACN,qBAAqB;AAAA,IACrB,sBAAsB;AAAA,IACtB,qBAAqB;AAAA,EACvB;AAAA,EACA,QAAQ;AAAA,IACN,sBAAsB;AAAA,IACtB,cAAc;AAAA,EAChB;AAAA,EACA,WAAW;AAAA,IACT,cAAc;AAAA,IACd,qBAAqB;AAAA,IACrB,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,aAAa;AAAA,EACf;AACF;;;ACpVO,IAAM,qBAAqB;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,SAAS,cAAc,CAAC,SAAgD;AAAA,EAC7E,MAAM,OAA+B,CAAC;AAAA,EACtC,WAAW,OAAO,oBAAoB;AAAA,IACpC,MAAM,MAAM,QAAQ,WAAW,GAAG;AAAA,IAClC,IAAI;AAAA,MAAK,KAAK,OAAO,OAAO,GAAG;AAAA,EACjC;AAAA,EACA,OAAO;AAAA;;;AFfT,SAAS,aAAa,CAAC,SAAiB,SAAmD;AAAA,EACzF,MAAM,SAAS,cAAc,OAAO;AAAA,EACpC,IAAI,OAAO,KAAK,MAAM,EAAE,SAAS;AAAA,IAAG,OAAO;AAAA,EAC3C,MAAM,OAAO,QAAQ;AAAA,EACrB,IAAI,MAAM;AAAA,IAAc,OAAO,KAAK;AAAA,EAEpC,MAAM,OAAQ,QAAQ,SAA+B,QAAQ;AAAA,EAC7D,MAAM,OAAO,KAAK,MAAM,gCAAgC,IAAI,IAAI,KAAK;AAAA,EACrE,MAAM,UAAU,KAAK,MAAM,qCAAqC,IAAI,IAAI,KAAK;AAAA,EAC7E,OAAO,EAAE,MAAM,cAAc,QAAQ;AAAA;AAGhC,IAAM,4BAAoC;AAAA,EAC/C,MAAM;AAAA,EACN,aACE;AAAA,EACF,uBACE;AAAA,EACF,SAAS;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,MAAM,CAAC,SAAS,aAAa,YAAY;AAAA,EACzC,YAAY;AAAA,IACV;AAAA,MACE,MAAM;AAAA,MACN,aAAa;AAAA,MACb,UAAU;AAAA,MACV,QAAQ,EAAE,MAAM,SAAS;AAAA,IAC3B;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,aAAa;AAAA,MACb,UAAU;AAAA,MACV,QAAQ,EAAE,MAAM,SAAS;AAAA,IAC3B;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,aAAa;AAAA,MACb,UAAU;AAAA,MACV,QAAQ,EAAE,MAAM,SAAS;AAAA,IAC3B;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,aAAa;AAAA,MACb,UAAU;AAAA,MACV,QAAQ,EAAE,MAAM,SAAS;AAAA,IAC3B;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,aAAa;AAAA,MACb,UAAU;AAAA,MACV,QAAQ,EAAE,MAAM,UAAU;AAAA,IAC5B;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,aAAa;AAAA,MACb,UAAU;AAAA,MACV,QAAQ,EAAE,MAAM,WAAW,SAAS,MAAM;AAAA,IAC5C;AAAA,EACF;AAAA,EAEA,UAAU,OACR,SACA,SACA,OACA,YACqB;AAAA,IACrB,MAAM,cAAc,OAAO,SAAS,SAAS,SAAS,WAAW,QAAQ,QAAQ,OAAO;AAAA,IACxF,MAAM,WAAW,YAAY,YAAY;AAAA,IACzC,MAAM,eAAe,CAAC,aAAa,OAAO;AAAA,IAC1C,MAAM,gBACJ,aAAa,SAAS,KAAK,aAAa,KAAK,CAAC,OAAO,GAAG,SAAS,KAAK,SAAS,SAAS,EAAE,CAAC;AAAA,IAC7F,MAAM,YAAY;AAAA,IAClB,MAAM,cAAc,QAAQ,SAAS,MAAM,SAAS,CAAC;AAAA,IACrD,MAAM,aAAa,OAAO,SAAS,SAAS,UAAU,EAAE;AAAA,IACxD,MAAM,qBAAqB;AAAA,IAC3B,MAAM,eAAe,qBACjB,eAAe,qBACf,QAAQ,cAAc,SAAS,SAAS,WAAW,SAAS,UAAU;AAAA,IAC1E,MAAM,cAAc,WAAW,OAAO,YAAY,WAAW,UAAU,CAAC;AAAA,IACxE,MAAM,cACJ,SAAS,KAAK,EAAE,SAAS,KACzB,OAAO,KAAK,WAAsC,EAAE,SAAS,KAC7D,QAAQ,SAAS,WAAW,OAAO,QAAQ,YAAY,QAAQ;AAAA,IAEjE,IAAI,EAAE,iBAAiB,eAAe,gBAAgB,cAAc;AAAA,MAClE,OAAO;AAAA,IACT;AAAA,IAEA,MAAM,qBAAqB,OAAO,aAA2B;AAAA,MAC3D,MAAM,OAAO,SAAQ,WAAW,YAAY;AAAA,MAC5C,OAAO,CAAC,CAAC,MAAM,gBAAgB;AAAA;AAAA,IAEjC,IAAI;AAAA,MACF,OAAO,QAAQ,MAAM,mBAAmB,OAAO,CAAC;AAAA,MAChD,MAAM;AAAA,MACN,OAAO;AAAA;AAAA;AAAA,OAIL,QAAO,CACX,SACA,SACA,QACA,SACA,UACuB;AAAA,IACvB,MAAM,OAAO,QAAQ,WAAW,YAAY;AAAA,IAC5C,MAAM,aAAa,QAAQ,WAAW,iBAAiB;AAAA,IACvD,MAAM,SAAS,QAAQ,WAAW,cAAc;AAAA,IAChD,MAAM,SAAS,QAAQ,WAAW,cAAc;AAAA,IAEhD,IAAI,CAAC,MAAM,gBAAgB,KAAK,CAAC,YAAY;AAAA,MAC3C,OAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IAEA,MAAM,SAAS,cAAc,SAAS,OAAO;AAAA,IAC7C,IAAI,CAAC,OAAO,QAAQ,CAAC,OAAO,cAAc;AAAA,MACxC,OAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IAEA,MAAM,aAAa,OAAO,gBAAgB;AAAA,IAC1C,MAAM,UAAU;AAAA,MACd;AAAA,MACA,SAAS,OAAO,OAAO,IAAI;AAAA,MAC3B,YAAY,OAAO,OAAO,YAAY;AAAA,MACtC,gBAAgB,aAAa,YAAY;AAAA,IAC3C,EAAE,KAAK;AAAA,CAAI;AAAA,IACX,IAAI,CAAC,YAAY,OAAO,GAAG;AAAA,MACzB,MAAM,WAAW,EAAE,MAAM,SAAS,SAAS,CAAC,uBAAuB,EAAE,CAAC;AAAA,MACtE,OAAO,qBAAqB,SAAS;AAAA,QACnC,MAAM,OAAO,OAAO,IAAI;AAAA,QACxB,cAAc,OAAO,OAAO,YAAY;AAAA,QACxC,aAAa;AAAA,MACf,CAAC;AAAA,IACH;AAAA,IAEA,MAAM,SAAS,OAAO,SAAiB;AAAA,MACrC,IAAI;AAAA,QAAU,MAAM,SAAS,EAAE,MAAM,SAAS,CAAC,uBAAuB,EAAE,CAAC;AAAA;AAAA,IAE3E,MAAM,OAAO,6BAA6B,OAAO,6CAA6C;AAAA,IAE9F,MAAM,OAAO,qBAAqB;AAAA,IAClC,MAAM,UAAkC;AAAA,MACtC,MAAM,OAAO;AAAA,MACb,cAAc,OAAO;AAAA,MACrB,aAAa,OAAO;AAAA,MACpB,MAAM,KAAK;AAAA,MACX,KAAK,KAAK;AAAA,MACV,QAAQ,KAAK;AAAA,MACb,cAAc,KAAK;AAAA,MACnB,eAAe,KAAK;AAAA,MACpB,kBAAkB;AAAA,WACb,eAAe,OAAO;AAAA,WACrB,OAAO;AAAA,MACb;AAAA,MACA,mBAAmB;AAAA,IACrB;AAAA,IAEA,MAAM,UAAU,MAAM,WAAW,gBAAgB,OAAO;AAAA,IACxD,MAAM,KAAK,QAAQ,KAAK;AAAA,IACxB,MAAM,OACJ,0BAA0B,mBAAmB,QAAQ,gBAAgB,QAAQ,CAAC,OAAO,QAAQ,iBAAiB,QAAQ,CAAC,eACzH;AAAA,IAEA,MAAM,UAAU,MAAM,WAAW,kBAAkB,EAAE;AAAA,IACrD,MAAM,OAAO,wBAAwB,QAAQ,mBAAmB;AAAA,IAEhE,IAAI,QAAQ;AAAA,MACV,MAAM,OAAO,QAAQ,EAAE;AAAA,MACvB,OAAO,KAAK,mCAAmC,IAAI;AAAA,IACrD;AAAA,IAEA,IAAI,cAAc;AAAA,MAAQ,OAAO,mBAAmB,EAAE;AAAA,IAEtD,MAAM,OAAO,UAAU,OAAO,kBAAkB,aAAa,0BAA0B,IAAI;AAAA,IAE3F,OAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM,gBAAgB,OAAO;AAAA,MAC7B,MAAM;AAAA,QACJ,aAAa;AAAA,QACb,cAAc,QAAQ;AAAA,QACtB,QAAQ,QAAQ;AAAA,QAChB,iBAAiB,QAAQ;AAAA,QACzB,kBAAkB,QAAQ;AAAA,QAC1B,iBAAiB,QAAQ,mBAAmB,EAAE,MAAM;AAAA,QACpD,mBAAmB;AAAA,MACrB;AAAA,IACF;AAAA;AAEJ;;;AGxMA,SAAS,cAAa,CAAC,SAAiB,SAAmD;AAAA,EACzF,MAAM,SAAS,cAAc,OAAO;AAAA,EACpC,IAAI,OAAO,KAAK,MAAM,EAAE,SAAS;AAAA,IAAG,OAAO;AAAA,EAC3C,MAAM,OAAO,QAAQ;AAAA,EACrB,OAAQ,MAAM,gBAA4C,CAAC;AAAA;AAG7D,eAAe,yBAAyB,CACtC,QACA,YACA,aAC+B;AAAA,EAC/B,MAAM,MAAM,MAAM,WAAW,eAAe;AAAA,EAC5C,MAAM,aAAa,IAAI,OAAO,CAAC,MAAM,EAAE,iBAAiB,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE;AAAA,EACpF,MAAM,YAA6B,CAAC;AAAA,EACpC,WAAW,MAAM,YAAY;AAAA,IAC3B,UAAU,KAAK,GAAI,MAAM,OAAO,cAAc,EAAE,CAAE;AAAA,EACpD;AAAA,EACA,UAAU,KAAK,CAAC,GAAG,MAAM,IAAI,KAAK,EAAE,UAAU,EAAE,QAAQ,IAAI,IAAI,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC;AAAA,EAC5F,OAAO,UAAU,MAAM;AAAA;AAGlB,IAAM,yBAAiC;AAAA,EAC5C,MAAM;AAAA,EACN,aACE;AAAA,EACF,uBAAuB;AAAA,EACvB,SAAS,CAAC,gBAAgB,kBAAkB,uBAAuB,eAAe;AAAA,EAClF,MAAM,CAAC,SAAS,aAAa,SAAS;AAAA,EACtC,YAAY;AAAA,IACV;AAAA,MACE,MAAM;AAAA,MACN,aAAa;AAAA,MACb,UAAU;AAAA,MACV,QAAQ,EAAE,MAAM,SAAS;AAAA,IAC3B;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,aAAa;AAAA,MACb,UAAU;AAAA,MACV,QAAQ,EAAE,MAAM,SAAS;AAAA,IAC3B;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,aAAa;AAAA,MACb,UAAU;AAAA,MACV,QAAQ,EAAE,MAAM,SAAS;AAAA,IAC3B;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,aAAa;AAAA,MACb,UAAU;AAAA,MACV,QAAQ,EAAE,MAAM,SAAS;AAAA,IAC3B;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,aAAa;AAAA,MACb,UAAU;AAAA,MACV,QAAQ,EAAE,MAAM,WAAW,SAAS,MAAM;AAAA,IAC5C;AAAA,EACF;AAAA,EAEA,UAAU,OACR,SACA,SACA,OACA,YACqB;AAAA,IACrB,MAAM,cAAc,OAAO,SAAS,SAAS,SAAS,WAAW,QAAQ,QAAQ,OAAO;AAAA,IACxF,MAAM,WAAW,YAAY,YAAY;AAAA,IACzC,MAAM,eAAe,CAAC,UAAU,OAAO;AAAA,IACvC,MAAM,gBACJ,aAAa,SAAS,KAAK,aAAa,KAAK,CAAC,OAAO,GAAG,SAAS,KAAK,SAAS,SAAS,EAAE,CAAC;AAAA,IAC7F,MAAM,YAAY;AAAA,IAClB,MAAM,cAAc,QAAQ,SAAS,MAAM,SAAS,CAAC;AAAA,IACrD,MAAM,aAAa,OAAO,SAAS,SAAS,UAAU,EAAE;AAAA,IACxD,MAAM,qBAAqB;AAAA,IAC3B,MAAM,eAAe,qBACjB,eAAe,qBACf,QAAQ,cAAc,SAAS,SAAS,WAAW,SAAS,UAAU;AAAA,IAC1E,MAAM,cAAc,WAAW,OAAO,YAAY,WAAW,UAAU,CAAC;AAAA,IACxE,MAAM,cACJ,SAAS,KAAK,EAAE,SAAS,KACzB,OAAO,KAAK,WAAsC,EAAE,SAAS,KAC7D,QAAQ,SAAS,WAAW,OAAO,QAAQ,YAAY,QAAQ;AAAA,IAEjE,IAAI,EAAE,iBAAiB,eAAe,gBAAgB,cAAc;AAAA,MAClE,OAAO;AAAA,IACT;AAAA,IAEA,MAAM,qBAAqB,OAAO,aAA2B;AAAA,MAC3D,OAAO,CAAC,CACN,SAAQ,WAAW,YAAY,GAC9B,gBAAgB;AAAA;AAAA,IAErB,IAAI;AAAA,MACF,OAAO,QAAQ,MAAM,mBAAmB,OAAO,CAAC;AAAA,MAChD,MAAM;AAAA,MACN,OAAO;AAAA;AAAA;AAAA,OAIL,QAAO,CACX,SACA,SACA,QACA,SACA,UACuB;AAAA,IACvB,MAAM,eAAe,QAAQ,WAAW,iBAAiB;AAAA,IACzD,MAAM,SAAS,QAAQ,WAAW,cAAc;AAAA,IAChD,MAAM,SAAS,QAAQ,WAAW,cAAc;AAAA,IAChD,MAAM,SAAS,eAAc,SAAS,OAAO;AAAA,IAE7C,IAAI,CAAC,OAAO,QAAQ,CAAC,OAAO,cAAc;AAAA,MACxC,OAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IAEA,MAAM,mBACJ,OAAO,OAAO,eAAe,YAAY,OAAO,WAAW,SAAS,IAChE,OAAO,aACP;AAAA,IACN,MAAM,UAAU;AAAA,MACd;AAAA,MACA,SAAS,OAAO,OAAO,IAAI;AAAA,MAC3B,YAAY,OAAO,OAAO,YAAY;AAAA,MACtC,aAAa,oBAAoB;AAAA,IACnC,EAAE,KAAK;AAAA,CAAI;AAAA,IACX,IAAI,CAAC,YAAY,OAAO,GAAG;AAAA,MACzB,MAAM,WAAW,EAAE,MAAM,SAAS,SAAS,CAAC,oBAAoB,EAAE,CAAC;AAAA,MACnE,OAAO,qBAAqB,SAAS;AAAA,QACnC,MAAM,OAAO,OAAO,IAAI;AAAA,QACxB,cAAc,OAAO,OAAO,YAAY;AAAA,QACxC,YAAY;AAAA,MACd,CAAC;AAAA,IACH;AAAA,IAEA,MAAM,SAAS,OAAO,SAAiB;AAAA,MACrC,IAAI;AAAA,QAAU,MAAM,SAAS,EAAE,MAAM,SAAS,CAAC,oBAAoB,EAAE,CAAC;AAAA;AAAA,IAExE,MAAM,OAAO,yBAAyB,OAAO,UAAU;AAAA,IAEvD,MAAM,OAAO,qBAAqB;AAAA,IAClC,MAAM,UAAkC;AAAA,MACtC,MAAM,OAAO;AAAA,MACb,cAAc,OAAO;AAAA,MACrB,MAAM,KAAK;AAAA,MACX,KAAK,KAAK;AAAA,MACV,QAAQ,KAAK;AAAA,MACb,cAAc,KAAK;AAAA,MACnB,eAAe,KAAK;AAAA,MACpB,kBAAkB;AAAA,WACb,eAAe,OAAO;AAAA,WACrB,OAAO;AAAA,MACb;AAAA,MACA,mBAAmB;AAAA,IACrB;AAAA,IAEA,MAAM,UAAU,MAAM,aAAa,gBAAgB,OAAO;AAAA,IAC1D,MAAM,KAAK,QAAQ,KAAK;AAAA,IACxB,MAAM,OAAO,6BAA6B,oCAAoC;AAAA,IAE9E,MAAM,UAAU,MAAM,aAAa,kBAAkB,EAAE;AAAA,IAGvD,IAAI,aAA4B;AAAA,IAChC,IAAI,QAAQ;AAAA,MACV,MAAM,WAAW,oBAAoB;AAAA,MACrC,IAAI,UAAU;AAAA,QACZ,MAAM,OAAO,gBAAgB,IAAI,QAAQ;AAAA,QACzC,aAAa;AAAA,MACf,EAAO;AAAA,QACL,MAAM,SAAS,MAAM,0BACnB,QACA,cACA,OAAO,YACT;AAAA,QACA,IAAI,QAAQ;AAAA,UACV,MAAM,OAAO,gBAAgB,IAAI,OAAO,EAAE;AAAA,UAC1C,aAAa,OAAO;AAAA,QACtB;AAAA;AAAA,MAEF,OAAO,mBAAmB,EAAE;AAAA,IAC9B;AAAA,IAEA,IAAI;AAAA,MAAQ,MAAM,OAAO,QAAQ,EAAE;AAAA,IAEnC,MAAM,OACJ,UAAU,OAAO,oBAAoB,QAAQ,wBAC1C,aAAa,sBAAsB,gBAAgB,2BACxD;AAAA,IAEA,OAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM,gBAAgB,OAAO;AAAA,MAC7B,MAAM;AAAA,QACJ,aAAa;AAAA,QACb,cAAc,QAAQ;AAAA,QACtB,oBAAoB;AAAA,QACpB,iBAAiB,QAAQ;AAAA,QACzB,kBAAkB,QAAQ;AAAA,MAC5B;AAAA,IACF;AAAA;AAEJ;;;AC/NO,IAAM,sBAAgC;AAAA,EAC3C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,uBAAuB;AAAA,EACvB,SAAS;AAAA,EACT,UAAU;AAAA,OACJ,IAAG,CAAC,SAAwB,UAAkB,QAAwC;AAAA,IAC1F,MAAM,OAAO,QAAQ,WAAW,YAAY;AAAA,IAC5C,IAAI,CAAC,MAAM,gBAAgB,GAAG;AAAA,MAC5B,OAAO;AAAA,QACL,MAAM;AAAA,QACN,QAAQ,EAAE,oBAAoB,MAAM;AAAA,MACtC;AAAA,IACF;AAAA,IAEA,MAAM,eAAe,QAAQ,WAAW,iBAAiB;AAAA,IACzD,MAAM,YAAY,QAAQ,WAAW,cAAc;AAAA,IACnD,MAAM,aAAa,cAAc,qBAAqB,KAAK,CAAC;AAAA,IAC5D,MAAM,YAAY,WAAW,yBAAyB,KAAK,CAAC;AAAA,IAE5D,MAAM,UAAU,WAAW,OAAO,CAAC,MAAM,EAAE,WAAW,SAAS,EAAE;AAAA,IACjE,MAAM,YAAY,WAAW,OAC3B,CAAC,MAAM,EAAE,WAAW,aAAa,EAAE,WAAW,cAAc,EAAE,WAAW,WAC3E,EAAE;AAAA,IAEF,MAAM,YAAY,WAAW,IAAI,CAAC,OAAO;AAAA,MACvC,IAAI,EAAE;AAAA,MACN,MAAM,EAAE;AAAA,MACR,QAAQ,EAAE;AAAA,MACV,KAAK,EAAE;AAAA,MACP,SAAS,EAAE;AAAA,MACX,SAAS,UAAU,SAAS,EAAE,EAAE;AAAA,IAClC,EAAE;AAAA,IAEF,MAAM,QAAQ;AAAA,MACZ,eAAe,WAAW,wBAAwB,oBAAoB,UAAU;AAAA,MAChF,GAAG,UAAU,IACX,CAAC,MACC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,MAAM,EAAE,QAAQ,KAAK,EAAE,UAAU,eAAe,IAC1F;AAAA,IACF;AAAA,IAEA,OAAO;AAAA,MACL,MAAM,MAAM,KAAK;AAAA,CAAI;AAAA,MACrB,QAAQ;AAAA,QACN,oBAAoB;AAAA,QACpB,iBAAiB,WAAW;AAAA,QAC5B,mBAAmB;AAAA,QACnB,qBAAqB;AAAA,MACvB;AAAA,MACA,MAAM,EAAE,YAAY,UAAU;AAAA,IAChC;AAAA;AAEJ;;;ACtDO,IAAM,0BAAoC;AAAA,EAC/C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,uBAAuB;AAAA,EACvB,SAAS;AAAA,EACT,UAAU;AAAA,EACV,SAAS;AAAA,OACH,IAAG,CAAC,SAAwB,UAAkB,QAAwC;AAAA,IAC1F,MAAM,OAAO,QAAQ,WAAW,YAAY;AAAA,IAC5C,IAAI,CAAC,MAAM,gBAAgB;AAAA,MAAG,OAAO,EAAE,MAAM,GAAG;AAAA,IAEhD,MAAM,MAAM,QAAQ,WAAW,iBAAiB;AAAA,IAChD,MAAM,UAAU,KAAK,qBAAqB,EAAE,OAAO,CAAC,MAAM,EAAE,WAAW,SAAS,KAAK,CAAC;AAAA,IACtF,IAAI,QAAQ,WAAW;AAAA,MACrB,OAAO;AAAA,QACL,MAAM;AAAA,QACN,QAAQ,EAAE,mBAAmB,EAAE;AAAA,MACjC;AAAA,IAMF,MAAM,UAAU,QAAQ,IAAI,CAAC,OAAO;AAAA,MAClC,IAAI,EAAE;AAAA,MACN,MAAM,EAAE;AAAA,MACR,SAAS,EAAE,WAAW,aAAa,EAAE,mBAAmB,YAAY,CAAC,EAAE;AAAA,MACvE,QAAQ,EAAE;AAAA,MACV,SAAS,EAAE;AAAA,IACb,EAAE;AAAA,IAEF,MAAM,UAAU,QAAQ,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE;AAAA,IACjD,MAAM,OAAO;AAAA,MACX,WAAW,WAAW,QAAQ;AAAA,MAC9B,GAAG,QAAQ,IACT,CAAC,MACC,OAAO,EAAE,SAAS,EAAE,UAAU,OAAO,uBAAuB,EAAE,mBAAmB,EAAE,UACvF;AAAA,IACF,EAAE,KAAK;AAAA,CAAI;AAAA,IAEX,OAAO;AAAA,MACL;AAAA,MACA,QAAQ;AAAA,QACN,mBAAmB;AAAA,QACnB,qBAAqB,QAAQ,SAAS;AAAA,MACxC;AAAA,MACA,MAAM,EAAE,QAAQ;AAAA,IAClB;AAAA;AAEJ;;;ACtDA,mBAAS;AAIT,IAAM,aAAa;AACnB,IAAM,eAAe,IAAI;AACzB,IAAM,MAAM;AAEL,IAAM,wBAAkC;AAAA,EAC7C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,uBAAuB;AAAA,EACvB,SAAS;AAAA,EACT,UAAU;AAAA,OACJ,IAAG,CAAC,SAAwB,UAAkB,QAAwC;AAAA,IAC1F,MAAM,OAAO,QAAQ,WAAW,YAAY;AAAA,IAC5C,IAAI,CAAC,MAAM,gBAAgB;AAAA,MAAG,OAAO,EAAE,MAAM,GAAG;AAAA,IAEhD,MAAM,SAAS,aAAa,IAAI,OAAO;AAAA,IACvC,IAAI,UAAU,KAAK,IAAI,IAAI,OAAO,KAAK;AAAA,MAAK,OAAO,OAAO,OAAO,KAAK;AAAA,IAEtE,IAAI;AAAA,IACJ,IAAI;AAAA,MACF,QAAQ,SAAS,MAAM,KAAK,UAAU,EAAE,IAA2B,kBAAkB;AAAA,MACrF,UAAU,KAAK;AAAA,MACf,OAAO,KAAK;AAAA,MACZ,QAAO,KACL,2CAA2C,eAAe,QAAQ,IAAI,UAAU,KAClF;AAAA,MACA,IAAI;AAAA,QAAQ,OAAO,OAAO,OAAO,KAAK;AAAA,MACtC,OAAO,EAAE,MAAM,GAAG;AAAA;AAAA,IAEpB,aAAa,IAAI,SAAS,EAAE,OAAO,SAAS,IAAI,KAAK,IAAI,EAAE,CAAC;AAAA,IAE5D,IAAI,UAAU;AAAA,MAAK,QAAO,KAAK,gCAAgC,QAAQ,QAAQ,CAAC,GAAG;AAAA,IACnF,OAAO,OAAO,OAAO;AAAA;AAEzB;AAEA,SAAS,MAAM,CAAC,SAAiC;AAAA,EAC/C,MAAM,MAAM,UAAU;AAAA,EACtB,MAAM,WAAW,UAAU;AAAA,EAC3B,IAAI,OAAO,wBAAwB,QAAQ,QAAQ,CAAC;AAAA,EACpD,IAAI;AAAA,IAAU,QAAQ,0BAAyB;AAAA,EAC1C,SAAI;AAAA,IAAK,QAAQ,qBAAoB;AAAA,EAC1C,OAAO;AAAA,IACL;AAAA,IACA,QAAQ;AAAA,MACN,cAAc;AAAA,MACd,iBAAiB;AAAA,MACjB,sBAAsB;AAAA,MACtB,eAAe;AAAA,IACjB;AAAA,EACF;AAAA;;;ACnDF,IAAM,OAAM;AAOZ,IAAM,gBAAgB,IAAI;AAEnB,IAAM,wBAAkC;AAAA,EAC7C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,uBAAuB;AAAA,EACvB,SAAS;AAAA,EACT,UAAU;AAAA,OACJ,IAAG,CAAC,SAAwB,UAAkB,QAAwC;AAAA,IAC1F,MAAM,WAAW,QAAQ,WAAW,sBAAsB;AAAA,IAI1D,IAAI,CAAC;AAAA,MAAU,OAAO,EAAE,MAAM,GAAG;AAAA,IAEjC,MAAM,SAAS,cAAc,IAAI,OAAO;AAAA,IACxC,IAAI,UAAU,KAAK,IAAI,IAAI,OAAO,KAAK,MAAK;AAAA,MAC1C,OAAO,aAAa,OAAO,KAAK;AAAA,IAClC;AAAA,IAEA,MAAM,aAAa,MAAM,SAAS,oBAAoB;AAAA,IAEtD,IAAI,OAAO,KAAK,UAAU,EAAE,WAAW,GAAG;AAAA,MACxC,OAAO,EAAE,MAAM,GAAG;AAAA,IACpB;AAAA,IAEA,cAAc,IAAI,SAAS,EAAE,OAAO,YAAY,IAAI,KAAK,IAAI,EAAE,CAAC;AAAA,IAChE,OAAO,aAAa,UAAU;AAAA;AAElC;AAEA,SAAS,YAAY,CAAC,YAA8C;AAAA,EAClE,MAAM,YAAY,OAAO,KAAK,UAAU,EAAE,KAAK;AAAA,EAC/C,MAAM,QAAQ,OAAO,OAAO,UAAU,EAAE,OAAO,CAAC,GAAG,MAAM,IAAI,EAAE,QAAQ,CAAC;AAAA,EAExE,OAAO;AAAA,IACL,MAAM,eAAe,iBAAiB,UAAU,KAAK,IAAI;AAAA,IACzD,QAAQ;AAAA,MACN,qBAAqB,UAAU,KAAK,GAAG;AAAA,MACvC,iBAAiB;AAAA,IACnB;AAAA,EACF;AAAA;;;ACrDF,mBAA6B;;;ACC7B,mBAAS;AAET,SAAS,WAAW,CAAC,KAAiC;AAAA,EACpD,IAAI,OAAO,YAAY,aAAa;AAAA,IAClC;AAAA,EACF;AAAA,EACA,MAAM,QAAQ,QAAQ,IAAI;AAAA,EAC1B,OAAO,UAAU,YAAY,YAAY,OAAO,KAAK;AAAA;AAGhD,SAAS,UAAU,CACxB,SACA,KACA,cACoB;AAAA,EACpB,MAAM,QAAQ,QAAQ,WAAW,GAAG;AAAA,EACpC,IAAI,UAAU,aAAa,UAAU,MAAM;AAAA,IACzC,OAAO,OAAO,KAAK;AAAA,EACrB;AAAA,EACA,OAAO,YAAY,GAAG,KAAK;AAAA;AAGtB,SAAS,SAAS,GAAY;AAAA,EACnC,OACE,OAAO,eAAe,eACtB,OAAQ,WAAuC,aAAa;AAAA;AAIzD,SAAS,WAAW,CAAC,SAAiC;AAAA,EAC3D,OAAO,UAAU,KAAK,CAAC,CAAC,WAAW,SAAS,gCAAgC;AAAA;AAGvE,SAAS,UAAU,CAAC,SAAgC;AAAA,EACzD,MAAM,aAAa,WAAW,SAAS,gCAAgC;AAAA,EACvE,MAAM,UACJ,UAAU,KAAK,aACX,aACA,WAAW,SAAS,0BAA0B,kCAAkC;AAAA,EAEtF,OAAO;AAAA;AAGF,SAAS,mBAAmB,CAAC,SAAgC;AAAA,EAClE,MAAM,eAAe,UAAU,IAC3B,WAAW,SAAS,qCAAqC,KACzD,WAAW,SAAS,gCAAgC,IACpD,WAAW,SAAS,6BAA6B;AAAA,EACrD,IAAI,cAAc;AAAA,IAChB,QAAO,MAAM,sDAAsD,cAAc;AAAA,IACjF,OAAO;AAAA,EACT;AAAA,EACA,QAAO,MAAM,kEAAkE;AAAA,EAC/E,OAAO,WAAW,OAAO;AAAA;AAGpB,SAAS,SAAS,CAAC,SAA4C;AAAA,EACpE,OAAO,WAAW,SAAS,uBAAuB;AAAA;AAG7C,SAAS,kBAAkB,CAAC,SAA4C;AAAA,EAC7E,MAAM,kBAAkB,WAAW,SAAS,iCAAiC;AAAA,EAC7E,IAAI,iBAAiB;AAAA,IACnB,QAAO,MAAM,4DAA4D;AAAA,IACzE,OAAO;AAAA,EACT;AAAA,EACA,QAAO,MAAM,iEAAiE;AAAA,EAC9E,OAAO,UAAU,OAAO;AAAA;AAGnB,SAAS,aAAa,CAAC,SAAgC;AAAA,EAC5D,OACE,WAAW,SAAS,2BAA2B,KAC9C,WAAW,SAAS,eAAe,qBAAqB;AAAA;AAItD,SAAS,YAAY,CAAC,SAAgC;AAAA,EAC3D,OACE,WAAW,SAAS,0BAA0B,KAC9C,WAAW,SAAS,YAAY,KAChC,cAAc,OAAO;AAAA;AAIlB,SAAS,cAAc,CAAC,SAAgC;AAAA,EAC7D,OACE,WAAW,SAAS,4BAA4B,KAChD,WAAW,SAAS,cAAc,KAClC,cAAc,OAAO;AAAA;AAIlB,SAAS,aAAa,CAAC,SAAgC;AAAA,EAC5D,OACE,WAAW,SAAS,2BAA2B,KAC9C,WAAW,SAAS,eAAe,6BAA6B;AAAA;AAI9D,SAAS,YAAY,CAAC,SAAgC;AAAA,EAC3D,OACE,WAAW,SAAS,0BAA0B,KAC9C,WAAW,SAAS,YAAY,KAChC,cAAc,OAAO;AAAA;AAIlB,SAAS,uBAAuB,CAAC,SAAgC;AAAA,EACtE,OACE,WAAW,SAAS,sCAAsC,KAC1D,WAAW,SAAS,oCAAoC,KACxD,WAAW,SAAS,wBAAwB,KAC5C,WAAW,SAAS,sBAAsB,KAC1C,aAAa,OAAO;AAAA;AAIjB,SAAS,qBAAqB,CAAC,SAAgC;AAAA,EACpE,OACE,WAAW,SAAS,oCAAoC,KACxD,WAAW,SAAS,6BAA6B,KACjD,WAAW,SAAS,sBAAsB,KAC1C,WAAW,SAAS,eAAe,KACnC,eAAe,OAAO;AAAA;AAYnB,SAAS,wBAAwB,CAAC,SAAgC;AAAA,EACvE,OAAO,WAAW,SAAS,yCAAyC,cAAc;AAAA;AAG7E,SAAS,uBAAuB,CAAC,SAAgC;AAAA,EACtE,OACE,WAAW,SAAS,wCAAwC,+BAA+B,KAC3F;AAAA;AAIG,SAAS,gBAAgB,CAAC,SAAgC;AAAA,EAC/D,OACE,WAAW,SAAS,8BAA8B,KACjD,WAAW,SAAS,kBAAkB,kBAAkB;AAAA;AAgBtD,SAAS,wBAAwB,CAAC,SAAiC;AAAA,EACxE,MAAM,UAAU,WAAW,SAAS,wCAAwC,OAAO;AAAA,EACnF,OAAO,OAAO,OAAO,EAAE,YAAY,MAAM;AAAA;;;ACzK3C;AAUA,SAAS,iBAAiB,CAAC,OAAuB;AAAA,EAChD,OAAO,MAAM,QAAQ,QAAQ,EAAE;AAAA;AAGjC,SAAS,oBAAoB,CAAC,YAA4B;AAAA,EACxD,MAAM,UAAU,kBAAkB,UAAU;AAAA,EAC5C,OAAO,QAAQ,SAAS,SAAS,IAAI,QAAQ,MAAM,GAAG,CAAC,UAAU,MAAM,IAAI;AAAA;AAG7E,SAAS,gBAAgB,CAAC,SAAwB,YAAY,OAA2B;AAAA,EACvF,IAAI,UAAU;AAAA,IAAG;AAAA,EACjB,OAAO,YAAY,mBAAmB,OAAO,IAAI,UAAU,OAAO;AAAA;AAG7D,SAAS,oBAAoB,CAAC,SAAwB,YAAY,OAAuB;AAAA,EAC9F,MAAM,UAAU,YAAY,oBAAoB,OAAO,IAAI,WAAW,OAAO;AAAA,EAC7E,OAAO,IAAI,eAAe,kBAAkB,OAAO,GAAG,iBAAiB,SAAS,SAAS,CAAC;AAAA;AAGrF,SAAS,sBAAsB,CAAC,SAA0C;AAAA,EAC/E,MAAM,aAAa,kBAAkB,WAAW,OAAO,CAAC;AAAA,EACxD,OAAO,IAAI,iBAAiB;AAAA,IAC1B;AAAA,IACA,SAAS,qBAAqB,UAAU;AAAA,IACxC,QAAQ,iBAAiB,OAAO;AAAA,EAClC,CAAC;AAAA;;;AF/BI,SAAS,gBAAgB,CAC9B,SACA,SACM;AAAA,GACA,YAAY;AAAA,IAChB,IAAI;AAAA,MACF,IAAI,CAAC,UAAU,OAAO,KAAK,CAAC,UAAU,GAAG;AAAA,QACvC,QAAO,KACL,+FACF;AAAA,QACA,QAAO,KAAK,oEAAoE;AAAA,QAChF;AAAA,MACF;AAAA,MACA,IAAI;AAAA,QACF,MAAM,qBAAqB,OAAO,EAAE,IAAI,SAAS;AAAA,QACjD,QAAO,IAAI,8CAA8C;AAAA,QACzD,OAAO,YAAY;AAAA,QACnB,MAAM,UAAU,sBAAsB,QAAQ,WAAW,UAAU,OAAO,UAAU;AAAA,QACpF,QAAO,KAAK,4CAA4C,SAAS;AAAA,QACjE,QAAO,KACL,+EACF;AAAA;AAAA,MAEF,OAAO,OAAO;AAAA,MACd,MAAM,UACH,OAAmD,QAChD,IAAI,CAAC,MAAM,EAAE,OAAO,EACrB,KAAK,IAAI,MAAM,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,MACzE,QAAO,KACL,6CAA6C,yFAC/C;AAAA,MACA,QAAO,KAAK,oEAAoE;AAAA;AAAA,KAEjF;AAAA;;;AGpCL,mBAAS;;;ACDT;AAAA;AAAA;AAQO,SAAS,mBAAmB,CACjC,SACA,MACA,SACA,OAKA;AAAA,EACA,MAAM,cAAc,OAAO,MAAM,eAAe,CAAC;AAAA,EACjD,MAAM,eAAe,OAAO,MAAM,gBAAgB,CAAC;AAAA,EACnD,MAAM,cAAc,OAClB,MAAM,eAAe,OAAO,MAAM,cAAc,cAAc,YAChE;AAAA,EAEA,MAAM,UAA6B;AAAA,IACjC;AAAA,IACA,QAAQ;AAAA,IACR;AAAA,IACA,QAAQ;AAAA,MACN,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,QAAQ,UAAU,UAAU,YAAY,OAAO;AAAA;;;AD7BjD,IAAM,iBAAiB;AACvB,SAAS,oBAAoB,CAAC,UAQ5B;AAAA,EACA,OAAO;AAAA,IACL,mBACE,SAAS,SAAS,QAAQ,IAAI,gCAAgC,KAAK,IAAI,EAAE,KAAK;AAAA,IAChF,iBACE,SAAS,SAAS,QAAQ,IAAI,8BAA8B,KAAK,IAAI,EAAE,KAAK;AAAA,IAC9E,eACE,SAAS,SAAS,QAAQ,IAAI,4BAA4B,KAAK,IAAI,EAAE,KAAK;AAAA,IAC5E,aAAa,SAAS,SAAS,QAAQ,IAAI,0BAA0B,KAAK,IAAI,EAAE,KAAK;AAAA,IACrF,eAAe,SAAS,QAAQ,IAAI,4BAA4B,KAAK;AAAA,IACrE,aAAa,SAAS,QAAQ,IAAI,0BAA0B,KAAK;AAAA,IACjE,YAAY,SAAS,SAAS,QAAQ,IAAI,aAAa,KAAK,IAAI,EAAE,KAAK;AAAA,EACzE;AAAA;AAGF,SAAS,kBAAkB,CAAC,SAAwB;AAAA,EAClD,MAAM,qBAAqB,WACzB,SACA,iCACA,wBACF;AAAA,EACA,MAAM,qBAAqB,OAAO,SAChC,WAAW,SAAS,sCAAsC,MAAM,KAAK,QACrE,EACF;AAAA,EAEA,IAAI,CAAC,OAAO,OAAO,WAAW,EAAE,SAAS,kBAAkB,GAAG;AAAA,IAC5D,MAAM,WAAW,gCAAgC,uCAAuC,OAAO,OAAO,WAAW,EAAE,KAAK,IAAI;AAAA,IAC5H,QAAO,MAAM,QAAQ;AAAA,IACrB,MAAM,IAAI,MAAM,QAAQ;AAAA,EAC1B;AAAA,EAEA,OAAO,EAAE,oBAAoB,mBAAmB;AAAA;AAGlD,SAAS,iBAAiB,CAAC,WAAmB,QAA0B;AAAA,EACtE,MAAM,SAAS,MAAM,SAAS,EAAE,KAAK,CAAC;AAAA,EACtC,OAAO,KAAK;AAAA,EACZ,OAAO;AAAA;AAOT,eAAsB,mBAAmB,CACvC,SACA,QACmB;AAAA,EACnB,QAAQ,uBAAuB,mBAAmB,OAAO;AAAA,EAEzD,IAAI,WAAW,MAAM;AAAA,IACnB,QAAO,MAAM,4CAA4C;AAAA,IACzD,OAAO,kBAAkB,oBAAoB,GAAG;AAAA,EAClD;AAAA,EAEA,IAAI;AAAA,EACJ,IAAI,OAAO,WAAW,UAAU;AAAA,IAC9B,OAAO;AAAA,EACT,EAAO,SAAI,OAAO,WAAW,YAAY,OAAO,MAAM;AAAA,IACpD,OAAO,OAAO;AAAA,EAChB,EAAO;AAAA,IACL,QAAO,KAAK,oCAAoC;AAAA,IAChD,OAAO,kBAAkB,oBAAoB,GAAG;AAAA;AAAA,EAGlD,IAAI,CAAC,KAAK,KAAK,GAAG;AAAA,IAChB,QAAO,KAAK,0BAA0B;AAAA,IACtC,OAAO,kBAAkB,oBAAoB,GAAG;AAAA,EAClD;AAAA,EAEA,MAAM,UAAU,MAAM,yBAAyB,SAAS,CAAC,IAAI,CAAC;AAAA,EAC9D,OAAO,QAAQ;AAAA;AAUjB,eAAsB,wBAAwB,CAC5C,SACA,OACqB;AAAA,EACrB,QAAQ,oBAAoB,uBAAuB,mBAAmB,OAAO;AAAA,EAC7E,MAAM,SAAS,qBAAqB,SAAS,IAAI;AAAA,EAEjD,IAAI,CAAC,SAAS,MAAM,WAAW,GAAG;AAAA,IAChC,QAAO,KAAK,qCAAqC;AAAA,IACjD,OAAO,CAAC;AAAA,EACV;AAAA,EAEA,MAAM,aAAwD,CAAC;AAAA,EAC/D,MAAM,UAAsB,IAAI,MAAM,MAAM,MAAM;AAAA,EAElD,SAAS,IAAI,EAAG,IAAI,MAAM,QAAQ,KAAK;AAAA,IACrC,MAAM,OAAO,MAAM,IAAI,KAAK;AAAA,IAC5B,IAAI,MAAM;AAAA,MACR,WAAW,KAAK,EAAE,MAAM,eAAe,EAAE,CAAC;AAAA,IAC5C,EAAO;AAAA,MACL,QAAQ,KAAK,kBAAkB,oBAAoB,GAAG;AAAA;AAAA,EAE1D;AAAA,EAEA,IAAI,WAAW,WAAW,GAAG;AAAA,IAC3B,QAAO,KAAK,wCAAwC;AAAA,IACpD,OAAO;AAAA,EACT;AAAA,EAEA,SAAS,aAAa,EAAG,aAAa,WAAW,QAAQ,cAAc,gBAAgB;AAAA,IACrF,MAAM,WAAW,KAAK,IAAI,aAAa,gBAAgB,WAAW,MAAM;AAAA,IACxE,MAAM,QAAQ,WAAW,MAAM,YAAY,QAAQ;AAAA,IACnD,MAAM,aAAa,MAAM,IAAI,CAAC,MAAM,EAAE,IAAI;AAAA,IAE1C,QAAO,KACL,sCAAsC,KAAK,MAAM,aAAa,cAAc,IAAI,KAAK,KAAK,KAAK,WAAW,SAAS,cAAc,MAAM,MAAM,cAC/I;AAAA,IAEA,IAAI;AAAA,MACF,MAAM,WAAW,MAAM,OAAO,WAAW,QAAQ,eAAe;AAAA,QAC9D,MAAM;AAAA,UACJ,OAAO;AAAA,UACP,OAAO;AAAA,QACT;AAAA,MACF,CAAC;AAAA,MAED,MAAM,gBAAgB,qBAAqB,QAAQ;AAAA,MAEnD,IAAI,cAAc,sBAAsB,aAAa,cAAc,oBAAoB,IAAI;AAAA,QACzF,QAAO,KACL,iCAAiC,cAAc,qBAAqB,cAAc,kCACpF;AAAA,MACF;AAAA,MAEA,IAAI,SAAS,WAAW,KAAK;AAAA,QAC3B,MAAM,aAAa,cAAc,cAAc;AAAA,QAC/C,QAAO,KAAK,2CAA2C,gBAAgB;AAAA,QACvE,MAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,aAAa,IAAI,CAAC;AAAA,QAErE,MAAM,gBAAgB,MAAM,OAAO,WAAW,QAAQ,eAAe;AAAA,UACnE,MAAM;AAAA,YACJ,OAAO;AAAA,YACP,OAAO;AAAA,UACT;AAAA,QACF,CAAC;AAAA,QAED,IAAI,CAAC,cAAc,IAAI;AAAA,UACrB,QAAO,MAAM,mCAAmC,cAAc,QAAQ;AAAA,UACtE,WAAW,QAAQ,OAAO;AAAA,YACxB,QAAQ,KAAK,iBAAiB,kBAAkB,oBAAoB,GAAG;AAAA,UACzE;AAAA,UACA;AAAA,QACF;AAAA,QAEA,MAAM,YAAa,MAAM,cAAc,KAAK;AAAA,QAI5C,IAAI,WAAW,MAAM;AAAA,UACnB,WAAW,QAAQ,UAAU,MAAM;AAAA,YACjC,MAAM,gBAAgB,MAAM,KAAK,OAAO;AAAA,YACxC,QAAQ,iBAAiB,KAAK;AAAA,UAChC;AAAA,UACA,QAAO,KAAK,0CAA0C,MAAM,mBAAmB;AAAA,QACjF;AAAA,QACA;AAAA,MACF;AAAA,MAEA,IAAI,CAAC,SAAS,IAAI;AAAA,QAChB,QAAO,MAAM,gCAAgC,SAAS,YAAY,SAAS,YAAY;AAAA,QACvF,WAAW,QAAQ,OAAO;AAAA,UACxB,QAAQ,KAAK,iBAAiB,kBAAkB,oBAAoB,GAAG;AAAA,QACzE;AAAA,QACA;AAAA,MACF;AAAA,MAEA,MAAM,OAAQ,MAAM,SAAS,KAAK;AAAA,MAKlC,IAAI,CAAC,MAAM,QAAQ,CAAC,MAAM,QAAQ,KAAK,IAAI,GAAG;AAAA,QAC5C,QAAO,MAAM,kDAAkD;AAAA,QAC/D,WAAW,QAAQ,OAAO;AAAA,UACxB,QAAQ,KAAK,iBAAiB,kBAAkB,oBAAoB,GAAG;AAAA,QACzE;AAAA,QACA;AAAA,MACF;AAAA,MAEA,WAAW,QAAQ,KAAK,MAAM;AAAA,QAC5B,MAAM,gBAAgB,MAAM,KAAK,OAAO;AAAA,QACxC,QAAQ,iBAAiB,KAAK;AAAA,MAChC;AAAA,MAEA,IAAI,KAAK,OAAO;AAAA,QACd,MAAM,QAAQ;AAAA,UACZ,aAAa,KAAK,MAAM;AAAA,UACxB,cAAc;AAAA,UACd,aAAa,KAAK,MAAM;AAAA,QAC1B;AAAA,QACA,oBAAoB,SAAS,UAAU,gBAAgB,SAAS,MAAM,UAAU,KAAK;AAAA,MACvF;AAAA,MAEA,QAAO,MACL,yBAAyB,MAAM,sBAAsB,oCAAoC,cAAc,qBAAqB,WAC9H;AAAA,MACA,OAAO,OAAO;AAAA,MACd,MAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,MACrE,QAAO,MAAM,4BAA4B,SAAS;AAAA,MAClD,WAAW,QAAQ,OAAO;AAAA,QACxB,QAAQ,KAAK,iBAAiB,kBAAkB,oBAAoB,GAAG;AAAA,MACzE;AAAA;AAAA,EAEJ;AAAA,EAEA,OAAO;AAAA;;AEvOT,mBAAS,sBAAQ;;;ACDjB,mBAAS;AACT;AAGO,SAAS,qBAAqB,GAGR;AAAA,EAC3B,OAAO,SAAS,MAAM,YAA8C;AAAA,IAClE,IAAI;AAAA,MACF,IAAI,iBAAiB,gBAAgB;AAAA,QACnC,MAAM,cAAc,KAAK,QAAQ,wBAAwB,EAAE;AAAA,QAC3D,KAAK,MAAM,WAAW;AAAA,QACtB,OAAO;AAAA,MACT;AAAA,MACA,OAAO;AAAA,MACP,OAAO,WAAW;AAAA,MAClB,MAAM,UAAU,qBAAqB,QAAQ,UAAU,UAAU,OAAO,SAAS;AAAA,MACjF,QAAO,KAAK,+BAA+B,SAAS;AAAA,MACpD,OAAO;AAAA;AAAA;AAAA;AAkDb,eAAsB,qBAAqB,CAAC,WAAuC;AAAA,EACjF,IAAI;AAAA,IACF,QAAQ,aAAa,MAAa;AAAA,IAClC,MAAM,SAAS,UAAU,UAAU;AAAA,IAEnC,OAAO,IAAI,SAAS;AAAA,WACZ,KAAI,GAAG;AAAA,QACX,IAAI;AAAA,UACF,QAAQ,MAAM,UAAU,MAAM,OAAO,KAAK;AAAA,UAC1C,IAAI,MAAM;AAAA,YACR,KAAK,KAAK,IAAI;AAAA,UAChB,EAAO;AAAA,YACL,KAAK,KAAK,KAAK;AAAA;AAAA,UAEjB,OAAO,OAAO;AAAA,UACd,KAAK,QAAQ,KAAc;AAAA;AAAA;AAAA,MAG/B,OAAO,CAAC,OAAO,UAAU;AAAA,QACvB,OAAO,OAAO,EAAE,QAAQ,MAAM,SAAS,KAAK,CAAC;AAAA;AAAA,IAEjD,CAAC;AAAA,IACD,OAAO,OAAO;AAAA,IACd,MAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,IACrE,QAAO,MAAM,sCAAsC,SAAS;AAAA,IAC5D,MAAM,IAAI,MACR,qGACF;AAAA;AAAA;AAIG,SAAS,6BAA6B,CAAC,cAA8C;AAAA,EAC1F,MAAM,aAAa,aAAa,MAAM,2BAA2B;AAAA,EACjE,MAAM,QAAQ,aAAa,IAAI,KAAK,KAAK;AAAA,EACzC,MAAM,cAAc,aAAa,QAAQ,6BAA6B,EAAE,EAAE,KAAK;AAAA,EAE/E,OAAO,EAAE,OAAO,YAAY;AAAA;;;ADlG9B,eAAsB,qBAAqB,CACzC,SACA,QAC4B;AAAA,EAC5B,MAAM,YAAY,OAAO,SAAS;AAAA,EAClC,MAAM,OAAO,OAAO,QAAQ;AAAA,EAC5B,MAAM,SAAS,OAAO;AAAA,EACtB,MAAM,YAAY,wBAAwB,OAAO;AAAA,EACjD,QAAO,IAAI,sCAAsC,WAAW;AAAA,EAE5D,MAAM,iBAAyC;AAAA,IAC7C,aAAa;AAAA,IACb,aAAa;AAAA,IACb,aAAa;AAAA,EACf;AAAA,EACA,MAAM,cAAc,eAAe,SAAS;AAAA,EAE5C,IAAI;AAAA,IACF,MAAM,cAAc;AAAA,MAClB;AAAA,MACA;AAAA,MACA;AAAA,MACA,OAAO;AAAA,IACT;AAAA,IAEA,MAAM,YAAY,MAAM,uBAAuB,OAAO,EAAE,cAAc,WAAW;AAAA,IAEjF,MAAM,SAAS,UAAU,OAAO,IAAI,CAAC,SAAS;AAAA,MAC5C,KAAK,IAAI,OAAO,IAAI;AAAA,IACtB,EAAE;AAAA,IACF,OAAO;AAAA,IACP,OAAO,OAAO;AAAA,IACd,MAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,IACrE,QAAO,MAAM,2CAA2C,SAAS;AAAA,IACjE,MAAM;AAAA;AAAA;AAIV,eAAsB,sBAAsB,CAC1C,SACA,QACiD;AAAA,EACjD,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,MAAM,YAAY,yBAAyB,OAAO;AAAA,EAClD,QAAO,IAAI,kDAAkD,WAAW;AAAA,EACxE,MAAM,YAAY,OAAO,SACvB,WAAW,SAAS,8CAA8C,MAAM,KAAK,QAC7E,EACF;AAAA,EAEA,IAAI,OAAO,WAAW,UAAU;AAAA,IAC9B,WAAW;AAAA,IACX,aAAa;AAAA,EACf,EAAO;AAAA,IACL,WAAW,OAAO;AAAA,IAClB,aACE,OAAO,UAAU;AAAA;AAAA,EAGrB,MAAM,WAAW;AAAA,IACf;AAAA,MACE,MAAM;AAAA,MACN,SAAS;AAAA,QACP,EAAE,MAAM,QAAQ,MAAM,WAAW;AAAA,QACjC,EAAE,MAAM,aAAa,WAAW,EAAE,KAAK,SAAS,EAAE;AAAA,MACpD;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,SAAS,uBAAuB,OAAO;AAAA,EAE7C,IAAI;AAAA,IACF,MAAM,cAAuC;AAAA,MAC3C,OAAO;AAAA,MACP;AAAA,MACA,YAAY;AAAA,IACd;AAAA,IAGA,IAAI,WAA4B;AAAA,IAChC,SAAS,UAAU,EAAG,UAAU,GAAG,WAAW;AAAA,MAC5C,WAAW,MAAM,OAAO,OAAO,4BAA4B;AAAA,QACzD,MAAM;AAAA,MACR,CAAC;AAAA,MAED,IAAI,SAAS,WAAW,OAAO,UAAU,GAAG;AAAA,QAC1C,MAAM,QAAQ,UAAU,KAAK;AAAA,QAC7B,QAAO,KACL,kEAAkE,OAAO,UAC3E;AAAA,QACA,MAAM,IAAI,QAAQ,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC;AAAA,QAC5C;AAAA,MACF;AAAA,MACA;AAAA,IACF;AAAA,IAEA,IAAI,CAAC,UAAU,IAAI;AAAA,MACjB,MAAM,SAAS,UAAU,UAAU;AAAA,MACnC,IAAI,WAAW,KAAK;AAAA,QAClB,MAAM,IAAI,MACR,oGACF;AAAA,MACF;AAAA,MACA,MAAM,IAAI,MAAM,4BAA4B,QAAQ;AAAA,IACtD;AAAA,IAcA,MAAM,cAAe,MAAM,SAAS,KAAK;AAAA,IACzC,MAAM,UAAU,YAAY,UAAU,IAAI,SAAS;AAAA,IAEnD,IAAI,YAAY,OAAO;AAAA,MACrB,oBACE,SACA,WAAU,mBACV,OAAO,WAAW,WAAW,SAAS,OAAO,UAAU,IACvD;AAAA,QACE,aAAa,YAAY,MAAM;AAAA,QAC/B,cAAc,YAAY,MAAM;AAAA,QAChC,aAAa,YAAY,MAAM;AAAA,MACjC,CACF;AAAA,IACF;AAAA,IAEA,IAAI,CAAC,SAAS;AAAA,MACZ,OAAO;AAAA,QACL,OAAO;AAAA,QACP,aAAa;AAAA,MACf;AAAA,IACF;AAAA,IAEA,OAAO,8BAA8B,OAAO;AAAA,IAC5C,OAAO,OAAO;AAAA,IACd,MAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,IACrE,QAAO,MAAM,0BAA0B,SAAS;AAAA,IAChD,OAAO;AAAA,MACL,OAAO;AAAA,MACP,aAAa,UAAU;AAAA,IACzB;AAAA;AAAA;;AE3JJ,mBAAS,sBAAQ;;;ACCjB,SAAS,QAAQ,CAAC,OAAmC;AAAA,EACnD,IAAI,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,GAAG;AAAA,IAC/D,OAAO;AAAA,EACT;AAAA,EACA,OAAO;AAAA;AAGT,SAAS,qBAAqB,CAAC,OAA2B;AAAA,EACxD,IAAI,MAAM,QAAQ,KAAK;AAAA,IAAG,OAAO;AAAA,EACjC,IAAI,OAAO,UAAU;AAAA,IAAU,OAAO,CAAC,EAAE,MAAM,QAAQ,MAAM,MAAM,CAAC;AAAA,EACpE,OAAO,SAAS,OAAO,UAAU,WAAW,CAAC,KAAK,IAAI,CAAC;AAAA;AAGzD,SAAS,0BAA0B,CAAC,OAA0B;AAAA,EAC5D,IAAI,OAAO,UAAU,UAAU;AAAA,IAC7B,OAAO,CAAC,KAAK;AAAA,EACf;AAAA,EAEA,MAAM,SAAS,SAAS,KAAK;AAAA,EAC7B,IAAI,CAAC;AAAA,IAAQ,OAAO,CAAC;AAAA,EAErB,MAAM,OACJ,OAAO,OAAO,SAAS,WACnB,OAAO,OACP,OAAO,OAAO,gBAAgB,WAC5B,OAAO,cACP,OAAO,OAAO,YAAY,WACxB,OAAO,UACP;AAAA,EACV,MAAM,OAAO,OAAO,OAAO,SAAS,WAAW,OAAO,OAAO;AAAA,EAE7D,IAAI,SAAS,CAAC,QAAQ,SAAS,iBAAiB,SAAS,SAAS;AAAA,IAChE,OAAO,CAAC,IAAI;AAAA,EACd;AAAA,EAEA,OAAO,CAAC;AAAA;AAGV,SAAS,yBAAyB,CAAC,OAA0B;AAAA,EAC3D,MAAM,SAAS,SAAS,KAAK;AAAA,EAC7B,IAAI,CAAC;AAAA,IAAQ,OAAO,CAAC;AAAA,EAErB,MAAM,gBAAgB,sBAAsB,OAAO,OAAO;AAAA,EAC1D,IAAI,cAAc,SAAS,GAAG;AAAA,IAC5B,OAAO,cAAc,QAAQ,0BAA0B;AAAA,EACzD;AAAA,EAEA,MAAM,gBAAgB,SAAS,OAAO,OAAO;AAAA,EAC7C,IAAI,eAAe;AAAA,IACjB,OAAO,sBAAsB,cAAc,OAAO,EAAE,QAAQ,0BAA0B;AAAA,EACxF;AAAA,EAEA,MAAM,OAAO,OAAO,OAAO,SAAS,WAAW,OAAO,OAAO;AAAA,EAC7D,MAAM,OACJ,OAAO,OAAO,SAAS,WACnB,OAAO,OACP,OAAO,OAAO,gBAAgB,WAC5B,OAAO,cACP;AAAA,EACR,IAAI,SAAS,SAAS,iBAAiB,SAAS,SAAS;AAAA,IACvD,OAAO,CAAC,IAAI;AAAA,EACd;AAAA,EAEA,OAAO,CAAC;AAAA;AAGV,SAAS,qBAAqB,CAAC,OAA0B;AAAA,EACvD,MAAM,SAAS,SAAS,KAAK;AAAA,EAC7B,IAAI,CAAC;AAAA,IAAQ,OAAO,CAAC;AAAA,EAErB,IAAI,OAAO,OAAO,SAAS,YAAY,OAAO,MAAM;AAAA,IAClD,OAAO,CAAC,OAAO,IAAI;AAAA,EACrB;AAAA,EAEA,MAAM,UAAU,SAAS,OAAO,OAAO;AAAA,EACvC,IAAI,CAAC,SAAS;AAAA,IACZ,OAAO,CAAC;AAAA,EACV;AAAA,EAEA,OAAO,sBAAsB,QAAQ,OAAO,EAAE,QAAQ,0BAA0B;AAAA;AAO3E,SAAS,0BAA0B,CAAC,MAAuB;AAAA,EAChE,MAAM,SAAS,SAAS,IAAI;AAAA,EAC5B,IAAI,CAAC;AAAA,IAAQ,OAAO;AAAA,EAEpB,MAAM,WAAqB,CAAC;AAAA,EAC5B,IAAI,OAAO,OAAO,gBAAgB,YAAY,OAAO,aAAa;AAAA,IAChE,SAAS,KAAK,OAAO,WAAW;AAAA,EAClC;AAAA,EAEA,IAAI,MAAM,QAAQ,OAAO,MAAM,GAAG;AAAA,IAChC,SAAS,KAAK,GAAG,OAAO,OAAO,QAAQ,yBAAyB,CAAC;AAAA,EACnE;AAAA,EAEA,IAAI,MAAM,QAAQ,OAAO,OAAO,GAAG;AAAA,IACjC,SAAS,KAAK,GAAG,OAAO,QAAQ,QAAQ,qBAAqB,CAAC;AAAA,EAChE;AAAA,EAEA,OAAO,SAAS,KAAK,EAAE;AAAA;;;AD9FzB,IAAM,2BAA2B;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAaA,SAAS,gBAAgB,CAAC,WAA4B;AAAA,EACpD,MAAM,QAAQ,UAAU,YAAY;AAAA,EACpC,OAAO,yBAAyB,KAAK,CAAC,YAAY,MAAM,SAAS,OAAO,CAAC;AAAA;AAG3E,eAAe,yBAAyB,CACtC,SACA,QACA,WACA,YACoC;AAAA,EACpC,MAAM,YAAY,WAAW,OAAO;AAAA,EACpC,QAAO,IAAI,yBAAyB,oBAAoB,WAAW;AAAA,EAEnE,MAAM,YAAY,iBAAiB,SAAS;AAAA,EAC5C,MAAM,QAGD,CAAC;AAAA,EACN,IAAI,QAAQ,UAAU,QAAQ;AAAA,IAC5B,MAAM,KAAK;AAAA,MACT,MAAM;AAAA,MACN,SAAS,CAAC,EAAE,MAAM,cAAc,MAAM,QAAQ,UAAU,OAAO,CAAC;AAAA,IAClE,CAAC;AAAA,EACH;AAAA,EACA,MAAM,KAAK;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,MAAM,cAAc,MAAM,OAAO,OAAO,CAAC;AAAA,EACvD,CAAC;AAAA,EAED,MAAM,cAAuC;AAAA,IAC3C,OAAO;AAAA,IACP;AAAA,IACA,mBAAmB,OAAO,aAAa;AAAA,IAKvC,MAAM,EAAE,QAAQ,EAAE,MAAM,cAAc,EAAE;AAAA,EAC1C;AAAA,EACA,IAAI,CAAC,aAAa,OAAO,OAAO,gBAAgB,UAAU;AAAA,IACxD,YAAY,cAAc,OAAO;AAAA,EACnC;AAAA,EAEA,MAAM,WAAW,MAAM,qBAAqB,OAAO,EAAE,WAAW,QAAQ,cAAc;AAAA,IACpF,MAAM;AAAA,EACR,CAAC;AAAA,EACD,MAAM,eAAe,MAAM,SAAS,KAAK;AAAA,EACzC,IAAI,OAA6B,CAAC;AAAA,EAClC,IAAI,cAAc;AAAA,IAChB,IAAI;AAAA,MACF,OAAO,KAAK,MAAM,YAAY;AAAA,MAC9B,OAAO,UAAU;AAAA,MACjB,QAAO,MACL,sDACE,oBAAoB,QAAQ,SAAS,UAAU,OAAO,QAAQ,GAElE;AAAA;AAAA,EAEJ;AAAA,EAEA,IAAI,CAAC,SAAS,IAAI;AAAA,IAChB,MAAM,YAAY,OAAO,SAAS,YAAY,OAAO,KAAK,QAAQ;AAAA,IAClE,MAAM,eACJ,OAAO,WAAW,YAAY,YAAY,UAAU,QAAQ,KAAK,IAC7D,UAAU,QAAQ,KAAK,IACvB,uBAAuB,SAAS;AAAA,IACtC,MAAM,eAAe,IAAI,MAAM,YAAY;AAAA,IAI3C,aAAa,SAAS,SAAS;AAAA,IAC/B,IAAI,WAAW;AAAA,MACb,aAAa,QAAQ;AAAA,IACvB;AAAA,IACA,MAAM;AAAA,EACR;AAAA,EAEA,IAAI,KAAK,OAAO;AAAA,IACd,oBAAoB,SAAS,WAAoB,OAAO,QAAQ;AAAA,MAC9D,aAAa,KAAK,MAAM,gBAAgB;AAAA,MACxC,cAAc,KAAK,MAAM,iBAAiB;AAAA,MAC1C,aAAa,KAAK,MAAM,gBAAgB;AAAA,IAC1C,CAAC;AAAA,EACH;AAAA,EAEA,IAAI,WAAW,2BAA2B,IAAI;AAAA,EAC9C,IAAI,CAAC,SAAS,KAAK,GAAG;AAAA,IACpB,MAAM,IAAI,MAAM,2CAA2C;AAAA,EAC7D;AAAA,EAKA,WAAW,SACR,QAAQ,6BAA6B,EAAE,EACvC,QAAQ,eAAe,EAAE,EACzB,KAAK;AAAA,EAER,IAAI;AAAA,IACF,OAAO,KAAK,MAAM,QAAQ;AAAA,IAC1B,OAAO,OAAO;AAAA,IACd,MAAM,iBAAiB,sBAAsB;AAAA,IAC7C,MAAM,qBAAqB,MAAM,eAAe;AAAA,MAC9C,MAAM;AAAA,MACN;AAAA,IACF,CAAC;AAAA,IAED,IAAI,oBAAoB;AAAA,MACtB,IAAI;AAAA,QACF,MAAM,iBAAiB,KAAK,MAAM,kBAAkB;AAAA,QACpD,QAAO,KAAK,8CAA8C;AAAA,QAC1D,OAAO;AAAA,QACP,OAAO,kBAAkB;AAAA,QACzB,MAAM,WACJ,4BAA4B,QAAQ,iBAAiB,UAAU,OAAO,gBAAgB;AAAA,QACxF,QAAO,MAAM,mDAAmD,UAAS;AAAA,QACzE,MAAM;AAAA;AAAA,IAEV;AAAA,IAEA,MAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,IACrE,QAAO,MAAM,0CAA0C,SAAS;AAAA,IAChE,MAAM;AAAA;AAAA;AAIV,eAAsB,iBAAiB,CACrC,SACA,QACoC;AAAA,EACpC,OAAO,0BAA0B,SAAS,QAAQ,WAAU,cAAc,aAAa;AAAA;AAGzF,eAAsB,iBAAiB,CACrC,SACA,QACoC;AAAA,EACpC,OAAO,0BAA0B,SAAS,QAAQ,WAAU,cAAc,aAAa;AAAA;;AElKzF,mBAAS,sBAAQ;AA0DjB,SAAS,cAAc,CAAC,OAAmD;AAAA,EACzE,IAAI,OAAO,UAAU,UAAU;AAAA,IAC7B,OAAO;AAAA,EACT;AAAA,EAEA,OAAO;AAAA,IACL;AAAA,MACE,MAAM;AAAA,MACN,SAAS;AAAA,QACP;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA;AAGF,SAAS,qBAAqB,CAAC,QAAgB,WAA0B;AAAA,EACvE,IAAI;AAAA,IACF,MAAM,SAAS,KAAK,MAAM,SAAS;AAAA,IAGnC,MAAM,UAAU,OAAO,OAAO;AAAA,IAC9B,MAAM,QAAQ,OAAO,OAAO;AAAA,IAC5B,IAAI,UAAU,kBAAkB,SAAS,SAAS,qBAAqB,GAAG;AAAA,MACxE,OAAO,IAAI,MACT,uBAAuB,mIACzB;AAAA,IACF;AAAA,IACA,MAAM;AAAA,EAIR,OAAO,IAAI,MAAM,uBAAuB,UAAU,WAAW;AAAA;AAG/D,SAAS,gBAAgB,CACvB,KAOsB;AAAA,EACtB,OAAO,IACJ,OAAO,CAAC,MAAM,EAAE,QAAQ,SAAS,EACjC,IAAI,CAAC,OAAO;AAAA,IACX,KAAK,EAAE;AAAA,IACP,OAAO,EAAE,SAAS;AAAA,IAClB,YAAY,EAAE,eAAe;AAAA,IAC7B,UAAU,EAAE,aAAa;AAAA,EAC3B,EAAE;AAAA;AAGN,SAAS,gBAAgB,CAAC,KAAyD;AAAA,EACjF,MAAM,QAA8B,CAAC;AAAA,EAErC,WAAW,QAAQ,KAAK;AAAA,IACtB,QAAQ,KAAK;AAAA,WACN;AAAA,QACH,MAAM,KAAK;AAAA,UACT,IAAI,KAAK,MAAM;AAAA,UACf,MAAM;AAAA,UACN,QAAS,KAAK,UAAqC;AAAA,UACnD,QAAQ;AAAA,YACN,MAAO,KAAK,QAAQ,QAAoD;AAAA,YACxE,OAAO,KAAK,QAAQ;AAAA,YACpB,KAAK,KAAK,QAAQ;AAAA,UACpB;AAAA,QACF,CAAC;AAAA,QACD;AAAA,WACG;AAAA,QACH,MAAM,KAAK;AAAA,UACT,IAAI,KAAK,MAAM;AAAA,UACf,MAAM;AAAA,UACN,QAAS,KAAK,UAAqC;AAAA,UACnD,OAAO,KAAK,SAAS;AAAA,UACrB,SAAS,KAAK,SAAS,IAAI,CAAC,OAAO;AAAA,YACjC,QAAQ,EAAE;AAAA,YACV,UAAU,EAAE;AAAA,YACZ,OAAO,EAAE;AAAA,UACX,EAAE;AAAA,QACJ,CAAC;AAAA,QACD;AAAA,WACG;AAAA,QACH,MAAM,KAAK;AAAA,UACT,IAAI,KAAK,MAAM;AAAA,UACf,MAAM;AAAA,UACN,QAAS,KAAK,UAAqC;AAAA,UACnD,MAAM,KAAK,QAAQ;AAAA,UACnB,QAAQ,KAAK;AAAA,QACf,CAAC;AAAA,QACD;AAAA,WACG;AAAA,QACH,MAAM,KAAK;AAAA,UACT,IAAI,KAAK,MAAM;AAAA,UACf,MAAM;AAAA,UACN,QAAS,KAAK,UAAqC;AAAA,UACnD,aAAa,KAAK,gBAAgB;AAAA,UAClC,UAAU,KAAK,aAAa;AAAA,UAC5B,WAAY,KAAK,aAAa,CAAC;AAAA,UAC/B,QAAQ,KAAK;AAAA,QACf,CAAC;AAAA,QACD;AAAA,WACG,WAAW;AAAA,QACd,MAAM,UAAU,KAAK,WAAW,CAAC;AAAA,QACjC,MAAM,KAAK;AAAA,UACT,MAAM;AAAA,UACN,SAAS,QACN,OAAO,CAAC,MAAM,EAAE,SAAS,aAAa,EACtC,IAAI,CAAC,OAAO;AAAA,YACX,MAAM;AAAA,YACN,MAAM,EAAE,QAAQ;AAAA,YAChB,aAAa,iBAAiB,EAAE,eAAe,CAAC,CAAC;AAAA,UACnD,EAAE;AAAA,QACN,CAAC;AAAA,QACD;AAAA,MACF;AAAA;AAAA,EAEJ;AAAA,EAEA,OAAO;AAAA;AAGT,eAAsB,cAAc,CAClC,SACA,QACyB;AAAA,EACzB,MAAM,YAAY,OAAO,SAAS,iBAAiB,OAAO;AAAA,EAC1D,QAAO,IAAI,yCAAyC,WAAW;AAAA,EAE/D,MAAM,QAAQ,OAAO,SAAS,CAAC,EAAE,MAAM,qBAAqB,CAAC;AAAA,EAE7D,MAAM,cAAuC;AAAA,IAC3C,OAAO;AAAA,IACP,OAAO,eAAe,OAAO,KAAK;AAAA,IAClC;AAAA,EACF;AAAA,EAEA,IAAI,OAAO,cAAc;AAAA,IACvB,YAAY,eAAe,OAAO;AAAA,EACpC;AAAA,EACA,IAAI,OAAO,eAAe,WAAW;AAAA,IACnC,YAAY,aAAa,OAAO;AAAA,EAClC;AAAA,EACA,IAAI,OAAO,iBAAiB,WAAW;AAAA,IACrC,YAAY,iBAAiB,OAAO;AAAA,EACtC;AAAA,EACA,IAAI,OAAO,kBAAkB;AAAA,IAC3B,YAAY,YAAY,EAAE,SAAS,OAAO,iBAAiB;AAAA,EAC7D;AAAA,EAEA,MAAM,WAAW,MAAM,qBAAqB,OAAO,EAAE,WAAW,QAAQ,cAAc;AAAA,IACpF,MAAM;AAAA,EACR,CAAC;AAAA,EAED,IAAI,CAAC,SAAS,IAAI;AAAA,IAChB,MAAM,YAAY,MAAM,SAAS,KAAK;AAAA,IACtC,MAAM,sBAAsB,SAAS,QAAQ,SAAS;AAAA,EACxD;AAAA,EAEA,MAAM,OAAQ,MAAM,SAAS,KAAK;AAAA,EAElC,IAAI,KAAK,OAAO;AAAA,IACd,oBAAoB,SAAS,WAAU,UAAU,OAAO,OAAO;AAAA,MAC7D,aAAa,KAAK,MAAM;AAAA,MACxB,cAAc,KAAK,MAAM;AAAA,MACzB,aAAa,KAAK,MAAM;AAAA,IAC1B,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,cAAc,iBAAiB,KAAK,MAAM;AAAA,EAGhD,IAAI,OAAO;AAAA,EACX,MAAM,cAAoC,CAAC;AAAA,EAE3C,WAAW,QAAQ,aAAa;AAAA,IAC9B,IAAI,KAAK,SAAS,WAAW;AAAA,MAC3B,WAAW,WAAW,KAAK,SAAS;AAAA,QAClC,IAAI,QAAQ,SAAS,eAAe;AAAA,UAClC,QAAQ,QAAQ;AAAA,UAChB,YAAY,KAAK,GAAG,QAAQ,WAAW;AAAA,QACzC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OAAO;AAAA,IACL,IAAI,KAAK;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ,KAAK;AAAA,EACf;AAAA;;ACrQF,mBAAS;AAMT,eAAe,iBAAiB,CAC9B,SACA,SACgD;AAAA,EAChD,MAAM,eAAe,WAAW,SAAS,2BAA2B,gBAAgB;AAAA,EACpF,MAAM,eAAe,WAAW,SAAS,2BAA2B,MAAM;AAAA,EAE1E,MAAM,QAAQ,QAAQ,SAAU;AAAA,EAChC,MAAM,QAAQ,QAAQ,SAAU;AAAA,EAChC,MAAM,UAAS,QAAQ,UAAU;AAAA,EACjC,MAAM,UAAU,MAAM,WAAW,aAAa,IAC1C,MAAM,MAAM,GAAG,EAAE,MAAM,CAAC,EAAE,KAAK,GAAG,IAClC,MAAM,WAAW,SAAS,IACxB,QACA;AAAA,EACN,MAAM,UAAU,SAAS,UAAU,SAAS,QAAQ;AAAA,EAEpD,IAAI;AAAA,IACF,MAAM,MAAM,MAAM,uBAAuB,OAAO,EAAE,OAAO,kBAAkB;AAAA,MACzE,SAAS;AAAA,WACH,YAAW,QAAQ,EAAE,QAAQ,aAAa,IAAI,CAAC;AAAA,MACrD;AAAA,MACA,MAAM;AAAA,QACJ,MAAM,QAAQ;AAAA,WACV,UAAU,EAAE,QAAQ,IAAI,CAAC;AAAA,WACzB,UAAU,EAAE,QAAQ,IAAI,CAAC;AAAA,MAC/B;AAAA,IACF,CAAC;AAAA,IAED,IAAI,CAAC,IAAI,IAAI;AAAA,MACX,MAAM,MAAM,MAAM,IAAI,KAAK;AAAA,MAC3B,MAAM,IAAI,MAAM,2BAA2B,IAAI,WAAW,KAAK;AAAA,IACjE;AAAA,IAEA,IAAI,CAAC,IAAI,MAAM;AAAA,MACb,MAAM,IAAI,MAAM,yCAAyC;AAAA,IAC3D;AAAA,IAEA,IAAI,CAAC,UAAU,GAAG;AAAA,MAChB,OAAO,MAAM,sBAAsB,IAAI,IAAI;AAAA,IAC7C;AAAA,IAEA,OAAO,IAAI;AAAA,IACX,OAAO,KAAK;AAAA,IACZ,MAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAAA,IAC/D,MAAM,IAAI,MAAM,kDAAkD,SAAS;AAAA;AAAA;;AC/C/E,mBAAS,uBAAQ;;;ACNjB;AAIO,SAAS,kBAAkB,CAAC,SAAwB;AAAA,EACzD,MAAM,UAAU,WAAW,OAAO;AAAA,EAClC,MAAM,SAAS,UAAU,OAAO,MAAM,YAAY,OAAO,IAAI,gBAAgB;AAAA,EAK7E,OAAO,aAAa;AAAA,IAClB,QAAS,UAAU;AAAA,IACnB;AAAA,EACF,CAAC;AAAA;;;ADSH,IAAM,uBAAwB,WAAU,aAAa;AACrD,IAAM,yBAA0B,WAAU,eAAe;AACzD,IAAM,wBAAwB,WAAU;AACxC,IAAM,wBAAwB,WAAU;AACxC,IAAM,uBAAwB,WAAU,aAAa;AACrD,IAAM,8BAA+B,WAAU,oBAC7C;AACF,IAAM,4BAA6B,WAAU,kBAAkB;AAiB/D,IAAM,4BAA2B;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AACA,IAAM,4BAA4B,CAAC,WAAW,YAAY;AAW1D,SAAS,gBAAgB,CAAC,QAA2C;AAAA,EACnE,MAAM,UAQF,CAAC,EAAE,MAAM,QAAQ,MAAM,OAAO,OAAO,CAAC;AAAA,EAE1C,WAAW,cAAc,OAAO,eAAe,CAAC,GAAG;AAAA,IACjD,QAAQ,KAAK;AAAA,MACX,MAAM;AAAA,MACN,MAAM,WAAW;AAAA,MACjB,WAAW,WAAW;AAAA,SAClB,WAAW,WAAW,EAAE,UAAU,WAAW,SAAS,IAAI,CAAC;AAAA,IACjE,CAAC;AAAA,EACH;AAAA,EAEA,OAAO;AAAA;AAGT,SAAS,iBAAgB,CAAC,WAA4B;AAAA,EACpD,MAAM,QAAQ,UAAU,YAAY;AAAA,EACpC,OAAO,0BAAyB,KAAK,CAAC,YAAY,MAAM,SAAS,OAAO,CAAC;AAAA;AAG3E,SAAS,qBAAqB,CAAC,WAA4B;AAAA,EACzD,MAAM,QAAQ,UAAU,YAAY;AAAA,EACpC,OAAO,CAAC,0BAA0B,KAAK,CAAC,WAAW,MAAM,WAAW,MAAM,CAAC;AAAA;AAY7E,SAAS,sBAAsB,CAAC,WAAkC;AAAA,EAChE,QAAQ;AAAA,SACD;AAAA,MACH,OAAO;AAAA,SACJ;AAAA,MACH,OAAO;AAAA;AAAA,MAEP,OAAO;AAAA;AAAA;AAIb,SAAS,mBAAmB,CAAC,SAAwB,WAAkC;AAAA,EACrF,QAAQ;AAAA,SACD;AAAA,MACH,OAAO,aAAa,OAAO;AAAA,SACxB;AAAA,MACH,OAAO,eAAe,OAAO;AAAA,SAC1B;AAAA,MACH,OAAO,cAAc,OAAO;AAAA,SACzB;AAAA,MACH,OAAO,cAAc,OAAO;AAAA,SACzB;AAAA,MACH,OAAO,aAAa,OAAO;AAAA,SACxB;AAAA,MACH,OAAO,wBAAwB,OAAO;AAAA,SACnC;AAAA,MACH,OAAO,sBAAsB,OAAO;AAAA;AAAA,MAEpC,OAAO,cAAc,OAAO;AAAA;AAAA;AAIlC,SAAS,mBAAmB,CAC1B,SACA,WACA,QACA;AAAA,EACA,MAAM,wBAAwB;AAAA,EAC9B,QAAQ,WAAW;AAAA,EACnB,MAAM,YAAY,OAAO,aAAa;AAAA,EAEtC,MAAM,SAAS,mBAAmB,OAAO;AAAA,EACzC,MAAM,YAAY,oBAAoB,SAAS,SAAS;AAAA,EACxD,MAAM,wBAAwB,yBAAyB,OAAO;AAAA,EAC9D,MAAM,eACH,sBAAsB,aAAa,UAAU,KAAK,IAC/C,iBAAiB,qBAAqB,IACtC;AAAA,EAON,MAAM,QAAQ,OAAO,KAAK,SAAS;AAAA,EAInC,MAAM,YAAY,kBAAiB,SAAS;AAAA,EAC5C,MAAM,gBACJ,CAAC,aACD,sBAAsB,SAAS,KAC/B,MAAM,QAAQ,OAAO,aAAa,KAClC,OAAO,cAAc,SAAS,IAC1B,OAAO,gBACP;AAAA,EAEN,MAAM,iBAAiB;AAAA,IACrB;AAAA,OACI,cACA,EAAE,UAAU,CAAC,EAAE,MAAM,QAAiB,SAAS,YAAY,CAAC,EAAE,IAC9D,EAAE,OAAe;AAAA,IACrB,QAAQ,QAAQ,UAAU,UAAU;AAAA,OAChC,gBAAgB,EAAE,cAAc,IAAI,CAAC;AAAA,IACzC,iBAAiB;AAAA,IACjB,wBAAwB;AAAA,MACtB,WAAW;AAAA,IACb;AAAA,EACF;AAAA,EAEA,OAAO,EAAE,gBAAgB,WAAW,WAAW,OAAO;AAAA;AAGxD,eAAe,qBAAqB,CAClC,SACA,WACA,QACoC;AAAA,EACpC,QAAQ,WAAW,WAAW,oBAAoB,SAAS,WAAW,MAAM;AAAA,EAE5E,SAAO,MAAM,wCAAwC,oBAAoB,WAAW;AAAA,EAEpF,IAAI,OAAO,QAAQ;AAAA,IACjB,SAAO,MACL,yGACF;AAAA,EACF;AAAA,EAEA,SAAO,IAAI,yBAAyB,oBAAoB,WAAW;AAAA,EACnE,SAAO,IAAI,MAAM;AAAA,EAEjB,MAAM,YAAY,kBAAiB,SAAS;AAAA,EAC5C,MAAM,QAGD,CAAC;AAAA,EACN,IAAI,QAAQ,UAAU,QAAQ;AAAA,IAC5B,MAAM,KAAK;AAAA,MACT,MAAM;AAAA,MACN,SAAS,CAAC,EAAE,MAAM,cAAc,MAAM,QAAQ,UAAU,OAAO,CAAC;AAAA,IAClE,CAAC;AAAA,EACH;AAAA,EACA,MAAM,KAAK;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,MAAM,cAAc,MAAM,OAAO,CAAC;AAAA,EAChD,CAAC;AAAA,EAED,MAAM,cAAuC;AAAA,IAC3C,OAAO;AAAA,IACP;AAAA,IACA,mBAAmB,OAAO,aAAa;AAAA,EACzC;AAAA,EACA,IAAI,CAAC,aAAa,OAAO,OAAO,gBAAgB,UAAU;AAAA,IACxD,YAAY,cAAc,OAAO;AAAA,EACnC;AAAA,EAEA,MAAM,WAAW,MAAM,qBAAqB,OAAO,EAAE,WAAW,QAAQ,cAAc;AAAA,IACpF,SAAS;AAAA,MACP,uBAAuB,uBAAuB,SAAS;AAAA,MACvD,sBAAsB;AAAA,IACxB;AAAA,IACA,MAAM;AAAA,EACR,CAAC;AAAA,EACD,MAAM,eAAe,MAAM,SAAS,KAAK;AAAA,EACzC,IAAI,OAA6B,CAAC;AAAA,EAClC,IAAI,cAAc;AAAA,IAChB,IAAI;AAAA,MACF,OAAO,KAAK,MAAM,YAAY;AAAA,MAC9B,OAAO,UAAU;AAAA,MACjB,SAAO,MACL,mDACE,oBAAoB,QAAQ,SAAS,UAAU,OAAO,QAAQ,GAElE;AAAA;AAAA,EAEJ;AAAA,EAEA,IAAI,CAAC,SAAS,IAAI;AAAA,IAChB,MAAM,YAAY,OAAO,SAAS,YAAY,OAAO,KAAK,QAAQ;AAAA,IAClE,MAAM,eACJ,OAAO,WAAW,YAAY,YAAY,UAAU,QAAQ,KAAK,IAC7D,UAAU,QAAQ,KAAK,IACvB,uBAAuB,SAAS;AAAA,IACtC,MAAM,eAAe,IAAI,MAAM,YAAY;AAAA,IAI3C,aAAa,SAAS,SAAS;AAAA,IAC/B,IAAI,WAAW;AAAA,MACb,aAAa,QAAQ;AAAA,IACvB;AAAA,IACA,MAAM;AAAA,EACR;AAAA,EAEA,IAAI,KAAK,OAAO;AAAA,IACd,oBAAoB,SAAS,WAAW,QAAQ;AAAA,MAC9C,aAAa,KAAK,MAAM,gBAAgB;AAAA,MACxC,cAAc,KAAK,MAAM,iBAAiB;AAAA,MAC1C,aAAa,KAAK,MAAM,gBAAgB;AAAA,IAC1C,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,OAAO,2BAA2B,IAAI;AAAA,EAC5C,IAAI,CAAC,KAAK,KAAK,GAAG;AAAA,IAChB,MAAM,IAAI,MAAM,yCAAyC;AAAA,EAC3D;AAAA,EAEA,OAAO;AAAA;AAGT,eAAsB,eAAe,CACnC,SACA,QACoC;AAAA,EACpC,OAAO,sBAAsB,SAAS,uBAAuB,MAAM;AAAA;AAGrE,eAAsB,cAAc,CAClC,SACA,QACoC;AAAA,EACpC,OAAO,sBAAsB,SAAS,sBAAsB,MAAM;AAAA;AAGpE,eAAsB,gBAAgB,CACpC,SACA,QACoC;AAAA,EACpC,OAAO,sBAAsB,SAAS,wBAAwB,MAAM;AAAA;AAGtE,eAAsB,eAAe,CACnC,SACA,QACoC;AAAA,EACpC,OAAO,sBAAsB,SAAS,uBAAuB,MAAM;AAAA;AAGrE,eAAsB,cAAc,CAClC,SACA,QACoC;AAAA,EACpC,OAAO,sBAAsB,SAAS,sBAAsB,MAAM;AAAA;AAGpE,eAAsB,qBAAqB,CACzC,SACA,QACoC;AAAA,EACpC,OAAO,sBAAsB,SAAS,6BAA6B,MAAM;AAAA;AAG3E,eAAsB,mBAAmB,CACvC,SACA,QACoC;AAAA,EACpC,OAAO,sBAAsB,SAAS,2BAA2B,MAAM;AAAA;;AE5TzE,mBAA6B;AAC7B;AAAA;AAAA;AAAA;AAKA;;;ACtBA;AAAA,oBACE;AAAA,mBACA;AAAA;AAAA,8BAEA;AAAA;;;ADyBF,eAAe,cAAc,GAAoB;AAAA,EAC/C,MAAM,KAAK,MAAa;AAAA,EACxB,MAAM,SAAS,MAAa;AAAA,EAC5B,MAAM,OAAO,GAAG,KAAK;AAAA,EACrB,MAAM,MAAM;AAAA,IACV,GAAG,SAAS;AAAA,IACZ,GAAG,SAAS;AAAA,IACZ,GAAG,KAAK;AAAA,IACR,KAAK,IAAI,SAAS;AAAA,IAClB,KAAK;AAAA,IACL,GAAG,SAAS;AAAA,EACd,EAAE,KAAK,GAAG;AAAA,EACV,OAAO,OAAO,WAAW,QAAQ,EAAE,OAAO,GAAG,EAAE,OAAO,KAAK;AAAA;AAG7D,SAAS,cAAc,GAAmB;AAAA,EACxC,IAAI,OAAO,YAAY;AAAA,IAAa,OAAO;AAAA,EAC3C,MAAM,MAAsC;AAAA,IAC1C,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,OAAO;AAAA,EACT;AAAA,EACA,OAAO,IAAI,QAAQ,aAAa;AAAA;AA6U3B,MAAM,yBAAyB,QAAQ;AAAA,SACrC,cAAc;AAAA,EACrB,wBAAwB;AAAA,EAEhB;AAAA,EACA,cAAuC;AAAA,EAE/C,WAAW,CAAC,SAAyB;AAAA,IACnC,MAAM,OAAO;AAAA,IACb,KAAK,SAAS,IAAI,gBAAe,qBAAqB,OAAO;AAAA;AAAA,cAGlD,MAAK,CAAC,SAA0C;AAAA,IAC3D,MAAM,UAAU,IAAI,iBAAiB,OAAO;AAAA,IAC5C,MAAM,QAAQ,WAAW;AAAA,IACzB,OAAO;AAAA;AAAA,OAGH,KAAI,GAAkB;AAAA,IAC1B,KAAK,cAAc;AAAA;AAAA,OAGP,WAAU,GAAkB;AAAA,IACxC,MAAM,UAAU,OACd,KAAK,QAAQ,WAAW,wBAAwB,KAAK,qBAAqB,OAC5E;AAAA,IACA,KAAK,OAAO,WAAW,OAAO;AAAA,IAQ9B,MAAM,cAAc,KAAK,QAAQ,WAAW,uBAAuB;AAAA,IACnE,IAAI,aAAa;AAAA,MACf,MAAM,MAAM,OAAO,WAAW;AAAA,MAC9B,KAAK,OAAO,UAAU,GAAG;AAAA,MAGzB,KAAK,cAAc;AAAA,QACjB,QAAQ;AAAA,QACR,QAAQ,OAAO,KAAK,QAAQ,WAAW,uBAAuB,KAAK,EAAE;AAAA,QACrE,gBAAgB,OACd,KAAK,QAAQ,WAAW,sBAAsB,KAC5C,KAAK,QAAQ,WAAW,6BAA6B,KACrD,EACJ;AAAA,QACA,iBAAiB,KAAK,IAAI;AAAA,MAC5B;AAAA,MACA,SAAO,KAAK,8CAA8C;AAAA,MAI1D,KAAK,eAAe,GAAG,EACpB,KAAK,CAAC,UAAU;AAAA,QACf,IAAI,CAAC,OAAO;AAAA,UACV,SAAO,KACL,kIACF;AAAA,QACF;AAAA,OACD,EACA,MAAM,MAAM,EAEZ;AAAA,MACH;AAAA,IACF;AAAA,IAGA,MAAM,UAAU,KAAK,QAAQ,WAAW,uBAAuB;AAAA,IAC/D,IAAI,YAAY,UAAU,YAAY,KAAK;AAAA,MACzC,IAAI;AAAA,QACF,MAAM,KAAK,uBAAuB;AAAA,QAClC,OAAO,KAAK;AAAA,QACZ,MAAM,MAAM,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAAA,QAC3D,SAAO,KAAK,8DAA8D,KAAK;AAAA,QAC/E,SAAO,KACL,yGACF;AAAA;AAAA,IAEJ,EAAO;AAAA,MACL,SAAO,KAAK,gEAAgE;AAAA;AAAA;AAAA,OAIlE,eAAc,CAAC,KAA+B;AAAA,IAC1D,IAAI;AAAA,MACF,MAAM,mBAAmB,IAAI,gBAAe,KAAK,OAAO,WAAW,GAAG,GAAG;AAAA,MACzE,MAAM,iBAAiB,IAAI,WAAW,EAAE,WAAW,IAAO,CAAC;AAAA,MAC3D,OAAO;AAAA,MACP,OAAO,KAAK;AAAA,MACZ,MAAM,MAAM,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAAA,MAC3D,SAAO,KAAK,0DAA0D,KAAK;AAAA,MAC3E,OAAO;AAAA;AAAA;AAAA,OAaL,uBAAsB,GAA8B;AAAA,IACxD,MAAM,WAAW,MAAM,eAAe;AAAA,IACtC,MAAM,WAAW,eAAe;AAAA,IAChC,MAAM,aAAa,QAAQ,IAAI,6BAA6B;AAAA,IAC5D,MAAM,KAAK,MAAa;AAAA,IAExB,SAAO,KAAK,+CAA+C,WAAW;AAAA,IAEtE,MAAM,WAAW,MAAM,KAAK,OAAO,oBAAwC,gBAAgB;AAAA,MACzF;AAAA,MACA;AAAA,MACA;AAAA,MACA,YAAY,GAAG,SAAS;AAAA,IAC1B,CAAC;AAAA,IAED,KAAK,cAAc;AAAA,MACjB,QAAQ,SAAS,KAAK;AAAA,MACtB,QAAQ,SAAS,KAAK;AAAA,MACtB,gBAAgB,SAAS,KAAK;AAAA,MAC9B,iBAAiB,KAAK,IAAI;AAAA,IAC5B;AAAA,IACA,KAAK,OAAO,UAAU,SAAS,KAAK,MAAM;AAAA,IAE1C,MAAM,SAAS,SAAS,KAAK,QAAQ,wBAAwB;AAAA,IAC7D,SAAO,KAAK,eAAe,qBAAqB,SAAS,KAAK,QAAQ,QAAQ,CAAC,IAAI;AAAA,IAEnF,OAAO,KAAK;AAAA;AAAA,EAGd,sBAAsB,CAAC,OAA0C;AAAA,IAC/D,MAAM,SAAS,MAAM,OAAO,KAAK;AAAA,IACjC,IAAI,CAAC,QAAQ;AAAA,MACX,MAAM,IAAI,MAAM,iCAAiC;AAAA,IACnD;AAAA,IAEA,KAAK,OAAO,UAAU,MAAM;AAAA,IAC5B,KAAK,cAAc;AAAA,MACjB;AAAA,MACA,QAAQ,MAAM,UAAU;AAAA,MACxB,gBAAgB,MAAM,kBAAkB;AAAA,MACxC,iBAAiB,KAAK,IAAI;AAAA,IAC5B;AAAA,IAEA,SAAO,KAAK,wCAAwC;AAAA,IACpD,OAAO,KAAK;AAAA;AAAA,EAGd,SAAS,GAAS;AAAA,IAChB,KAAK,cAAc;AAAA,IACnB,KAAK,OAAO,UAAU,SAAS;AAAA;AAAA,EAGjC,eAAe,GAAY;AAAA,IACzB,OAAO,KAAK,gBAAgB;AAAA;AAAA,EAE9B,cAAc,GAA4B;AAAA,IACxC,OAAO,KAAK;AAAA;AAAA,EAEd,SAAS,GAAuB;AAAA,IAC9B,OAAO,KAAK,aAAa,UAAU,KAAK,OAAO,UAAU;AAAA;AAAA,EAE3D,SAAS,GAAmB;AAAA,IAC1B,OAAO,KAAK;AAAA;AAAA,EAEd,SAAS,GAAuB;AAAA,IAC9B,OAAO,KAAK,aAAa;AAAA;AAAA,EAE3B,iBAAiB,GAAuB;AAAA,IACtC,OAAO,KAAK,aAAa;AAAA;AAE7B;;;AE5iBA,mBAA6B,qBAAQ;AAiB9B,MAAM,2BAA2B,SAAQ;AAAA,SACvC,cAAc;AAAA,EACrB,wBAAwB;AAAA,EAEhB;AAAA,EACA,cAA4C,IAAI;AAAA,EACvC,eAAe,qBAAqB,OAAO;AAAA,EAC3C,mBAAmB,qBAAqB,OAAO;AAAA,cAEnD,MAAK,CAAC,SAA0C;AAAA,IAC3D,MAAM,UAAU,IAAI,mBAAmB,OAAO;AAAA,IAC9C,MAAM,QAAQ,WAAW;AAAA,IACzB,OAAO;AAAA;AAAA,OAGH,KAAI,GAAkB;AAAA,IAC1B,cAAc,UAAU,KAAK,aAAa;AAAA,MACxC,cAAc,MAAM,KAAK;AAAA,IAC3B;AAAA,IACA,KAAK,YAAY,MAAM;AAAA,IACvB,SAAO,KAAK,+BAA+B;AAAA;AAAA,OAG/B,WAAU,GAAkB;AAAA,IACxC,MAAM,OAAO,KAAK,QAAQ,WAAW,YAAY;AAAA,IACjD,IAAI,CAAC,MAAM;AAAA,MACT,SAAO,MAAM,8CAA8C;AAAA,MAC3D;AAAA,IACF;AAAA,IACA,KAAK,cAAc;AAAA,IACnB,SAAO,KAAK,mCAAmC;AAAA;AAAA,OAK3C,eAAc,CAClB,aACA,eAA6B,UAC7B,UACwB;AAAA,IACxB,MAAM,SAAS,KAAK,YAAY,UAAU;AAAA,IAC1C,MAAM,WAAW,MAAM,OAAO,KAC5B,gBAAgB,wBAChB,EAAE,cAAc,SAAS,CAC3B;AAAA,IAEA,SAAO,KACL,yBAAyB,uCAAuC,mBAAmB,SAAS,KAAK,YAAY,YAAY,SAAS,KAAK,SAAS,IAClJ;AAAA,IAGA,MAAM,YAAY,KAAK,YAAY,IAAI,WAAW;AAAA,IAClD,IAAI,WAAW;AAAA,MACb,UAAU,eAAe,KAAK,IAAI;AAAA,IACpC;AAAA,IAEA,OAAO,SAAS;AAAA;AAAA,OAGZ,cAAa,CAAC,aAA+C;AAAA,IACjE,MAAM,SAAS,KAAK,YAAY,UAAU;AAAA,IAC1C,MAAM,WAAW,MAAM,OAAO,IAC5B,gBAAgB,uBAClB;AAAA,IACA,OAAO,SAAS;AAAA;AAAA,OAGZ,gBAAe,CAAC,aAAqB,YAAmC;AAAA,IAC5E,MAAM,SAAS,KAAK,YAAY,UAAU;AAAA,IAE1C,MAAM,OAAO,KAA8B,gBAAgB,uBAAuB;AAAA,MAChF;AAAA,IACF,CAAC;AAAA,IAED,SAAO,KAAK,mCAAmC,4BAA4B,aAAa;AAAA;AAAA,OAGpF,kBAAiB,CAAC,aAAoD;AAAA,IAC1E,MAAM,YAAY,MAAM,KAAK,cAAc,WAAW;AAAA,IACtD,IAAI,UAAU,WAAW;AAAA,MAAG,OAAO;AAAA,IAGnC,UAAU,KAAK,CAAC,GAAG,MAAM,IAAI,KAAK,EAAE,UAAU,EAAE,QAAQ,IAAI,IAAI,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC;AAAA,IAC5F,OAAO,UAAU;AAAA;AAAA,EAKnB,kBAAkB,CAAC,aAAqB,YAA2B;AAAA,IAEjE,IAAI,KAAK,YAAY,IAAI,WAAW,GAAG;AAAA,MACrC,SAAO,MAAM,mDAAmD,aAAa;AAAA,MAC7E;AAAA,IACF;AAAA,IAEA,MAAM,WAAW,cAAc,KAAK;AAAA,IAEpC,MAAM,QAAQ,YAAY,MAAM;AAAA,MAC9B,SAAO,MAAM,mDAAmD,aAAa;AAAA,MAC7E,KAAK,eAAe,aAAa,QAAQ;AAAA,QACvC,SAAS;AAAA,QACT,qBAAqB;AAAA,MACvB,CAAC,EACE,KAAK,MAAM,KAAK,eAAe,WAAW,CAAC,EAC3C,MAAM,CAAC,QAAe;AAAA,QACrB,SAAO,MAAM,wCAAwC,gBAAgB,IAAI,SAAS;AAAA,OACnF;AAAA,OACF,QAAQ;AAAA,IAEX,KAAK,YAAY,IAAI,aAAa;AAAA,MAChC;AAAA,MACA;AAAA,MACA,cAAc;AAAA,IAChB,CAAC;AAAA,IAED,SAAO,KACL,2CAA2C,qBAAqB,KAAK,MAAM,WAAW,KAAM,WAC9F;AAAA;AAAA,EAGF,gBAAgB,CAAC,aAA2B;AAAA,IAC1C,MAAM,QAAQ,KAAK,YAAY,IAAI,WAAW;AAAA,IAC9C,IAAI,CAAC;AAAA,MAAO;AAAA,IAEZ,cAAc,MAAM,KAAK;AAAA,IACzB,KAAK,YAAY,OAAO,WAAW;AAAA,IACnC,SAAO,KAAK,2CAA2C,aAAa;AAAA;AAAA,OAOhE,0BAAyB,CAAC,aAA6C;AAAA,IAC3E,SAAO,KAAK,oDAAoD,aAAa;AAAA,IAC7E,OAAO,KAAK,eAAe,aAAa,gBAAgB;AAAA,MACtD,SAAS;AAAA,MACT,WAAW,IAAI,KAAK,EAAE,YAAY;AAAA,IACpC,CAAC;AAAA;AAAA,OASW,eAAc,CAAC,aAAoC;AAAA,IAC/D,MAAM,YAAY,MAAM,KAAK,cAAc,WAAW;AAAA,IAEtD,MAAM,gBAAgB,UACnB,OAAO,CAAC,MAAM,EAAE,iBAAiB,MAAM,EACvC,KAAK,CAAC,GAAG,MAAM,IAAI,KAAK,EAAE,UAAU,EAAE,QAAQ,IAAI,IAAI,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC;AAAA,IAErF,MAAM,SAAS,cAAc,MAAM,KAAK,YAAY;AAAA,IACpD,IAAI,OAAO,WAAW;AAAA,MAAG;AAAA,IAEzB,MAAM,SAAS,KAAK,YAAY,UAAU;AAAA,IAC1C,WAAW,YAAY,QAAQ;AAAA,MAC7B,MAAM,OAAO,OAAO,gBAAgB,yBAAyB,SAAS,IAAI;AAAA,MAC1E,SAAO,MAAM,0CAA0C,SAAS,UAAU,aAAa;AAAA,IACzF;AAAA,IAEA,SAAO,KAAK,wBAAwB,OAAO,mCAAmC,aAAa;AAAA;AAAA,EAK7F,qBAAqB,CAAC,aAA8B;AAAA,IAClD,OAAO,KAAK,YAAY,IAAI,WAAW;AAAA;AAAA,EAGzC,iBAAiB,CAAC,aAAoC;AAAA,IACpD,OAAO,KAAK,YAAY,IAAI,WAAW,GAAG,gBAAgB;AAAA;AAE9D;AAEA,SAAS,WAAW,CAAC,OAAuB;AAAA,EAC1C,IAAI,QAAQ;AAAA,IAAM,OAAO,GAAG;AAAA,EAC5B,IAAI,QAAQ,OAAO;AAAA,IAAM,OAAO,IAAI,QAAQ,MAAM,QAAQ,CAAC;AAAA,EAC3D,IAAI,QAAQ,OAAO,OAAO;AAAA,IAAM,OAAO,IAAI,SAAS,OAAO,OAAO,QAAQ,CAAC;AAAA,EAC3E,OAAO,IAAI,SAAS,OAAO,OAAO,OAAO,QAAQ,CAAC;AAAA;;;AC7LpD,mBAA6B,qBAAQ;AAerC,SAAS,OAAO,GAAmB;AAAA,EACjC,IAAI,OAAO,YAAY,aAAa;AAAA,IAClC,OAAO,CAAC;AAAA,EACV;AAAA,EACA,OAAO,QAAQ;AAAA;AAGjB,SAAS,WAAW,CAAC,SAAoC,KAA4B;AAAA,EACnF,IAAI,WAAW,OAAO,QAAQ,eAAe,YAAY;AAAA,IACvD,MAAM,QAAQ,QAAQ,WAAW,GAAG;AAAA,IACpC,IAAI,OAAO,UAAU,YAAY,MAAM,SAAS,GAAG;AAAA,MACjD,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,MAAM,UAAU,QAAQ,EAAE;AAAA,EAC1B,IAAI,OAAO,YAAY,YAAY,QAAQ,SAAS,GAAG;AAAA,IACrD,OAAO;AAAA,EACT;AAAA,EACA,OAAO;AAAA;AAGT,SAAS,kBAAiB,CAAC,OAAuB;AAAA,EAChD,IAAI,MAAM,MAAM;AAAA,EAChB,OAAO,MAAM,KAAK,MAAM,WAAW,MAAM,CAAC,MAAM,IAAM;AAAA,IACpD,OAAO;AAAA,EACT;AAAA,EACA,OAAO,QAAQ,MAAM,SAAS,QAAQ,MAAM,MAAM,GAAG,GAAG;AAAA;AAAA;AAGnD,MAAM,kCAAkC,SAAyC;AAAA,SAC/E,cAAc;AAAA,EACrB,wBACE;AAAA,cAEW,MAAK,CAAC,SAA0C;AAAA,IAC3D,MAAM,UAAU,IAAI,0BAA0B,OAAO;AAAA,IACrD,MAAM,SAAS,YAAY,SAAS,oBAAoB;AAAA,IACxD,MAAM,cAAc,YAAY,SAAS,0BAA0B;AAAA,IACnE,IAAI,QAAQ;AAAA,MACV,SAAO,KACL,oDAAoD,uBAAuB,eAAe,YAC5F;AAAA,IACF,EAAO;AAAA,MACL,SAAO,MACL,uGACF;AAAA;AAAA,IAEF,OAAO;AAAA;AAAA,OAGH,KAAI,GAAkB;AAAA,EAI5B,iBAAiB,GAAW;AAAA,IAC1B,MAAM,SAAS,YAAY,KAAK,SAAS,oBAAoB;AAAA,IAC7D,IAAI,CAAC,QAAQ;AAAA,MACX,MAAM,IAAI,MACR,oFACF;AAAA,IACF;AAAA,IACA,OAAO,mBAAkB,MAAM;AAAA;AAAA,EAGjC,UAAU,GAAW;AAAA,IACnB,OAAO,GAAG,KAAK,kBAAkB;AAAA;AAAA,EAGnC,oBAAoB,GAAW;AAAA,IAC7B,OAAO,GAAG,KAAK,kBAAkB;AAAA;AAAA,EAGnC,sBAAsB,GAAkB;AAAA,IACtC,OAAO,YAAY,KAAK,SAAS,0BAA0B;AAAA;AAE/D;;;AClGA,mBAA6B,qBAAQ;AACrC;AA8BO,MAAM,2BAA2B,SAAQ;AAAA,SACvC,cAAc;AAAA,EACrB,wBAAwB;AAAA,EAEhB;AAAA,EACS,eAAe,qBAAqB;AAAA,EAC7C,cAA6C,IAAI;AAAA,cAE5C,MAAK,CAAC,SAA0C;AAAA,IAC3D,MAAM,UAAU,IAAI,mBAAmB,OAAO;AAAA,IAC9C,MAAM,QAAQ,WAAW;AAAA,IACzB,OAAO;AAAA;AAAA,OAGH,KAAI,GAAkB;AAAA,IAC1B,YAAY,gBAAgB,KAAK,aAAa;AAAA,MAC5C,MAAM,KAAK,WAAW,WAAW;AAAA,IACnC;AAAA,IACA,SAAO,KAAK,+BAA+B;AAAA;AAAA,OAG/B,WAAU,GAAkB;AAAA,IACxC,MAAM,OAAO,KAAK,QAAQ,WAAW,YAAY;AAAA,IACjD,IAAI,CAAC,MAAM;AAAA,MACT,SAAO,MAAM,8CAA8C;AAAA,MAC3D;AAAA,IACF;AAAA,IACA,KAAK,cAAc;AAAA,IACnB,SAAO,KAAK,mCAAmC;AAAA;AAAA,OAK3C,QAAO,CAAC,aAAoC;AAAA,IAChD,MAAM,WAAW,KAAK,YAAY,IAAI,WAAW;AAAA,IACjD,IAAI,UAAU;AAAA,MACZ,IAAI,SAAS,UAAU,eAAe,SAAS,UAAU,cAAc;AAAA,QACrE,SAAO,MAAM,iDAAiD,aAAa;AAAA,QAC3E;AAAA,MACF;AAAA,IACF;AAAA,IAEA,MAAM,KAAK,oBAAoB,aAAa,CAAC;AAAA;AAAA,OAGzC,WAAU,CAAC,aAAoC;AAAA,IACnD,MAAM,OAAO,KAAK,YAAY,IAAI,WAAW;AAAA,IAC7C,IAAI,CAAC;AAAA,MAAM;AAAA,IAEX,IAAI,KAAK;AAAA,MAAgB,cAAc,KAAK,cAAc;AAAA,IAC1D,IAAI,KAAK;AAAA,MAAgB,aAAa,KAAK,cAAc;AAAA,IAGzD,cAAc,YAAY,KAAK,iBAAiB;AAAA,MAC9C,aAAa,QAAQ,OAAO;AAAA,MAC5B,QAAQ,OAAO,IAAI,MAAM,qBAAqB,CAAC;AAAA,IACjD;AAAA,IACA,KAAK,gBAAgB,MAAM;AAAA,IAE3B,IAAI,KAAK,GAAG,eAAe,UAAU,QAAQ,KAAK,GAAG,eAAe,UAAU,YAAY;AAAA,MACxF,KAAK,GAAG,MAAM,MAAM,mBAAmB;AAAA,IACzC;AAAA,IAEA,KAAK,YAAY,OAAO,WAAW;AAAA,IACnC,SAAO,KAAK,mCAAmC,aAAa;AAAA;AAAA,OAGhD,oBAAmB,CAAC,aAAqB,mBAA0C;AAAA,IAC/F,MAAM,SAAS,KAAK,YAAY,UAAU;AAAA,IAC1C,MAAM,SAAS,KAAK,YAAY,UAAU;AAAA,IAC1C,MAAM,QAAQ,OAAO,WAAW,iBAAiB,aAAa;AAAA,IAG9D,MAAM,UAAU,SAAS,GAAG,eAAe,mBAAmB,MAAM,MAAM;AAAA,IAE1E,MAAM,OAAyB;AAAA,MAC7B,IAAI,IAAI,UAAU,OAAO;AAAA,MACzB,OAAO;AAAA,MACP,aAAa;AAAA,MACb,eAAe;AAAA,MACf;AAAA,MACA,gBAAgB;AAAA,MAChB,gBAAgB;AAAA,MAChB,UAAU,KAAK,YAAY,IAAI,WAAW,GAAG,YAAY,IAAI;AAAA,MAC7D,iBAAiB,IAAI;AAAA,MACrB,eAAe;AAAA,IACjB;AAAA,IAEA,KAAK,YAAY,IAAI,aAAa,IAAI;AAAA,IAEtC,KAAK,GAAG,iBAAiB,QAAQ,MAAM;AAAA,MACrC,KAAK,QAAQ;AAAA,MACb,KAAK,cAAc,KAAK,IAAI;AAAA,MAC5B,KAAK,oBAAoB;AAAA,MACzB,SAAO,KAAK,oCAAoC,aAAa;AAAA,MAG7D,KAAK,iBAAiB,YAAY,MAAM;AAAA,QACtC,KAAK,cAAc,WAAW;AAAA,SAC7B,KAAK,aAAa,mBAAmB;AAAA,KACzC;AAAA,IAED,KAAK,GAAG,iBAAiB,WAAW,CAAC,UAAU;AAAA,MAC7C,MAAM,MAAM,MAAM;AAAA,MAClB,MAAM,OACJ,OAAO,QAAQ,WAAW,MAAM,eAAe,SAAS,IAAI,SAAS,OAAO,IAAI,OAAO,GAAG;AAAA,MAC5F,MAAM,UAAU,KAAK,MAAM,IAAI;AAAA,MAG/B,IAAI,QAAQ,WAAW,iBAAiB;AAAA,QACtC,KAAK,gBAAgB,KAAK,IAAI;AAAA,QAC9B;AAAA,MACF;AAAA,MAGA,IAAI,QAAQ,OAAO,aAAa,CAAC,QAAQ,QAAQ;AAAA,QAC/C,MAAM,UAAU,KAAK,gBAAgB,IAAI,QAAQ,EAAE;AAAA,QACnD,IAAI,SAAS;AAAA,UACX,aAAa,QAAQ,OAAO;AAAA,UAC5B,KAAK,gBAAgB,OAAO,QAAQ,EAAE;AAAA,UACtC,IAAI,QAAQ,OAAO;AAAA,YACjB,QAAQ,OAAO,IAAI,MAAM,QAAQ,MAAM,OAAO,CAAC;AAAA,UACjD,EAAO;AAAA,YACL,QAAQ,QAAQ,QAAQ,MAAM;AAAA;AAAA,UAEhC;AAAA,QACF;AAAA,MACF;AAAA,MAGA,WAAW,WAAW,KAAK,UAAU;AAAA,QACnC,QAAQ,OAAO;AAAA,MACjB;AAAA,KACD;AAAA,IAED,KAAK,GAAG,iBAAiB,SAAS,CAAC,UAAsB;AAAA,MACvD,KAAK,QAAQ;AAAA,MACb,IAAI,KAAK;AAAA,QAAgB,cAAc,KAAK,cAAc;AAAA,MAG1D,IAAI,MAAM,SAAS,MAAM;AAAA,QACvB,SAAO,KAAK,uCAAuC,aAAa;AAAA,QAChE;AAAA,MACF;AAAA,MAEA,SAAO,KACL,oCAAoC,qBAAqB,MAAM,gBAAgB,MAAM,SACvF;AAAA,MACA,KAAK,kBAAkB,aAAa,KAAK,oBAAoB,CAAC;AAAA,KAC/D;AAAA,IAED,KAAK,GAAG,iBAAiB,SAAS,MAAM;AAAA,MACtC,SAAO,MAAM,qCAAqC,aAAa;AAAA,KAChE;AAAA;AAAA,EAGK,iBAAiB,CAAC,aAAqB,SAAuB;AAAA,IACpE,IAAI,UAAU,KAAK,aAAa,sBAAsB;AAAA,MACpD,SAAO,MACL,yCAAyC,KAAK,aAAa,qCAAqC,aAClG;AAAA,MACA,KAAK,YAAY,OAAO,WAAW;AAAA,MACnC;AAAA,IACF;AAAA,IAGA,MAAM,OAAO,KAAK,aAAa;AAAA,IAC/B,MAAM,QAAQ,KAAK,IAAI,OAAO,KAAK,KAAK,IAAI,SAAS,CAAC,GAAG,MAAO;AAAA,IAChE,MAAM,SAAS,KAAK,MAAM,KAAK,OAAO,IAAI,IAAI;AAAA,IAE9C,SAAO,KACL,iCAAiC,kBAAkB,KAAK,OAAO,QAAQ,UAAU,IAAI,eAAe,UACtG;AAAA,IAEA,MAAM,OAAO,KAAK,YAAY,IAAI,WAAW;AAAA,IAC7C,IAAI,MAAM;AAAA,MACR,KAAK,QAAQ;AAAA,MACb,KAAK,iBAAiB,WAAW,MAAM;AAAA,QACrC,KAAK,oBAAoB,aAAa,OAAO;AAAA,SAC5C,QAAQ,MAAM;AAAA,IACnB;AAAA;AAAA,EAGM,aAAa,CAAC,aAA2B;AAAA,IAC/C,MAAM,OAAO,KAAK,YAAY,IAAI,WAAW;AAAA,IAC7C,IAAI,CAAC,QAAQ,KAAK,UAAU;AAAA,MAAa;AAAA,IAEzC,MAAM,UAAyB;AAAA,MAC7B,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,QAAQ,EAAE,WAAW,KAAK,IAAI,EAAE;AAAA,IAClC;AAAA,IAEA,KAAK,GAAG,KAAK,KAAK,UAAU,OAAO,CAAC;AAAA;AAAA,OAQhC,YAAW,CACf,aACA,QACA,QACA,YAAY,OACM;AAAA,IAClB,MAAM,OAAO,KAAK,YAAY,IAAI,WAAW;AAAA,IAC7C,IAAI,CAAC,QAAQ,KAAK,UAAU,aAAa;AAAA,MACvC,MAAM,IAAI,MAAM,8BAA8B,aAAa;AAAA,IAC7D;AAAA,IAEA,MAAM,KAAK,KAAK;AAAA,IAChB,MAAM,UAAyB;AAAA,MAC7B,SAAS;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IAEA,OAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AAAA,MACtC,MAAM,UAAU,WAAW,MAAM;AAAA,QAC/B,KAAK,gBAAgB,OAAO,EAAE;AAAA,QAC9B,OAAO,IAAI,MAAM,WAAW,0BAA0B,aAAa,CAAC;AAAA,SACnE,SAAS;AAAA,MAEZ,KAAK,gBAAgB,IAAI,IAAI,EAAE,SAAS,QAAQ,QAAQ,CAAC;AAAA,MACzD,KAAK,GAAG,KAAK,KAAK,UAAU,OAAO,CAAC;AAAA,KACrC;AAAA;AAAA,EAMH,gBAAgB,CAAC,aAAqB,QAAgB,QAAuC;AAAA,IAC3F,MAAM,OAAO,KAAK,YAAY,IAAI,WAAW;AAAA,IAC7C,IAAI,CAAC,QAAQ,KAAK,UAAU,aAAa;AAAA,MACvC,MAAM,IAAI,MAAM,8BAA8B,aAAa;AAAA,IAC7D;AAAA,IAEA,MAAM,UAAyB;AAAA,MAC7B,SAAS;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,IAEA,KAAK,GAAG,KAAK,KAAK,UAAU,OAAO,CAAC;AAAA;AAAA,OAMhC,gBAAe,CACnB,aACA,MACA,QACA,UAC+D;AAAA,IAC/D,MAAM,SAAS,MAAM,KAAK,YAAY,aAAa,gBAAgB;AAAA,MACjE;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,IACD,OAAO;AAAA;AAAA,OAMH,eAAc,CAAC,aAAuD;AAAA,IAC1E,MAAM,SAAS,MAAM,KAAK,YAAY,aAAa,cAAc,CAAC,CAAC;AAAA,IACnE,OAAO;AAAA;AAAA,OAMH,kBAAiB,CAAC,aAAqB,QAAgD;AAAA,IAC3F,MAAM,KAAK,YAAY,aAAa,iBAAiB,MAAM;AAAA;AAAA,EAK7D,SAAS,CAAC,aAAqB,SAA2C;AAAA,IACxE,IAAI,OAAO,KAAK,YAAY,IAAI,WAAW;AAAA,IAC3C,IAAI,CAAC,MAAM;AAAA,MAET,OAAO;AAAA,QACL,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,aAAa;AAAA,QACb,eAAe;AAAA,QACf,mBAAmB;AAAA,QACnB,gBAAgB;AAAA,QAChB,gBAAgB;AAAA,QAChB,UAAU,IAAI;AAAA,QACd,iBAAiB,IAAI;AAAA,QACrB,eAAe;AAAA,MACjB;AAAA,MACA,KAAK,YAAY,IAAI,aAAa,IAAI;AAAA,IACxC;AAAA,IAEA,KAAK,SAAS,IAAI,OAAO;AAAA,IAGzB,OAAO,MAAM;AAAA,MACX,KAAK,SAAS,OAAO,OAAO;AAAA;AAAA;AAAA,EAMhC,kBAAkB,CAAC,aAA4C;AAAA,IAC7D,OAAO,KAAK,YAAY,IAAI,WAAW,GAAG,SAAS;AAAA;AAAA,EAGrD,iBAAiB,CAAC,aAA8C;AAAA,IAC9D,MAAM,OAAO,KAAK,YAAY,IAAI,WAAW;AAAA,IAC7C,IAAI,CAAC;AAAA,MAAM,OAAO;AAAA,IAElB,OAAO;AAAA,MACL;AAAA,MACA,OAAO,KAAK;AAAA,MACZ,aAAa,KAAK;AAAA,MAClB,eAAe,KAAK;AAAA,MACpB,mBAAmB,KAAK;AAAA,IAC1B;AAAA;AAAA,EAGF,wBAAwB,GAAa;AAAA,IACnC,MAAM,MAAgB,CAAC;AAAA,IACvB,YAAY,IAAI,SAAS,KAAK,aAAa;AAAA,MACzC,IAAI,KAAK,UAAU;AAAA,QAAa,IAAI,KAAK,EAAE;AAAA,IAC7C;AAAA,IACA,OAAO;AAAA;AAEX;;;AChXA,mBAA6B,qBAAQ;AAqB9B,MAAM,8BAA8B,SAAQ;AAAA,SAC1C,cAAc;AAAA,EACrB,wBAAwB;AAAA,EAEhB;AAAA,EACS,oBAAoB,qBAAqB;AAAA,EAClD,UAAyC,IAAI;AAAA,cAExC,MAAK,CAAC,SAA0C;AAAA,IAC3D,MAAM,UAAU,IAAI,sBAAsB,OAAO;AAAA,IACjD,MAAM,QAAQ,WAAW;AAAA,IACzB,OAAO;AAAA;AAAA,OAGH,KAAI,GAAkB;AAAA,IAC1B,cAAc,YAAY,KAAK,SAAS;AAAA,MACtC,IAAI,QAAQ;AAAA,QAAc,aAAa,QAAQ,YAAY;AAAA,MAC3D,IAAI,QAAQ;AAAA,QAAa,cAAc,QAAQ,WAAW;AAAA,IAC5D;AAAA,IACA,KAAK,QAAQ,MAAM;AAAA;AAAA,OAGP,WAAU,GAAkB;AAAA,IAExC,MAAM,OAAO,KAAK,QAAQ,WAAW,YAAY;AAAA,IACjD,IAAI,CAAC,MAAM;AAAA,MACT,SAAO,MACL,iFACF;AAAA,MACA;AAAA,IACF;AAAA,IACA,KAAK,cAAc;AAAA,IAGnB,IAAI,KAAK,YAAY,gBAAgB,GAAG;AAAA,MACtC,MAAM,aAAa,MAAM,KAAK,eAAe;AAAA,MAC7C,WAAW,aAAa,YAAY;AAAA,QAClC,KAAK,QAAQ,IAAI,UAAU,IAAI;AAAA,UAC7B;AAAA,UACA,cAAc;AAAA,UACd,aAAa;AAAA,QACf,CAAC;AAAA,QAGD,IACE,UAAU,WAAW,aACrB,UAAU,WAAW,cACrB,UAAU,WAAW,aACrB;AAAA,UACA,KAAK,aAAa,UAAU,EAAE;AAAA,QAChC;AAAA,QAGA,IAAI,UAAU,WAAW,WAAW;AAAA,UAClC,KAAK,sBAAsB,UAAU,EAAE;AAAA,QACzC;AAAA,MACF;AAAA,MACA,SAAO,KAAK,2BAA2B,WAAW,8BAA8B;AAAA,IAClF;AAAA;AAAA,EAGM,SAAS,GAAmB;AAAA,IAClC,OAAO,KAAK,YAAY,UAAU;AAAA;AAAA,OAK9B,gBAAe,CAAC,SAAmE;AAAA,IACvF,MAAM,SAAS,KAAK,UAAU;AAAA,IAC9B,MAAM,WAAW,KAAK;AAAA,IAEtB,MAAM,UAAmC;AAAA,MACvC,MAAM,QAAQ;AAAA,MACd,cAAc,QAAQ;AAAA,MACtB,aAAa,QAAQ;AAAA,MACrB,MAAM,QAAQ,QAAQ,SAAS;AAAA,MAC/B,eAAe,QAAQ,iBAAiB;AAAA,MACxC,KAAK,QAAQ,OAAO,SAAS;AAAA,MAC7B,QAAQ,QAAQ,UAAU,SAAS;AAAA,MACnC,kBAAkB,QAAQ,oBAAoB,CAAC;AAAA,MAC/C,mBAAmB,QAAQ,qBAAqB;AAAA,MAChD,eAAe,QAAQ;AAAA,MACvB,oBAAoB,QAAQ;AAAA,MAC5B,WAAW,QAAQ;AAAA,MACnB,cAAc,QAAQ,gBAAgB,SAAS;AAAA,IACjD;AAAA,IAEA,MAAM,WAAW,MAAM,OAAO,KAA8B,eAAe,OAAO;AAAA,IAGlF,KAAK,QAAQ,IAAI,SAAS,KAAK,IAAI;AAAA,MACjC,WAAW,SAAS;AAAA,MACpB,cAAc;AAAA,MACd,aAAa;AAAA,IACf,CAAC;AAAA,IAGD,KAAK,aAAa,SAAS,KAAK,EAAE;AAAA,IAElC,SAAO,KACL,uCAAuC,QAAQ,aAAa,SAAS,KAAK,aAAa,SAAS,YAClG;AAAA,IAEA,OAAO;AAAA;AAAA,OAGH,eAAc,GAA8B;AAAA,IAChD,MAAM,SAAS,KAAK,UAAU;AAAA,IAC9B,MAAM,WAAW,MAAM,OAAO,IAA2B,aAAa;AAAA,IACtE,OAAO,SAAS;AAAA;AAAA,OAGZ,aAAY,CAAC,aAA8C;AAAA,IAC/D,MAAM,SAAS,KAAK,UAAU;AAAA,IAC9B,MAAM,WAAW,MAAM,OAAO,IAA0B,eAAe,aAAa;AAAA,IAGpF,MAAM,WAAW,KAAK,QAAQ,IAAI,WAAW;AAAA,IAC7C,IAAI,UAAU;AAAA,MACZ,SAAS,YAAY,SAAS;AAAA,IAChC;AAAA,IAEA,OAAO,SAAS;AAAA;AAAA,OAGZ,gBAAe,CAAC,aAAoC;AAAA,IACxD,MAAM,SAAS,KAAK,UAAU;AAAA,IAC9B,MAAM,OAAO,OAAgC,eAAe,aAAa;AAAA,IAGzE,MAAM,UAAU,KAAK,QAAQ,IAAI,WAAW;AAAA,IAC5C,IAAI,SAAS;AAAA,MACX,IAAI,QAAQ;AAAA,QAAc,aAAa,QAAQ,YAAY;AAAA,MAC3D,IAAI,QAAQ;AAAA,QAAa,cAAc,QAAQ,WAAW;AAAA,MAC1D,KAAK,QAAQ,OAAO,WAAW;AAAA,IACjC;AAAA,IAEA,SAAO,KAAK,sCAAsC,aAAa;AAAA;AAAA,EASzD,YAAY,CAAC,aAA2B;AAAA,IAC9C,MAAM,UAAU,KAAK,QAAQ,IAAI,WAAW;AAAA,IAC5C,IAAI,CAAC;AAAA,MAAS;AAAA,IAEd,IAAI,UAAU;AAAA,IACd,MAAM,cAAc;AAAA,IACpB,MAAM,eAAe;AAAA,IACrB,MAAM,cAAc;AAAA,IAEpB,MAAM,OAAO,YAAY;AAAA,MACvB;AAAA,MACA,IAAI,UAAU,aAAa;AAAA,QACzB,SAAO,MACL,oDAAoD,qBAAqB,sBAC3E;AAAA,QACA;AAAA,MACF;AAAA,MAEA,MAAM,YAAY,MAAM,KAAK,aAAa,WAAW;AAAA,MACrD,MAAM,SAAS,UAAU;AAAA,MAEzB,SAAO,MAAM,0BAA0B,eAAe,uBAAuB,QAAQ;AAAA,MAErF,IAAI,WAAW,WAAW;AAAA,QACxB,SAAO,KACL,8BAA8B,iCAAiC,UAAU,mBAC3E;AAAA,QACA,KAAK,sBAAsB,WAAW;AAAA,QACtC;AAAA,MACF;AAAA,MAEA,IAAI,WAAW,YAAY,WAAW,aAAa,WAAW,aAAa;AAAA,QACzE,SAAO,KAAK,8BAA8B,uCAAuC,QAAQ;AAAA,QACzF,IAAI,UAAU,eAAe;AAAA,UAC3B,SAAO,MAAM,2BAA2B,UAAU,eAAe;AAAA,QACnE;AAAA,QACA;AAAA,MACF;AAAA,MAGA,MAAM,QAAQ,KAAK,IAAI,eAAe,KAAK,KAAK,IAAI,UAAU,GAAG,CAAC,GAAG,WAAW;AAAA,MAChF,QAAQ,eAAe,WAAW,MAAM,KAAK;AAAA;AAAA,IAG/C,QAAQ,eAAe,WAAW,MAAM,YAAY;AAAA;AAAA,OAOhD,kBAAiB,CAAC,aAAqB,YAAY,QAAkC;AAAA,IACzF,MAAM,WAAW,KAAK,IAAI,IAAI;AAAA,IAC9B,IAAI,WAAW;AAAA,IACf,MAAM,cAAc;AAAA,IAEpB,OAAO,KAAK,IAAI,IAAI,UAAU;AAAA,MAC5B,MAAM,YAAY,MAAM,KAAK,aAAa,WAAW;AAAA,MAErD,IAAI,UAAU,WAAW;AAAA,QAAW,OAAO;AAAA,MAC3C,IAAI,UAAU,WAAW,UAAU;AAAA,QACjC,MAAM,IAAI,MACR,gCAAgC,UAAU,iBAAiB,iBAC7D;AAAA,MACF;AAAA,MACA,IAAI,UAAU,WAAW,aAAa,UAAU,WAAW,aAAa;AAAA,QACtE,MAAM,IAAI,MAAM,qCAAqC,UAAU,QAAQ;AAAA,MACzE;AAAA,MAEA,MAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,QAAQ,CAAC;AAAA,MAC5D,WAAW,KAAK,IAAI,WAAW,KAAK,WAAW;AAAA,IACjD;AAAA,IAEA,MAAM,IAAI,MAAM,wCAAwC,KAAK,MAAM,YAAY,IAAI,IAAI;AAAA;AAAA,EAKjF,qBAAqB,CAAC,aAA2B;AAAA,IACvD,MAAM,UAAU,KAAK,QAAQ,IAAI,WAAW;AAAA,IAC5C,IAAI,CAAC,WAAW,QAAQ;AAAA,MAAa;AAAA,IAErC,MAAM,WAAW;AAAA,IAEjB,QAAQ,cAAc,YAAY,MAAM;AAAA,MACtC,KAAK,mBAAmB,WAAW,EAChC,KAAK,CAAC,WAAW;AAAA,QAChB,IAAI,CAAC,OAAO,KAAK,SAAS;AAAA,UACxB,SAAO,KACL,8BAA8B,0BAA0B,OAAO,KAAK,QACtE;AAAA,QACF;AAAA,OACD,EACA,MAAM,CAAC,QAAe;AAAA,QACrB,SAAO,MAAM,4CAA4C,gBAAgB,IAAI,SAAS;AAAA,OACvF;AAAA,OACF,QAAQ;AAAA;AAAA,OAGP,mBAAkB,CAAC,aAAuD;AAAA,IAC9E,MAAM,SAAS,KAAK,UAAU;AAAA,IAC9B,OAAO,OAAO,IAA6B,eAAe,oBAAoB;AAAA;AAAA,EAKhF,oBAAoB,GAAqB;AAAA,IACvC,OAAO,MAAM,KAAK,KAAK,QAAQ,OAAO,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS;AAAA;AAAA,EAGjE,mBAAmB,CAAC,aAAiD;AAAA,IACnE,OAAO,KAAK,QAAQ,IAAI,WAAW,GAAG;AAAA;AAAA,EAGxC,kBAAkB,CAAC,aAA8B;AAAA,IAC/C,OAAO,KAAK,QAAQ,IAAI,WAAW,GAAG,UAAU,WAAW;AAAA;AAAA,EAG7D,eAAe,CAAC,aAAoC;AAAA,IAClD,OAAO,KAAK,QAAQ,IAAI,WAAW,GAAG,UAAU,qBAAqB;AAAA;AAEzE;;;ACxSA;AAAA;AAAA;AAAA;AAAA;AAAA,YASE;AAAA,aAEA;AAAA;AAYF,IAAM,kBAAkB;AACxB,IAAM,qBAAqB,kBAAkB;AAC7C,IAAM,iBAAiB;AACvB,IAAM,gBAAgB;AAYtB,SAAS,KAAK,CAAC,IAA2B;AAAA,EACxC,OAAO,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,EAAE,CAAC;AAAA;AAGzD,SAAS,QAAQ,CAAC,OAAkD;AAAA,EAClE,OAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAAA;AAG5E,SAAS,UAAU,CAAC,OAA8B;AAAA,EAChD,OAAO,6EAA6E,KAAK,KAAK;AAAA;AAGhG,SAAS,eAAe,CAAC,OAAoC;AAAA,EAC3D,OAAO,OAAO,UAAU,YAAY,MAAM,KAAK,IAAI,MAAM,KAAK,IAAI;AAAA;AAGpE,SAAS,kBAAkB,CAAC,OAA6B;AAAA,EACvD,MAAM,YAAY,gBAAgB,KAAK,GAAG,YAAY;AAAA,EACtD,OAAO,aAAa,aAAa,cAC7B,YAAY,aACZ,YAAY;AAAA;AAGlB,SAAS,yBAAyB,GAAY;AAAA,EAC5C,IAAI,OAAO,YAAY,aAAa;AAAA,IAClC,OAAO;AAAA,EACT;AAAA,EACA,OAAO,QAAQ,IAAI,4BAA4B;AAAA;AAGjD,SAAS,UAAU,GAAY;AAAA,EAC7B,OAAO,OAAO,YAAY,eAAe,OAAO,QAAQ,UAAU,SAAS;AAAA;AAG7E,SAAS,oBAAoB,CAAC,OAAoD;AAAA,EAChF,IAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;AAAA,IACzB;AAAA,EACF;AAAA,EAEA,MAAM,cAAc,MACjB,IAAI,CAAC,OAAO,UAAU;AAAA,IACrB,IAAI,CAAC,SAAS,KAAK,GAAG;AAAA,MACpB,OAAO;AAAA,IACT;AAAA,IAEA,MAAM,MAAM,gBAAgB,MAAM,GAAG;AAAA,IACrC,IAAI,CAAC,KAAK;AAAA,MACR,OAAO;AAAA,IACT;AAAA,IAEA,MAAM,OAAO,gBAAgB,MAAM,IAAI,GAAG,YAAY;AAAA,IACtD,OAAO;AAAA,MACL,IAAI,gBAAgB,MAAM,EAAE,KAAK,GAAG,SAAS;AAAA,MAC7C;AAAA,MACA,QAAQ,gBAAgB,MAAM,MAAM;AAAA,MACpC,OAAO,gBAAgB,MAAM,KAAK;AAAA,MAClC,aAAa,gBAAgB,MAAM,WAAW;AAAA,MAC9C,MAAM,gBAAgB,MAAM,IAAI;AAAA,MAChC,aACE,SAAS,UACL,YAAY,QACZ,SAAS,UACP,YAAY,QACZ,SAAS,UACP,YAAY,QACZ,SAAS,aACP,YAAY,WACZ;AAAA,IACd;AAAA,GACD,EACA,OAAO,CAAC,UAA8C,UAAU,IAAI;AAAA,EAEvE,OAAO,YAAY,SAAS,IAAI,cAAc;AAAA;AAGhD,SAAS,YAAY,CAAC,OAAqD;AAAA,EACzE,OAAO,SAAS,KAAK,IAAI,QAAQ;AAAA;AAGnC,SAAS,oBAAoB,CAAC,OAAuD;AAAA,EACnF,IAAI,CAAC,SAAS,KAAK,GAAG;AAAA,IACpB;AAAA,EACF;AAAA,EAEA,OAAO,KAAK,MAAM,KAAK,UAAU,KAAK,CAAC;AAAA;AAgBzC,SAAS,0BAA0B,CACjC,SACA,KAC8B;AAAA,EAC9B,MAAM,SAAS,aAAa,IAAI,MAAM;AAAA,EACtC,MAAM,SAAS,aAAa,QAAQ,MAAM;AAAA,EAE1C,MAAM,SAAS,gBAAgB,QAAQ,MAAM,KAAK;AAAA,EAClD,MAAM,OAAO,OAAO,QAAQ,SAAS,WAAW,OAAO,OAAO;AAAA,EAC9D,MAAM,WAAW,gBAAgB,QAAQ,EAAE,KAAK,GAAG;AAAA,EACnD,MAAM,iBAAiB,gBAAgB,QAAQ,QAAQ,KAAK;AAAA,EAC5D,MAAM,aACJ,gBAAgB,QAAQ,WAAW,KAAK,gBAAgB,QAAQ,IAAI,KAAK;AAAA,EAC3E,MAAM,UACJ,gBAAgB,QAAQ,MAAM,KAC9B,GAAG,UAAU,YAAY,OAAO,IAAI,MAAM,KAAK,IAAI,CAAC,KAAK,QAAQ;AAAA,EAEnE,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,qBAAqB,QAAQ,WAAW,GAAG,QAAQ;AAAA,IACtE,OAAO;AAAA,EACT;AAAA,EAEA,OAAO;AAAA,IACL,MAAM,KAAK,KAAK,KAAK;AAAA,IACrB;AAAA,IACA,aAAa,mBAAmB,QAAQ,WAAW;AAAA,IACnD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa,qBAAqB,QAAQ,WAAW;AAAA,IACrD,gBAAgB,aAAa,QAAQ,QAAQ;AAAA,IAC7C,mBAAmB,aAAa,QAAQ,QAAQ;AAAA,EAClD;AAAA;AAGF,SAAS,aAAa,CACpB,QACA,UACA,SACQ;AAAA,EACR,MAAM,UAAU,aAAa,UAAU,OAAO;AAAA,EAC9C,MAAM,UAAU,gBAAgB,SAAS,OAAO;AAAA,EAChD,IAAI,SAAS;AAAA,IACX,OAAO,WAAW,gBAAgB;AAAA,EACpC;AAAA,EAEA,MAAM,WAAW,gBAAgB,UAAU,QAAQ;AAAA,EACnD,IAAI,UAAU;AAAA,IACZ,OAAO,WAAW,iBAAiB;AAAA,EACrC;AAAA,EAEA,OAAO,WAAW,eAAe;AAAA;AAAA;AAGnC,MAAM,4BAA4B,MAAM;AAAA,EACtC,WAAW,GAAG;AAAA,IACZ,MAAM,+BAA+B;AAAA,IACrC,KAAK,OAAO;AAAA;AAEhB;AAAA;AAEO,MAAM,wCAAwC,SAAQ;AAAA,SACpD,cAAc;AAAA,EACrB,wBACE;AAAA,EAEM,cAAuC;AAAA,EACvC,cAAoC;AAAA,EACpC,mBAAkC;AAAA,EAClC,WAAW;AAAA,EACX,wBAAgD;AAAA,EAChD,cAAkC;AAAA,EAClC,aAA4B;AAAA,cAEvB,MAAK,CAAC,SAA0C;AAAA,IAC3D,MAAM,UAAU,IAAI,gCAAgC,OAAO;AAAA,IAC3D,MAAM,QAAQ,WAAW;AAAA,IACzB,OAAO;AAAA;AAAA,OAGH,KAAI,GAAkB;AAAA,IAC1B,KAAK,WAAW;AAAA,IAChB,KAAK,cAAc;AAAA,IACnB,KAAK,uBAAuB,MAAM;AAAA,IAElC,IAAI,KAAK,aAAa;AAAA,MACpB,MAAM,KAAK,YAAY,MAAM,CAAC,UAAU;AAAA,QACtC,SAAO,MACL,kEACE,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,GAEzD;AAAA,OACD;AAAA,IACH;AAAA,IAEA,MAAM,YAAY,KAAK;AAAA,IACvB,KAAK,mBAAmB;AAAA,IACxB,IAAI,WAAW;AAAA,MACb,MAAM,KAAK,kBAAkB,SAAS;AAAA,IACxC;AAAA;AAAA,OAGY,WAAU,GAAkB;AAAA,IACxC,IAAI,CAAC,WAAW,GAAG;AAAA,MACjB,SAAO,MAAM,2EAA2E;AAAA,MACxF,KAAK,cAAc;AAAA,MACnB;AAAA,IACF;AAAA,IAEA,IAAI,0BAA0B,GAAG;AAAA,MAC/B,SAAO,MACL,kFACF;AAAA,MACA,KAAK,cAAc;AAAA,MACnB;AAAA,IACF;AAAA,IAEA,IAAI,CAAC,KAAK,QAAQ,gBAAgB;AAAA,MAChC,SAAO,MAAM,2EAA2E;AAAA,MACxF,KAAK,cAAc;AAAA,MACnB;AAAA,IACF;AAAA,IAEA,MAAM,OAAO,KAAK,QAAQ,WAAW,YAAY;AAAA,IACjD,IAAI,CAAC,MAAM;AAAA,MACT,SAAO,MAAM,2DAA2D;AAAA,MACxE,KAAK,cAAc;AAAA,MACnB;AAAA,IACF;AAAA,IAEA,KAAK,cAAc;AAAA,IACnB,IAAI,CAAC,KAAK,YAAY,gBAAgB,GAAG;AAAA,MACvC,SAAO,MACL,gFACF;AAAA,MACA,KAAK,cAAc;AAAA,MACnB;AAAA,IACF;AAAA,IAEA,KAAK,sBAAsB;AAAA;AAAA,EAG7B,cAAc,GAQZ;AAAA,IACA,MAAM,OAAO,KAAK;AAAA,IAClB,MAAM,SACJ,KAAK,YAAY,KAAK,gBAAgB,YAClC,YACA,MAAM,gBAAgB,MAAM,QAC1B,SACA,KAAK;AAAA,IAEb,OAAO;AAAA,MACL,WAAW,KAAK;AAAA,MAChB,gBAAgB,MAAM,kBAAkB,KAAK;AAAA,MAC7C,QAAQ,MAAM,UAAU,KAAK;AAAA,MAC7B,WAAW,KAAK,aAAa;AAAA,MAC7B,UAAU;AAAA,MACV,YAAY,KAAK;AAAA,MACjB;AAAA,IACF;AAAA;AAAA,EAGF,qBAAqB,GAAY;AAAA,IAC/B,IAAI,KAAK,eAAe,CAAC,KAAK,UAAU;AAAA,MACtC,OAAO;AAAA,IACT;AAAA,IAEA,MAAM,OACJ,KAAK,eAAgB,KAAK,QAAQ,WAAW,YAAY;AAAA,IAC3D,IAAI,CAAC,MAAM,gBAAgB,KAAK,CAAC,KAAK,QAAQ,gBAAgB;AAAA,MAC5D,KAAK,cAAc;AAAA,MACnB,OAAO;AAAA,IACT;AAAA,IAEA,KAAK,cAAc;AAAA,IACnB,KAAK,WAAW;AAAA,IAChB,KAAK,cAAc;AAAA,IACnB,KAAK,cAAc,KAAK,QAAQ;AAAA,IAChC,SAAO,KAAK,6DAA6D;AAAA,IACzE,OAAO;AAAA;AAAA,OAGK,QAAO,GAAkB;AAAA,IACrC,OAAO,CAAC,KAAK,UAAU;AAAA,MACrB,IAAI;AAAA,QACF,IAAI,CAAC,KAAK,kBAAkB;AAAA,UAC1B,KAAK,mBAAmB,MAAM,KAAK,gBAAgB;AAAA,UACnD,KAAK,cAAc;AAAA,UACnB,KAAK,aAAa,IAAI,KAAK,EAAE,YAAY;AAAA,UACzC;AAAA,QACF;AAAA,QAEA,KAAK,cAAc;AAAA,QACnB,MAAM,UAAU,MAAM,KAAK,gBAAgB,KAAK,gBAAgB;AAAA,QAChE,KAAK,aAAa,IAAI,KAAK,EAAE,YAAY;AAAA,QACzC,IAAI,CAAC,SAAS;AAAA,UACZ,KAAK,cAAc;AAAA,UACnB,MAAM,MAAM,aAAa;AAAA,UACzB;AAAA,QACF;AAAA,QAEA,MAAM,WAAW,MAAM,KAAK,cAAc,QAAQ,GAAG;AAAA,QACrD,MAAM,KAAK,eAAe,KAAK,kBAAkB,QAAQ,WAAW,QAAQ;AAAA,QAC5E,KAAK,cAAc;AAAA,QACnB,OAAO,OAAO;AAAA,QACd,IAAI,KAAK,UAAU;AAAA,UACjB;AAAA,QACF;AAAA,QAEA,IAAI,iBAAiB,qBAAqB;AAAA,UACxC,KAAK,mBAAmB;AAAA,UACxB,KAAK,cAAc;AAAA,UACnB,MAAM,MAAM,aAAa;AAAA,UACzB;AAAA,QACF;AAAA,QAEA,KAAK,cAAc;AAAA,QACnB,SAAO,KACL,gDACE,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,GAEzD;AAAA,QACA,MAAM,MAAM,cAAc;AAAA;AAAA,IAE9B;AAAA;AAAA,EAGM,YAAY,GAAW;AAAA,IAC7B,OAAO,KAAK,QAAQ,WAAW,MAAM,KAAK,KAAK;AAAA;AAAA,EAGzC,SAAS,GAAG;AAAA,IAClB,MAAM,SAAS,KAAK,aAAa,UAAU;AAAA,IAC3C,IAAI,CAAC,QAAQ;AAAA,MACX,MAAM,IAAI,MAAM,iCAAiC;AAAA,IACnD;AAAA,IACA,OAAO;AAAA;AAAA,OAGK,YAAc,CAC1B,MACA,SACsC;AAAA,IACtC,MAAM,YAAY,QAAQ,aAAa;AAAA,IACvC,MAAM,aAAa,IAAI;AAAA,IACvB,MAAM,YAAY,WAAW,MAAM,WAAW,MAAM,GAAG,SAAS;AAAA,IAChE,KAAK,wBAAwB;AAAA,IAE7B,IAAI;AAAA,MACF,MAAM,WAAW,MAAM,KAAK,UAAU,EAAE,WAAW,QAAQ,QAAQ,MAAM;AAAA,QACvE,SAAS;AAAA,UACP,QAAQ;AAAA,QACV;AAAA,QACA,MAAM,QAAQ;AAAA,QACd,OAAO,QAAQ;AAAA,QACf,QAAQ,WAAW;AAAA,MACrB,CAAC;AAAA,MAED,MAAM,OAAQ,MAAM,SAAS,KAAK,EAAE,MAAM,OAAO,CAAC,EAAE;AAAA,MACpD,OAAO,EAAE,QAAQ,SAAS,QAAQ,KAAK;AAAA,cACvC;AAAA,MACA,aAAa,SAAS;AAAA,MACtB,IAAI,KAAK,0BAA0B,YAAY;AAAA,QAC7C,KAAK,wBAAwB;AAAA,MAC/B;AAAA;AAAA;AAAA,OAIU,gBAAe,GAAoB;AAAA,IAC/C,QAAQ,QAAQ,SAAS,MAAM,KAAK,YAClC,iCACA;AAAA,MACE,QAAQ;AAAA,MACR,MAAM;AAAA,QACJ,gBAAgB,KAAK,QAAQ;AAAA,QAC7B,WAAW,KAAK,aAAa;AAAA,MAC/B;AAAA,IACF,CACF;AAAA,IAEA,IAAI,UAAU,OAAO,CAAC,MAAM,WAAW,CAAC,KAAK,MAAM,SAAS,IAAI;AAAA,MAC9D,MAAM,IAAI,MAAM,oDAAoD,SAAS;AAAA,IAC/E;AAAA,IAEA,SAAO,KACL,4EAA4E,KAAK,KAAK,QAAQ,KAChG;AAAA,IACA,OAAO,KAAK,KAAK,QAAQ;AAAA;AAAA,OAGb,kBAAiB,CAAC,WAAkC;AAAA,IAChE,IAAI;AAAA,MACF,MAAM,KAAK,YACT,iCAAiC,mBAAmB,SAAS,KAC7D;AAAA,QACE,QAAQ;AAAA,QACR,WAAW;AAAA,MACb,CACF;AAAA,MACA,OAAO,OAAO;AAAA,MACd,SAAO,MACL,iEAAiE,cAC/D,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,GAEzD;AAAA;AAAA;AAAA,OAIU,gBAAe,CAAC,WAAgE;AAAA,IAC5F,QAAQ,QAAQ,SAAS,MAAM,KAAK,YAClC,iCAAiC,mBAAmB,SAAS,UAC7D;AAAA,MACE,QAAQ;AAAA,MACR,OAAO,EAAE,WAAW,gBAAgB;AAAA,MACpC,WAAW,kBAAkB;AAAA,IAC/B,CACF;AAAA,IAEA,IAAI,WAAW,KAAK;AAAA,MAClB,MAAM,IAAI;AAAA,IACZ;AAAA,IAEA,IAAI,UAAU,OAAO,CAAC,MAAM,SAAS;AAAA,MACnC,MAAM,IAAI,MAAM,wCAAwC,qBAAqB,SAAS;AAAA,IACxF;AAAA,IAEA,OAAO,KAAK,MAAM,WAAW;AAAA;AAAA,OAGjB,eAAc,CAC1B,WACA,WACA,UACe;AAAA,IACf,QAAQ,QAAQ,SAAS,MAAM,KAAK,YAClC,iCAAiC,mBAAmB,SAAS,eAC7D;AAAA,MACE,QAAQ;AAAA,MACR,MAAM,EAAE,WAAW,SAAS;AAAA,IAC9B,CACF;AAAA,IAEA,IAAI,WAAW,KAAK;AAAA,MAClB,MAAM,IAAI;AAAA,IACZ;AAAA,IAEA,IAAI,UAAU,OAAO,MAAM,YAAY,OAAO;AAAA,MAC5C,MAAM,IAAI,MAAM,mDAAmD,SAAS;AAAA,IAC9E;AAAA;AAAA,OAGY,cAAa,CAAC,KAAyD;AAAA,IACnF,QAAQ,IAAI;AAAA,WACL;AAAA,QACH,OAAO;AAAA,UACL,SAAS;AAAA,UACT,IAAI,IAAI;AAAA,UACR,QAAQ,EAAE,WAAW,KAAK,IAAI,EAAE;AAAA,QAClC;AAAA,WACG;AAAA,QACH,OAAO;AAAA,UACL,SAAS;AAAA,UACT,IAAI,IAAI;AAAA,UACR,QAAQ;AAAA,YACN,QAAQ;AAAA,YACR,gBAAgB,KAAK,QAAQ;AAAA,YAC7B,WAAW,KAAK,aAAa;AAAA,UAC/B;AAAA,QACF;AAAA,WACG;AAAA,QACH,OAAO,KAAK,kBAAkB,GAAG;AAAA;AAAA,QAEjC,OAAO;AAAA,UACL,SAAS;AAAA,UACT,IAAI,IAAI;AAAA,UACR,OAAO;AAAA,YACL,MAAM;AAAA,YACN,SAAS,6BAA6B,IAAI;AAAA,UAC5C;AAAA,QACF;AAAA;AAAA;AAAA,OAIQ,kBAAiB,CAAC,KAAyD;AAAA,IACvF,IAAI,CAAC,KAAK,QAAQ,gBAAgB;AAAA,MAChC,OAAO;AAAA,QACL,SAAS;AAAA,QACT,IAAI,IAAI;AAAA,QACR,OAAO,EAAE,MAAM,QAAQ,SAAS,mCAAmC;AAAA,MACrE;AAAA,IACF;AAAA,IAEA,MAAM,UAAU,2BAA2B,KAAK,SAAS,GAAG;AAAA,IAC5D,IAAI,CAAC,SAAS;AAAA,MACZ,OAAO;AAAA,QACL,SAAS;AAAA,QACT,IAAI,IAAI;AAAA,QACR,OAAO,EAAE,MAAM,QAAQ,SAAS,gCAAgC;AAAA,MAClE;AAAA,IACF;AAAA,IAEA,MAAM,SAAS,WAAW,QAAQ,OAAO,IACrC,QAAQ,UACR,iBAAiB,KAAK,SAAS,QAAQ,OAAO;AAAA,IAClD,MAAM,UAAU,iBACd,KAAK,SACL,cAAc,QAAQ,QAAQ,QAAQ,mBAAmB,QAAQ,OAAO,CAC1E;AAAA,IACA,MAAM,WAAW,iBAAiB,KAAK,SAAS,GAAG,QAAQ,UAAU,QAAQ,UAAU;AAAA,IACvF,MAAM,kBAAkB,iBAAiB,KAAK,SAAS,uBAAuB,QAAQ,QAAQ;AAAA,IAC9F,MAAM,YAAY,iBAChB,KAAK,SACL,GAAG,QAAQ,UAAU,QAAQ,WAAW,OAAO,IAAI,MAAM,KAAK,IAAI,CAAC,WACrE;AAAA,IAEA,MAAM,oBAAoB,qBAAqB,QAAQ,iBAAiB;AAAA,IAExE,MAAM,KAAK,QAAQ,iBAAiB;AAAA,MAClC;AAAA,MACA;AAAA,MACA,UAAU,QAAQ;AAAA,MAClB;AAAA,MACA,WAAW,QAAQ;AAAA,MACnB,UAAU,QAAQ;AAAA,MAClB,MAAM,QAAQ;AAAA,MACd,QAAQ,QAAQ;AAAA,MAChB,WAAW,QAAQ;AAAA,MACnB,MAAM,QAAQ;AAAA,MACd;AAAA,MACA,UAAU;AAAA,IACZ,CAAC;AAAA,IAED,MAAM,UAAU,oBAAoB;AAAA,MAClC,IAAI;AAAA,MACJ;AAAA,MACA,SAAS,KAAK,QAAQ;AAAA,MACtB;AAAA,MACA,SAAS;AAAA,QACP,MAAM,QAAQ;AAAA,QACd,QAAQ,QAAQ;AAAA,QAChB,aAAa,QAAQ;AAAA,WACjB,QAAQ,cAAc,EAAE,aAAa,QAAQ,YAAY,IAAI,CAAC;AAAA,MACpE;AAAA,IACF,CAAC;AAAA,IAED,QAAQ,WAAW;AAAA,SACb,QAAQ;AAAA,MACZ,YAAY,QAAQ;AAAA,MACpB,gBAAgB,QAAQ;AAAA,SACpB,QAAQ,iBACR,EAAE,eAAe,qBAAqB,QAAQ,cAAc,EAAE,IAC9D,CAAC;AAAA,SACD,QAAQ,oBAAoB,EAAE,iBAAiB,kBAAkB,IAAI,CAAC;AAAA,IAC5E;AAAA,IAEA,MAAM,gBAA0B,CAAC;AAAA,IACjC,MAAM,WAA4B,OAAO,YAAqB;AAAA,MAC5D,MAAM,eAAe,OAAO,QAAQ,SAAS,WAAW,QAAQ,OAAO;AAAA,MACvE,IAAI,aAAa,KAAK,GAAG;AAAA,QACvB,cAAc,KAAK,YAAY;AAAA,MACjC;AAAA,MAEA,MAAM,iBAAiB,oBAAoB;AAAA,QACzC,IAAI,iBACF,KAAK,SACL,GAAG,QAAQ,UAAU,QAAQ,WAAW,OACtC,IAAI,MAAM,KAAK,IAAI,CACrB,cAAc,cAAc,QAC9B;AAAA,QACA,UAAU,KAAK,QAAQ;AAAA,QACvB,SAAS,KAAK,QAAQ;AAAA,QACtB;AAAA,QACA,SAAS;AAAA,aACJ;AAAA,UACH,MAAM;AAAA,UACN,QAAQ,QAAQ;AAAA,UAChB,aAAa,QAAQ;AAAA,QACvB;AAAA,MACF,CAAC;AAAA,MAED,MAAM,KAAK,QAAQ,aAAa,gBAAgB,UAAU;AAAA,MAC1D,OAAO,CAAC,cAAwB;AAAA;AAAA,IAGlC,IAAI;AAAA,MACF,MAAM,SAAS,MAAM,KAAK,QAAQ,eAAe,cAC/C,KAAK,SACL,SACA,QACF;AAAA,MACA,MAAM,YACJ,cAAc,cAAc,SAAS,OACpC,OAAO,OAAO,iBAAiB,SAAS,WACrC,OAAO,gBAAgB,OACvB;AAAA,MAEN,OAAO;AAAA,QACL,SAAS;AAAA,QACT,IAAI,IAAI;AAAA,QACR,QAAQ;AAAA,UACN,YAAY,OAAO;AAAA,aACf,YAAY,EAAE,MAAM,UAAU,IAAI,CAAC;AAAA,UACvC,gBAAgB,KAAK,QAAQ;AAAA,QAC/B;AAAA,MACF;AAAA,MACA,OAAO,OAAO;AAAA,MACd,OAAO;AAAA,QACL,SAAS;AAAA,QACT,IAAI,IAAI;AAAA,QACR,OAAO;AAAA,UACL,MAAM;AAAA,UACN,SAAS,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,QAChE;AAAA,MACF;AAAA;AAAA;AAGN;;;ACppBA,mBAA6B,qBAAQ;AA0BrC,IAAM,eAAe,KAAK,KAAK;AAE/B,IAAM,oBAAqD;AAAA,EACzD,CAAC,QAAQ,QAAQ;AAAA,EACjB,CAAC,MAAM,QAAQ;AAAA,EACf,CAAC,MAAM,QAAQ;AAAA,EACf,CAAC,MAAM,QAAQ;AAAA,EACf,CAAC,UAAU,QAAQ;AAAA,EACnB,CAAC,WAAW,QAAQ;AAAA,EACpB,CAAC,OAAO,QAAQ;AAAA,EAChB,CAAC,WAAW,WAAW;AAAA,EACvB,CAAC,WAAW,QAAQ;AAAA,EACpB,CAAC,SAAS,MAAM;AAAA,EAChB,CAAC,YAAY,UAAU;AAAA,EACvB,CAAC,QAAQ,KAAK;AAAA,EACd,CAAC,QAAQ,UAAU;AACrB;AAEA,SAAS,eAAe,CAAC,SAAyB;AAAA,EAChD,IAAI,QAAQ,SAAS,GAAG;AAAA,IAAG,OAAO,QAAQ,MAAM,GAAG,EAAE;AAAA,EACrD,MAAM,QAAQ,QAAQ,YAAY;AAAA,EAClC,YAAY,QAAQ,aAAa,mBAAmB;AAAA,IAClD,IAAI,MAAM,WAAW,MAAM;AAAA,MAAG,OAAO;AAAA,EACvC;AAAA,EACA,OAAO;AAAA;AAGT,SAAS,aAAa,CAAC,SAAyB;AAAA,EAC9C,IAAI,QAAQ,SAAS,GAAG,GAAG;AAAA,IACzB,OAAO,QAAQ,MAAM,GAAG,EAAE,MAAM,CAAC,EAAE,KAAK,GAAG;AAAA,EAC7C;AAAA,EACA,OAAO;AAAA;AAAA;AAGF,MAAM,kCAAkC,SAAQ;AAAA,SAC9C,cAAc;AAAA,EACrB,wBAAwB;AAAA,EAEhB,SAA2B,CAAC;AAAA,EAC5B,aAA+B,CAAC;AAAA,EAChC,gBAAgB;AAAA,EAChB,eAAqC;AAAA,cAEhC,MAAK,CAAC,SAA0C;AAAA,IAC3D,MAAM,UAAU,IAAI,0BAA0B,OAAO;AAAA,IACrD,MAAM,QAAQ,WAAW;AAAA,IACzB,OAAO;AAAA;AAAA,OAGH,KAAI,GAAkB;AAAA,IAC1B,KAAK,SAAS,CAAC;AAAA,IACf,KAAK,aAAa,CAAC;AAAA,IACnB,KAAK,gBAAgB;AAAA;AAAA,OAGT,WAAU,GAAkB;AAAA,IACxC,MAAM,OAAO,KAAK,QAAQ,WAAW,YAAY;AAAA,IAEjD,IAAI,CAAC,MAAM,gBAAgB,GAAG;AAAA,MAC5B,SAAO,KAAK,4EAA4E;AAAA,MACxF;AAAA,IACF;AAAA,IAEA,MAAM,KAAK,YAAY;AAAA,IACvB,KAAK,yBAAyB;AAAA;AAAA,OAGlB,YAAW,GAAkB;AAAA,IACzC,IAAI,KAAK,cAAc;AAAA,MACrB,MAAM,KAAK;AAAA,MACX;AAAA,IACF;AAAA,IAEA,KAAK,eAAe,KAAK,cAAc;AAAA,IACvC,MAAM,KAAK;AAAA,IACX,KAAK,eAAe;AAAA;AAAA,OAGR,cAAa,GAAkB;AAAA,IAC3C,MAAM,OAAO,KAAK,QAAQ,WAAW,YAAY;AAAA,IACjD,IAAI,CAAC,MAAM,gBAAgB;AAAA,MAAG;AAAA,IAE9B,MAAM,SAAS,KAAK,UAAU;AAAA,IAE9B,MAAM,WAAW,MAAM,OAAO,IAAuB,SAAS;AAAA,IAC9D,MAAM,UAAU,SAAS,QAAQ,CAAC;AAAA,IAElC,KAAK,SAAS,QAAQ,IAAI,CAAC,WAAW;AAAA,MACpC,IAAI,MAAM;AAAA,MACV,UAAU,gBAAgB,MAAM,EAAE;AAAA,MAClC,MAAM,cAAc,MAAM,EAAE;AAAA,MAC5B,WAAW,MAAM;AAAA,IACnB,EAAE;AAAA,IAEF,KAAK,aAAa,CAAC;AAAA,IACnB,WAAW,SAAS,KAAK,QAAQ;AAAA,MAC/B,IAAI,CAAC,KAAK,WAAW,MAAM,WAAW;AAAA,QACpC,KAAK,WAAW,MAAM,YAAY,CAAC;AAAA,MACrC;AAAA,MACA,KAAK,WAAW,MAAM,UAAU,KAAK,KAAK;AAAA,IAC5C;AAAA,IAEA,KAAK,gBAAgB,KAAK,IAAI;AAAA,IAC9B,SAAO,KACL,+BAA+B,KAAK,OAAO,sBAAsB,OAAO,KAAK,KAAK,UAAU,EAAE,kBAChG;AAAA;AAAA,EAGM,wBAAwB,GAAS;AAAA,IACvC,IAAI,KAAK,OAAO,WAAW;AAAA,MAAG;AAAA,IAE9B,MAAM,WAAW,IAAI,IAAI,KAAK,OAAO,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;AAAA,IACrD,MAAM,UAAU,IAAI,IAAI,KAAK,OAAO,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;AAAA,IAEtD,MAAM,kBAAkB;AAAA,MACtB,EAAE,KAAK,4BAA4B,OAAO,aAAa;AAAA,MACvD,EAAE,KAAK,8BAA8B,OAAO,eAAe;AAAA,MAC3D,EAAE,KAAK,6BAA6B,OAAO,cAAc;AAAA,MACzD,EAAE,KAAK,6BAA6B,OAAO,cAAc;AAAA,MACzD,EAAE,KAAK,4BAA4B,OAAO,aAAa;AAAA,MACvD;AAAA,QACE,KAAK;AAAA,QACL,OAAO;AAAA,MACT;AAAA,MACA;AAAA,QACE,KAAK;AAAA,QACL,OAAO;AAAA,MACT;AAAA,MACA,EAAE,KAAK,gCAAgC,OAAO,iBAAiB;AAAA,MAC/D,EAAE,KAAK,gCAAgC,OAAO,iBAAiB;AAAA,MAC/D,EAAE,KAAK,iCAAiC,OAAO,kBAAkB;AAAA,MACjE;AAAA,QACE,KAAK;AAAA,QACL,OAAO;AAAA,MACT;AAAA,MACA;AAAA,QACE,KAAK;AAAA,QACL,OAAO;AAAA,MACT;AAAA,MACA,EAAE,KAAK,2BAA2B,OAAO,YAAY;AAAA,MACrD;AAAA,QACE,KAAK;AAAA,QACL,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IAEA,aAAa,KAAK,WAAW,iBAAiB;AAAA,MAC5C,MAAM,QAAQ,KAAK,QAAQ,WAAW,GAAG;AAAA,MACzC,IAAI,SAAS,OAAO,UAAU,UAAU;AAAA,QACtC,MAAM,QAAQ,SAAS,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK;AAAA,QACtD,IAAI,CAAC,OAAO;AAAA,UACV,SAAO,KACL,mCAAmC,UAAU,2CAC3C,6EACJ;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA;AAAA,OAGI,mBAAkB,GAA8B;AAAA,IACpD,IAAI,KAAK,IAAI,IAAI,KAAK,gBAAgB,cAAc;AAAA,MAClD,MAAM,KAAK,YAAY;AAAA,IACzB;AAAA,IACA,OAAO,KAAK;AAAA;AAAA,OAGR,oBAAmB,GAA8B;AAAA,IACrD,IAAI,KAAK,IAAI,IAAI,KAAK,gBAAgB,cAAc;AAAA,MAClD,MAAM,KAAK,YAAY;AAAA,IACzB;AAAA,IACA,OAAO,KAAK;AAAA;AAEhB;;;AhClKA,IAAM,wBAAwB,WAAU,aAAa;AACrD,IAAM,0BAA0B,WAAU,eAAe;AACzD,IAAM,wBAAwB,WAAU,aAAa;AACrD,IAAM,+BAA+B,WAAU,oBAAoB;AACnE,IAAM,6BAA6B,WAAU,kBAAkB;AAI/D,SAAS,aAAa,GAAmB;AAAA,EACvC,IAAI,OAAO,YAAY,aAAa;AAAA,IAClC,OAAO,CAAC;AAAA,EACV;AAAA,EACA,OAAO,QAAQ;AAAA;AAGjB,IAAM,MAAM,cAAc;AAEnB,IAAM,qBAA6B;AAAA,EACxC,MAAM;AAAA,EACN,aACE;AAAA,EAEF,QAAQ;AAAA,IACN,uBAAuB,IAAI,yBAAyB;AAAA,IACpD,wBAAwB,IAAI,0BAA0B;AAAA,IACtD,uBAAuB,IAAI,yBAAyB;AAAA,IAEpD,0BAA0B,IAAI,4BAA4B;AAAA,IAC1D,4BAA4B,IAAI,8BAA8B;AAAA,IAC9D,2BAA2B,IAAI,6BAA6B;AAAA,IAC5D,2BAA2B,IAAI,6BAA6B;AAAA,IAC5D,0BAA0B,IAAI,4BAA4B;AAAA,IAC1D,sCAAsC,IAAI,wCAAwC;AAAA,IAClF,oCAAoC,IAAI,sCAAsC;AAAA,IAC9E,oCAAoC,IAAI,sCAAsC;AAAA,IAC9E,6BAA6B,IAAI,+BAA+B;AAAA,IAChE,8BAA8B,IAAI,gCAAgC;AAAA,IAClE,YAAY,IAAI,cAAc;AAAA,IAC9B,cAAc,IAAI,gBAAgB;AAAA,IAClC,aAAa,IAAI,eAAe;AAAA,IAChC,aAAa,IAAI,eAAe;AAAA,IAChC,YAAY,IAAI,cAAc;AAAA,IAC9B,wBAAwB,IAAI,0BAA0B;AAAA,IACtD,sBAAsB,IAAI,wBAAwB;AAAA,IAClD,sBAAsB,IAAI,wBAAwB;AAAA,IAClD,eAAe,IAAI,iBAAiB;AAAA,IACpC,gBAAgB,IAAI,kBAAkB;AAAA,IAEtC,8BAA8B,IAAI,gCAAgC;AAAA,IAClE,gBAAgB,IAAI,kBAAkB;AAAA,IAEtC,+BAA+B,IAAI,iCAAiC;AAAA,IACpE,iCAAiC,IAAI,mCAAmC;AAAA,IACxE,6BAA6B,IAAI,+BAA+B;AAAA,IAChE,oCAAoC,IAAI,sCAAsC;AAAA,IAE9E,uCAAuC,IAAI,yCAAyC;AAAA,IACpF,4CACE,IAAI,8CAA8C;AAAA,IACpD,sCAAsC,IAAI,wCAAwC;AAAA,IAElF,yBAAyB,IAAI,2BAA2B;AAAA,IACxD,mCAAmC,IAAI,qCAAqC;AAAA,IAE5E,sCAAsC,IAAI,wCAAwC;AAAA,EACpF;AAAA,OAEM,KAAI,CAAC,QAAQ,SAAS;AAAA,IAE1B,iBAAiB,QAAQ,OAAO;AAAA;AAAA,EAWlC,UAAU;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EAGA,SAAS;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EAGA,WAAW;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EAGA,QAAQ;AAAA,KACL,WAAU,iBAAiB;AAAA,KAC3B,wBAAuB;AAAA,KACvB,0BAAyB;AAAA,KACzB,WAAU,aAAa;AAAA,KACvB,WAAU,aAAa;AAAA,KACvB,wBAAuB;AAAA,KACvB,+BAA8B;AAAA,KAC9B,6BAA4B;AAAA,KAC5B,WAAU,WAAW;AAAA,KACrB,WAAU,QAAQ;AAAA,KAClB,WAAU,oBAAoB;AAAA,KAC9B,WAAU,eAAe;AAAA,KACzB,WAAU,eAAe;AAAA,EAC5B;AAAA,EAEA,OAAO;AAAA,IACL;AAAA,MACE,MAAM;AAAA,MACN,OAAO;AAAA,QACL;AAAA,UACE,MAAM;AAAA,UACN,IAAI,OAAO,YAA2B;AAAA,YACpC,MAAM,OAAO,MAAM,qBAAqB,OAAO,EAAE,IAE9C,SAAS;AAAA,YACZ,SAAO,IACL;AAAA,cACE,MAAM,KAAK,MAAM,UAAU;AAAA,YAC7B,GACA,kBACF;AAAA;AAAA,QAEJ;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,IAAI,OAAO,YAA2B;AAAA,YACpC,MAAM,YAAY,MAAM,QAAQ,SAAS,WAAU,gBAAgB;AAAA,cACjE,MAAM;AAAA,YACR,CAAC;AAAA,YACD,SAAO,IAAI,EAAE,UAAU,GAAG,WAAW;AAAA;AAAA,QAEzC;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,IAAI,OAAO,YAA2B;AAAA,YACpC,MAAM,OAAO,MAAM,QAAQ,SAAS,WAAU,YAAY;AAAA,cACxD,QAAQ;AAAA,YACV,CAAC;AAAA,YACD,IAAI,KAAK,WAAW,GAAG;AAAA,cACrB,MAAM,IAAI,MAAM,yBAAyB;AAAA,YAC3C;AAAA,YACA,SAAO,IAAI,EAAE,KAAK,GAAG,gCAAgC;AAAA;AAAA,QAEzD;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,IAAI,OAAO,YAA2B;AAAA,YACpC,MAAM,OAAO,MAAM,QAAQ,SAAS,WAAU,YAAY;AAAA,cACxD,QAAQ;AAAA,YACV,CAAC;AAAA,YACD,IAAI,KAAK,WAAW,GAAG;AAAA,cACrB,MAAM,IAAI,MAAM,yBAAyB;AAAA,YAC3C;AAAA,YACA,SAAO,IAAI,EAAE,KAAK,GAAG,gCAAgC;AAAA;AAAA,QAEzD;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,IAAI,OAAO,YAA2B;AAAA,YACpC,SAAO,IAAI,qCAAqC;AAAA,YAChD,MAAM,QAAQ,MAAM,QAAQ,SAAS,WAAU,OAAO;AAAA,cACpD,QAAQ;AAAA,cACR,OAAO;AAAA,cACP,MAAM;AAAA,YACR,CAAC;AAAA,YACD,SAAO,IAAI,EAAE,MAAM,GAAG,sCAAsC;AAAA;AAAA,QAEhE;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,IAAI,OAAO,YAA2B;AAAA,YACpC,SAAO,IAAI,sCAAsC;AAAA,YACjD,MAAM,SAAS,MAAM,QAAQ,SAC3B,WAAU,mBACV,mLACF;AAAA,YAEA,IACE,UACA,OAAO,WAAW,YAClB,WAAW,UACX,iBAAiB,QACjB;AAAA,cACA,SAAO,IAAI,EAAE,OAAO,GAAG,mBAAmB;AAAA,YAC5C,EAAO;AAAA,cACL,SAAO,MAAM,4CAA4C,KAAK,UAAU,MAAM,GAAG;AAAA;AAAA;AAAA,QAGvF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,IAAI,OAAO,YAA2B;AAAA,YACpC,SAAO,IAAI,kCAAkC;AAAA,YAC7C,MAAM,WAAW,MAAM,MACrB,+EACF;AAAA,YACA,MAAM,cAAc,MAAM,SAAS,YAAY;AAAA,YAC/C,MAAM,gBAAgB,MAAM,QAAQ,SAClC,WAAU,eACV,OAAO,KAAK,IAAI,WAAW,WAAW,CAAC,CACzC;AAAA,YACA,SAAO,IAAI,EAAE,cAAc,GAAG,mCAAmC;AAAA;AAAA,QAErE;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,IAAI,OAAO,YAA2B;AAAA,YACpC,MAAM,SAAS;AAAA,YACf,MAAM,SAAS,MAAM,QAAQ,SAAS,WAAU,uBAAuB;AAAA,cACrE;AAAA,cACA,WAAW,WAAU;AAAA,YACvB,CAAC;AAAA,YACD,IAAI,CAAC,MAAM,QAAQ,MAAM,KAAK,OAAO,WAAW,GAAG;AAAA,cACjD,MAAM,IAAI,MAAM,6DAA6D;AAAA,YAC/E;AAAA,YACA,SAAO,IAAI,EAAE,OAAO,GAAG,kBAAkB;AAAA;AAAA,QAE7C;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,IAAI,OAAO,YAA2B;AAAA,YACpC,MAAM,SAAS;AAAA,YACf,MAAM,SAAS,MAAM,QAAQ,SAAS,WAAU,uBAAuB;AAAA,cACrE;AAAA,cACA,WAAW,WAAU;AAAA,YACvB,CAAC;AAAA,YACD,MAAM,cAAc,MAAM,QAAQ,SAAS,WAAU,uBAAuB;AAAA,cAC1E;AAAA,cACA,WAAW,WAAU;AAAA,YACvB,CAAC;AAAA,YACD,IAAI,gBAAgB,QAAQ;AAAA,cAC1B,MAAM,IAAI,MACR,mDAAmD,iBAAiB,cACtE;AAAA,YACF;AAAA,YACA,SAAO,IAAI,EAAE,YAAY,GAAG,cAAc;AAAA;AAAA,QAE9C;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,IAAI,OAAO,YAA2B;AAAA,YACpC,MAAM,WAAW,MAAM,kBAAkB,SAAS;AAAA,cAChD,MAAM;AAAA,YACR,CAAC;AAAA,YACD,IAAI,CAAC,UAAU;AAAA,cACb,MAAM,IAAI,MAAM,2BAA2B;AAAA,YAC7C;AAAA,YACA,SAAO,IAAI,+BAA+B;AAAA;AAAA,QAE9C;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAe;;;AiCrTf,IAAe;",
|
|
41
|
+
"debugId": "6243C8A3ED6780E664756E2164756E21",
|
|
36
42
|
"names": []
|
|
37
43
|
}
|