{"version":3,"sources":["../../../server/agent-process/process.ts","../../../agent/server/class.ts","../../../plugins/server/class.ts","../../../shared/ensure-server.ts","../../../transport/client/node.ts"],"sourcesContent":["import { createBirpc } from \"birpc\";\nimport { AgentServer } from \"@/agent/server/class\";\nimport { prepareAgentConfig } from \"@/agent/server/config\";\nimport { importServerBuild } from \"@/exports/build/server\";\nimport type { AsyncQueue } from \"@/shared/async-queue\";\nimport { canon, type SerializableValue } from \"@/shared/canon\";\nimport { isLifeError, lifeError } from \"@/shared/error\";\nimport * as op from \"@/shared/operation\";\nimport { ProcessStats } from \"@/shared/process-stats\";\nimport type { TelemetryClient } from \"@/telemetry/clients/base\";\nimport { createTelemetryClient, TelemetryNodeClient } from \"@/telemetry/clients/node\";\nimport { pipeConsoleToTelemetryClient } from \"@/telemetry/helpers/patch-console\";\nimport type { TelemetrySignal } from \"@/telemetry/types\";\nimport type { ChildMethods, ParentMethods } from \"./types\";\n\n// Keep track of process stats\nconst processStats = new ProcessStats();\n\n// Holds the agent server instance created in start()\nlet agentServer: AgentServer | null = null;\n\n// Telemetry client\nlet telemetry: TelemetryClient | null = null;\n\nconst rpc = createBirpc<ParentMethods, ChildMethods>(\n  {\n    init(params) {\n      // Initialize telemetry client\n      telemetry = createTelemetryClient(\"agent.process\", { agentId: params.agentId });\n      // Forward console.* methods to the process telemetry client\n      pipeConsoleToTelemetryClient(telemetry);\n      // Return success\n      return op.success();\n    },\n    //\n    async start(params) {\n      try {\n        // Retrieve the agent definition\n        const [errIndex, buildIndex] = await importServerBuild({\n          projectDirectory: process.cwd(),\n          noCache: true,\n        });\n        if (errIndex) return op.failure(errIndex);\n        const build = buildIndex?.[params.name as keyof typeof buildIndex];\n        if (!build)\n          return op.failure({ code: \"NotFound\", message: `Agent '${params.name}' not found.` });\n\n        // Obtain the final agent config\n        const [errConfig, config] = prepareAgentConfig(\n          build.definition.config,\n          build.globalConfigs,\n        );\n        if (errConfig) return op.failure(errConfig);\n\n        // Create the agent server\n        const [errCreate, instance] = op.attempt(\n          () =>\n            new AgentServer({\n              id: params.id,\n              definition: build.definition,\n              scope: params.scope,\n              sha: build.sha,\n              config: config.server,\n              pluginsContexts: params.pluginsContexts,\n              isRestart: params.isRestart,\n            }),\n        );\n        if (errCreate) return op.failure(errCreate);\n        agentServer = instance;\n\n        // Start the agent server\n        const [err] = await agentServer.start();\n        if (err) return op.failure(err);\n\n        // Stream plugin context changes to parent (for restoration after crash)\n        for (const pluginDef of build.definition.plugins) {\n          const [errAccessor, accessor] =\n            agentServer.plugins[pluginDef.name]?.getAccessor({\n              type: \"server\",\n              name: pluginDef.name,\n            }) ??\n            op.failure({ code: \"NotFound\", message: `Plugin '${pluginDef.name}' not found.` });\n          if (errAccessor) return op.failure(errAccessor);\n          accessor.context.onChange(\n            (c) => c,\n            async (c) => {\n              if (!agentServer) return;\n              const [error] = await rpc.syncContext({\n                agentId: agentServer.id,\n                pluginName: pluginDef.name,\n                context: c as SerializableValue,\n                timestamp: Date.now(),\n              });\n              if (error)\n                telemetry?.log.error({\n                  message: `Failed to sync for plugin '${pluginDef.name}' in agent '${agentServer.def.name}' process.`,\n                  error,\n                });\n            },\n          );\n        }\n\n        // Register transport room\n        await agentServer.transport.joinRoom(params.transportRoom.name, params.transportRoom.token);\n\n        // Notify parent that agent is ready\n        await rpc.ready();\n\n        // Return that the agent server was started successfully\n        telemetry?.log.info({ message: \"Agent started successfully.\" });\n        return op.success();\n      } catch (error) {\n        return op.failure({ code: \"Unknown\", cause: error });\n      }\n    },\n\n    async stop() {\n      try {\n        if (agentServer) {\n          const [err] = await agentServer.stop();\n          if (err) return op.failure(err);\n          agentServer = null;\n        }\n        return op.success();\n      } catch (error) {\n        return op.failure({ code: \"Unknown\", cause: error });\n      }\n    },\n\n    // Simple ping to check if process is responsive\n    async ping() {\n      return await op.success();\n    },\n\n    // Get detailed stats from the child process\n    async getProcessStats() {\n      try {\n        return await processStats.get();\n      } catch (error) {\n        return op.failure({ code: \"Unknown\", cause: error });\n      }\n    },\n  },\n  {\n    post: (data) => process.send?.(data),\n    on: (fn) => process.on(\"message\", fn),\n    serialize: (data) => {\n      const [error, result] = canon.serialize(data);\n      if (error) {\n        throw lifeError({\n          code: \"Validation\",\n          message:\n            \"Failed to serialize data from agent process to server. The message has been discarded.\",\n          attributes: {\n            agentId: agentServer?.id,\n            agentName: agentServer?.def.name,\n            data,\n          },\n          cause: error,\n        });\n      }\n      return result;\n    },\n    deserialize: (data) => {\n      const [error, result] = canon.deserialize(data);\n      if (error) {\n        throw lifeError({\n          code: \"Validation\",\n          message:\n            \"Failed to deserialize data from agent process to server. The message has been discarded.\",\n          attributes: {\n            agentId: agentServer?.id,\n            agentName: agentServer?.def.name,\n            data,\n          },\n          cause: error,\n        });\n      }\n      return result;\n    },\n    onFunctionError: (error) => {\n      telemetry?.log.error(\n        isLifeError(error)\n          ? error\n          : lifeError({\n              code: \"Unknown\",\n              cause: error,\n            }),\n      );\n    },\n    onGeneralError: (error) => {\n      telemetry?.log.error(\n        isLifeError(error)\n          ? error\n          : lifeError({\n              code: \"Unknown\",\n              cause: error,\n            }),\n      );\n    },\n    // Disable Birpc timeout\n    onTimeoutError: () => true,\n    timeout: -1,\n  },\n);\n\n// Register telemetry consumer to forward all signals to parent\nTelemetryNodeClient.registerGlobalConsumer({\n  start: async (queue: AsyncQueue<TelemetrySignal>) => {\n    for await (const signal of queue) rpc.syncTelemetry(signal);\n  },\n});\n\n// Handle uncaught errors\nprocess.on(\"uncaughtException\", async (error) => {\n  telemetry?.log.error({ error });\n  // Flush telemetry before exiting to ensure error is sent to parent\n  await telemetry?.flushConsumers(1000);\n  process.exit(1);\n});\nprocess.on(\"unhandledRejection\", async (reason) => {\n  telemetry?.log.error({\n    message: reason instanceof Error ? reason.message : String(reason),\n    error: reason instanceof Error ? reason : undefined,\n  });\n  // Flush telemetry before exiting to ensure error is sent to parent\n  await telemetry?.flushConsumers(1000);\n  process.exit(1);\n});\n","import z from \"zod\";\nimport { type EOUProvider, eouProviders } from \"@/models/eou\";\nimport { type LLMProvider, llmProviders } from \"@/models/llm\";\nimport { type STTProvider, sttProviders } from \"@/models/stt\";\nimport { type TTSProvider, ttsProviders } from \"@/models/tts\";\nimport { type VADProvider, vadProviders } from \"@/models/vad\";\nimport { PluginServer } from \"@/plugins/server/class\";\nimport type { PluginDefinition } from \"@/plugins/server/types\";\nimport type { SerializableValue } from \"@/shared/canon\";\nimport { lifeError } from \"@/shared/error\";\nimport * as op from \"@/shared/operation\";\nimport type { Todo } from \"@/shared/types\";\nimport type { TelemetryClient } from \"@/telemetry/clients/base\";\nimport { createTelemetryClient } from \"@/telemetry/clients/node\";\nimport { TransportNodeClient } from \"@/transport/client/node\";\nimport type { agentServerConfig } from \"./config\";\nimport type { AgentDefinition, AgentScope } from \"./types\";\n\nexport class AgentServer {\n  readonly def: AgentDefinition;\n  readonly id: string;\n  readonly sha: string;\n  readonly config: z.output<typeof agentServerConfig.schema>;\n  readonly transport: TransportNodeClient;\n  readonly storage = null;\n  readonly models: {\n    vad: InstanceType<VADProvider>;\n    stt: InstanceType<STTProvider>;\n    eou: InstanceType<EOUProvider>;\n    llm: InstanceType<LLMProvider>;\n    tts: InstanceType<TTSProvider>;\n  };\n  readonly plugins: Record<string, PluginServer<PluginDefinition>> = {};\n  readonly scope: AgentScope<AgentDefinition[\"scope\"]>;\n  readonly isRestart: boolean;\n  readonly telemetry: TelemetryClient;\n  readonly #initialPluginsContexts: Record<string, SerializableValue>;\n\n  constructor({\n    id,\n    sha,\n    definition,\n    scope,\n    config,\n    pluginsContexts,\n    isRestart,\n  }: {\n    id: string;\n    sha: string;\n    definition: AgentDefinition;\n    config: z.output<typeof agentServerConfig.schema>;\n    scope?: AgentScope<AgentDefinition[\"scope\"]>;\n    isRestart?: boolean;\n    pluginsContexts?: Record<string, SerializableValue>;\n  }) {\n    this.id = id;\n    this.sha = sha;\n    this.def = definition;\n    this.scope = scope ?? this.def.scope.schema.parse({});\n    this.config = config;\n    this.isRestart = isRestart ?? false;\n    this.#initialPluginsContexts = pluginsContexts ?? {};\n\n    // Initialize telemetry\n    this.telemetry = createTelemetryClient(\"agent.server\", {\n      agentId: id,\n      agentSha: this.sha,\n      agentName: this.def.name,\n      agentConfig: this.config,\n      transportProviderName: this.config.transport.provider,\n      llmProviderName: this.config.models.llm.provider,\n      sttProviderName: this.config.models.stt.provider,\n      eouProviderName: this.config.models.eou.provider,\n      ttsProviderName: this.config.models.tts.provider,\n      vadProviderName: this.config.models.vad.provider,\n    });\n\n    // Initialize transport\n    this.transport = new TransportNodeClient({\n      config: this.config.transport,\n      obfuscateErrors: true,\n      telemetry: this.telemetry,\n    });\n\n    // Initialize storage\n    // TODO\n\n    // Initialize models\n    const vadProvider = vadProviders[this.config.models.vad.provider];\n    const sttProvider = sttProviders[this.config.models.stt.provider];\n    const eouProvider = eouProviders[this.config.models.eou.provider];\n    const llmProvider = llmProviders[this.config.models.llm.provider];\n    const ttsProvider = ttsProviders[this.config.models.tts.provider];\n    this.models = {\n      vad: new vadProvider.class(this.config.models.vad),\n      stt: new sttProvider.class(this.config.models.stt),\n      eou: new eouProvider.class(this.config.models.eou as Todo),\n      llm: new llmProvider.class(this.config.models.llm as Todo),\n      tts: new ttsProvider.class(this.config.models.tts),\n    };\n\n    // Validate plugins\n    this.#initializePlugins();\n  }\n\n  #initializePlugins() {\n    // Validate plugins have unique names\n    const pluginNames = this.def.plugins.map((p) => p.name);\n    const duplicates = pluginNames.filter((name, index) => pluginNames.indexOf(name) !== index);\n    if (duplicates.length > 0) {\n      const uniqueDuplicates = [...new Set(duplicates)];\n      throw lifeError({\n        code: \"Validation\",\n        message: `Two or more plugins are named \"${uniqueDuplicates.join('\", \"')}\". Plugin names must be unique. (agent: '${this.def.name}')`,\n      });\n    }\n\n    // Validate plugin dependencies\n    for (const plugin of this.def.plugins) {\n      for (const dependency of plugin.dependencies) {\n        // - Ensure the plugin is provided\n        const depPlugin = this.def.plugins.find((p) => p.name === dependency.name);\n        if (!depPlugin) {\n          throw lifeError({\n            code: \"Validation\",\n            message: `Plugin '${plugin.name}' depends on plugin '${dependency.name}', but '${dependency.name}' is not registered. (agent: '${this.def.name}')`,\n          });\n        }\n      }\n    }\n\n    // Expose 'has-plugin-server' via RPC\n    this.transport.register({\n      name: \"agent.has-plugin-server\",\n      schema: {\n        input: z.object({ pluginName: z.string() }),\n        output: z.object({ hasServer: z.boolean() }),\n      },\n      execute: ({ pluginName }) => {\n        const plugin = this.plugins?.[pluginName];\n        if (!plugin) return op.success({ hasServer: false });\n        return op.success({ hasServer: true });\n      },\n    });\n  }\n\n  async start() {\n    return await this.telemetry.trace(\"AgentServer.start()\", async () => {\n      try {\n        // Create plugin servers\n        for (const definition of this.def.plugins) {\n          // Parse the initial context\n          const { error: errorContext, data: parsedContext } = definition.context.schema.safeParse(\n            this.#initialPluginsContexts?.[definition.name] ?? {},\n          );\n          if (errorContext) {\n            return op.failure({\n              code: \"Validation\",\n              message: `Invalid initial context value for plugin '${definition.name}'.`,\n              cause: errorContext,\n            });\n          }\n\n          // Parse the config\n          const { error: errorConfig, data: parsedConfig } = definition.config.schema.safeParse(\n            this.def.pluginConfigs?.[definition.name] ?? {},\n          );\n          if (errorConfig) {\n            return op.failure({\n              code: \"Validation\",\n              message: `Invalid config value for plugin '${definition.name}'.`,\n              cause: errorConfig,\n            });\n          }\n\n          const [errCreate, instance] = op.attempt(\n            () =>\n              new PluginServer({\n                agent: this,\n                definition,\n                config: parsedConfig,\n                context: parsedContext as SerializableValue,\n              }),\n          );\n          if (errCreate) return op.failure(errCreate);\n          this.plugins[definition.name] = instance;\n        }\n\n        // Start all plugin servers\n        const result = await Promise.all(Object.values(this.plugins).map((p) => p.start()));\n        const err = result.find((r) => r[0])?.[0];\n        if (err) return op.failure(err);\n\n        // Return that the agent server was started successfully\n        return op.success();\n      } catch (error) {\n        return op.failure({ code: \"Unknown\", cause: error });\n      }\n    });\n  }\n\n  async stop() {\n    return await this.telemetry.trace(\"AgentServer.stop()\", async (span) => {\n      try {\n        // Stop all plugins\n        await Promise.all(\n          Object.entries(this.plugins).map(([pluginId, plugin]) =>\n            plugin\n              .stop()\n              .catch((error) =>\n                span.log.error({ message: `Error stopping plugin ${pluginId}:`, error }),\n              ),\n          ),\n        );\n\n        // Disconnect transport\n        const [errLeave] = await this.transport.leaveRoom();\n        if (errLeave) return op.failure(errLeave);\n\n        // Return that the agent server was stopped successfully\n        return op.success();\n      } catch (error) {\n        return op.failure({ code: \"Unknown\", cause: error });\n      }\n    });\n  }\n}\n\n// notify: (\n//   { emit, context },\n//   params: {\n//     source: \"user\" | \"application\";\n//     behavior: \"inform\" | \"interrupt\" | \"decide\";\n//     message: string;\n//   },\n// ) => {\n//   // Insert the notification message\n//   const message = `${params.source === \"user\" ? \"User\" : \"Application\"} update: ${params.message}`;\n//   emit({\n//     type: \"operation.message\",\n//     data: {\n//       id: generateId(),\n//       role: params.source === \"user\" ? \"user\" : \"system\",\n//       message,\n//     },\n//   });\n\n//   // If the behavior is \"discrete\", return\n//   if (params.behavior === \"inform\") return;\n//   // Else, if the behavior is interrupt, run continue\n//   else if (params.behavior === \"interrupt\")\n//     emit({\n//       type: \"operation.continue\",\n//       data: {\n//         messages: context.messages,\n//         insertPolicy: \"abrupt-interrupt\",\n//         allowInterruption: true,\n//       },\n//     });\n//   // Else, if the behavior is decide, decide whether to make the notification interrupt or not\n//   else if (params.behavior === \"decide\") {\n//     emit({\n//       type: \"operation.decide\",\n//       data: { messages: [], insertPolicy: \"abrupt-interrupt\", allowInterruption: true },\n//     });\n//   }\n// },\n// ask: ({ emit, context }, message: string) => {\n//   emit({\n//     type: \"operation.message\",\n//     data: { id: generateId(), role: \"user\", message: message },\n//   });\n//   emit({ type: \"operation.continue\", data: { messages: context.messages } });\n// },\n// prompt: ({ emit, context }, message: string) => {\n//   emit({\n//     type: \"operation.message\",\n//     data: { id: generateId(), role: \"system\", message: message },\n//   });\n//   emit({ type: \"operation.continue\", data: { messages: context.messages } });\n// },\n","import z from \"zod\";\nimport type { AgentServer } from \"@/agent/server/class\";\nimport {\n  type PluginAccessor,\n  type PluginConfig,\n  type PluginContext,\n  type PluginContextListener,\n  type PluginDefinition,\n  type PluginDependenciesAccessor,\n  type PluginEvent,\n  type PluginEventSource,\n  type PluginEventsListener,\n  type PluginEventsSelector,\n  type PluginHandlerDefinition,\n  type PluginInternalEvent,\n  pluginEventInputSchema,\n} from \"@/plugins/server/types\";\nimport { AsyncQueue } from \"@/shared/async-queue\";\nimport { canon, type SerializableValue } from \"@/shared/canon\";\nimport { deepClone } from \"@/shared/deep-clone\";\nimport { lifeError } from \"@/shared/error\";\nimport { toMethodName } from \"@/shared/method-name\";\nimport * as op from \"@/shared/operation\";\nimport { newId } from \"@/shared/prefixed-id\";\nimport { RollingBuffer } from \"@/shared/rolling-buffer\";\nimport type { Any, Todo } from \"@/shared/types\";\nimport type { TelemetryClient } from \"@/telemetry/clients/base\";\nimport { createTelemetryClient } from \"@/telemetry/clients/node\";\n\nexport class PluginServer<const PluginDef extends PluginDefinition> {\n  readonly def: PluginDef;\n  readonly agent: AgentServer;\n  readonly config: PluginConfig<PluginDef[\"config\"], \"output\">;\n  context: PluginContext<PluginDef[\"context\"], \"output\">;\n  readonly telemetry: TelemetryClient;\n  readonly queue = new AsyncQueue<PluginEvent<PluginDef[\"events\"], \"output\">>();\n  readonly eventsListeners = new Map<string, PluginEventsListener>();\n  readonly contextListeners = new Map<string, PluginContextListener>();\n  readonly streamHandlersQueues: AsyncQueue<PluginEvent<PluginDef[\"events\"], \"output\">>[] = [];\n  readonly externalInterceptHandlers: {\n    dependent: PluginServer<PluginDefinition>;\n    handler: PluginHandlerDefinition;\n  }[] = [];\n  readonly #internalAccessor: PluginAccessor<\n    PluginDef,\n    { type: \"server\"; name: PluginDef[\"name\"] }\n  >;\n  readonly #waitProcessingResolvers = new Map<string, Set<() => void>>();\n  readonly #waitResultResolvers = new Map<\n    string,\n    Map<string, Set<(result: op.OperationResult<unknown>) => void>>\n  >();\n  readonly #waitProcessingHistory = new RollingBuffer<string>(1000);\n  readonly #waitResultHistory = new RollingBuffer<{\n    eventId: string;\n    handlerName: string;\n    result: op.OperationResult<unknown>;\n  }>(1000);\n  readonly #handlersStates = new Map<string, unknown>();\n\n  constructor({\n    agent,\n    definition,\n    config,\n    context = {},\n  }: {\n    agent: AgentServer;\n    definition: PluginDef;\n    config: PluginConfig<PluginDef[\"config\"], \"input\">;\n    context: SerializableValue;\n  }) {\n    this.def = definition;\n    this.agent = agent;\n\n    // Validate config\n    const { error: errConfig, data: parsedConfig } = definition.config.schema.safeParse(config);\n    if (errConfig)\n      throw lifeError({\n        code: \"Validation\",\n        message: `Invalid config provided to plugin server '${definition.name}'.`,\n        cause: errConfig,\n      });\n    this.config = parsedConfig as PluginConfig<PluginDef[\"config\"], \"output\">;\n\n    // Validate context\n    const { error: errContext, data: parsedContext } = definition.context.schema.safeParse(context);\n    if (errContext)\n      throw lifeError({\n        code: \"Validation\",\n        message: `Invalid context provided to plugin server '${definition.name}'.`,\n        cause: errContext,\n      });\n    this.context = parsedContext as PluginContext<PluginDef[\"context\"], \"output\">;\n\n    // Initialize telemetry\n    this.telemetry = createTelemetryClient(\"plugin.server\", {\n      agentId: agent.id,\n      agentSha: agent.sha,\n      agentName: agent.def.name,\n      agentConfig: agent.config,\n      transportProviderName: agent.config.transport.provider,\n      llmProviderName: agent.config.models.llm.provider,\n      sttProviderName: agent.config.models.stt.provider,\n      eouProviderName: agent.config.models.eou.provider,\n      ttsProviderName: agent.config.models.tts.provider,\n      vadProviderName: agent.config.models.vad.provider,\n      pluginName: definition.name,\n      pluginServerConfig: this.config,\n    });\n\n    // Initialize client RPC interface\n    this.#initClientRPC();\n\n    // Instantiate an internal accessor instance to be used outside of handlers\n    const [errAccessor, accessor] = this.getAccessor({\n      type: \"server\",\n      name: this.def.name,\n    });\n    if (errAccessor) throw errAccessor;\n    this.#internalAccessor = accessor;\n  }\n\n  /**\n   * Produces an accessor object, exposing methods to interact safely with the plugin\n   * from a given source (plugin, handler, client).\n   * @param source - The source accessing the plugin.\n   * @param handlerAccess - The access mode for the handler.\n   * @returns An accessor object.\n   */\n  getAccessor<Source extends PluginEventSource, HandlerAccess extends \"read\" | \"write\" = \"read\">(\n    source: Source,\n    handlerAccess?: HandlerAccess,\n  ) {\n    // config\n    const [errClone, clonedConfig] = op.attempt(() => deepClone(this.config));\n    if (errClone) return op.failure(errClone);\n\n    // context.onChange()\n    const contextOnChange = ((selector, callback) => {\n      const id = newId(\"listener\");\n      this.contextListeners.set(id, { id, callback, selector });\n      return op.success(() => this.contextListeners.delete(id));\n    }) satisfies PluginAccessor<PluginDef, { type: \"server\"; name: string }>[\"context\"][\"onChange\"];\n\n    // context.get()\n    const contextGet = (() => op.attempt(() => deepClone(this.context))) satisfies PluginAccessor<\n      PluginDef,\n      { type: \"server\"; name: string }\n    >[\"context\"][\"get\"];\n\n    // context.set()\n    const contextSet = ((valueOrUpdater) => {\n      // Snapshot the old context value\n      const [errOld, oldContext] = op.attempt(() => deepClone(this.context));\n      if (errOld) return op.failure(errOld);\n\n      // Set the new context value\n      if (typeof valueOrUpdater === \"function\") this.context = valueOrUpdater(oldContext);\n      else this.context = valueOrUpdater;\n\n      Promise.all([\n        // Notify context change listeners\n        Array.from(this.contextListeners.values()).map(async (listener) => {\n          try {\n            const newSelectedValue = listener.selector(this.context) as SerializableValue;\n            const oldSelectedValue = listener.selector(oldContext) as SerializableValue;\n            // Only call if value actually changed\n            const [errEqual, equal] = canon.equal(newSelectedValue, oldSelectedValue);\n            if (errEqual) return op.failure(errEqual);\n            if (equal) await listener.callback(deepClone(this.context), deepClone(oldContext));\n          } catch (error) {\n            this.telemetry.log.error({\n              message: `Error while notifying context listeners in plugin '${this.def.name}'.`,\n              error,\n            });\n          }\n        }),\n        // Send new context value updates via RPC\n        this.agent.transport.call({\n          name: `plugin.${this.def.name}.context.changed`,\n          schema: {\n            input: z.object({ value: z.any(), timestamp: z.number() }),\n          },\n          input: { value: this.context, timestamp: Date.now() },\n        }),\n      ]);\n\n      return op.success();\n    }) satisfies PluginAccessor<\n      PluginDef,\n      { type: \"server\"; name: string },\n      \"write\"\n    >[\"context\"][\"set\"];\n\n    // events.emit()\n    const eventsEmit = ((event) => {\n      // Validate event shape\n      const { error: errEvent, data: parsedEvent } = pluginEventInputSchema.safeParse(event);\n      if (errEvent)\n        return op.failure({\n          code: \"Validation\",\n          message: \"Invalid event shape for event.\",\n          cause: errEvent,\n        });\n\n      // If not internal, ensure the event is not an internal event\n      const isInternal = source.type === \"server\" && source.name === this.def.name;\n      if (!isInternal && parsedEvent.name.startsWith(\"plugin.\"))\n        return op.failure({\n          code: \"Validation\",\n          message: \"Internal events cannot be emitted from outside the plugin.\",\n        });\n\n      // Ensure the event type exists\n      const eventDef = this.def.events?.find((e) => e.name === parsedEvent.name);\n      if (!eventDef)\n        return op.failure({\n          code: \"Validation\",\n          message: `Event of type '${parsedEvent.name}' not found.`,\n        });\n\n      // Validate the event data\n      let parsedData: unknown | null = null;\n      if (eventDef.dataSchema) {\n        const { error: errData, data } = eventDef.dataSchema.safeParse(parsedEvent.data);\n        parsedData = data;\n        if (errData)\n          return op.failure({\n            code: \"Validation\",\n            message: `Invalid event data shape for '${parsedEvent.name}' event.`,\n            cause: errData,\n          });\n      }\n\n      // Generate an id for the event\n      const outputEvent: PluginEvent<PluginDef[\"events\"], \"output\"> = {\n        id: newId(\"event\"),\n        name: parsedEvent.name,\n        urgent: parsedEvent.urgent,\n        data: parsedData as Any,\n        created: { at: Date.now(), by: source },\n        edited: false,\n        dropped: false,\n        contextChanges: [],\n      };\n\n      // Append to queue\n      if (outputEvent.urgent) this.queue.pushFirst(outputEvent);\n      else this.queue.push(outputEvent);\n\n      // Return the id\n      return op.success(outputEvent.id);\n    }) satisfies PluginAccessor<PluginDef, { type: \"server\"; name: string }>[\"events\"][\"emit\"];\n\n    // events.on()\n    const eventsOn = ((selector, callback, includeDropped = false) => {\n      const id = newId(\"listener\");\n      this.eventsListeners.set(id, { id, callback, selector, includeDropped });\n      return op.success(() => this.eventsListeners.delete(id));\n    }) satisfies PluginAccessor<PluginDef, { type: \"server\"; name: string }>[\"events\"][\"on\"];\n\n    // events.once()\n    const eventsOnce = ((selector, callback, includeDropped = false) => {\n      const [errOn, unsubscribe] = eventsOn(\n        selector,\n        async (event) => {\n          unsubscribe?.();\n          await callback(event);\n        },\n        includeDropped,\n      );\n      if (errOn) return op.failure(errOn);\n      return op.success(unsubscribe);\n    }) satisfies PluginAccessor<PluginDef, { type: \"server\"; name: string }>[\"events\"][\"once\"];\n\n    // events.waitForProcessing()\n    const eventsWaitForProcessing = (async (eventId) => {\n      // Holds resolver, and a cleanup function\n      let resolver: (() => void) | undefined;\n      const cleanupResolver = () => {\n        if (!resolver) return;\n        this.#waitProcessingResolvers.get(eventId)?.delete(resolver);\n        if (this.#waitProcessingResolvers.get(eventId)?.size === 0)\n          this.#waitProcessingResolvers.delete(eventId);\n      };\n\n      try {\n        // If the event was already processed recently, return success immediately\n        if (this.#waitProcessingHistory.get().includes(eventId)) return op.success();\n\n        // Else register a resolver, and wait until resolve or timeout\n        const resolverPromise = new Promise<op.OperationResult<void>>(\n          (r) => (resolver = () => void r(op.success())),\n        );\n        if (!resolver) throw new Error(\"Resolver not found. Shouldn't happen.\");\n        if (!this.#waitProcessingResolvers.has(eventId))\n          this.#waitProcessingResolvers.set(eventId, new Set());\n        this.#waitProcessingResolvers.get(eventId)?.add(resolver);\n\n        const timeoutPromise = new Promise<op.OperationResult<void>>((resolve) => {\n          setTimeout(() => {\n            resolve(\n              op.failure({\n                code: \"Timeout\",\n                message: `Waiting for event '${eventId}' processing timed out.`,\n                isPublic: true,\n              }),\n            );\n          }, 15_000);\n        });\n\n        const [err] = await Promise.race([resolverPromise, timeoutPromise]);\n\n        // Return the error if any\n        if (err) return op.failure(err);\n\n        // Append the event id to the processing history\n        this.#waitProcessingHistory.add(eventId);\n\n        // Return success\n        return op.success();\n      } catch (error) {\n        return op.failure({ code: \"Unknown\", cause: error });\n      } finally {\n        cleanupResolver();\n      }\n    }) satisfies PluginAccessor<\n      PluginDef,\n      { type: \"server\"; name: string }\n    >[\"events\"][\"waitForProcessing\"];\n\n    // events.waitForResult()\n    const eventsWaitForResult = (async (eventId, handlerName) => {\n      // Holds resolver, and a cleanup function\n      let resolver: ((result: op.OperationResult<Any>) => void) | undefined;\n      const cleanupResolver = () => {\n        if (!resolver) return;\n        this.#waitResultResolvers.get(eventId)?.get(handlerName)?.delete(resolver);\n        if (this.#waitResultResolvers.get(eventId)?.get(handlerName)?.size === 0)\n          this.#waitResultResolvers.get(eventId)?.delete(handlerName);\n        if (this.#waitResultResolvers.get(eventId)?.size === 0)\n          this.#waitResultResolvers.delete(eventId);\n      };\n\n      try {\n        // If the event was already processed recently, return result immediately\n        const historyItem = this.#waitResultHistory\n          .get()\n          .find((h) => h.eventId === eventId && h.handlerName === handlerName);\n        if (historyItem) return historyItem.result;\n\n        // Else register a resolver and wait until resolve or timeout\n        const resolverPromise = new Promise<op.OperationResult<Any>>((r) => (resolver = r));\n        if (!resolver) throw new Error(\"Resolver not found. Shouldn't happen.\");\n        if (!this.#waitResultResolvers.has(eventId))\n          this.#waitResultResolvers.set(eventId, new Map());\n        if (!this.#waitResultResolvers.get(eventId)?.get(handlerName))\n          this.#waitResultResolvers.get(eventId)?.set(handlerName, new Set());\n        this.#waitResultResolvers.get(eventId)?.get(handlerName)?.add(resolver);\n\n        const timeoutPromise = new Promise<op.OperationResult<void>>((resolve) => {\n          setTimeout(() => {\n            resolve(\n              op.failure({\n                code: \"Timeout\",\n                message: `Waiting for event '${eventId}' result timed out.`,\n                isPublic: true,\n              }),\n            );\n          }, 15_000);\n        });\n\n        const result = await Promise.race([resolverPromise, timeoutPromise]);\n\n        // Append the result to the history\n        this.#waitResultHistory.add({ eventId, handlerName, result });\n\n        // Return result\n        return result;\n      } catch (error) {\n        return op.failure({ code: \"Unknown\", cause: error });\n      } finally {\n        cleanupResolver();\n      }\n    }) satisfies PluginAccessor<\n      PluginDef,\n      { type: \"server\"; name: string }\n    >[\"events\"][\"waitForResult\"];\n\n    if (source.type === \"handler\") {\n      return op.success({\n        config: clonedConfig,\n        context: {\n          get: contextGet,\n          ...(handlerAccess === \"write\" ? { set: contextSet } : {}),\n          onChange: contextOnChange,\n        },\n        events: {\n          emit: eventsEmit,\n          waitForResult: eventsWaitForResult,\n          waitForProcessing: eventsWaitForProcessing,\n        },\n      } as unknown as PluginAccessor<PluginDef, Source, HandlerAccess>);\n    }\n\n    if (source.type === \"server\") {\n      return op.success({\n        config: clonedConfig,\n        context: {\n          get: contextGet,\n          onChange: contextOnChange,\n        },\n        events: {\n          emit: eventsEmit,\n          on: eventsOn,\n          once: eventsOnce,\n          waitForResult: eventsWaitForResult,\n          waitForProcessing: eventsWaitForProcessing,\n        },\n      } as unknown as PluginAccessor<PluginDef, Source, HandlerAccess>);\n    }\n\n    if (source.type === \"client\") {\n      return op.success({\n        config: clonedConfig,\n        context: {\n          get: contextGet,\n          onChange: contextOnChange,\n        },\n        events: {\n          emit: eventsEmit,\n          on: eventsOn,\n          once: eventsOnce,\n          waitForResult: eventsWaitForResult,\n          waitForProcessing: eventsWaitForProcessing,\n        },\n      } as unknown as PluginAccessor<PluginDef, Source, HandlerAccess>);\n    }\n\n    return op.failure({\n      code: \"NotFound\",\n      message: `Unknown source type '${(source as { type: string }).type}'.`,\n    });\n  }\n\n  /**\n   * Produces a map of dependencies' accessors, see `getAccessor()`.\n   * @param source - The source accessing the dependencies.\n   * @returns A map of dependencies' accessors.\n   */\n  getDependenciesAccessors<Source extends PluginEventSource>(source: Source) {\n    const dependenciesAccessors = {} as PluginDependenciesAccessor<\n      PluginDef[\"dependencies\"],\n      Source\n    >;\n    for (const dependencyDef of this.def.dependencies ?? []) {\n      const depServer = this.agent.plugins?.[toMethodName(dependencyDef.name)];\n      if (!depServer)\n        return op.failure({\n          code: \"NotFound\",\n          message: `Failed to obtain server instance for dependency plugin '${dependencyDef.name}'. Shouldn't happen.`,\n        });\n      const [errAccessor, accessor] = depServer.getAccessor(source);\n      if (errAccessor) return op.failure(errAccessor);\n      // @ts-expect-error\n      dependenciesAccessors[dependencyDef.name] = accessor;\n    }\n\n    return op.success(dependenciesAccessors);\n  }\n\n  async start() {\n    return await this.telemetry.trace(`plugin.${this.def.name}.start()`, async () => {\n      // 1. Initialize 'stream()' handlers sub-queues\n      const streamHandlers = this.def.handlers.filter((h) => h.mode === \"stream\");\n      for (const handler of streamHandlers) {\n        const queue = new AsyncQueue<PluginEvent<PluginDef[\"events\"], \"output\">>();\n        this.streamHandlersQueues.push(queue);\n        (async () => {\n          for await (const event of queue) await this.#executeHandler(handler, event);\n        })();\n      }\n\n      // 2. Register 'intercept' handlers onto dependency plugins\n      const interceptHandlers = this.def.handlers.filter((h) => h.mode === \"intercept\");\n      for (const handler of interceptHandlers) {\n        for (const dependencyDef of this.def.dependencies ?? []) {\n          const dependency = this.agent.plugins?.[dependencyDef.name];\n          if (!dependency) {\n            this.telemetry.log.error(\n              lifeError({\n                code: \"NotFound\",\n                message: `Failed to obtain server instance for dependency plugin '${dependencyDef.name}'. Shouldn't happen.`,\n              }),\n            );\n            continue;\n          }\n          dependency.externalInterceptHandlers.push({\n            dependent: this as unknown as PluginServer<PluginDefinition>,\n            handler,\n          });\n        }\n      }\n\n      // 3. Run the synchronous event loop with 'block' handlers and remote 'intercept' handlers\n      (async () => {\n        for await (const event of this.queue) {\n          try {\n            // Run external 'intercept' handlers\n            for (const { handler, dependent } of this.externalInterceptHandlers) {\n              // biome-ignore lint/performance/noAwaitInLoops: sequential execution expected here\n              await this.#executeHandler(handler, event, dependent, (result) => {\n                if (result.type === \"drop\") {\n                  if (event.dropped)\n                    event.dropped = {\n                      at: Date.now(),\n                      by: {\n                        plugin: this.def.name,\n                        handler: handler.name,\n                      },\n                      reason: result.reason,\n                    };\n                } else if (result.type === \"next\") {\n                  const [errClone, oldData] = op.attempt(() => deepClone(event.data));\n                  if (errClone) return op.failure(errClone);\n                  if (!event.edited) event.edited = [];\n                  event.edited.push({\n                    at: Date.now(),\n                    by: {\n                      plugin: this.def.name,\n                      handler: handler.name,\n                    },\n                    reason: result.reason,\n                    dataBefore: oldData,\n                    dataAfter: result.data,\n                  });\n                  event.data = result.data;\n                }\n              });\n              if (event.dropped) break;\n            }\n\n            // If the event was not dropped\n            if (!event.dropped) {\n              // Run the 'block' handlers\n              const blockHandlers = this.def.handlers.filter((h) => h.mode === \"block\");\n              for (const handler of blockHandlers) {\n                // Take a snapshot of the context data before executing the handler\n                const [errOld, oldContext] = op.attempt(() => deepClone(this.context));\n                if (errOld) {\n                  this.telemetry.log.error({ error: errOld });\n                  continue;\n                }\n                // Execute the handler\n                // biome-ignore lint/performance/noAwaitInLoops: sequential execution expected here\n                await this.#executeHandler(handler, event);\n                // If the context has changed, record the change\n                const [errEqual, equal] = canon.equal(\n                  this.context as SerializableValue,\n                  oldContext as SerializableValue,\n                );\n                if (errEqual) {\n                  this.telemetry.log.error({ error: errEqual });\n                  continue;\n                }\n                if (!equal) {\n                  if (!event.contextChanges) event.contextChanges = [];\n                  event.contextChanges.push({\n                    at: Date.now(),\n                    byHandler: handler.name,\n                    valueBefore: oldContext,\n                    valueAfter: this.context,\n                  });\n                }\n              }\n              // Feed the 'stream' handlers' queues\n              for (const queue of this.streamHandlersQueues) queue.push(event);\n            }\n\n            // Notify events listeners\n            await Promise.all(\n              Array.from(this.eventsListeners.values()).map(\n                async ({ id, callback, selector, includeDropped }) => {\n                  // If the event matches the listener selector\n                  if (this.#eventMatchesSelector(event, selector)) {\n                    // And the event was not dropped or the listener includes dropped events\n                    if (!event.dropped || includeDropped) {\n                      // If remote, send the event via RPC\n                      if (callback === \"remote\") {\n                        const [err] = await this.agent.transport.call({\n                          name: `plugin.${this.def.name}.events.callback`,\n                          schema: {\n                            input: z.object({\n                              listenerId: z.string(),\n                              event: pluginEventInputSchema,\n                            }),\n                          },\n                          input: { listenerId: id, event },\n                        });\n                        if (err)\n                          this.telemetry.log.error({\n                            message: `Error while steaming event to remote listener in plugin '${this.def.name}'.`,\n                            error: err,\n                          });\n                      }\n                      // Else, call the local callback\n                      else await callback(event);\n                    }\n                  }\n                },\n              ),\n            );\n\n            // Resolve processing waiters\n            const waiters = this.#waitProcessingResolvers.get(event.id) ?? [];\n            for (const resolver of waiters) resolver();\n          } catch (error) {\n            this.telemetry.log.error({\n              message: `Unknown error while executing event in plugin '${this.def.name}'.`,\n              error,\n            });\n          }\n        }\n      })();\n\n      // 4. Start the queue (send the 'plugin.start' event)\n      const [errEmit, eventId] = this.#emitInternalEvent({\n        name: \"plugin.start\",\n        data: { isRestart: this.agent.isRestart, restartCount: 0 },\n      });\n      if (errEmit) return op.failure(errEmit);\n      const [errWaitForResult] = await this.#internalAccessor.events.waitForProcessing(eventId);\n      if (errWaitForResult) return op.failure(errWaitForResult);\n\n      return op.success();\n    });\n  }\n\n  async stop() {\n    return await this.telemetry.trace(`plugin.${this.def.name}.stop()`, async () => {\n      // 1. Send the 'plugin.stop' event at the front of the queue\n      const [errEmit, eventId] = this.#emitInternalEvent({ name: \"plugin.stop\", urgent: true });\n      if (errEmit) return op.failure(errEmit);\n      const [errWaitForResult] = await this.#internalAccessor.events.waitForProcessing(eventId);\n      if (errWaitForResult) return op.failure(errWaitForResult);\n\n      // 2. Stop the main queue and 'stream' handlers queues\n      this.queue.stop();\n      for (const queue of this.streamHandlersQueues) queue.stop();\n\n      // 3. Clear handlers state\n      this.#handlersStates.clear();\n\n      // 4. Return that the plugin was stopped successfully\n      return op.success();\n    });\n  }\n\n  #getHandlerState(\n    handler: PluginDef[\"handlers\"][number],\n    accessor: PluginAccessor<\n      PluginDef,\n      { type: \"handler\"; plugin: string; handler: string; event: string }\n    >,\n  ) {\n    const savedState = this.#handlersStates.get(handler.name);\n    if (savedState) return savedState;\n    const initialState =\n      typeof handler.state === \"function\"\n        ? handler.state({ config: accessor.config })\n        : (handler.state ?? {});\n    this.#handlersStates.set(handler.name, initialState);\n    return initialState;\n  }\n\n  #emitInternalEvent(event: PluginInternalEvent<\"input\">) {\n    // Any is used here, because emit() type excludes internal events\n    const [errEmit, eventId] = this.#internalAccessor.events.emit(event as Any);\n    if (errEmit) return op.failure(errEmit);\n    return op.success(eventId);\n  }\n\n  async #executeHandler<Event extends PluginEvent<PluginDef[\"events\"], \"output\">>(\n    handler: PluginDef[\"handlers\"][number],\n    event: Event,\n    dependency?: PluginServer<PluginDefinition>,\n    onInterceptResult?: (\n      result:\n        | { type: \"drop\"; reason: string }\n        | { type: \"next\"; data: Event[\"data\"]; reason: string },\n    ) => void,\n  ) {\n    // Run the handler onEvent function\n    const result = await (async () => {\n      const [errClone, clonedEvent] = op.attempt(() => deepClone(event));\n      if (errClone) return op.failure(errClone);\n      const handlerAccess = handler.mode === \"block\" ? \"write\" : \"read\";\n      const [errAccessor, accessor] = this.getAccessor(\n        {\n          type: \"handler\",\n          plugin: this.def.name,\n          handler: handler.name,\n          event: event.name,\n        },\n        handlerAccess,\n      );\n      if (errAccessor) return op.failure(errAccessor);\n      const state = this.#getHandlerState(handler, accessor);\n      const [errDependency, dependencyAccessor] = dependency\n        ? dependency.getAccessor({ type: \"server\", name: dependency.def.name })\n        : op.success({});\n      if (errDependency) return op.failure(errDependency);\n      const [errDependencies, dependenciesAccessor] = this.getDependenciesAccessors({\n        type: \"handler\",\n        plugin: this.def.name,\n        handler: handler.name,\n        event: event.name,\n      });\n      if (errDependencies) return op.failure(errDependencies);\n      const drop = (reason: string) => onInterceptResult?.({ type: \"drop\", reason });\n      const next = (data: PluginEvent<PluginDef[\"events\"], \"output\">[\"data\"], reason: string) =>\n        onInterceptResult?.({ type: \"next\", data, reason });\n      return await this.telemetry.trace(\n        `plugin.${this.def.name}.handler.${handler.name}`,\n        async (span) =>\n          op.attempt(\n            async () =>\n              await handler.onEvent({\n                event: clonedEvent,\n                plugin: op.toPublic(accessor),\n                state,\n                telemetry: span,\n                agent: op.toPublic(this.agent),\n                ...(handler.mode === \"intercept\"\n                  ? { drop, next, dependency: dependencyAccessor }\n                  : { dependencies: dependenciesAccessor }),\n              } as Todo),\n          ),\n      );\n    })();\n\n    // Log the error if any, and emit a plugin.error event\n    if (result[0]) {\n      this.telemetry.log.error({\n        message: `Error while executing ${handler.mode} handler '${handler.name}' in plugin '${this.def.name}'.`,\n        error: result[0],\n      });\n      this.#emitInternalEvent({ name: \"plugin.error\", data: { error: result[0], event } });\n    }\n\n    // Resolve result waiters\n    const waiters = this.#waitResultResolvers.get(event.id)?.get(handler.name) ?? [];\n    for (const resolver of waiters) resolver(result);\n  }\n\n  #initClientRPC() {\n    const [errAccessor, accessor] = this.getAccessor({\n      type: \"client\",\n      name: this.def.name,\n    });\n    if (errAccessor) return op.failure(errAccessor);\n\n    // Expose context via RPC\n    this.agent.transport.register({\n      name: `plugin.${this.def.name}.context.get`,\n      schema: { output: z.object().loose() },\n      execute: () => op.success({ value: this.context, timestamp: Date.now() }),\n    });\n\n    // Expose 'events.emit()' via RPC\n    this.agent.transport.register({\n      name: `plugin.${this.def.name}.events.emit`,\n      schema: {\n        input: pluginEventInputSchema,\n        output: z.object({ id: z.string() }),\n      },\n      execute: async (input) => {\n        const [err, id] = await accessor.events.emit(input as Any);\n        if (err) return op.failure(err);\n        return op.success({ id });\n      },\n    });\n\n    // Setup events subscriptions via RPC\n    this.agent.transport.register({\n      name: `plugin.${this.def.name}.events.subscribe`,\n      schema: {\n        input: z.object({\n          listenerId: z.string(),\n          selector: z.any(),\n          includeDropped: z.boolean().prefault(false),\n        }),\n      },\n      execute: (input) => {\n        const { listenerId, selector, includeDropped } = input;\n        this.eventsListeners.set(listenerId, {\n          id: listenerId,\n          callback: \"remote\",\n          selector,\n          includeDropped,\n        });\n        return op.success();\n      },\n    });\n    this.agent.transport.register({\n      name: `plugin.${this.def.name}.events.unsubscribe`,\n      schema: { input: z.object({ listenerId: z.string() }) },\n      execute: (input) => {\n        const { listenerId } = input;\n        this.eventsListeners.delete(listenerId);\n        return op.success();\n      },\n    });\n\n    // Expose events waitForProcessing via RPC\n    this.agent.transport.register({\n      name: `plugin.${this.def.name}.events.waitForProcessing`,\n      schema: { input: z.object({ eventId: z.string() }) },\n      execute: async (input) => await accessor.events.waitForProcessing(input.eventId),\n    });\n    this.agent.transport.register({\n      name: `plugin.${this.def.name}.events.waitForResult`,\n      schema: {\n        input: z.object({ eventId: z.string(), handlerName: z.string() }),\n        output: z.object().loose(),\n      },\n      execute: async (input) =>\n        (await accessor.events.waitForResult(\n          input.eventId,\n          input.handlerName,\n        )) as op.OperationResult<Record<string, unknown>>,\n    });\n  }\n\n  #eventMatchesSelector(\n    event: PluginEvent<PluginDef[\"events\"], \"output\">,\n    selector: PluginEventsSelector<PluginDef[\"events\"]>,\n  ) {\n    const isAllSelector = selector === \"*\";\n    const isArraySelectorAndIncludesEvent =\n      Array.isArray(selector) && selector.includes(event.name);\n    const isObjectSelectorAndIncludesEvent =\n      typeof selector === \"object\" &&\n      \"include\" in selector &&\n      (selector.include === \"*\" || selector.include.includes(event.name));\n    const isObjectSelectorAndExcludesEvent =\n      typeof selector === \"object\" &&\n      \"exclude\" in selector &&\n      selector.exclude?.includes(event.name);\n    return (\n      isAllSelector ||\n      isArraySelectorAndIncludesEvent ||\n      (isObjectSelectorAndIncludesEvent && !isObjectSelectorAndExcludesEvent)\n    );\n  }\n}\n","/**\n * Throws if executed in a browser context.\n * @param {string} featureName  Name of the feature that must only run on the server\n */\nexport function ensureServer(featureName: string) {\n  const isBrowser = typeof window !== \"undefined\" && typeof window.document !== \"undefined\";\n  if (isBrowser) {\n    throw new Error(`❌ \"${featureName}\" is a server-only and must not run in the browser.`);\n  }\n}\n","import { ensureServer } from \"@/shared/ensure-server\";\n\nensureServer(\"transport.client.node\");\n\nimport type { z } from \"zod\";\nimport type { TelemetryClient } from \"@/telemetry/clients/base\";\nimport { TransportClientBase } from \"../base\";\nimport type { transportNodeConfig } from \"../config/node\";\nimport { LiveKitNodeClient } from \"../providers/livekit/node\";\n\n// Providers\nexport const nodeTransportProviders = {\n  livekit: LiveKitNodeClient,\n} as const;\n\n// Transport\nexport class TransportNodeClient extends TransportClientBase {\n  constructor({\n    config,\n    obfuscateErrors = false,\n    telemetry = null,\n  }: {\n    config: z.output<(typeof transportNodeConfig)[\"schema\"]>;\n    obfuscateErrors?: boolean;\n    telemetry?: TelemetryClient | null;\n  }) {\n    const ProviderClass = nodeTransportProviders[config.provider];\n    super({ provider: new ProviderClass(config), obfuscateErrors, telemetry });\n  }\n}\n"],"mappings":"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","names":["z","telemetry","z"]}