diff --git a/agent/package.json b/agent/package.json index 1658719a88a..ded4b56e05d 100644 --- a/agent/package.json +++ b/agent/package.json @@ -74,6 +74,7 @@ "@elizaos/plugin-3d-generation": "workspace:*", "@elizaos/plugin-fuel": "workspace:*", "@elizaos/plugin-avalanche": "workspace:*", + "@elizaos/plugin-video-generation": "workspace:*", "@elizaos/plugin-web-search": "workspace:*", "@elizaos/plugin-letzai": "workspace:*", "@elizaos/plugin-thirdweb": "workspace:*", diff --git a/agent/src/index.ts b/agent/src/index.ts index 0e297bc7187..ecab1ddd54a 100644 --- a/agent/src/index.ts +++ b/agent/src/index.ts @@ -142,10 +142,6 @@ function tryLoadFile(filePath: string): string | null { } } -function isAllStrings(arr: unknown[]): boolean { - return Array.isArray(arr) && arr.every((item) => typeof item === "string"); -} - export async function loadCharacters( charactersArg: string ): Promise { @@ -231,16 +227,9 @@ export async function loadCharacters( } // Handle plugins - if (isAllStrings(character.plugins)) { - elizaLogger.info("Plugins are: ", character.plugins); - const importedPlugins = await Promise.all( - character.plugins.map(async (plugin) => { - const importedPlugin = await import(plugin); - return importedPlugin.default; - }) - ); - character.plugins = importedPlugins; - } + character.plugins = await handlePluginImporting( + character.plugins + ); loadedCharacters.push(character); elizaLogger.info( @@ -263,6 +252,36 @@ export async function loadCharacters( return loadedCharacters; } +async function handlePluginImporting(plugins: string[]) { + if (plugins.length > 0) { + elizaLogger.info("Plugins are: ", plugins); + const importedPlugins = await Promise.all( + plugins.map(async (plugin) => { + try { + const importedPlugin = await import(plugin); + const functionName = + plugin + .replace("@elizaos/plugin-", "") + .replace(/-./g, (x) => x[1].toUpperCase()) + + "Plugin"; // Assumes plugin function is camelCased with Plugin suffix + return ( + importedPlugin.default || importedPlugin[functionName] + ); + } catch (importError) { + elizaLogger.error( + `Failed to import plugin: ${plugin}`, + importError + ); + return []; // Return null for failed imports + } + }) + ); + return importedPlugins; + } else { + return []; + } +} + export function getTokenForProvider( provider: ModelProviderName, character: Character @@ -921,7 +940,10 @@ const startAgents = async () => { } // upload some agent functionality into directClient - directClient.startAgent = async (character: Character) => { + directClient.startAgent = async (character) => { + // Handle plugins + character.plugins = await handlePluginImporting(character.plugins); + // wrap it so we don't have to inject directClient later return startAgent(character, directClient); };