import { createRequire } from "node:module"; import { resolveStateDir } from "../../config/paths.js"; import { transcribeAudioFile } from "../../media-understanding/transcribe-audio.js"; import { textToSpeechTelephony } from "../../tts/tts.js"; import { createRuntimeChannel } from "./runtime-channel.js"; import { createRuntimeConfig } from "./runtime-config.js"; import { createRuntimeEvents } from "./runtime-events.js"; import { createRuntimeLogging } from "./runtime-logging.js"; import { createRuntimeMedia } from "./runtime-media.js"; import { createRuntimeSystem } from "./runtime-system.js"; import { createRuntimeTools } from "./runtime-tools.js"; import type { PluginRuntime } from "./types.js"; let cachedVersion: string | null = null; function resolveVersion(): string { if (cachedVersion) { return cachedVersion; } try { const require = createRequire(import.meta.url); const pkg = require("../../../package.json") as { version?: string }; cachedVersion = pkg.version ?? "unknown"; return cachedVersion; } catch { cachedVersion = "unknown"; return cachedVersion; } } export function createPluginRuntime(): PluginRuntime { const runtime = { version: resolveVersion(), config: createRuntimeConfig(), system: createRuntimeSystem(), media: createRuntimeMedia(), tts: { textToSpeechTelephony }, stt: { transcribeAudioFile }, tools: createRuntimeTools(), channel: createRuntimeChannel(), events: createRuntimeEvents(), logging: createRuntimeLogging(), state: { resolveStateDir }, } satisfies PluginRuntime; return runtime; } export type { PluginRuntime } from "./types.js";