From 9611d1be61137b49e97e9adb7e728b068756225d Mon Sep 17 00:00:00 2001 From: Jason Separovic Date: Mon, 13 Jan 2025 16:56:18 -0800 Subject: [PATCH 1/3] add POST /agents and DELETE /agents/:agentId --- packages/client-direct/src/api.ts | 39 +++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/packages/client-direct/src/api.ts b/packages/client-direct/src/api.ts index c19ac5279c..55fc024b19 100644 --- a/packages/client-direct/src/api.ts +++ b/packages/client-direct/src/api.ts @@ -103,6 +103,45 @@ export function createApiRouter( }); }); + router.post("/agents", async (req, res) => { + // load character from body + const character = req.body; + try { + validateCharacterConfig(req.body); + } catch (e) { + elizaLogger.error(`Error parsing character: ${e}`); + res.status(400).json({ + success: false, + message: e.message, + }); + return; + } + // start it up (and register it) + const agent = await directClient.startAgent(character); + elizaLogger.log(`${character.name} started`); + + res.json({ + id: character.id, + character: character, + }); + }); + + router.delete("/agents/:agentId", async (req, res) => { + const agentId = req.params.agentId; + console.log("agentId", agentId); + let agent: AgentRuntime = agents.get(agentId); + + if (agent) { + // stop agent + agent.stop(); + directClient.unregisterAgent(agent); + res.status(204).send(); + } + else { + res.status(404).json({ error: "Agent not found" }); + } + }); + router.post("/agents/:agentId/set", async (req, res) => { const { agentId } = validateUUIDParams(req.params, res) ?? { agentId: null, From c737bd172f0a8dde46362602aedf89156ec6700a Mon Sep 17 00:00:00 2001 From: Jason Separovic Date: Mon, 13 Jan 2025 20:33:58 -0800 Subject: [PATCH 2/3] don't need create, set works for this. catch startAgent errors. add PREVENT_UNHANDLED_EXIT support --- agent/src/index.ts | 19 ++++++++++++ packages/client-direct/src/api.ts | 49 +++++++++++-------------------- 2 files changed, 36 insertions(+), 32 deletions(-) diff --git a/agent/src/index.ts b/agent/src/index.ts index 2f7ebd4170..0bd4f0ad46 100644 --- a/agent/src/index.ts +++ b/agent/src/index.ts @@ -32,6 +32,7 @@ import { settings, stringToUuid, validateCharacterConfig, + parseBooleanFromText, } from "@elizaos/core"; import { zgPlugin } from "@elizaos/plugin-0g"; @@ -1097,3 +1098,21 @@ startAgents().catch((error) => { elizaLogger.error("Unhandled error in startAgents:", error); process.exit(1); }); + +startAgents().catch((error) => { + elizaLogger.error("Unhandled error in startAgents:", error); + process.exit(1); +}); + +// Prevent unhandled exceptions from crashing the process if desired +if (process.env.PREVENT_UNHANDLED_EXIT && parseBooleanFromText(process.env.PREVENT_UNHANDLED_EXIT)) { + // Handle uncaught exceptions to prevent the process from crashing + process.on('uncaughtException', function(err) { + console.error("uncaughtException", err); + }); + + // Handle unhandled rejections to prevent the process from crashing + process.on('unhandledRejection', function(err) { + console.error("unhandledRejection", err); + }); +} diff --git a/packages/client-direct/src/api.ts b/packages/client-direct/src/api.ts index 55fc024b19..fa4bd43e46 100644 --- a/packages/client-direct/src/api.ts +++ b/packages/client-direct/src/api.ts @@ -103,36 +103,15 @@ export function createApiRouter( }); }); - router.post("/agents", async (req, res) => { - // load character from body - const character = req.body; - try { - validateCharacterConfig(req.body); - } catch (e) { - elizaLogger.error(`Error parsing character: ${e}`); - res.status(400).json({ - success: false, - message: e.message, - }); - return; - } - // start it up (and register it) - const agent = await directClient.startAgent(character); - elizaLogger.log(`${character.name} started`); - - res.json({ - id: character.id, - character: character, - }); - }); - router.delete("/agents/:agentId", async (req, res) => { - const agentId = req.params.agentId; - console.log("agentId", agentId); + const { agentId } = validateUUIDParams(req.params, res) ?? { + agentId: null, + }; + if (!agentId) return; + let agent: AgentRuntime = agents.get(agentId); if (agent) { - // stop agent agent.stop(); directClient.unregisterAgent(agent); res.status(204).send(); @@ -150,12 +129,9 @@ export function createApiRouter( let agent: AgentRuntime = agents.get(agentId); - // update character if (agent) { - // stop agent agent.stop(); directClient.unregisterAgent(agent); - // if it has a different name, the agentId will change } // load character from body @@ -172,9 +148,17 @@ export function createApiRouter( } // start it up (and register it) - agent = await directClient.startAgent(character); - elizaLogger.log(`${character.name} started`); - + try { + await directClient.startAgent(character); + elizaLogger.log(`${character.name} started`); + } catch (e) { + elizaLogger.error(`Error starting agent: ${e}`); + res.status(500).json({ + success: false, + message: e.message, + }); + return; + } res.json({ id: character.id, character: character, @@ -369,3 +353,4 @@ export function createApiRouter( return router; } + From 960105d42fdc6fc18bac53db0f7736b780c84a81 Mon Sep 17 00:00:00 2001 From: Jason Separovic Date: Mon, 13 Jan 2025 20:36:11 -0800 Subject: [PATCH 3/3] fix merge issues. add back comments --- agent/src/index.ts | 5 ----- packages/client-direct/src/api.ts | 3 +++ 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/agent/src/index.ts b/agent/src/index.ts index 60030c5856..1b2846a92a 100644 --- a/agent/src/index.ts +++ b/agent/src/index.ts @@ -1111,11 +1111,6 @@ startAgents().catch((error) => { process.exit(1); }); -startAgents().catch((error) => { - elizaLogger.error("Unhandled error in startAgents:", error); - process.exit(1); -}); - // Prevent unhandled exceptions from crashing the process if desired if (process.env.PREVENT_UNHANDLED_EXIT && parseBooleanFromText(process.env.PREVENT_UNHANDLED_EXIT)) { // Handle uncaught exceptions to prevent the process from crashing diff --git a/packages/client-direct/src/api.ts b/packages/client-direct/src/api.ts index fa4bd43e46..0cecbb4b69 100644 --- a/packages/client-direct/src/api.ts +++ b/packages/client-direct/src/api.ts @@ -129,9 +129,12 @@ export function createApiRouter( let agent: AgentRuntime = agents.get(agentId); + // update character if (agent) { + // stop agent agent.stop(); directClient.unregisterAgent(agent); + // if it has a different name, the agentId will change } // load character from body