@elizaos/plugin-agent-orchestrator 2.0.0-alpha.4 → 2.0.0-alpha.5
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/dist/index.js
CHANGED
|
@@ -713,29 +713,15 @@ function mergeDeliveryContext(primary, secondary) {
|
|
|
713
713
|
if (!secondary) {
|
|
714
714
|
return normalizeDeliveryContext(primary);
|
|
715
715
|
}
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
merged.to = to;
|
|
726
|
-
const tid = primary.threadId ?? secondary.threadId;
|
|
727
|
-
if (tid !== undefined)
|
|
728
|
-
merged.threadId = tid;
|
|
729
|
-
const gid = primary.groupId || secondary.groupId;
|
|
730
|
-
if (gid)
|
|
731
|
-
merged.groupId = gid;
|
|
732
|
-
const gch = primary.groupChannel || secondary.groupChannel;
|
|
733
|
-
if (gch)
|
|
734
|
-
merged.groupChannel = gch;
|
|
735
|
-
const gsp = primary.groupSpace || secondary.groupSpace;
|
|
736
|
-
if (gsp)
|
|
737
|
-
merged.groupSpace = gsp;
|
|
738
|
-
return normalizeDeliveryContext(merged);
|
|
716
|
+
return normalizeDeliveryContext({
|
|
717
|
+
channel: primary.channel || secondary.channel,
|
|
718
|
+
accountId: primary.accountId || secondary.accountId,
|
|
719
|
+
to: primary.to || secondary.to,
|
|
720
|
+
threadId: primary.threadId ?? secondary.threadId,
|
|
721
|
+
groupId: primary.groupId || secondary.groupId,
|
|
722
|
+
groupChannel: primary.groupChannel || secondary.groupChannel,
|
|
723
|
+
groupSpace: primary.groupSpace || secondary.groupSpace
|
|
724
|
+
});
|
|
739
725
|
}
|
|
740
726
|
function formatDurationShort(ms) {
|
|
741
727
|
if (!ms || !Number.isFinite(ms) || ms <= 0) {
|
|
@@ -1433,7 +1419,7 @@ import {
|
|
|
1433
1419
|
Service
|
|
1434
1420
|
} from "@elizaos/core";
|
|
1435
1421
|
|
|
1436
|
-
//
|
|
1422
|
+
// node_modules/uuid/dist-node/stringify.js
|
|
1437
1423
|
var byteToHex = [];
|
|
1438
1424
|
for (let i = 0;i < 256; ++i) {
|
|
1439
1425
|
byteToHex.push((i + 256).toString(16).slice(1));
|
|
@@ -1442,7 +1428,7 @@ function unsafeStringify(arr, offset = 0) {
|
|
|
1442
1428
|
return (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + "-" + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + "-" + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + "-" + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + "-" + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase();
|
|
1443
1429
|
}
|
|
1444
1430
|
|
|
1445
|
-
//
|
|
1431
|
+
// node_modules/uuid/dist-node/rng.js
|
|
1446
1432
|
import { randomFillSync } from "node:crypto";
|
|
1447
1433
|
var rnds8Pool = new Uint8Array(256);
|
|
1448
1434
|
var poolPtr = rnds8Pool.length;
|
|
@@ -1454,11 +1440,11 @@ function rng() {
|
|
|
1454
1440
|
return rnds8Pool.slice(poolPtr, poolPtr += 16);
|
|
1455
1441
|
}
|
|
1456
1442
|
|
|
1457
|
-
//
|
|
1443
|
+
// node_modules/uuid/dist-node/native.js
|
|
1458
1444
|
import { randomUUID } from "node:crypto";
|
|
1459
1445
|
var native_default = { randomUUID };
|
|
1460
1446
|
|
|
1461
|
-
//
|
|
1447
|
+
// node_modules/uuid/dist-node/v4.js
|
|
1462
1448
|
function _v4(options, buf, offset) {
|
|
1463
1449
|
options = options || {};
|
|
1464
1450
|
const rnds = options.random ?? options.rng?.() ?? rng();
|
|
@@ -3145,7 +3131,6 @@ class SubagentService extends Service4 {
|
|
|
3145
3131
|
const childRoom = {
|
|
3146
3132
|
id: childRoomId,
|
|
3147
3133
|
name: params.label || `Subagent: ${params.task.slice(0, 50)}`,
|
|
3148
|
-
source: "subagent",
|
|
3149
3134
|
type: ChannelType.SELF,
|
|
3150
3135
|
channelId: childSessionKey,
|
|
3151
3136
|
agentId: this.runtime.agentId,
|
|
@@ -3308,15 +3293,14 @@ class SubagentService extends Service4 {
|
|
|
3308
3293
|
runId,
|
|
3309
3294
|
childSessionKey: record.childSessionKey,
|
|
3310
3295
|
task: record.task,
|
|
3311
|
-
status: "error"
|
|
3296
|
+
status: "error",
|
|
3297
|
+
error: record.outcome.error
|
|
3312
3298
|
};
|
|
3313
|
-
if (record.outcome.error)
|
|
3314
|
-
errorPayload.error = record.outcome.error;
|
|
3315
3299
|
if (record.roomId)
|
|
3316
3300
|
errorPayload.childRoomId = record.roomId;
|
|
3317
3301
|
this.emitSubagentEvent("SUBAGENT_RUN_FAILED", errorPayload);
|
|
3318
3302
|
this.announceSubagentResult(runId).catch((err) => {
|
|
3319
|
-
this.runtime.logger.error(
|
|
3303
|
+
this.runtime.logger.error("Failed to announce error", { runId, error: err });
|
|
3320
3304
|
});
|
|
3321
3305
|
}
|
|
3322
3306
|
async handleRunEnded(payload) {
|
|
@@ -3517,12 +3501,10 @@ class SubagentService extends Service4 {
|
|
|
3517
3501
|
}
|
|
3518
3502
|
}
|
|
3519
3503
|
const targetRoomId = sessionKeyToRoomId(targetSessionKey, targetAgentId);
|
|
3520
|
-
const
|
|
3504
|
+
const contextMessage = this.buildAgentToAgentContext({
|
|
3505
|
+
requesterSessionKey: requesterContext.sessionKey,
|
|
3521
3506
|
targetSessionKey
|
|
3522
|
-
};
|
|
3523
|
-
if (requesterContext.sessionKey)
|
|
3524
|
-
a2aContextParams.requesterSessionKey = requesterContext.sessionKey;
|
|
3525
|
-
const contextMessage = this.buildAgentToAgentContext(a2aContextParams);
|
|
3507
|
+
});
|
|
3526
3508
|
const a2aMetadata = {
|
|
3527
3509
|
isAgentToAgent: true,
|
|
3528
3510
|
runId,
|
|
@@ -3550,7 +3532,7 @@ class SubagentService extends Service4 {
|
|
|
3550
3532
|
message,
|
|
3551
3533
|
source: "a2a"
|
|
3552
3534
|
}).catch((err) => {
|
|
3553
|
-
this.runtime.logger.error(
|
|
3535
|
+
this.runtime.logger.error("A2A send error", { runId, error: err });
|
|
3554
3536
|
});
|
|
3555
3537
|
const asyncPayload = {
|
|
3556
3538
|
runId,
|
|
@@ -3606,15 +3588,13 @@ class SubagentService extends Service4 {
|
|
|
3606
3588
|
delivery: { status: "timeout", mode: "sync" }
|
|
3607
3589
|
};
|
|
3608
3590
|
}
|
|
3609
|
-
|
|
3591
|
+
return {
|
|
3610
3592
|
status: "ok",
|
|
3611
3593
|
runId,
|
|
3612
3594
|
sessionKey: targetSessionKey,
|
|
3595
|
+
reply: lastReply.content?.text,
|
|
3613
3596
|
delivery: { status: "delivered", mode: "sync" }
|
|
3614
3597
|
};
|
|
3615
|
-
if (lastReply.content?.text)
|
|
3616
|
-
result.reply = lastReply.content.text;
|
|
3617
|
-
return result;
|
|
3618
3598
|
}
|
|
3619
3599
|
buildAgentToAgentContext(params) {
|
|
3620
3600
|
return [
|
|
@@ -3860,4 +3840,4 @@ export {
|
|
|
3860
3840
|
AgentOrchestratorService
|
|
3861
3841
|
};
|
|
3862
3842
|
|
|
3863
|
-
//# debugId=
|
|
3843
|
+
//# debugId=D58B592C4A9AA05064756E2164756E21
|
package/dist/index.js.map
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../index.ts", "../src/actions/messaging.ts", "../src/utils/session.ts", "../src/actions/subagent-management.ts", "../src/actions/task-management.ts", "../src/config.ts", "../src/providers/orchestrator-config.ts", "../src/providers/task-context.ts", "../src/services/agent-orchestrator-service.ts", "
|
|
3
|
+
"sources": ["../index.ts", "../src/actions/messaging.ts", "../src/utils/session.ts", "../src/actions/subagent-management.ts", "../src/actions/task-management.ts", "../src/config.ts", "../src/providers/orchestrator-config.ts", "../src/providers/task-context.ts", "../src/services/agent-orchestrator-service.ts", "../node_modules/uuid/dist-node/stringify.js", "../node_modules/uuid/dist-node/rng.js", "../node_modules/uuid/dist-node/native.js", "../node_modules/uuid/dist-node/v4.js", "../src/services/messaging-service.ts", "../src/services/sandbox-service.ts", "../src/services/subagent-service.ts", "../src/types/messaging.ts", "../src/types/sandbox.ts", "../src/types/subagent.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"import type { Plugin } from \"@elizaos/core\";\nimport { getSessionProviders } from \"@elizaos/core\";\nimport {\n listMessagingChannelsAction,\n sendCrossPlatformMessageAction,\n sendToDeliveryContextAction,\n sendToRoomAction,\n sendToSessionMessageAction,\n} from \"./src/actions/messaging.js\";\nimport {\n cancelSubagentAction,\n getSubagentStatusAction,\n listSubagentsAction,\n sendToSessionAction,\n spawnSubagentAction,\n} from \"./src/actions/subagent-management.js\";\nimport {\n cancelTaskAction,\n createTaskAction,\n listTasksAction,\n pauseTaskAction,\n resumeTaskAction,\n searchTasksAction,\n switchTaskAction,\n} from \"./src/actions/task-management.js\";\nimport {\n configureAgentOrchestratorPlugin,\n getConfiguredAgentOrchestratorOptions,\n} from \"./src/config.js\";\nimport { orchestratorConfigProvider } from \"./src/providers/orchestrator-config.js\";\nimport { taskContextProvider } from \"./src/providers/task-context.js\";\nimport { AgentOrchestratorService } from \"./src/services/agent-orchestrator-service.js\";\nimport { MessagingService } from \"./src/services/messaging-service.js\";\nimport { SandboxService } from \"./src/services/sandbox-service.js\";\nimport { SubagentService } from \"./src/services/subagent-service.js\";\n\nexport { configureAgentOrchestratorPlugin, getConfiguredAgentOrchestratorOptions };\n\n// Get session providers from core (session context, skills, send policy)\nconst sessionProviders = getSessionProviders();\n\nexport const agentOrchestratorPlugin: Plugin = {\n name: \"agent-orchestrator\",\n description:\n \"Orchestrate tasks across agent providers with subagent spawning, agent-to-agent communication, sandboxed execution, and cross-platform messaging\",\n services: [AgentOrchestratorService, SubagentService, SandboxService, MessagingService],\n providers: [taskContextProvider, orchestratorConfigProvider, ...sessionProviders],\n actions: [\n // Task management\n createTaskAction,\n listTasksAction,\n switchTaskAction,\n searchTasksAction,\n pauseTaskAction,\n resumeTaskAction,\n cancelTaskAction,\n // Subagent management\n spawnSubagentAction,\n sendToSessionAction,\n listSubagentsAction,\n cancelSubagentAction,\n getSubagentStatusAction,\n // Cross-platform messaging\n sendCrossPlatformMessageAction,\n sendToDeliveryContextAction,\n sendToRoomAction,\n sendToSessionMessageAction,\n listMessagingChannelsAction,\n ],\n};\n\nexport default agentOrchestratorPlugin;\n\n// Messaging actions\nexport {\n listMessagingChannelsAction,\n sendCrossPlatformMessageAction,\n sendToDeliveryContextAction,\n sendToRoomAction,\n sendToSessionMessageAction,\n} from \"./src/actions/messaging.js\";\n\n// Subagent management actions\nexport {\n cancelSubagentAction,\n getSubagentStatusAction,\n listSubagentsAction,\n sendToSessionAction,\n spawnSubagentAction,\n} from \"./src/actions/subagent-management.js\";\n// Task management actions\nexport {\n cancelTaskAction,\n createTaskAction,\n listTasksAction,\n pauseTaskAction,\n resumeTaskAction,\n searchTasksAction,\n switchTaskAction,\n} from \"./src/actions/task-management.js\";\n// Config provider\nexport {\n getOrchestratorConfig,\n type OrchestratorConfig,\n orchestratorConfigProvider,\n} from \"./src/providers/orchestrator-config.js\";\n// Services\nexport { AgentOrchestratorService } from \"./src/services/agent-orchestrator-service.js\";\nexport { MessagingService } from \"./src/services/messaging-service.js\";\nexport { SandboxService } from \"./src/services/sandbox-service.js\";\nexport { SubagentService } from \"./src/services/subagent-service.js\";\n// Subagent types\n// Sandbox types\n// Messaging types\nexport type {\n AgentToAgentPolicy,\n DeliveryContext,\n DeliveryStatus,\n MessageAttachment,\n MessageButton,\n MessageContent,\n MessageEmbed,\n MessageTarget,\n MessagingAdapter,\n MessagingChannel,\n MessagingEventPayload,\n MessagingRoomMetadata,\n ParsedSessionKey,\n SandboxBrowserConfig,\n SandboxBrowserContext,\n SandboxConfig,\n SandboxContext,\n SandboxDockerConfig,\n SandboxEventPayload,\n SandboxExecuteParams,\n SandboxExecutionResult,\n SandboxMode,\n SandboxPruneConfig,\n SandboxScope,\n SandboxToolPolicy,\n SandboxWorkspaceAccess,\n SandboxWorkspaceInfo,\n SendMessageParams,\n SendMessageResult,\n SendToAgentParams,\n SendToAgentResult,\n SpawnSubagentParams,\n SpawnSubagentResult,\n SubagentConfig,\n SubagentEventPayload,\n SubagentRoomMetadata,\n SubagentRunOutcome,\n SubagentRunRecord,\n} from \"./src/types/index.js\";\nexport { MessagingEventType, SandboxEventType, SubagentEventType } from \"./src/types/index.js\";\n// Task types\nexport type {\n AgentOrchestratorPluginOptions,\n AgentProvider,\n AgentProviderId,\n OrchestratedTask,\n OrchestratedTaskMetadata,\n ProviderTaskExecutionContext,\n TaskEvent,\n TaskEventType,\n TaskResult,\n TaskStatus,\n TaskStep,\n TaskUserStatus,\n} from \"./src/types.js\";\n// Session utilities (orchestrator-specific)\n// Core session utilities (re-exported from @elizaos/core)\nexport {\n buildAcpSessionKey,\n // Session key building/parsing\n buildAgentMainSessionKey,\n buildAgentPeerSessionKey,\n buildAgentSessionKey,\n buildGroupHistoryKey,\n buildSessionKey,\n buildSubagentSessionKey,\n createSendPolicyProvider,\n // Session entry utilities\n createSessionEntry,\n // Session providers\n createSessionProvider,\n createSessionSkillsProvider,\n createSubagentSessionKey,\n deleteSessionEntry,\n extractAgentIdFromSessionKey,\n extractSessionContext,\n formatDurationShort,\n formatTokenCount,\n getSessionEntry,\n getSessionProviders,\n hashToUUID,\n isAcpSessionKey,\n isCoreSubagentSessionKey,\n isSubagentSessionKey,\n isValidSessionEntry,\n listSessionKeys,\n // Session store operations\n loadSessionStore,\n mergeDeliveryContext,\n mergeSessionEntry,\n normalizeAccountId,\n normalizeAgentId,\n normalizeCoreAgentId,\n normalizeDeliveryContext,\n normalizeMainKey,\n normalizeSessionKey,\n parseAgentSessionKey,\n parseSessionKey,\n resolveAgentIdFromSessionKey,\n resolveAgentSessionsDir,\n resolveDefaultSessionStorePath,\n resolveSessionTranscriptPath,\n // Session paths\n resolveStateDir,\n resolveStorePath,\n resolveThreadParentSessionKey,\n resolveThreadSessionKeys,\n type SessionDeliveryContext,\n // Session types\n type SessionEntry,\n type SessionResolution,\n SessionStateManager,\n type SessionStore,\n saveSessionStore,\n sessionKeyToRoomId,\n toAgentRequestSessionKey,\n toAgentStoreSessionKey,\n updateSessionStore,\n updateSessionStoreEntry,\n upsertSessionEntry,\n} from \"./src/utils/index.js\";\n",
|
|
6
6
|
"import type {\n Action,\n ActionExample,\n ActionResult,\n HandlerCallback,\n HandlerOptions,\n IAgentRuntime,\n JsonObject,\n Memory,\n ProviderDataRecord,\n State,\n UUID,\n} from \"@elizaos/core\";\nimport type { MessagingService } from \"../services/messaging-service.js\";\nimport type { MessageContent, MessageTarget, MessagingChannel } from \"../types/messaging.js\";\nimport type { DeliveryContext } from \"../types/subagent.js\";\n\n/**\n * Extracts messaging parameters from the message content.\n */\nfunction extractMessagingParams(\n message: Memory,\n _state?: State,\n): { target?: Partial<MessageTarget>; content?: Partial<MessageContent> } {\n const params = message.content?.params as\n | {\n target?: Partial<MessageTarget>;\n content?: Partial<MessageContent>;\n text?: string;\n channel?: string;\n to?: string;\n threadId?: string | number;\n replyTo?: string;\n }\n | undefined;\n\n if (!params) {\n return {};\n }\n\n // Use provided target or build from flat params\n let target: Partial<MessageTarget>;\n if (params.target) {\n target = params.target;\n } else {\n // Build target from flat params, only including defined values\n target = {};\n if (params.channel) target.channel = params.channel as MessagingChannel;\n if (params.to) target.to = params.to;\n if (params.threadId !== undefined) target.threadId = params.threadId;\n if (params.replyTo) target.replyToMessageId = params.replyTo;\n }\n\n // Use provided content or build from params\n let content: Partial<MessageContent>;\n if (params.content) {\n content = params.content;\n } else {\n content = {};\n const text = params.text ?? message.content?.text;\n if (text) content.text = text;\n }\n\n return { target, content };\n}\n\n/**\n * SEND_CROSS_PLATFORM_MESSAGE action allows agents to send messages\n * to any supported platform (Discord, Telegram, Slack, etc.).\n */\nexport const sendCrossPlatformMessageAction: Action = {\n name: \"SEND_CROSS_PLATFORM_MESSAGE\",\n similes: [\n \"CROSS_PLATFORM_MESSAGE\",\n \"UNIFIED_SEND\",\n \"SEND_TO_CHANNEL\",\n \"RELAY_MESSAGE\",\n \"BROADCAST_MESSAGE\",\n ],\n description:\n \"Send a message to any supported platform (Discord, Telegram, Slack, WhatsApp, Twitch). \" +\n \"Requires specifying the target channel/platform and recipient.\",\n\n validate: async (runtime: IAgentRuntime, message: Memory, _state?: State): Promise<boolean> => {\n // Check if messaging service is available\n const messagingService = runtime.getService(\"MESSAGING\");\n if (!messagingService) {\n return false;\n }\n\n // Check if params contain minimum required fields\n const params = message.content?.params as Record<string, unknown> | undefined;\n if (!params) {\n // May still work if message text contains instructions for LLM extraction\n return true;\n }\n\n // If params are provided, validate they have the required structure\n const hasTarget = params.target || (params.channel && params.to);\n const hasContent = params.content || params.text || message.content?.text;\n return !!(hasTarget && hasContent);\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n state?: State,\n _options?: HandlerOptions,\n callback?: HandlerCallback,\n ): Promise<ActionResult> => {\n const messagingService = runtime.getService(\"MESSAGING\") as MessagingService | undefined;\n\n if (!messagingService) {\n if (callback) {\n await callback({\n text: \"Messaging service is not available. Please ensure the orchestrator plugin is properly configured.\",\n });\n }\n return { success: false, error: \"Messaging service not available\" };\n }\n\n const { target, content } = extractMessagingParams(message, state);\n\n if (!target?.channel) {\n if (callback) {\n await callback({\n text: \"Please specify the target channel (discord, telegram, slack, whatsapp, twitch).\",\n });\n }\n return { success: false, error: \"Missing target channel\" };\n }\n\n if (!target?.to) {\n if (callback) {\n await callback({\n text: \"Please specify the recipient (channel ID, chat ID, or room ID).\",\n });\n }\n return { success: false, error: \"Missing recipient\" };\n }\n\n if (!content?.text) {\n if (callback) {\n await callback({\n text: \"Please provide the message text to send.\",\n });\n }\n return { success: false, error: \"Missing message text\" };\n }\n\n // Build send target, only including defined values\n const sendTarget: MessageTarget = {\n channel: target.channel as MessagingChannel,\n to: target.to,\n };\n if (target.threadId !== undefined) sendTarget.threadId = target.threadId;\n if (target.replyToMessageId) sendTarget.replyToMessageId = target.replyToMessageId;\n\n // Build send content, only including defined values\n const sendContent: MessageContent = {\n text: content.text,\n };\n if (content.attachments) sendContent.attachments = content.attachments;\n if (content.embed) sendContent.embed = content.embed;\n if (content.buttons) sendContent.buttons = content.buttons;\n if (content.disableLinkPreview !== undefined)\n sendContent.disableLinkPreview = content.disableLinkPreview;\n if (content.silent !== undefined) sendContent.silent = content.silent;\n\n const result = await messagingService.send({\n target: sendTarget,\n content: sendContent,\n });\n\n if (callback) {\n if (result.success) {\n const callbackData: JsonObject = {};\n if (result.messageId) callbackData.messageId = result.messageId;\n if (result.sentAt) callbackData.sentAt = result.sentAt;\n await callback({\n text: `Message sent successfully to ${target.channel}.`,\n data: callbackData,\n });\n } else {\n await callback({\n text: `Failed to send message: ${result.error}`,\n });\n }\n }\n\n return {\n success: result.success,\n data: result as unknown as ProviderDataRecord,\n ...(result.error !== undefined ? { error: result.error } : {}),\n };\n },\n\n examples: [\n [\n {\n name: \"{{name1}}\",\n content: {\n text: \"Send 'Hello from the agent!' to Discord channel 123456789\",\n params: {\n channel: \"discord\",\n to: \"123456789\",\n text: \"Hello from the agent!\",\n },\n },\n },\n {\n name: \"{{agentName}}\",\n content: {\n text: \"Message sent successfully to Discord.\",\n actions: [\"SEND_CROSS_PLATFORM_MESSAGE\"],\n },\n },\n ],\n [\n {\n name: \"{{name1}}\",\n content: {\n text: \"Send a Telegram message\",\n params: {\n channel: \"telegram\",\n to: \"-1001234567890\",\n text: \"Automated notification from your AI assistant.\",\n },\n },\n },\n {\n name: \"{{agentName}}\",\n content: {\n text: \"Message sent successfully to Telegram.\",\n actions: [\"SEND_CROSS_PLATFORM_MESSAGE\"],\n },\n },\n ],\n ] as ActionExample[][],\n};\n\n/**\n * SEND_TO_DELIVERY_CONTEXT action sends a message using a delivery context\n * (typically from the subagent system).\n */\nexport const sendToDeliveryContextAction: Action = {\n name: \"SEND_TO_DELIVERY_CONTEXT\",\n similes: [\"DELIVER_MESSAGE\", \"SEND_TO_CONTEXT\", \"ROUTE_MESSAGE\"],\n description:\n \"Send a message using a delivery context that specifies the target channel and recipient. \" +\n \"Useful for routing messages back to the original requester or to a specific context.\",\n\n validate: async (runtime: IAgentRuntime, message: Memory, _state?: State): Promise<boolean> => {\n // Check if messaging service is available\n const messagingService = runtime.getService(\"MESSAGING\");\n if (!messagingService) {\n return false;\n }\n\n // Check if params contain deliveryContext\n const params = message.content?.params as Record<string, unknown> | undefined;\n if (!params?.deliveryContext) {\n return false;\n }\n\n // Check if there's text to send\n const hasText = params.text || message.content?.text;\n return !!hasText;\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n _state?: State,\n _options?: HandlerOptions,\n callback?: HandlerCallback,\n ): Promise<ActionResult> => {\n const messagingService = runtime.getService(\"MESSAGING\") as MessagingService | undefined;\n\n if (!messagingService) {\n if (callback) {\n await callback({\n text: \"Messaging service is not available.\",\n });\n }\n return { success: false, error: \"Messaging service not available\" };\n }\n\n const params = message.content?.params as\n | { deliveryContext?: DeliveryContext; text?: string }\n | undefined;\n\n const deliveryContext = params?.deliveryContext;\n const text = params?.text ?? message.content?.text;\n\n if (!deliveryContext) {\n if (callback) {\n await callback({\n text: \"Please provide a delivery context with channel and recipient information.\",\n });\n }\n return { success: false, error: \"Missing delivery context\" };\n }\n\n if (!text) {\n if (callback) {\n await callback({\n text: \"Please provide the message text to send.\",\n });\n }\n return { success: false, error: \"Missing message text\" };\n }\n\n const result = await messagingService.sendToDeliveryContext(deliveryContext, {\n text,\n });\n\n if (callback) {\n if (result.success) {\n const callbackData: JsonObject = {};\n if (result.messageId) callbackData.messageId = result.messageId;\n await callback({\n text: `Message delivered successfully via ${result.channel}.`,\n data: callbackData,\n });\n } else {\n await callback({\n text: `Failed to deliver message: ${result.error}`,\n });\n }\n }\n\n return {\n success: result.success,\n data: result as unknown as ProviderDataRecord,\n ...(result.error !== undefined ? { error: result.error } : {}),\n };\n },\n\n examples: [\n [\n {\n name: \"{{name1}}\",\n content: {\n text: \"Send result to delivery context\",\n params: {\n deliveryContext: {\n channel: \"discord\",\n to: \"123456789\",\n },\n text: \"Task completed successfully!\",\n },\n },\n },\n {\n name: \"{{agentName}}\",\n content: {\n text: \"Message delivered successfully via discord.\",\n actions: [\"SEND_TO_DELIVERY_CONTEXT\"],\n },\n },\n ],\n ] as ActionExample[][],\n};\n\n/**\n * SEND_TO_ROOM action sends a message to an Eliza room.\n */\nexport const sendToRoomAction: Action = {\n name: \"SEND_TO_ROOM\",\n similes: [\"MESSAGE_ROOM\", \"ROOM_MESSAGE\", \"NOTIFY_ROOM\"],\n description:\n \"Send a message to an Eliza room. The room's metadata determines which platform and recipient to use.\",\n\n validate: async (runtime: IAgentRuntime, message: Memory, _state?: State): Promise<boolean> => {\n // Check if messaging service is available\n const messagingService = runtime.getService(\"MESSAGING\");\n if (!messagingService) {\n return false;\n }\n\n // Check if params contain roomId\n const params = message.content?.params as Record<string, unknown> | undefined;\n if (!params?.roomId) {\n return false;\n }\n\n // Check if there's text to send\n const hasText = params.text || message.content?.text;\n return !!hasText;\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n _state?: State,\n _options?: HandlerOptions,\n callback?: HandlerCallback,\n ): Promise<ActionResult> => {\n const messagingService = runtime.getService(\"MESSAGING\") as MessagingService | undefined;\n\n if (!messagingService) {\n if (callback) {\n await callback({\n text: \"Messaging service is not available.\",\n });\n }\n return { success: false, error: \"Messaging service not available\" };\n }\n\n const params = message.content?.params as { roomId?: string; text?: string } | undefined;\n\n const roomId = params?.roomId;\n const text = params?.text ?? message.content?.text;\n\n if (!roomId) {\n if (callback) {\n await callback({\n text: \"Please specify the room ID to send the message to.\",\n });\n }\n return { success: false, error: \"Missing room ID\" };\n }\n\n if (!text) {\n if (callback) {\n await callback({\n text: \"Please provide the message text to send.\",\n });\n }\n return { success: false, error: \"Missing message text\" };\n }\n\n const result = await messagingService.sendToRoom(roomId as UUID, { text });\n\n if (callback) {\n if (result.success) {\n const callbackData: JsonObject = {};\n if (result.messageId) callbackData.messageId = result.messageId;\n await callback({\n text: `Message sent to room via ${result.channel}.`,\n data: callbackData,\n });\n } else {\n await callback({\n text: `Failed to send to room: ${result.error}`,\n });\n }\n }\n\n return {\n success: result.success,\n data: result as unknown as ProviderDataRecord,\n ...(result.error !== undefined ? { error: result.error } : {}),\n };\n },\n\n examples: [\n [\n {\n name: \"{{name1}}\",\n content: {\n text: \"Send to room\",\n params: {\n roomId: \"550e8400-e29b-41d4-a716-446655440000\",\n text: \"Hello, room!\",\n },\n },\n },\n {\n name: \"{{agentName}}\",\n content: {\n text: \"Message sent to room via discord.\",\n actions: [\"SEND_TO_ROOM\"],\n },\n },\n ],\n ] as ActionExample[][],\n};\n\n/**\n * SEND_TO_SESSION action sends a message to a session by its key.\n */\nexport const sendToSessionMessageAction: Action = {\n name: \"SEND_TO_SESSION_MESSAGE\",\n similes: [\"SESSION_MESSAGE\", \"MESSAGE_SESSION\", \"NOTIFY_SESSION\"],\n description:\n \"Send a message to a session by its session key. The session key is mapped to an Eliza room.\",\n\n validate: async (runtime: IAgentRuntime, message: Memory, _state?: State): Promise<boolean> => {\n // Check if messaging service is available\n const messagingService = runtime.getService(\"MESSAGING\");\n if (!messagingService) {\n return false;\n }\n\n // Check if params contain sessionKey\n const params = message.content?.params as Record<string, unknown> | undefined;\n if (!params?.sessionKey) {\n return false;\n }\n\n // Check if there's text to send\n const hasText = params.text || message.content?.text;\n return !!hasText;\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n _state?: State,\n _options?: HandlerOptions,\n callback?: HandlerCallback,\n ): Promise<ActionResult> => {\n const messagingService = runtime.getService(\"MESSAGING\") as MessagingService | undefined;\n\n if (!messagingService) {\n if (callback) {\n await callback({\n text: \"Messaging service is not available.\",\n });\n }\n return { success: false, error: \"Messaging service not available\" };\n }\n\n const params = message.content?.params as { sessionKey?: string; text?: string } | undefined;\n\n const sessionKey = params?.sessionKey;\n const text = params?.text ?? message.content?.text;\n\n if (!sessionKey) {\n if (callback) {\n await callback({\n text: \"Please specify the session key to send the message to.\",\n });\n }\n return { success: false, error: \"Missing session key\" };\n }\n\n if (!text) {\n if (callback) {\n await callback({\n text: \"Please provide the message text to send.\",\n });\n }\n return { success: false, error: \"Missing message text\" };\n }\n\n const result = await messagingService.sendToSession(sessionKey, { text });\n\n if (callback) {\n if (result.success) {\n const callbackData: JsonObject = {};\n if (result.messageId) callbackData.messageId = result.messageId;\n await callback({\n text: `Message sent to session via ${result.channel}.`,\n data: callbackData,\n });\n } else {\n await callback({\n text: `Failed to send to session: ${result.error}`,\n });\n }\n }\n\n return {\n success: result.success,\n data: result as unknown as ProviderDataRecord,\n ...(result.error !== undefined ? { error: result.error } : {}),\n };\n },\n\n examples: [\n [\n {\n name: \"{{name1}}\",\n content: {\n text: \"Send to session\",\n params: {\n sessionKey: \"agent:main:dm:user123\",\n text: \"Update from your subagent!\",\n },\n },\n },\n {\n name: \"{{agentName}}\",\n content: {\n text: \"Message sent to session via discord.\",\n actions: [\"SEND_TO_SESSION_MESSAGE\"],\n },\n },\n ],\n ] as ActionExample[][],\n};\n\n/**\n * LIST_MESSAGING_CHANNELS action lists available messaging channels.\n */\nexport const listMessagingChannelsAction: Action = {\n name: \"LIST_MESSAGING_CHANNELS\",\n similes: [\"AVAILABLE_CHANNELS\", \"GET_CHANNELS\", \"MESSAGING_PLATFORMS\"],\n description:\n \"List all available messaging channels/platforms that the agent can send messages to.\",\n\n validate: async (runtime: IAgentRuntime, _message: Memory, _state?: State): Promise<boolean> => {\n // This action only requires the messaging service to be available\n const messagingService = runtime.getService(\"MESSAGING\");\n return !!messagingService;\n },\n\n handler: async (\n runtime: IAgentRuntime,\n _message: Memory,\n _state?: State,\n _options?: HandlerOptions,\n callback?: HandlerCallback,\n ): Promise<ActionResult> => {\n const messagingService = runtime.getService(\"MESSAGING\") as MessagingService | undefined;\n\n if (!messagingService) {\n if (callback) {\n await callback({\n text: \"Messaging service is not available.\",\n });\n }\n return { success: false, error: \"Messaging service not available\" };\n }\n\n const channels = messagingService.getAvailableChannels();\n\n if (callback) {\n if (channels.length > 0) {\n await callback({\n text: `Available messaging channels: ${channels.join(\", \")}`,\n data: { channels },\n });\n } else {\n await callback({\n text: \"No messaging channels are currently available.\",\n data: { channels: [] },\n });\n }\n }\n\n return {\n success: true,\n data: { channels },\n };\n },\n\n examples: [\n [\n {\n name: \"{{name1}}\",\n content: {\n text: \"What messaging platforms can you use?\",\n },\n },\n {\n name: \"{{agentName}}\",\n content: {\n text: \"Available messaging channels: discord, telegram, internal\",\n actions: [\"LIST_MESSAGING_CHANNELS\"],\n },\n },\n ],\n ] as ActionExample[][],\n};\n",
|
|
7
|
-
"import crypto from \"node:crypto\";\nimport type { UUID } from \"@elizaos/core\";\nimport type { DeliveryContext, ParsedSessionKey } from \"../types/subagent.js\";\n\n// Re-export core session utilities for convenience\nexport {\n buildAcpSessionKey,\n // Session key building/parsing\n buildAgentMainSessionKey,\n buildAgentPeerSessionKey,\n buildAgentSessionKey,\n buildGroupHistoryKey,\n buildSubagentSessionKey,\n createSendPolicyProvider,\n // Session entry utilities\n createSessionEntry,\n // Session providers\n createSessionProvider,\n createSessionSkillsProvider,\n deleteSessionEntry,\n extractSessionContext,\n getSessionEntry,\n getSessionProviders,\n isAcpSessionKey,\n isSubagentSessionKey as isCoreSubagentSessionKey,\n isValidSessionEntry,\n listSessionKeys,\n // Session store operations\n loadSessionStore,\n mergeSessionEntry,\n normalizeAccountId,\n normalizeAgentId as normalizeCoreAgentId,\n normalizeMainKey,\n parseAgentSessionKey,\n resolveAgentIdFromSessionKey,\n resolveAgentSessionsDir,\n resolveDefaultSessionStorePath,\n resolveSessionTranscriptPath,\n // Session paths\n resolveStateDir,\n resolveStorePath,\n resolveThreadParentSessionKey,\n resolveThreadSessionKeys,\n type SessionDeliveryContext,\n // Session types\n type SessionEntry,\n type SessionResolution,\n SessionStateManager,\n type SessionStore,\n saveSessionStore,\n toAgentRequestSessionKey,\n toAgentStoreSessionKey,\n updateSessionStore,\n updateSessionStoreEntry,\n upsertSessionEntry,\n} from \"@elizaos/core\";\n\n/**\n * Converts a string to a deterministic UUID v5.\n * Uses SHA-256 to hash the input and formats it as a UUID.\n *\n * @param input - The string to convert\n * @returns A deterministic UUID\n */\nexport function hashToUUID(input: string): UUID {\n const hash = crypto.createHash(\"sha256\").update(input).digest(\"hex\");\n // Format as UUID v5-style (version 5, variant 1)\n const uuid = [\n hash.slice(0, 8),\n hash.slice(8, 12),\n // Version 5: first nibble is 5\n `5${hash.slice(13, 16)}`,\n // Variant 1: first nibble is 8, 9, a, or b\n `${((parseInt(hash.slice(16, 17), 16) & 0x3) | 0x8).toString(16)}${hash.slice(17, 20)}`,\n hash.slice(20, 32),\n ].join(\"-\");\n return uuid as UUID;\n}\n\n/**\n * Converts a session key to a deterministic Eliza room ID.\n *\n * @param sessionKey - The Otto-style session key\n * @param agentId - Optional agent ID to scope the room\n * @returns A deterministic UUID for the room\n */\nexport function sessionKeyToRoomId(sessionKey: string, agentId?: string): UUID {\n const normalized = normalizeSessionKey(sessionKey);\n const input = agentId ? `${agentId}:${normalized}` : normalized;\n return hashToUUID(input);\n}\n\n/**\n * Normalizes a session key to a canonical format.\n *\n * @param sessionKey - The session key to normalize\n * @returns Normalized session key\n */\nexport function normalizeSessionKey(sessionKey: string): string {\n const trimmed = sessionKey.trim();\n if (!trimmed) {\n return \"\";\n }\n // If it already starts with \"agent:\", return as-is\n if (trimmed.startsWith(\"agent:\")) {\n return trimmed;\n }\n // Legacy keys like \"main\" or \"dm:user123\" need to be prefixed\n // But we can't know the agent ID here, so return as-is\n return trimmed;\n}\n\n/**\n * Parses a session key into its component parts.\n *\n * Supported formats:\n * - \"agent:botname:dm:user123\" -> { agentId: \"botname\", keyType: \"dm\", identifier: \"user123\" }\n * - \"agent:botname:subagent:uuid\" -> { agentId: \"botname\", keyType: \"subagent\", identifier: \"uuid\" }\n * - \"agent:botname:group:channelId\" -> { agentId: \"botname\", keyType: \"group\", identifier: \"channelId\" }\n * - \"dm:user123\" -> { agentId: \"unknown\", keyType: \"dm\", identifier: \"user123\" }\n *\n * @param sessionKey - The session key to parse\n * @returns Parsed components\n */\nexport function parseSessionKey(sessionKey: string): ParsedSessionKey {\n const trimmed = sessionKey.trim();\n\n if (!trimmed) {\n return {\n agentId: \"unknown\",\n keyType: \"unknown\",\n identifier: \"\",\n };\n }\n\n // Handle \"agent:NAME:TYPE:IDENTIFIER\" format\n if (trimmed.startsWith(\"agent:\")) {\n const parts = trimmed.split(\":\");\n if (parts.length >= 4) {\n const agentId = parts[1] as string;\n const keyTypeRaw = parts[2] as string;\n const identifier = parts.slice(3).join(\":\");\n const keyType = normalizeKeyType(keyTypeRaw);\n\n return {\n agentId,\n keyType,\n identifier,\n };\n }\n // Malformed agent: key\n if (parts.length >= 2) {\n return {\n agentId: parts[1] as string,\n keyType: \"unknown\",\n identifier: parts.slice(2).join(\":\"),\n };\n }\n }\n\n // Handle legacy \"TYPE:IDENTIFIER\" format\n const colonIndex = trimmed.indexOf(\":\");\n if (colonIndex > 0) {\n const keyTypeRaw = trimmed.slice(0, colonIndex);\n const identifier = trimmed.slice(colonIndex + 1);\n const keyType = normalizeKeyType(keyTypeRaw);\n\n return {\n agentId: \"unknown\",\n keyType,\n identifier,\n };\n }\n\n // Single identifier (e.g., \"main\", \"global\")\n return {\n agentId: \"unknown\",\n keyType: \"unknown\",\n identifier: trimmed,\n };\n}\n\n/**\n * Normalizes a key type string to a known type.\n */\nfunction normalizeKeyType(raw: string): \"dm\" | \"subagent\" | \"group\" | \"channel\" | \"unknown\" {\n const lower = raw.toLowerCase();\n switch (lower) {\n case \"dm\":\n case \"direct\":\n return \"dm\";\n case \"subagent\":\n case \"sub\":\n return \"subagent\";\n case \"group\":\n case \"server\":\n return \"group\";\n case \"channel\":\n return \"channel\";\n default:\n return \"unknown\";\n }\n}\n\n/**\n * Builds a session key from its component parts.\n *\n * @param agentId - The agent ID\n * @param keyType - The key type (dm, subagent, group, etc.)\n * @param identifier - The unique identifier\n * @returns Constructed session key\n */\nexport function buildSessionKey(agentId: string, keyType: string, identifier: string): string {\n const normalizedAgentId = normalizeAgentId(agentId);\n return `agent:${normalizedAgentId}:${keyType}:${identifier}`;\n}\n\n/**\n * Normalizes an agent ID to lowercase.\n *\n * @param agentId - The agent ID to normalize\n * @returns Normalized agent ID\n */\nexport function normalizeAgentId(agentId: string): string {\n return agentId.trim().toLowerCase();\n}\n\n/**\n * Checks if a session key represents a subagent.\n *\n * @param sessionKey - The session key to check\n * @returns True if this is a subagent session\n */\nexport function isSubagentSessionKey(sessionKey: string): boolean {\n const parsed = parseSessionKey(sessionKey);\n return parsed.keyType === \"subagent\";\n}\n\n/**\n * Extracts the agent ID from a session key.\n *\n * @param sessionKey - The session key\n * @returns The agent ID or \"unknown\"\n */\nexport function extractAgentIdFromSessionKey(sessionKey: string): string {\n const parsed = parseSessionKey(sessionKey);\n return parsed.agentId;\n}\n\n/**\n * Creates a subagent session key with a unique identifier.\n *\n * @param agentId - The agent ID\n * @returns A new subagent session key\n */\nexport function createSubagentSessionKey(agentId: string): string {\n const uuid = crypto.randomUUID();\n return buildSessionKey(agentId, \"subagent\", uuid);\n}\n\n/**\n * Normalizes a delivery context by removing undefined values.\n *\n * @param context - The context to normalize\n * @returns Normalized delivery context or undefined\n */\nexport function normalizeDeliveryContext(\n context?: DeliveryContext | null,\n): DeliveryContext | undefined {\n if (!context) {\n return undefined;\n }\n\n const result: DeliveryContext = {};\n\n if (context.channel && typeof context.channel === \"string\") {\n const trimmed = context.channel.trim();\n if (trimmed) result.channel = trimmed;\n }\n if (context.accountId && typeof context.accountId === \"string\") {\n const trimmed = context.accountId.trim();\n if (trimmed) result.accountId = trimmed;\n }\n if (context.to && typeof context.to === \"string\") {\n const trimmed = context.to.trim();\n if (trimmed) result.to = trimmed;\n }\n if (context.threadId !== undefined && context.threadId !== null) {\n result.threadId = context.threadId;\n }\n if (context.groupId && typeof context.groupId === \"string\") {\n const trimmed = context.groupId.trim();\n if (trimmed) result.groupId = trimmed;\n }\n if (context.groupChannel && typeof context.groupChannel === \"string\") {\n const trimmed = context.groupChannel.trim();\n if (trimmed) result.groupChannel = trimmed;\n }\n if (context.groupSpace && typeof context.groupSpace === \"string\") {\n const trimmed = context.groupSpace.trim();\n if (trimmed) result.groupSpace = trimmed;\n }\n\n // Return undefined if all fields are empty\n const hasValues = Object.values(result).some((v) => v !== undefined && v !== null);\n return hasValues ? result : undefined;\n}\n\n/**\n * Merges two delivery contexts, with the first taking priority.\n *\n * @param primary - Primary context (takes priority)\n * @param secondary - Secondary context (fallback values)\n * @returns Merged context\n */\nexport function mergeDeliveryContext(\n primary?: DeliveryContext,\n secondary?: DeliveryContext,\n): DeliveryContext | undefined {\n if (!primary && !secondary) {\n return undefined;\n }\n if (!primary) {\n return normalizeDeliveryContext(secondary);\n }\n if (!secondary) {\n return normalizeDeliveryContext(primary);\n }\n\n const merged: DeliveryContext = {};\n const ch = primary.channel || secondary.channel;\n if (ch) merged.channel = ch;\n const acct = primary.accountId || secondary.accountId;\n if (acct) merged.accountId = acct;\n const to = primary.to || secondary.to;\n if (to) merged.to = to;\n const tid = primary.threadId ?? secondary.threadId;\n if (tid !== undefined) merged.threadId = tid;\n const gid = primary.groupId || secondary.groupId;\n if (gid) merged.groupId = gid;\n const gch = primary.groupChannel || secondary.groupChannel;\n if (gch) merged.groupChannel = gch;\n const gsp = primary.groupSpace || secondary.groupSpace;\n if (gsp) merged.groupSpace = gsp;\n return normalizeDeliveryContext(merged);\n}\n\n/**\n * Formats a duration in milliseconds to a human-readable string.\n *\n * @param ms - Duration in milliseconds\n * @returns Formatted duration (e.g., \"1h2m\", \"45s\")\n */\nexport function formatDurationShort(ms?: number): string | undefined {\n if (!ms || !Number.isFinite(ms) || ms <= 0) {\n return undefined;\n }\n\n const totalSeconds = Math.round(ms / 1000);\n const hours = Math.floor(totalSeconds / 3600);\n const minutes = Math.floor((totalSeconds % 3600) / 60);\n const seconds = totalSeconds % 60;\n\n if (hours > 0) {\n return `${hours}h${minutes}m`;\n }\n if (minutes > 0) {\n return `${minutes}m${seconds}s`;\n }\n return `${seconds}s`;\n}\n\n/**\n * Formats a token count to a human-readable string.\n *\n * @param count - Token count\n * @returns Formatted count (e.g., \"1.5k\", \"2.3m\")\n */\nexport function formatTokenCount(count?: number): string {\n if (!count || !Number.isFinite(count)) {\n return \"0\";\n }\n if (count >= 1_000_000) {\n return `${(count / 1_000_000).toFixed(1)}m`;\n }\n if (count >= 1_000) {\n return `${(count / 1_000).toFixed(1)}k`;\n }\n return String(Math.round(count));\n}\n",
|
|
7
|
+
"import crypto from \"node:crypto\";\nimport type { UUID } from \"@elizaos/core\";\nimport type { DeliveryContext, ParsedSessionKey } from \"../types/subagent.js\";\n\n// Re-export core session utilities for convenience\nexport {\n buildAcpSessionKey,\n // Session key building/parsing\n buildAgentMainSessionKey,\n buildAgentPeerSessionKey,\n buildAgentSessionKey,\n buildGroupHistoryKey,\n buildSubagentSessionKey,\n createSendPolicyProvider,\n // Session entry utilities\n createSessionEntry,\n // Session providers\n createSessionProvider,\n createSessionSkillsProvider,\n deleteSessionEntry,\n extractSessionContext,\n getSessionEntry,\n getSessionProviders,\n isAcpSessionKey,\n isSubagentSessionKey as isCoreSubagentSessionKey,\n isValidSessionEntry,\n listSessionKeys,\n // Session store operations\n loadSessionStore,\n mergeSessionEntry,\n normalizeAccountId,\n normalizeAgentId as normalizeCoreAgentId,\n normalizeMainKey,\n parseAgentSessionKey,\n resolveAgentIdFromSessionKey,\n resolveAgentSessionsDir,\n resolveDefaultSessionStorePath,\n resolveSessionTranscriptPath,\n // Session paths\n resolveStateDir,\n resolveStorePath,\n resolveThreadParentSessionKey,\n resolveThreadSessionKeys,\n type SessionDeliveryContext,\n // Session types\n type SessionEntry,\n type SessionResolution,\n SessionStateManager,\n type SessionStore,\n saveSessionStore,\n toAgentRequestSessionKey,\n toAgentStoreSessionKey,\n updateSessionStore,\n updateSessionStoreEntry,\n upsertSessionEntry,\n} from \"@elizaos/core\";\n\n/**\n * Converts a string to a deterministic UUID v5.\n * Uses SHA-256 to hash the input and formats it as a UUID.\n *\n * @param input - The string to convert\n * @returns A deterministic UUID\n */\nexport function hashToUUID(input: string): UUID {\n const hash = crypto.createHash(\"sha256\").update(input).digest(\"hex\");\n // Format as UUID v5-style (version 5, variant 1)\n const uuid = [\n hash.slice(0, 8),\n hash.slice(8, 12),\n // Version 5: first nibble is 5\n `5${hash.slice(13, 16)}`,\n // Variant 1: first nibble is 8, 9, a, or b\n `${((parseInt(hash.slice(16, 17), 16) & 0x3) | 0x8).toString(16)}${hash.slice(17, 20)}`,\n hash.slice(20, 32),\n ].join(\"-\");\n return uuid as UUID;\n}\n\n/**\n * Converts a session key to a deterministic Eliza room ID.\n *\n * @param sessionKey - The Otto-style session key\n * @param agentId - Optional agent ID to scope the room\n * @returns A deterministic UUID for the room\n */\nexport function sessionKeyToRoomId(sessionKey: string, agentId?: string): UUID {\n const normalized = normalizeSessionKey(sessionKey);\n const input = agentId ? `${agentId}:${normalized}` : normalized;\n return hashToUUID(input);\n}\n\n/**\n * Normalizes a session key to a canonical format.\n *\n * @param sessionKey - The session key to normalize\n * @returns Normalized session key\n */\nexport function normalizeSessionKey(sessionKey: string): string {\n const trimmed = sessionKey.trim();\n if (!trimmed) {\n return \"\";\n }\n // If it already starts with \"agent:\", return as-is\n if (trimmed.startsWith(\"agent:\")) {\n return trimmed;\n }\n // Legacy keys like \"main\" or \"dm:user123\" need to be prefixed\n // But we can't know the agent ID here, so return as-is\n return trimmed;\n}\n\n/**\n * Parses a session key into its component parts.\n *\n * Supported formats:\n * - \"agent:botname:dm:user123\" -> { agentId: \"botname\", keyType: \"dm\", identifier: \"user123\" }\n * - \"agent:botname:subagent:uuid\" -> { agentId: \"botname\", keyType: \"subagent\", identifier: \"uuid\" }\n * - \"agent:botname:group:channelId\" -> { agentId: \"botname\", keyType: \"group\", identifier: \"channelId\" }\n * - \"dm:user123\" -> { agentId: \"unknown\", keyType: \"dm\", identifier: \"user123\" }\n *\n * @param sessionKey - The session key to parse\n * @returns Parsed components\n */\nexport function parseSessionKey(sessionKey: string): ParsedSessionKey {\n const trimmed = sessionKey.trim();\n\n if (!trimmed) {\n return {\n agentId: \"unknown\",\n keyType: \"unknown\",\n identifier: \"\",\n };\n }\n\n // Handle \"agent:NAME:TYPE:IDENTIFIER\" format\n if (trimmed.startsWith(\"agent:\")) {\n const parts = trimmed.split(\":\");\n if (parts.length >= 4) {\n const agentId = parts[1];\n const keyTypeRaw = parts[2];\n const identifier = parts.slice(3).join(\":\");\n const keyType = normalizeKeyType(keyTypeRaw);\n\n return {\n agentId,\n keyType,\n identifier,\n };\n }\n // Malformed agent: key\n if (parts.length >= 2) {\n return {\n agentId: parts[1],\n keyType: \"unknown\",\n identifier: parts.slice(2).join(\":\"),\n };\n }\n }\n\n // Handle legacy \"TYPE:IDENTIFIER\" format\n const colonIndex = trimmed.indexOf(\":\");\n if (colonIndex > 0) {\n const keyTypeRaw = trimmed.slice(0, colonIndex);\n const identifier = trimmed.slice(colonIndex + 1);\n const keyType = normalizeKeyType(keyTypeRaw);\n\n return {\n agentId: \"unknown\",\n keyType,\n identifier,\n };\n }\n\n // Single identifier (e.g., \"main\", \"global\")\n return {\n agentId: \"unknown\",\n keyType: \"unknown\",\n identifier: trimmed,\n };\n}\n\n/**\n * Normalizes a key type string to a known type.\n */\nfunction normalizeKeyType(raw: string): \"dm\" | \"subagent\" | \"group\" | \"channel\" | \"unknown\" {\n const lower = raw.toLowerCase();\n switch (lower) {\n case \"dm\":\n case \"direct\":\n return \"dm\";\n case \"subagent\":\n case \"sub\":\n return \"subagent\";\n case \"group\":\n case \"server\":\n return \"group\";\n case \"channel\":\n return \"channel\";\n default:\n return \"unknown\";\n }\n}\n\n/**\n * Builds a session key from its component parts.\n *\n * @param agentId - The agent ID\n * @param keyType - The key type (dm, subagent, group, etc.)\n * @param identifier - The unique identifier\n * @returns Constructed session key\n */\nexport function buildSessionKey(agentId: string, keyType: string, identifier: string): string {\n const normalizedAgentId = normalizeAgentId(agentId);\n return `agent:${normalizedAgentId}:${keyType}:${identifier}`;\n}\n\n/**\n * Normalizes an agent ID to lowercase.\n *\n * @param agentId - The agent ID to normalize\n * @returns Normalized agent ID\n */\nexport function normalizeAgentId(agentId: string): string {\n return agentId.trim().toLowerCase();\n}\n\n/**\n * Checks if a session key represents a subagent.\n *\n * @param sessionKey - The session key to check\n * @returns True if this is a subagent session\n */\nexport function isSubagentSessionKey(sessionKey: string): boolean {\n const parsed = parseSessionKey(sessionKey);\n return parsed.keyType === \"subagent\";\n}\n\n/**\n * Extracts the agent ID from a session key.\n *\n * @param sessionKey - The session key\n * @returns The agent ID or \"unknown\"\n */\nexport function extractAgentIdFromSessionKey(sessionKey: string): string {\n const parsed = parseSessionKey(sessionKey);\n return parsed.agentId;\n}\n\n/**\n * Creates a subagent session key with a unique identifier.\n *\n * @param agentId - The agent ID\n * @returns A new subagent session key\n */\nexport function createSubagentSessionKey(agentId: string): string {\n const uuid = crypto.randomUUID();\n return buildSessionKey(agentId, \"subagent\", uuid);\n}\n\n/**\n * Normalizes a delivery context by removing undefined values.\n *\n * @param context - The context to normalize\n * @returns Normalized delivery context or undefined\n */\nexport function normalizeDeliveryContext(\n context?: DeliveryContext | null,\n): DeliveryContext | undefined {\n if (!context) {\n return undefined;\n }\n\n const result: DeliveryContext = {};\n\n if (context.channel && typeof context.channel === \"string\") {\n const trimmed = context.channel.trim();\n if (trimmed) result.channel = trimmed;\n }\n if (context.accountId && typeof context.accountId === \"string\") {\n const trimmed = context.accountId.trim();\n if (trimmed) result.accountId = trimmed;\n }\n if (context.to && typeof context.to === \"string\") {\n const trimmed = context.to.trim();\n if (trimmed) result.to = trimmed;\n }\n if (context.threadId !== undefined && context.threadId !== null) {\n result.threadId = context.threadId;\n }\n if (context.groupId && typeof context.groupId === \"string\") {\n const trimmed = context.groupId.trim();\n if (trimmed) result.groupId = trimmed;\n }\n if (context.groupChannel && typeof context.groupChannel === \"string\") {\n const trimmed = context.groupChannel.trim();\n if (trimmed) result.groupChannel = trimmed;\n }\n if (context.groupSpace && typeof context.groupSpace === \"string\") {\n const trimmed = context.groupSpace.trim();\n if (trimmed) result.groupSpace = trimmed;\n }\n\n // Return undefined if all fields are empty\n const hasValues = Object.values(result).some((v) => v !== undefined && v !== null);\n return hasValues ? result : undefined;\n}\n\n/**\n * Merges two delivery contexts, with the first taking priority.\n *\n * @param primary - Primary context (takes priority)\n * @param secondary - Secondary context (fallback values)\n * @returns Merged context\n */\nexport function mergeDeliveryContext(\n primary?: DeliveryContext,\n secondary?: DeliveryContext,\n): DeliveryContext | undefined {\n if (!primary && !secondary) {\n return undefined;\n }\n if (!primary) {\n return normalizeDeliveryContext(secondary);\n }\n if (!secondary) {\n return normalizeDeliveryContext(primary);\n }\n\n return normalizeDeliveryContext({\n channel: primary.channel || secondary.channel,\n accountId: primary.accountId || secondary.accountId,\n to: primary.to || secondary.to,\n threadId: primary.threadId ?? secondary.threadId,\n groupId: primary.groupId || secondary.groupId,\n groupChannel: primary.groupChannel || secondary.groupChannel,\n groupSpace: primary.groupSpace || secondary.groupSpace,\n });\n}\n\n/**\n * Formats a duration in milliseconds to a human-readable string.\n *\n * @param ms - Duration in milliseconds\n * @returns Formatted duration (e.g., \"1h2m\", \"45s\")\n */\nexport function formatDurationShort(ms?: number): string | undefined {\n if (!ms || !Number.isFinite(ms) || ms <= 0) {\n return undefined;\n }\n\n const totalSeconds = Math.round(ms / 1000);\n const hours = Math.floor(totalSeconds / 3600);\n const minutes = Math.floor((totalSeconds % 3600) / 60);\n const seconds = totalSeconds % 60;\n\n if (hours > 0) {\n return `${hours}h${minutes}m`;\n }\n if (minutes > 0) {\n return `${minutes}m${seconds}s`;\n }\n return `${seconds}s`;\n}\n\n/**\n * Formats a token count to a human-readable string.\n *\n * @param count - Token count\n * @returns Formatted count (e.g., \"1.5k\", \"2.3m\")\n */\nexport function formatTokenCount(count?: number): string {\n if (!count || !Number.isFinite(count)) {\n return \"0\";\n }\n if (count >= 1_000_000) {\n return `${(count / 1_000_000).toFixed(1)}m`;\n }\n if (count >= 1_000) {\n return `${(count / 1_000).toFixed(1)}k`;\n }\n return String(Math.round(count));\n}\n",
|
|
8
8
|
"import type {\n Action,\n ActionResult,\n HandlerCallback,\n HandlerOptions,\n IAgentRuntime,\n Memory,\n State,\n UUID,\n} from \"@elizaos/core\";\nimport type { SubagentService } from \"../services/subagent-service.js\";\nimport { formatDurationShort } from \"../utils/session.js\";\n\nfunction getSubagentService(runtime: IAgentRuntime): SubagentService {\n const svc = runtime.getService(\"SUBAGENT\") as SubagentService | null;\n if (!svc) {\n throw new Error(\"SubagentService not available (SUBAGENT)\");\n }\n return svc;\n}\n\nfunction extractSessionContext(\n _runtime: IAgentRuntime,\n message: Memory,\n): { sessionKey?: string; roomId?: UUID } {\n const metadata = message.content?.metadata as Record<string, unknown> | undefined;\n const sessionKey = typeof metadata?.sessionKey === \"string\" ? metadata.sessionKey : undefined;\n\n const result: { sessionKey?: string; roomId?: UUID } = {};\n if (sessionKey) result.sessionKey = sessionKey;\n if (message.roomId) result.roomId = message.roomId;\n return result;\n}\n\n// ============================================================================\n// SPAWN_SUBAGENT\n// ============================================================================\n\nexport const spawnSubagentAction: Action = {\n name: \"SPAWN_SUBAGENT\",\n similes: [\"SPAWN_TASK\", \"BACKGROUND_TASK\", \"START_SUBAGENT\", \"SESSIONS_SPAWN\", \"CREATE_SUBAGENT\"],\n description:\n \"Spawn a background sub-agent run to execute a task asynchronously. The subagent will complete the task and announce results back.\",\n validate: async (runtime: IAgentRuntime, message: Memory): Promise<boolean> => {\n // Check if subagent service is available\n const svc = runtime.getService(\"SUBAGENT\");\n if (!svc) {\n return false;\n }\n\n const text = message.content.text?.toLowerCase() ?? \"\";\n const hasSpawnIntent =\n text.includes(\"spawn\") ||\n text.includes(\"background\") ||\n text.includes(\"subagent\") ||\n text.includes(\"async task\");\n const hasTaskWords =\n text.includes(\"task\") ||\n text.includes(\"research\") ||\n text.includes(\"investigate\") ||\n text.includes(\"analyze\") ||\n text.includes(\"look into\");\n return hasSpawnIntent || (hasTaskWords && text.includes(\"in background\"));\n },\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n _state?: State,\n options?: HandlerOptions,\n callback?: HandlerCallback,\n ): Promise<ActionResult> => {\n const svc = getSubagentService(runtime);\n const context = extractSessionContext(runtime, message);\n\n const opts = options as\n | {\n task?: string;\n label?: string;\n agentId?: string;\n model?: string;\n thinking?: string;\n timeoutSeconds?: number;\n cleanup?: \"delete\" | \"keep\";\n }\n | undefined;\n\n const task = opts?.task ?? message.content.text ?? \"\";\n if (!task.trim()) {\n const msg = \"Please specify a task for the subagent to execute.\";\n await callback?.({ content: { text: msg } });\n return { success: false, text: msg };\n }\n\n // Build spawn params, only including defined optional properties\n const spawnParams: Parameters<typeof svc.spawnSubagent>[0] = {\n task,\n runTimeoutSeconds: opts?.timeoutSeconds ?? 300,\n cleanup: opts?.cleanup ?? \"keep\",\n };\n if (opts?.label) spawnParams.label = opts.label;\n if (opts?.agentId) spawnParams.agentId = opts.agentId;\n if (opts?.model) spawnParams.model = opts.model;\n if (opts?.thinking) spawnParams.thinking = opts.thinking;\n\n const result = await svc.spawnSubagent(spawnParams, context);\n\n if (result.status !== \"accepted\") {\n const msg = `Failed to spawn subagent: ${result.error ?? \"unknown error\"}`;\n await callback?.({ content: { text: msg } });\n return { success: false, text: msg };\n }\n\n const labelText = opts?.label ? ` \"${opts.label}\"` : \"\";\n const msg = `Spawned background task${labelText}. Run ID: ${result.runId?.slice(0, 8)}...\\nI'll announce results when complete.`;\n\n await callback?.({ content: { text: msg } });\n\n return {\n success: true,\n text: msg,\n data: {\n runId: result.runId,\n childSessionKey: result.childSessionKey,\n childRoomId: result.childRoomId,\n },\n };\n },\n};\n\n// ============================================================================\n// SEND_TO_SESSION\n// ============================================================================\n\nexport const sendToSessionAction: Action = {\n name: \"SEND_TO_SESSION\",\n similes: [\"SESSIONS_SEND\", \"SEND_MESSAGE\", \"MESSAGE_AGENT\", \"A2A_SEND\"],\n description:\n \"Send a message to another agent session. Use sessionKey or label to identify the target.\",\n validate: async (runtime: IAgentRuntime, message: Memory): Promise<boolean> => {\n // Check if subagent service is available\n const svc = runtime.getService(\"SUBAGENT\");\n if (!svc) {\n return false;\n }\n\n const text = message.content.text?.toLowerCase() ?? \"\";\n return (\n text.includes(\"send to session\") ||\n text.includes(\"message session\") ||\n (text.includes(\"send\") && text.includes(\"agent\")) ||\n text.includes(\"sessions_send\")\n );\n },\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n _state?: State,\n options?: HandlerOptions,\n callback?: HandlerCallback,\n ): Promise<ActionResult> => {\n const svc = getSubagentService(runtime);\n const context = extractSessionContext(runtime, message);\n\n const opts = options as\n | {\n sessionKey?: string;\n label?: string;\n agentId?: string;\n message?: string;\n timeoutSeconds?: number;\n }\n | undefined;\n\n const targetMessage = opts?.message ?? message.content.text ?? \"\";\n if (!targetMessage.trim()) {\n const msg = \"Please specify a message to send.\";\n await callback?.({ content: { text: msg } });\n return { success: false, text: msg };\n }\n\n if (!opts?.sessionKey && !opts?.label) {\n const msg = \"Please specify either a sessionKey or label to identify the target session.\";\n await callback?.({ content: { text: msg } });\n return { success: false, text: msg };\n }\n\n // Build send params, only including defined optional properties\n const sendParams: Parameters<typeof svc.sendToAgent>[0] = {\n message: targetMessage,\n timeoutSeconds: opts?.timeoutSeconds ?? 30,\n };\n if (opts?.sessionKey) sendParams.sessionKey = opts.sessionKey;\n if (opts?.label) sendParams.label = opts.label;\n if (opts?.agentId) sendParams.agentId = opts.agentId;\n\n const result = await svc.sendToAgent(sendParams, context);\n\n if (result.status === \"forbidden\") {\n const msg = `Access denied: ${result.error}`;\n await callback?.({ content: { text: msg } });\n return { success: false, text: msg };\n }\n\n if (result.status === \"error\") {\n const msg = `Failed to send message: ${result.error ?? \"unknown error\"}`;\n await callback?.({ content: { text: msg } });\n return { success: false, text: msg };\n }\n\n if (result.status === \"timeout\") {\n const msg = `Request timed out waiting for response.`;\n await callback?.({ content: { text: msg } });\n return { success: false, text: msg };\n }\n\n const replyText = result.reply ? `\\n\\nReply: ${result.reply}` : \"\";\n const msg = `Message sent to ${result.sessionKey}.${replyText}`;\n\n await callback?.({ content: { text: msg } });\n\n return {\n success: true,\n text: msg,\n data: {\n runId: result.runId,\n sessionKey: result.sessionKey,\n reply: result.reply,\n },\n };\n },\n};\n\n// ============================================================================\n// LIST_SUBAGENTS\n// ============================================================================\n\nexport const listSubagentsAction: Action = {\n name: \"LIST_SUBAGENTS\",\n similes: [\"SHOW_SUBAGENTS\", \"SUBAGENT_STATUS\", \"RUNNING_TASKS\"],\n description: \"List active and recent subagent runs.\",\n validate: async (runtime: IAgentRuntime, message: Memory): Promise<boolean> => {\n // Check if subagent service is available\n const svc = runtime.getService(\"SUBAGENT\");\n if (!svc) {\n return false;\n }\n\n const text = message.content.text?.toLowerCase() ?? \"\";\n return (\n text.includes(\"list subagent\") ||\n text.includes(\"show subagent\") ||\n text.includes(\"subagent status\") ||\n text.includes(\"running task\") ||\n text.includes(\"background task\")\n );\n },\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n _state?: State,\n _options?: HandlerOptions,\n callback?: HandlerCallback,\n ): Promise<ActionResult> => {\n const svc = getSubagentService(runtime);\n const context = extractSessionContext(runtime, message);\n\n const runs = svc.listSubagentRuns(context.sessionKey);\n\n if (runs.length === 0) {\n const msg = \"No subagent runs found.\";\n await callback?.({ content: { text: msg } });\n return { success: true, text: msg };\n }\n\n const lines: string[] = [\"Subagent Runs:\"];\n\n for (const run of runs.slice(0, 20)) {\n const status = run.outcome?.status ?? (run.endedAt ? \"done\" : \"running\");\n const duration = run.endedAt\n ? formatDurationShort(run.endedAt - (run.startedAt ?? run.createdAt))\n : \"...\";\n const label = run.label || run.task.slice(0, 40);\n lines.push(`- [${status}] ${label} (${duration})`);\n }\n\n const msg = lines.join(\"\\n\");\n await callback?.({ content: { text: msg } });\n\n return {\n success: true,\n text: msg,\n data: { count: runs.length },\n };\n },\n};\n\n// ============================================================================\n// CANCEL_SUBAGENT\n// ============================================================================\n\nexport const cancelSubagentAction: Action = {\n name: \"CANCEL_SUBAGENT\",\n similes: [\"STOP_SUBAGENT\", \"ABORT_TASK\", \"KILL_SUBAGENT\"],\n description: \"Cancel a running subagent by its run ID.\",\n validate: async (runtime: IAgentRuntime, message: Memory): Promise<boolean> => {\n // Check if subagent service is available\n const svc = runtime.getService(\"SUBAGENT\");\n if (!svc) {\n return false;\n }\n\n const text = message.content.text?.toLowerCase() ?? \"\";\n return (\n (text.includes(\"cancel\") || text.includes(\"stop\") || text.includes(\"abort\")) &&\n (text.includes(\"subagent\") || text.includes(\"background\"))\n );\n },\n handler: async (\n runtime: IAgentRuntime,\n _message: Memory,\n _state?: State,\n options?: HandlerOptions,\n callback?: HandlerCallback,\n ): Promise<ActionResult> => {\n const svc = getSubagentService(runtime);\n\n const opts = options as { runId?: string } | undefined;\n const runId = opts?.runId;\n\n if (!runId) {\n const msg = \"Please specify the run ID to cancel. Use LIST_SUBAGENTS to see active runs.\";\n await callback?.({ content: { text: msg } });\n return { success: false, text: msg };\n }\n\n const cancelled = svc.cancelSubagentRun(runId);\n\n if (!cancelled) {\n const msg = `No active run found with ID: ${runId.slice(0, 8)}...`;\n await callback?.({ content: { text: msg } });\n return { success: false, text: msg };\n }\n\n const msg = `Cancelled subagent run: ${runId.slice(0, 8)}...`;\n await callback?.({ content: { text: msg } });\n\n return { success: true, text: msg, data: { runId } };\n },\n};\n\n// ============================================================================\n// GET_SUBAGENT_STATUS\n// ============================================================================\n\nexport const getSubagentStatusAction: Action = {\n name: \"GET_SUBAGENT_STATUS\",\n similes: [\"SUBAGENT_INFO\", \"TASK_STATUS\", \"CHECK_SUBAGENT\"],\n description: \"Get detailed status of a specific subagent run.\",\n validate: async (runtime: IAgentRuntime, message: Memory): Promise<boolean> => {\n // Check if subagent service is available\n const svc = runtime.getService(\"SUBAGENT\");\n if (!svc) {\n return false;\n }\n\n const text = message.content.text?.toLowerCase() ?? \"\";\n return (\n text.includes(\"subagent status\") ||\n text.includes(\"task status\") ||\n text.includes(\"check subagent\") ||\n text.includes(\"subagent info\")\n );\n },\n handler: async (\n runtime: IAgentRuntime,\n _message: Memory,\n _state?: State,\n options?: HandlerOptions,\n callback?: HandlerCallback,\n ): Promise<ActionResult> => {\n const svc = getSubagentService(runtime);\n\n const opts = options as { runId?: string } | undefined;\n const runId = opts?.runId;\n\n if (!runId) {\n const msg = \"Please specify the run ID to check. Use LIST_SUBAGENTS to see available runs.\";\n await callback?.({ content: { text: msg } });\n return { success: false, text: msg };\n }\n\n const run = svc.getSubagentRun(runId);\n\n if (!run) {\n const msg = `No run found with ID: ${runId.slice(0, 8)}...`;\n await callback?.({ content: { text: msg } });\n return { success: false, text: msg };\n }\n\n const status = run.outcome?.status ?? (run.endedAt ? \"done\" : \"running\");\n const duration = run.endedAt\n ? formatDurationShort(run.endedAt - (run.startedAt ?? run.createdAt))\n : \"in progress\";\n\n const lines = [\n `## Subagent Run: ${runId.slice(0, 8)}...`,\n \"\",\n `**Status:** ${status}`,\n `**Task:** ${run.task}`,\n run.label ? `**Label:** ${run.label}` : undefined,\n `**Duration:** ${duration}`,\n `**Session:** ${run.childSessionKey}`,\n run.outcome?.error ? `**Error:** ${run.outcome.error}` : undefined,\n ].filter((l): l is string => l !== undefined);\n\n const msg = lines.join(\"\\n\");\n await callback?.({ content: { text: msg } });\n\n return { success: true, text: msg, data: { run } };\n },\n};\n",
|
|
9
9
|
"import type {\n Action,\n ActionResult,\n HandlerCallback,\n HandlerOptions,\n IAgentRuntime,\n Memory,\n State,\n} from \"@elizaos/core\";\nimport type { AgentOrchestratorService } from \"../services/agent-orchestrator-service.js\";\n\nfunction getService(runtime: IAgentRuntime): AgentOrchestratorService {\n const svc = runtime.getService(\"CODE_TASK\") as AgentOrchestratorService | null;\n if (!svc) {\n throw new Error(\"AgentOrchestratorService not available (CODE_TASK)\");\n }\n return svc;\n}\n\nfunction extractQuery(text: string): string {\n return text\n .toLowerCase()\n .replace(\n /\\b(switch|select|go|change|search|find|pause|stop|halt|resume|restart|continue|start|run|begin|cancel|delete|remove|list|show|view)\\b/g,\n \"\",\n )\n .replace(/\\b(about|for|named|called|with|to|my|your|our|this|current)\\b/g, \"\")\n .replace(/\\b(task|tasks|the|a|an)\\b/g, \"\")\n .replace(/\\s+/g, \" \")\n .trim();\n}\n\n// ============================================================================\n// CREATE_TASK\n// ============================================================================\n\nexport const createTaskAction: Action = {\n name: \"CREATE_TASK\",\n similes: [\"START_TASK\", \"SPAWN_TASK\", \"NEW_TASK\", \"BEGIN_TASK\"],\n description:\n \"Create an orchestrated background task to be executed by a selected agent provider.\",\n validate: async (runtime: IAgentRuntime, message: Memory): Promise<boolean> => {\n // Check if orchestrator service is available\n const svc = runtime.getService(\"CODE_TASK\");\n if (!svc) {\n return false;\n }\n\n const text = message.content.text?.toLowerCase() ?? \"\";\n const hasExplicit =\n text.includes(\"create task\") || text.includes(\"new task\") || text.includes(\"start a task\");\n const hasIntent =\n text.includes(\"implement\") ||\n text.includes(\"build\") ||\n text.includes(\"create\") ||\n text.includes(\"develop\") ||\n text.includes(\"refactor\") ||\n text.includes(\"fix\") ||\n text.includes(\"add\");\n return hasExplicit || hasIntent;\n },\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n _state?: State,\n options?: HandlerOptions,\n callback?: HandlerCallback,\n ): Promise<ActionResult> => {\n const svc = getService(runtime);\n const raw = message.content.text ?? \"\";\n\n const opts = options as { title?: string; description?: string; steps?: string[] } | undefined;\n const name =\n (opts?.title ?? raw.split(\"\\n\")[0] ?? \"New Task\").trim().slice(0, 100) || \"New Task\";\n const description = (opts?.description ?? raw).trim().slice(0, 4000) || name;\n\n const roomId = message.roomId;\n const task = await svc.createTask(name, description, roomId);\n\n const stepLines = Array.isArray(opts?.steps) ? opts?.steps : undefined;\n if (stepLines && stepLines.length > 0) {\n for (const s of stepLines) {\n const step = String(s).trim();\n if (!step) continue;\n await svc.addStep(task.id ?? \"\", step);\n }\n await svc.appendOutput(\n task.id ?? \"\",\n `Plan:\\n${stepLines.map((s, i) => `${i + 1}. ${s}`).join(\"\\n\")}`,\n );\n }\n\n const msg = `Created task: ${task.name}\\nProvider: ${task.metadata.providerLabel ?? task.metadata.providerId}\\nStarting execution…`;\n await callback?.({ content: { text: msg } });\n\n svc.startTaskExecution(task.id ?? \"\").catch((err) => {\n // Log execution errors but don't block the action response\n const errorMsg = err instanceof Error ? err.message : String(err);\n svc.appendOutput(task.id ?? \"\", `Execution error: ${errorMsg}`).catch(() => {});\n });\n\n return { success: true, text: msg, data: { taskId: task.id ?? \"\" } };\n },\n};\n\n// ============================================================================\n// LIST_TASKS\n// ============================================================================\n\nexport const listTasksAction: Action = {\n name: \"LIST_TASKS\",\n similes: [\"SHOW_TASKS\", \"GET_TASKS\", \"TASKS\", \"VIEW_TASKS\"],\n description: \"List tasks managed by the orchestrator.\",\n validate: async (runtime: IAgentRuntime, message: Memory): Promise<boolean> => {\n // Check if orchestrator service is available\n const svc = runtime.getService(\"CODE_TASK\");\n if (!svc) {\n return false;\n }\n\n const t = message.content.text?.toLowerCase() ?? \"\";\n return (\n t.includes(\"list task\") || t.includes(\"show task\") || t === \"tasks\" || t.includes(\"my task\")\n );\n },\n handler: async (\n runtime: IAgentRuntime,\n _message: Memory,\n _state?: State,\n _options?: HandlerOptions,\n callback?: HandlerCallback,\n ): Promise<ActionResult> => {\n const svc = getService(runtime);\n const tasks = await svc.getRecentTasks(20);\n if (tasks.length === 0) {\n const msg = \"No tasks.\";\n await callback?.({ content: { text: msg } });\n return { success: true, text: msg };\n }\n const lines: string[] = [\"Tasks:\"];\n const current = svc.getCurrentTaskId();\n for (const t of tasks) {\n const marker = t.id === current ? \" (current)\" : \"\";\n lines.push(`- ${t.name} — ${t.metadata.status} ${t.metadata.progress}%${marker}`);\n }\n const msg = lines.join(\"\\n\");\n await callback?.({ content: { text: msg } });\n return { success: true, text: msg };\n },\n};\n\n// ============================================================================\n// SWITCH_TASK\n// ============================================================================\n\nexport const switchTaskAction: Action = {\n name: \"SWITCH_TASK\",\n similes: [\"SELECT_TASK\", \"SET_TASK\", \"CHANGE_TASK\", \"GO_TO_TASK\"],\n description: \"Switch the current task context to a different task.\",\n validate: async (runtime: IAgentRuntime, message: Memory): Promise<boolean> => {\n // Check if orchestrator service is available\n const svc = runtime.getService(\"CODE_TASK\");\n if (!svc) {\n return false;\n }\n\n const t = message.content.text?.toLowerCase() ?? \"\";\n return (\n t.includes(\"switch to task\") ||\n t.includes(\"select task\") ||\n (t.includes(\"task\") && t.includes(\"switch\"))\n );\n },\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n _state?: State,\n _options?: HandlerOptions,\n callback?: HandlerCallback,\n ): Promise<ActionResult> => {\n const svc = getService(runtime);\n const query = extractQuery(message.content.text ?? \"\");\n if (!query) {\n const msg = \"Please specify which task to switch to (by name or id).\";\n await callback?.({ content: { text: msg } });\n return { success: false, text: msg };\n }\n const matches = await svc.searchTasks(query);\n const chosen = matches[0];\n if (!chosen?.id) {\n const msg = `No task found matching: \"${query}\"`;\n await callback?.({ content: { text: msg } });\n return { success: false, text: msg };\n }\n svc.setCurrentTask(chosen.id);\n const msg = `Switched to task: ${chosen.name}`;\n await callback?.({ content: { text: msg } });\n return { success: true, text: msg, data: { taskId: chosen.id } };\n },\n};\n\n// ============================================================================\n// SEARCH_TASKS\n// ============================================================================\n\nexport const searchTasksAction: Action = {\n name: \"SEARCH_TASKS\",\n similes: [\"FIND_TASK\", \"LOOKUP_TASK\"],\n description: \"Search tasks by query.\",\n validate: async (runtime: IAgentRuntime, message: Memory): Promise<boolean> => {\n // Check if orchestrator service is available\n const svc = runtime.getService(\"CODE_TASK\");\n if (!svc) {\n return false;\n }\n\n const t = message.content.text?.toLowerCase() ?? \"\";\n return t.includes(\"search task\") || t.includes(\"find task\") || t.includes(\"look for task\");\n },\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n _state?: State,\n options?: HandlerOptions,\n callback?: HandlerCallback,\n ): Promise<ActionResult> => {\n const svc = getService(runtime);\n const opt = options as { query?: string } | undefined;\n const query = (opt?.query ?? extractQuery(message.content.text ?? \"\")).trim();\n if (!query) {\n const msg = \"What would you like to search for?\";\n await callback?.({ content: { text: msg } });\n return { success: false, text: msg };\n }\n const matches = await svc.searchTasks(query);\n if (matches.length === 0) {\n const msg = `No tasks found matching: \"${query}\"`;\n await callback?.({ content: { text: msg } });\n return { success: true, text: msg };\n }\n const lines: string[] = [`Found ${matches.length} task(s) matching \"${query}\":`];\n for (const t of matches.slice(0, 10)) {\n lines.push(`- ${t.name} — ${t.metadata.status} ${t.metadata.progress}%`);\n }\n const msg = lines.join(\"\\n\");\n await callback?.({ content: { text: msg } });\n return { success: true, text: msg };\n },\n};\n\n// ============================================================================\n// PAUSE / RESUME / CANCEL\n// ============================================================================\n\nexport const pauseTaskAction: Action = {\n name: \"PAUSE_TASK\",\n similes: [\"STOP_TASK\", \"HALT_TASK\"],\n description: \"Pause a running task.\",\n validate: async (runtime: IAgentRuntime, message: Memory): Promise<boolean> => {\n // Check if orchestrator service is available\n const svc = runtime.getService(\"CODE_TASK\");\n if (!svc) {\n return false;\n }\n\n const t = message.content.text?.toLowerCase() ?? \"\";\n return (t.includes(\"pause\") || t.includes(\"stop\") || t.includes(\"halt\")) && t.includes(\"task\");\n },\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n _state?: State,\n _options?: HandlerOptions,\n callback?: HandlerCallback,\n ): Promise<ActionResult> => {\n const svc = getService(runtime);\n const query = extractQuery(message.content.text ?? \"\");\n const task = query ? (await svc.searchTasks(query))[0] : await svc.getCurrentTask();\n if (!task?.id) {\n const msg = \"No task to pause.\";\n await callback?.({ content: { text: msg } });\n return { success: false, text: msg };\n }\n await svc.pauseTask(task.id);\n const msg = `Paused task: ${task.name}`;\n await callback?.({ content: { text: msg } });\n return { success: true, text: msg };\n },\n};\n\nexport const resumeTaskAction: Action = {\n name: \"RESUME_TASK\",\n similes: [\"CONTINUE_TASK\", \"RESTART_TASK\", \"RUN_TASK\"],\n description: \"Resume a paused task.\",\n validate: async (runtime: IAgentRuntime, message: Memory): Promise<boolean> => {\n // Check if orchestrator service is available\n const svc = runtime.getService(\"CODE_TASK\");\n if (!svc) {\n return false;\n }\n\n const t = message.content.text?.toLowerCase() ?? \"\";\n return (\n t.includes(\"task\") &&\n (t.includes(\"resume\") || t.includes(\"restart\") || t.includes(\"continue\"))\n );\n },\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n _state?: State,\n _options?: HandlerOptions,\n callback?: HandlerCallback,\n ): Promise<ActionResult> => {\n const svc = getService(runtime);\n const query = extractQuery(message.content.text ?? \"\");\n const task = query ? (await svc.searchTasks(query))[0] : await svc.getCurrentTask();\n if (!task?.id) {\n const msg = \"No task to resume.\";\n await callback?.({ content: { text: msg } });\n return { success: false, text: msg };\n }\n await svc.resumeTask(task.id);\n const taskId = task.id;\n svc.startTaskExecution(taskId).catch((err) => {\n // Log execution errors but don't block the action response\n const errorMsg = err instanceof Error ? err.message : String(err);\n svc.appendOutput(taskId, `Execution error: ${errorMsg}`).catch(() => {});\n });\n const msg = `Resumed task: ${task.name}`;\n await callback?.({ content: { text: msg } });\n return { success: true, text: msg };\n },\n};\n\nexport const cancelTaskAction: Action = {\n name: \"CANCEL_TASK\",\n similes: [\"DELETE_TASK\", \"REMOVE_TASK\", \"ABORT_TASK\"],\n description: \"Cancel a task.\",\n validate: async (runtime: IAgentRuntime, message: Memory): Promise<boolean> => {\n // Check if orchestrator service is available\n const svc = runtime.getService(\"CODE_TASK\");\n if (!svc) {\n return false;\n }\n\n const t = message.content.text?.toLowerCase() ?? \"\";\n return (\n (t.includes(\"cancel\") || t.includes(\"delete\") || t.includes(\"remove\")) && t.includes(\"task\")\n );\n },\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n _state?: State,\n _options?: HandlerOptions,\n callback?: HandlerCallback,\n ): Promise<ActionResult> => {\n const svc = getService(runtime);\n const query = extractQuery(message.content.text ?? \"\");\n const task = query ? (await svc.searchTasks(query))[0] : await svc.getCurrentTask();\n if (!task?.id) {\n const msg = \"No task to cancel.\";\n await callback?.({ content: { text: msg } });\n return { success: false, text: msg };\n }\n await svc.cancelTask(task.id);\n const msg = `Cancelled task: ${task.name}`;\n await callback?.({ content: { text: msg } });\n return { success: true, text: msg };\n },\n};\n",
|
|
10
10
|
"import type { AgentOrchestratorPluginOptions } from \"./types.js\";\n\nlet globalOptions: AgentOrchestratorPluginOptions | null = null;\n\nexport function configureAgentOrchestratorPlugin(options: AgentOrchestratorPluginOptions): void {\n globalOptions = options;\n}\n\nexport function getConfiguredAgentOrchestratorOptions(): AgentOrchestratorPluginOptions | null {\n return globalOptions;\n}\n",
|
|
@@ -17,12 +17,12 @@
|
|
|
17
17
|
"import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nfunction _v4(options, buf, offset) {\n options = options || {};\n const rnds = options.random ?? options.rng?.() ?? rng();\n if (rnds.length < 16) {\n throw new Error('Random bytes length must be >= 16');\n }\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n if (buf) {\n offset = offset || 0;\n if (offset < 0 || offset + 16 > buf.length) {\n throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n }\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n return buf;\n }\n return unsafeStringify(rnds);\n}\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n return _v4(options, buf, offset);\n}\nexport default v4;\n",
|
|
18
18
|
"import crypto from \"node:crypto\";\nimport { EventEmitter } from \"node:events\";\nimport { EventType, type IAgentRuntime, Service, type UUID } from \"@elizaos/core\";\nimport type {\n DeliveryStatus,\n MessageContent,\n MessagingAdapter,\n MessagingChannel,\n MessagingEventPayload,\n MessagingEventType,\n MessagingRoomMetadata,\n SendMessageParams,\n SendMessageResult,\n} from \"../types/messaging.js\";\nimport type { DeliveryContext } from \"../types/subagent.js\";\nimport { extractAgentIdFromSessionKey, sessionKeyToRoomId } from \"../utils/session.js\";\n\ntype InternalEventType = \"messaging\" | MessagingEventType;\n\n/**\n * MessagingService provides a unified interface for sending messages\n * across different platforms (Discord, Telegram, Slack, etc.).\n *\n * It works by delegating to platform-specific services registered\n * in the runtime, providing a consistent API for the orchestrator.\n */\nexport class MessagingService extends Service {\n static serviceType = \"MESSAGING\";\n capabilityDescription =\n \"Unified cross-platform messaging for sending messages to any supported channel\";\n\n private readonly emitter = new EventEmitter();\n private readonly adapters = new Map<MessagingChannel, MessagingAdapter>();\n private readonly pendingDeliveries = new Map<\n string,\n { params: SendMessageParams; status: DeliveryStatus }\n >();\n private initialized = false;\n\n static async start(runtime: IAgentRuntime): Promise<Service> {\n const service = new MessagingService(runtime);\n await service.initialize();\n return service;\n }\n\n async initialize(): Promise<void> {\n if (this.initialized) {\n return;\n }\n this.initialized = true;\n\n // Register built-in adapters for known services\n this.registerBuiltInAdapters();\n }\n\n /**\n * Registers built-in adapters for known platform services.\n *\n * Note: Service names are lowercase as defined in each plugin:\n * - Discord: \"DISCORD\" (uppercase, from plugin-discord)\n * - Telegram: \"TELEGRAM\" (uppercase, from plugin-telegram)\n * - Slack: \"slack\" (lowercase, from plugin-slack)\n * - WhatsApp: \"whatsapp\" (lowercase, from plugin-whatsapp)\n * - Twitch: \"twitch\" (lowercase, from plugin-twitch)\n */\n private registerBuiltInAdapters(): void {\n // Discord adapter (service name: \"DISCORD\")\n this.registerAdapter({\n channel: \"discord\",\n isAvailable: () => {\n const service = this.runtime.getService(\"DISCORD\");\n return !!service;\n },\n send: async (params) => this.sendViaDiscord(params),\n });\n\n // Telegram adapter (service name: \"TELEGRAM\")\n this.registerAdapter({\n channel: \"telegram\",\n isAvailable: () => {\n const service = this.runtime.getService(\"TELEGRAM\");\n return !!service;\n },\n send: async (params) => this.sendViaTelegram(params),\n });\n\n // Slack adapter (service name: \"slack\")\n this.registerAdapter({\n channel: \"slack\",\n isAvailable: () => {\n const service = this.runtime.getService(\"slack\");\n return !!service;\n },\n send: async (params) => this.sendViaSlack(params),\n });\n\n // WhatsApp adapter (service name: \"whatsapp\")\n this.registerAdapter({\n channel: \"whatsapp\",\n isAvailable: () => {\n const service = this.runtime.getService(\"whatsapp\");\n return !!service;\n },\n send: async (params) => this.sendViaWhatsApp(params),\n });\n\n // Twitch adapter (service name: \"twitch\")\n this.registerAdapter({\n channel: \"twitch\",\n isAvailable: () => {\n const service = this.runtime.getService(\"twitch\");\n return !!service;\n },\n send: async (params) => this.sendViaTwitch(params),\n });\n\n // Internal adapter (for agent-to-agent within Eliza)\n this.registerAdapter({\n channel: \"internal\",\n isAvailable: () => true,\n send: async (params) => this.sendViaInternal(params),\n });\n }\n\n /**\n * Registers a custom messaging adapter.\n */\n registerAdapter(adapter: MessagingAdapter): void {\n this.adapters.set(adapter.channel, adapter);\n }\n\n /**\n * Gets a registered adapter by channel.\n */\n getAdapter(channel: MessagingChannel): MessagingAdapter | undefined {\n return this.adapters.get(channel);\n }\n\n /**\n * Lists available messaging channels.\n */\n getAvailableChannels(): MessagingChannel[] {\n const channels: MessagingChannel[] = [];\n for (const [channel, adapter] of this.adapters) {\n if (adapter.isAvailable()) {\n channels.push(channel);\n }\n }\n return channels;\n }\n\n // ============================================================================\n // Main Send API\n // ============================================================================\n\n /**\n * Sends a message to a target.\n */\n async send(params: SendMessageParams): Promise<SendMessageResult> {\n const idempotencyKey = params.idempotencyKey ?? crypto.randomUUID();\n const channel = params.target.channel;\n\n // Check for existing delivery with same idempotency key\n const existing = this.pendingDeliveries.get(idempotencyKey);\n if (existing) {\n const result: SendMessageResult = {\n success: existing.status.status === \"sent\" || existing.status.status === \"delivered\",\n channel,\n targetId: params.target.to,\n };\n if (existing.status.messageId) result.messageId = existing.status.messageId;\n if (existing.status.error) result.error = existing.status.error;\n if (existing.status.status === \"sent\") result.sentAt = existing.status.updatedAt;\n return result;\n }\n\n // Track delivery\n const status: DeliveryStatus = {\n status: \"pending\",\n updatedAt: Date.now(),\n };\n this.pendingDeliveries.set(idempotencyKey, { params, status });\n\n this.emitMessagingEvent(\"MESSAGING_SEND_REQUESTED\", {\n idempotencyKey,\n channel,\n targetId: params.target.to,\n status: \"pending\",\n });\n\n // Get adapter\n const adapter = this.adapters.get(channel);\n if (!adapter) {\n const errorMsg = `No adapter registered for channel: ${channel}`;\n const result: SendMessageResult = {\n success: false,\n channel,\n targetId: params.target.to,\n error: errorMsg,\n };\n status.status = \"failed\";\n status.error = errorMsg;\n status.updatedAt = Date.now();\n\n this.emitMessagingEvent(\"MESSAGING_SEND_FAILED\", {\n idempotencyKey,\n channel,\n targetId: params.target.to,\n status: \"failed\",\n error: errorMsg,\n });\n\n return result;\n }\n\n if (!adapter.isAvailable()) {\n const errorMsg = `${channel} service is not available`;\n const result: SendMessageResult = {\n success: false,\n channel,\n targetId: params.target.to,\n error: errorMsg,\n };\n status.status = \"failed\";\n status.error = errorMsg;\n status.updatedAt = Date.now();\n\n this.emitMessagingEvent(\"MESSAGING_SEND_FAILED\", {\n idempotencyKey,\n channel,\n targetId: params.target.to,\n status: \"failed\",\n error: errorMsg,\n });\n\n return result;\n }\n\n // Send via adapter\n try {\n const result = await adapter.send({ ...params, idempotencyKey });\n\n status.status = result.success ? \"sent\" : \"failed\";\n if (result.messageId) status.messageId = result.messageId;\n if (result.error) status.error = result.error;\n status.updatedAt = Date.now();\n\n if (result.success) {\n const sentPayload: MessagingEventPayload = {\n idempotencyKey,\n channel,\n targetId: params.target.to,\n status: \"sent\",\n };\n if (result.messageId) sentPayload.messageId = result.messageId;\n if (result.sentAt) sentPayload.sentAt = result.sentAt;\n this.emitMessagingEvent(\"MESSAGING_SENT\", sentPayload);\n } else {\n const failedPayload: MessagingEventPayload = {\n idempotencyKey,\n channel,\n targetId: params.target.to,\n status: \"failed\",\n };\n if (result.error) failedPayload.error = result.error;\n this.emitMessagingEvent(\"MESSAGING_SEND_FAILED\", failedPayload);\n }\n\n return result;\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n status.status = \"failed\";\n status.error = errorMessage;\n status.updatedAt = Date.now();\n\n this.emitMessagingEvent(\"MESSAGING_SEND_FAILED\", {\n idempotencyKey,\n channel,\n targetId: params.target.to,\n status: \"failed\",\n error: errorMessage,\n });\n\n return {\n success: false,\n channel,\n targetId: params.target.to,\n error: errorMessage,\n };\n }\n }\n\n /**\n * Sends a message using delivery context from subagent system.\n */\n async sendToDeliveryContext(\n deliveryContext: DeliveryContext,\n content: MessageContent,\n options?: { idempotencyKey?: string; timeoutMs?: number },\n ): Promise<SendMessageResult> {\n const channel = this.normalizeChannel(deliveryContext.channel);\n const to = deliveryContext.to ?? deliveryContext.accountId ?? \"\";\n\n if (!to) {\n return {\n success: false,\n channel,\n targetId: \"\",\n error: \"No recipient specified in delivery context\",\n };\n }\n\n return this.send({\n target: {\n channel,\n to,\n ...(deliveryContext.accountId ? { accountId: deliveryContext.accountId } : {}),\n ...(deliveryContext.threadId !== undefined ? { threadId: deliveryContext.threadId } : {}),\n },\n content,\n ...(options?.idempotencyKey ? { idempotencyKey: options.idempotencyKey } : {}),\n ...(options?.timeoutMs !== undefined ? { timeoutMs: options.timeoutMs } : {}),\n });\n }\n\n /**\n * Sends a message to a room based on its metadata.\n */\n async sendToRoom(\n roomId: UUID,\n content: MessageContent,\n options?: { idempotencyKey?: string; timeoutMs?: number },\n ): Promise<SendMessageResult> {\n const room = await this.runtime.getRoom(roomId);\n if (!room) {\n return {\n success: false,\n channel: \"unknown\",\n targetId: roomId,\n error: `Room not found: ${roomId}`,\n };\n }\n\n const metadata = room.metadata as MessagingRoomMetadata | undefined;\n const channel = this.normalizeChannel(metadata?.messagingChannel);\n const to = metadata?.messagingTo ?? room.channelId ?? \"\";\n\n if (!to) {\n return {\n success: false,\n channel,\n targetId: roomId,\n error: \"Room has no messaging target configured\",\n };\n }\n\n return this.send({\n target: {\n channel,\n to,\n ...(metadata?.messagingAccountId ? { accountId: metadata.messagingAccountId } : {}),\n ...(metadata?.messagingThreadId !== undefined\n ? { threadId: metadata.messagingThreadId }\n : {}),\n },\n content,\n ...(options?.idempotencyKey ? { idempotencyKey: options.idempotencyKey } : {}),\n ...(options?.timeoutMs !== undefined ? { timeoutMs: options.timeoutMs } : {}),\n });\n }\n\n /**\n * Sends a message to a session by its key.\n */\n async sendToSession(\n sessionKey: string,\n content: MessageContent,\n options?: { idempotencyKey?: string; timeoutMs?: number },\n ): Promise<SendMessageResult> {\n const agentId = extractAgentIdFromSessionKey(sessionKey);\n const roomId = sessionKeyToRoomId(sessionKey, agentId);\n return this.sendToRoom(roomId, content, options);\n }\n\n // ============================================================================\n // Platform-Specific Send Implementations\n // ============================================================================\n\n /**\n * Sends via Discord.\n */\n private async sendViaDiscord(params: SendMessageParams): Promise<SendMessageResult> {\n // Get Discord service\n const discordService = this.runtime.getService(\"DISCORD\") as unknown as\n | { client: { channels: { fetch: (id: string) => Promise<unknown> } } }\n | undefined;\n\n if (!discordService?.client) {\n return {\n success: false,\n channel: \"discord\",\n targetId: params.target.to,\n error: \"Discord service not available\",\n };\n }\n\n try {\n const channel = (await discordService.client.channels.fetch(params.target.to)) as {\n send?: (msg: unknown) => Promise<{ id: string }>;\n } | null;\n\n if (!channel?.send) {\n return {\n success: false,\n channel: \"discord\",\n targetId: params.target.to,\n error: \"Channel not found or not a text channel\",\n };\n }\n\n const message = await channel.send({\n content: params.content.text,\n ...(params.target.replyToMessageId\n ? { reply: { messageReference: params.target.replyToMessageId } }\n : {}),\n });\n\n return {\n success: true,\n messageId: message.id,\n channel: \"discord\",\n targetId: params.target.to,\n sentAt: Date.now(),\n };\n } catch (error) {\n return {\n success: false,\n channel: \"discord\",\n targetId: params.target.to,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n }\n\n /**\n * Sends via Telegram.\n */\n private async sendViaTelegram(params: SendMessageParams): Promise<SendMessageResult> {\n const telegramService = this.runtime.getService(\"TELEGRAM\") as\n | {\n bot?: {\n telegram: {\n sendMessage: (\n chatId: string | number,\n text: string,\n options?: object,\n ) => Promise<{ message_id: number }>;\n };\n };\n }\n | undefined;\n\n if (!telegramService?.bot?.telegram) {\n return {\n success: false,\n channel: \"telegram\",\n targetId: params.target.to,\n error: \"Telegram service not available\",\n };\n }\n\n try {\n const chatId = Number.isNaN(Number(params.target.to))\n ? params.target.to\n : Number(params.target.to);\n\n const result = await telegramService.bot.telegram.sendMessage(chatId, params.content.text, {\n reply_to_message_id: params.target.replyToMessageId\n ? Number(params.target.replyToMessageId)\n : undefined,\n disable_web_page_preview: params.content.disableLinkPreview,\n disable_notification: params.content.silent,\n });\n\n return {\n success: true,\n messageId: String(result.message_id),\n channel: \"telegram\",\n targetId: params.target.to,\n sentAt: Date.now(),\n };\n } catch (error) {\n return {\n success: false,\n channel: \"telegram\",\n targetId: params.target.to,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n }\n\n /**\n * Sends via Slack.\n *\n * Uses SlackService.sendMessage(channelId, text, options) which returns { ts, channelId }.\n */\n private async sendViaSlack(params: SendMessageParams): Promise<SendMessageResult> {\n const slackService = this.runtime.getService(\"slack\") as\n | {\n sendMessage?: (\n channelId: string,\n text: string,\n options?: { threadTs?: string; replyBroadcast?: boolean },\n ) => Promise<{ ts: string; channelId: string }>;\n }\n | undefined;\n\n if (!slackService?.sendMessage) {\n return {\n success: false,\n channel: \"slack\",\n targetId: params.target.to,\n error: \"Slack service not available or sendMessage method not found\",\n };\n }\n\n try {\n const result = await slackService.sendMessage(params.target.to, params.content.text, {\n ...(params.target.threadId ? { threadTs: String(params.target.threadId) } : {}),\n replyBroadcast: false,\n });\n\n return {\n success: true,\n messageId: result.ts,\n channel: \"slack\",\n targetId: params.target.to,\n sentAt: Date.now(),\n };\n } catch (error) {\n return {\n success: false,\n channel: \"slack\",\n targetId: params.target.to,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n }\n\n /**\n * Sends via WhatsApp.\n *\n * Uses WhatsAppService.sendText(to, text) which returns WhatsAppMessageResponse.\n * The response contains { messages: [{ id: string }], messaging_product: \"whatsapp\" }.\n */\n private async sendViaWhatsApp(params: SendMessageParams): Promise<SendMessageResult> {\n const whatsappService = this.runtime.getService(\"whatsapp\") as\n | {\n sendText?: (to: string, text: string) => Promise<{ messages?: Array<{ id: string }> }>;\n }\n | undefined;\n\n if (!whatsappService?.sendText) {\n return {\n success: false,\n channel: \"whatsapp\",\n targetId: params.target.to,\n error: \"WhatsApp service not available or sendText method not found\",\n };\n }\n\n try {\n const result = await whatsappService.sendText(params.target.to, params.content.text);\n\n const messageId = result.messages?.[0]?.id;\n\n return {\n success: true,\n ...(messageId ? { messageId } : {}),\n channel: \"whatsapp\",\n targetId: params.target.to,\n sentAt: Date.now(),\n };\n } catch (error) {\n return {\n success: false,\n channel: \"whatsapp\",\n targetId: params.target.to,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n }\n\n /**\n * Sends via Twitch.\n *\n * Uses TwitchService.sendMessage(text, options) where options.channel specifies the channel.\n * Returns TwitchSendResult { success: boolean; messageId?: string }.\n */\n private async sendViaTwitch(params: SendMessageParams): Promise<SendMessageResult> {\n const twitchService = this.runtime.getService(\"twitch\") as\n | {\n sendMessage?: (\n text: string,\n options?: { channel?: string; replyTo?: string },\n ) => Promise<{ success: boolean; messageId?: string }>;\n }\n | undefined;\n\n if (!twitchService?.sendMessage) {\n return {\n success: false,\n channel: \"twitch\",\n targetId: params.target.to,\n error: \"Twitch service not available or sendMessage method not found\",\n };\n }\n\n try {\n const result = await twitchService.sendMessage(params.content.text, {\n channel: params.target.to,\n ...(params.target.replyToMessageId ? { replyTo: params.target.replyToMessageId } : {}),\n });\n\n return {\n success: result.success,\n ...(result.messageId !== undefined ? { messageId: result.messageId } : {}),\n channel: \"twitch\",\n targetId: params.target.to,\n sentAt: Date.now(),\n };\n } catch (error) {\n return {\n success: false,\n channel: \"twitch\",\n targetId: params.target.to,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n }\n\n /**\n * Sends via internal Eliza events (agent-to-agent).\n */\n private async sendViaInternal(params: SendMessageParams): Promise<SendMessageResult> {\n const roomId = params.target.to as UUID;\n const messageId = crypto.randomUUID();\n\n try {\n // Create a memory for the internal message\n const memory = {\n id: messageId as UUID,\n entityId: this.runtime.agentId,\n agentId: this.runtime.agentId,\n roomId,\n content: {\n text: params.content.text,\n type: \"text\",\n source: \"internal\",\n metadata: {\n isInternalMessage: true,\n idempotencyKey: params.idempotencyKey,\n },\n },\n createdAt: Date.now(),\n };\n\n // Emit message received event\n await this.runtime.emitEvent(EventType.MESSAGE_RECEIVED, {\n runtime: this.runtime,\n message: memory,\n source: \"internal_messaging\",\n });\n\n return {\n success: true,\n messageId,\n channel: \"internal\",\n targetId: params.target.to,\n sentAt: Date.now(),\n };\n } catch (error) {\n return {\n success: false,\n channel: \"internal\",\n targetId: params.target.to,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n }\n\n // ============================================================================\n // Utilities\n // ============================================================================\n\n /**\n * Normalizes a channel string to a known channel type.\n */\n private normalizeChannel(channel?: string): MessagingChannel {\n if (!channel) {\n return \"unknown\";\n }\n\n const lower = channel.toLowerCase();\n\n if (lower === \"discord\" || lower.includes(\"discord\")) {\n return \"discord\";\n }\n if (lower === \"telegram\" || lower.includes(\"telegram\")) {\n return \"telegram\";\n }\n if (lower === \"slack\" || lower.includes(\"slack\")) {\n return \"slack\";\n }\n if (lower === \"whatsapp\" || lower.includes(\"whatsapp\")) {\n return \"whatsapp\";\n }\n if (lower === \"twitch\" || lower.includes(\"twitch\")) {\n return \"twitch\";\n }\n if (lower === \"google_chat\" || lower.includes(\"google\") || lower.includes(\"gchat\")) {\n return \"google_chat\";\n }\n if (lower === \"internal\" || lower === \"a2a\") {\n return \"internal\";\n }\n\n return \"unknown\";\n }\n\n // ============================================================================\n // Events\n // ============================================================================\n\n on(event: InternalEventType, handler: (payload: MessagingEventPayload) => void): void {\n this.emitter.on(event, handler);\n }\n\n off(event: InternalEventType, handler: (payload: MessagingEventPayload) => void): void {\n this.emitter.off(event, handler);\n }\n\n private emitMessagingEvent(type: MessagingEventType, payload: MessagingEventPayload): void {\n this.emitter.emit(type, payload);\n this.emitter.emit(\"messaging\", { type, ...payload });\n }\n\n async stop(): Promise<void> {\n this.pendingDeliveries.clear();\n this.emitter.removeAllListeners();\n }\n}\n",
|
|
19
19
|
"import { spawn } from \"node:child_process\";\nimport { EventEmitter } from \"node:events\";\nimport fs from \"node:fs/promises\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { type IAgentRuntime, Service, type UUID } from \"@elizaos/core\";\nimport type {\n SandboxBrowserConfig,\n SandboxBrowserContext,\n SandboxConfig,\n SandboxContext,\n SandboxDockerConfig,\n SandboxEventPayload,\n SandboxEventType,\n SandboxExecuteParams,\n SandboxExecutionResult,\n SandboxMode,\n SandboxPruneConfig,\n SandboxScope,\n SandboxToolPolicy,\n SandboxWorkspaceAccess,\n} from \"../types/sandbox.js\";\nimport {\n extractAgentIdFromSessionKey,\n hashToUUID,\n parseSessionKey,\n sessionKeyToRoomId,\n} from \"../utils/session.js\";\n\ntype InternalEventType = \"sandbox\" | SandboxEventType;\n\n/**\n * Default Docker configuration for sandboxes.\n */\nconst DEFAULT_DOCKER_CONFIG: SandboxDockerConfig = {\n image: \"ubuntu:22.04\",\n containerPrefix: \"eliza-sandbox\",\n workdir: \"/workspace\",\n autoRemove: true,\n memoryLimit: \"2g\",\n cpuLimit: \"2\",\n network: \"none\",\n env: {},\n mounts: [],\n extraArgs: [],\n};\n\n/**\n * Default browser configuration.\n */\nconst DEFAULT_BROWSER_CONFIG: SandboxBrowserConfig = {\n enabled: false,\n image: \"browserless/chrome:latest\",\n containerPrefix: \"eliza-browser\",\n cdpPort: 9222,\n vncPort: 5900,\n noVncPort: 6080,\n headless: true,\n enableNoVnc: false,\n allowHostControl: false,\n autoStart: false,\n autoStartTimeoutMs: 30000,\n};\n\n/**\n * Default pruning configuration.\n */\nconst DEFAULT_PRUNE_CONFIG: SandboxPruneConfig = {\n idleHours: 1,\n maxAgeDays: 7,\n};\n\n/**\n * SandboxService manages isolated execution environments for agent tools.\n *\n * This replaces Otto's sandbox system with a native Eliza service\n * that uses Docker containers for isolation.\n */\nexport class SandboxService extends Service {\n static serviceType = \"SANDBOX\";\n capabilityDescription = \"Manages sandboxed execution environments for secure tool execution\";\n\n private readonly emitter = new EventEmitter();\n private readonly contexts = new Map<string, SandboxContext>();\n private readonly activeContainers = new Set<string>();\n private readonly containerLocks = new Map<string, Promise<void>>();\n private sweeper: NodeJS.Timeout | null = null;\n private initialized = false;\n\n static async start(runtime: IAgentRuntime): Promise<Service> {\n const service = new SandboxService(runtime);\n await service.initialize();\n return service;\n }\n\n async initialize(): Promise<void> {\n if (this.initialized) {\n return;\n }\n this.initialized = true;\n\n // Start the pruning sweeper\n this.startSweeper();\n }\n\n // ============================================================================\n // Configuration\n // ============================================================================\n\n /**\n * Gets the sandbox configuration from character settings.\n */\n getConfig(): SandboxConfig {\n const settings = this.runtime.character?.settings as Record<string, unknown> | undefined;\n const sandbox = (settings?.sandbox ?? {}) as Partial<SandboxConfig>;\n\n return {\n mode: (sandbox.mode ?? \"off\") as SandboxMode,\n scope: (sandbox.scope ?? \"session\") as SandboxScope,\n workspaceAccess: (sandbox.workspaceAccess ?? \"rw\") as SandboxWorkspaceAccess,\n workspaceRoot: sandbox.workspaceRoot ?? path.join(os.homedir(), \".eliza\", \"sandboxes\"),\n docker: { ...DEFAULT_DOCKER_CONFIG, ...sandbox.docker },\n browser: { ...DEFAULT_BROWSER_CONFIG, ...sandbox.browser },\n tools: sandbox.tools ?? { allow: [], deny: [] },\n prune: { ...DEFAULT_PRUNE_CONFIG, ...sandbox.prune },\n };\n }\n\n /**\n * Checks if sandboxing should be enabled for a session.\n */\n shouldSandbox(sessionKey: string): boolean {\n const config = this.getConfig();\n\n if (config.mode === \"off\") {\n return false;\n }\n\n if (config.mode === \"all\") {\n return true;\n }\n\n // mode === \"non-main\"\n // Only sandbox non-main sessions (subagents, etc.)\n const parsed = parseSessionKey(sessionKey);\n if (parsed.keyType === \"subagent\") {\n return true;\n }\n\n // Check if this is the main session\n const identifier = parsed.identifier.toLowerCase();\n if (identifier === \"main\" || identifier === \"global\") {\n return false;\n }\n\n return true;\n }\n\n /**\n * Checks if a tool is allowed in the sandbox.\n */\n isToolAllowed(toolName: string, policy?: SandboxToolPolicy): boolean {\n const config = this.getConfig();\n const p = policy ?? config.tools;\n\n // Explicit allow takes priority\n if (p.allow && p.allow.length > 0) {\n const allowed = p.allow.some(\n (pattern) =>\n pattern === \"*\" ||\n pattern.toLowerCase() === toolName.toLowerCase() ||\n (pattern.endsWith(\"*\") &&\n toolName.toLowerCase().startsWith(pattern.slice(0, -1).toLowerCase())),\n );\n if (allowed) {\n return true;\n }\n }\n\n // Check deny list\n if (p.deny && p.deny.length > 0) {\n const denied = p.deny.some(\n (pattern) =>\n pattern === \"*\" ||\n pattern.toLowerCase() === toolName.toLowerCase() ||\n (pattern.endsWith(\"*\") &&\n toolName.toLowerCase().startsWith(pattern.slice(0, -1).toLowerCase())),\n );\n if (denied) {\n return false;\n }\n }\n\n // Default: allow if no deny list, deny if allow list exists\n return !p.allow || p.allow.length === 0;\n }\n\n // ============================================================================\n // Context Management\n // ============================================================================\n\n /**\n * Gets or creates a sandbox context for a session.\n */\n async getSandboxContext(\n sessionKey: string,\n options?: { workspaceDir?: string; roomId?: UUID },\n ): Promise<SandboxContext | null> {\n const trimmedKey = sessionKey.trim();\n if (!trimmedKey) {\n return null;\n }\n\n if (!this.shouldSandbox(trimmedKey)) {\n return null;\n }\n\n // Check cache\n const cached = this.contexts.get(trimmedKey);\n if (cached) {\n cached.lastAccessedAt = Date.now();\n return cached;\n }\n\n // Create new context\n const config = this.getConfig();\n const agentId = extractAgentIdFromSessionKey(trimmedKey);\n\n // Resolve workspace directories\n const agentWorkspaceDir =\n options?.workspaceDir ?? path.join(os.homedir(), \".eliza\", \"workspace\");\n const scopeKey = this.resolveScopeKey(config.scope, trimmedKey);\n const sandboxWorkspaceDir =\n config.scope === \"shared\" ? config.workspaceRoot : path.join(config.workspaceRoot, scopeKey);\n\n const workspaceDir = config.workspaceAccess === \"rw\" ? agentWorkspaceDir : sandboxWorkspaceDir;\n\n // Ensure workspace exists\n await fs.mkdir(workspaceDir, { recursive: true });\n\n // Generate container name\n const containerName = `${config.docker.containerPrefix}-${scopeKey.slice(0, 12)}`;\n\n const context: SandboxContext = {\n enabled: true,\n sessionKey: trimmedKey,\n roomId: options?.roomId ?? sessionKeyToRoomId(trimmedKey, agentId),\n workspaceDir,\n agentWorkspaceDir,\n workspaceAccess: config.workspaceAccess,\n containerName,\n containerWorkdir: config.docker.workdir,\n docker: config.docker,\n tools: config.tools,\n browserAllowHostControl: config.browser.allowHostControl,\n createdAt: Date.now(),\n lastAccessedAt: Date.now(),\n };\n\n this.contexts.set(trimmedKey, context);\n\n this.emitSandboxEvent(\"SANDBOX_CREATED\", {\n sessionKey: trimmedKey,\n ...(context.roomId !== undefined ? { roomId: context.roomId } : {}),\n containerName,\n });\n\n return context;\n }\n\n /**\n * Resolves the scope key for a session.\n */\n private resolveScopeKey(scope: SandboxScope, sessionKey: string): string {\n const parsed = parseSessionKey(sessionKey);\n\n switch (scope) {\n case \"session\":\n return hashToUUID(sessionKey).slice(0, 16);\n case \"agent\":\n return hashToUUID(parsed.agentId).slice(0, 16);\n case \"shared\":\n return \"shared\";\n default:\n return hashToUUID(sessionKey).slice(0, 16);\n }\n }\n\n /**\n * Destroys a sandbox context and its resources.\n */\n async destroySandbox(sessionKey: string): Promise<void> {\n const context = this.contexts.get(sessionKey);\n if (!context) {\n return;\n }\n\n // Stop container if running\n if (this.activeContainers.has(context.containerName)) {\n await this.stopContainer(context.containerName);\n }\n\n // Stop browser if running\n if (context.browser) {\n await this.stopContainer(context.browser.containerName);\n }\n\n this.contexts.delete(sessionKey);\n\n this.emitSandboxEvent(\"SANDBOX_DESTROYED\", {\n sessionKey,\n ...(context.roomId !== undefined ? { roomId: context.roomId } : {}),\n containerName: context.containerName,\n });\n }\n\n // ============================================================================\n // Command Execution\n // ============================================================================\n\n /**\n * Executes a command in a sandbox container.\n */\n async execute(sessionKey: string, params: SandboxExecuteParams): Promise<SandboxExecutionResult> {\n const context = await this.getSandboxContext(sessionKey);\n\n if (!context) {\n // No sandbox - execute directly\n return this.executeLocal(params);\n }\n\n const startTime = Date.now();\n\n this.emitSandboxEvent(\"SANDBOX_COMMAND_STARTED\", {\n sessionKey,\n ...(context.roomId !== undefined ? { roomId: context.roomId } : {}),\n containerName: context.containerName,\n command: params.command,\n });\n\n try {\n const result = await this.executeInContainer(context, params);\n\n this.emitSandboxEvent(\"SANDBOX_COMMAND_COMPLETED\", {\n sessionKey,\n ...(context.roomId !== undefined ? { roomId: context.roomId } : {}),\n containerName: context.containerName,\n command: params.command,\n result,\n });\n\n return result;\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n const result: SandboxExecutionResult = {\n success: false,\n exitCode: 1,\n stdout: \"\",\n stderr: errorMessage,\n durationMs: Date.now() - startTime,\n timedOut: false,\n error: errorMessage,\n };\n\n this.emitSandboxEvent(\"SANDBOX_COMMAND_FAILED\", {\n sessionKey,\n ...(context.roomId !== undefined ? { roomId: context.roomId } : {}),\n containerName: context.containerName,\n command: params.command,\n result,\n error: errorMessage,\n });\n\n return result;\n }\n }\n\n /**\n * Executes a command locally (no sandbox).\n *\n * IMPORTANT: This method uses shell: true for user-provided commands\n * but should use executeDockerCommand for Docker operations to avoid injection.\n */\n private executeLocal(params: SandboxExecuteParams): Promise<SandboxExecutionResult> {\n return new Promise((resolve) => {\n const startTime = Date.now();\n const timeout = params.timeoutMs ?? 60000;\n\n const child = spawn(params.command, params.args ?? [], {\n cwd: params.cwd,\n env: { ...process.env, ...params.env },\n shell: true,\n });\n\n let stdout = \"\";\n let stderr = \"\";\n let timedOut = false;\n\n const timeoutId = setTimeout(() => {\n timedOut = true;\n child.kill(\"SIGKILL\");\n }, timeout);\n\n child.stdout?.on(\"data\", (data) => {\n stdout += data.toString();\n });\n\n child.stderr?.on(\"data\", (data) => {\n stderr += data.toString();\n });\n\n if (params.stdin) {\n child.stdin?.write(params.stdin);\n child.stdin?.end();\n }\n\n child.on(\"close\", (code) => {\n clearTimeout(timeoutId);\n const result: SandboxExecutionResult = {\n success: code === 0 && !timedOut,\n exitCode: code ?? 1,\n stdout: stdout.slice(0, 100000), // Limit output size\n stderr: stderr.slice(0, 100000),\n durationMs: Date.now() - startTime,\n timedOut,\n };\n if (timedOut) result.error = \"Command timed out\";\n resolve(result);\n });\n\n child.on(\"error\", (error) => {\n clearTimeout(timeoutId);\n resolve({\n success: false,\n exitCode: 1,\n stdout,\n stderr: error.message,\n durationMs: Date.now() - startTime,\n timedOut: false,\n error: error.message,\n });\n });\n });\n }\n\n /**\n * Executes a Docker command safely without shell interpolation.\n * Uses spawn directly with args array to prevent command injection.\n */\n private executeDockerCommand(\n args: string[],\n options?: { timeoutMs?: number },\n ): Promise<SandboxExecutionResult> {\n return new Promise((resolve) => {\n const startTime = Date.now();\n const timeout = options?.timeoutMs ?? 60000;\n\n const child = spawn(\"docker\", args, {\n env: process.env,\n // NO shell: true - args are passed directly to docker binary\n });\n\n let stdout = \"\";\n let stderr = \"\";\n let timedOut = false;\n\n const timeoutId = setTimeout(() => {\n timedOut = true;\n child.kill(\"SIGKILL\");\n }, timeout);\n\n child.stdout?.on(\"data\", (data) => {\n stdout += data.toString();\n });\n\n child.stderr?.on(\"data\", (data) => {\n stderr += data.toString();\n });\n\n child.on(\"close\", (code) => {\n clearTimeout(timeoutId);\n const result: SandboxExecutionResult = {\n success: code === 0 && !timedOut,\n exitCode: code ?? 1,\n stdout: stdout.slice(0, 100000),\n stderr: stderr.slice(0, 100000),\n durationMs: Date.now() - startTime,\n timedOut,\n };\n if (timedOut) result.error = \"Command timed out\";\n resolve(result);\n });\n\n child.on(\"error\", (error) => {\n clearTimeout(timeoutId);\n resolve({\n success: false,\n exitCode: 1,\n stdout,\n stderr: error.message,\n durationMs: Date.now() - startTime,\n timedOut: false,\n error: error.message,\n });\n });\n });\n }\n\n /**\n * Executes a command inside a Docker container.\n *\n * Note: The command is intentionally passed through `sh -c` inside the container\n * because sandbox execution is designed to run arbitrary user/agent commands.\n * The security boundary is the container itself, not command sanitization.\n */\n private async executeInContainer(\n context: SandboxContext,\n params: SandboxExecuteParams,\n ): Promise<SandboxExecutionResult> {\n const startTime = Date.now();\n const timeout = params.timeoutMs ?? 60000;\n\n // Ensure container exists\n await this.ensureContainer(context);\n\n // Build docker exec args array (no shell interpolation on host)\n const dockerArgs: string[] = [\"exec\"];\n\n // Add working directory\n const workdir = params.cwd\n ? path.join(context.containerWorkdir, params.cwd)\n : context.containerWorkdir;\n dockerArgs.push(\"-w\", workdir);\n\n // Add environment variables\n for (const [key, value] of Object.entries(params.env ?? {})) {\n dockerArgs.push(\"-e\", `${key}=${value}`);\n }\n\n // Add container name\n dockerArgs.push(context.containerName);\n\n // The command runs inside the container via sh -c\n // This is intentional - the sandbox is meant to execute arbitrary commands\n // Security is provided by container isolation, not command sanitization\n dockerArgs.push(\"sh\", \"-c\", params.command);\n\n return new Promise((resolve) => {\n // Spawn docker directly without shell interpolation on host\n const child = spawn(\"docker\", dockerArgs, {\n env: process.env,\n // No shell: true - args are passed directly to docker binary\n });\n\n let stdout = \"\";\n let stderr = \"\";\n let timedOut = false;\n\n const timeoutId = setTimeout(() => {\n timedOut = true;\n child.kill(\"SIGKILL\");\n }, timeout);\n\n child.stdout?.on(\"data\", (data) => {\n stdout += data.toString();\n });\n\n child.stderr?.on(\"data\", (data) => {\n stderr += data.toString();\n });\n\n if (params.stdin) {\n child.stdin?.write(params.stdin);\n child.stdin?.end();\n }\n\n child.on(\"close\", (code) => {\n clearTimeout(timeoutId);\n const result: SandboxExecutionResult = {\n success: code === 0 && !timedOut,\n exitCode: code ?? 1,\n stdout: stdout.slice(0, 100000),\n stderr: stderr.slice(0, 100000),\n durationMs: Date.now() - startTime,\n timedOut,\n };\n if (timedOut) result.error = \"Command timed out\";\n resolve(result);\n });\n\n child.on(\"error\", (error) => {\n clearTimeout(timeoutId);\n resolve({\n success: false,\n exitCode: 1,\n stdout,\n stderr: error.message,\n durationMs: Date.now() - startTime,\n timedOut: false,\n error: error.message,\n });\n });\n });\n }\n\n /**\n * Ensures a container exists for the sandbox.\n * Uses executeDockerCommand to prevent shell injection.\n * Uses locking to prevent race conditions when multiple calls try to create the same container.\n */\n private async ensureContainer(context: SandboxContext): Promise<void> {\n if (this.activeContainers.has(context.containerName)) {\n return;\n }\n\n // Check if there's already a pending operation for this container\n const existingLock = this.containerLocks.get(context.containerName);\n if (existingLock) {\n await existingLock;\n return;\n }\n\n // Create a new lock for this container operation\n const lockPromise = this.ensureContainerInternal(context);\n this.containerLocks.set(context.containerName, lockPromise);\n\n try {\n await lockPromise;\n } finally {\n this.containerLocks.delete(context.containerName);\n }\n }\n\n /**\n * Internal implementation of ensureContainer, called under lock.\n */\n private async ensureContainerInternal(context: SandboxContext): Promise<void> {\n // Double-check after acquiring lock\n if (this.activeContainers.has(context.containerName)) {\n return;\n }\n\n // Check if container already exists using safe args\n const checkResult = await this.executeDockerCommand([\n \"ps\",\n \"-a\",\n \"-q\",\n \"-f\",\n `name=^${context.containerName}$`,\n ]);\n\n if (checkResult.stdout.trim()) {\n // Container exists, start it if not running\n const startResult = await this.executeDockerCommand([\"start\", context.containerName]);\n if (startResult.success) {\n this.activeContainers.add(context.containerName);\n return;\n }\n }\n\n // Create new container - build args array safely\n const dockerArgs = [\"run\", \"-d\", \"--name\", context.containerName];\n\n // Add resource limits\n if (context.docker.memoryLimit) {\n dockerArgs.push(\"-m\", context.docker.memoryLimit);\n }\n if (context.docker.cpuLimit) {\n dockerArgs.push(\"--cpus\", context.docker.cpuLimit);\n }\n\n // Add network mode\n if (context.docker.network) {\n dockerArgs.push(\"--network\", context.docker.network);\n }\n\n // Add workspace mount\n const mountMode = context.workspaceAccess === \"ro\" ? \"ro\" : \"rw\";\n dockerArgs.push(\"-v\", `${context.workspaceDir}:${context.containerWorkdir}:${mountMode}`);\n\n // Add additional mounts\n for (const mount of context.docker.mounts ?? []) {\n dockerArgs.push(\"-v\", `${mount.host}:${mount.container}:${mount.mode}`);\n }\n\n // Add environment variables\n for (const [key, value] of Object.entries(context.docker.env ?? {})) {\n dockerArgs.push(\"-e\", `${key}=${value}`);\n }\n\n // Add extra args - these come from config, not user input\n if (context.docker.extraArgs) {\n dockerArgs.push(...context.docker.extraArgs);\n }\n\n // Add image and keep alive command\n dockerArgs.push(context.docker.image, \"tail\", \"-f\", \"/dev/null\");\n\n // Execute with safe args array (no shell interpolation)\n const result = await this.executeDockerCommand(dockerArgs);\n\n if (result.success) {\n this.activeContainers.add(context.containerName);\n } else {\n throw new Error(`Failed to create container: ${result.stderr}`);\n }\n }\n\n /**\n * Stops a container.\n * Uses executeDockerCommand to prevent shell injection.\n */\n private async stopContainer(containerName: string): Promise<void> {\n await this.executeDockerCommand([\"stop\", containerName], { timeoutMs: 10000 });\n await this.executeDockerCommand([\"rm\", \"-f\", containerName], { timeoutMs: 10000 });\n this.activeContainers.delete(containerName);\n }\n\n // ============================================================================\n // Browser Management\n // ============================================================================\n\n /**\n * Starts a sandboxed browser for a session.\n */\n async startBrowser(sessionKey: string): Promise<SandboxBrowserContext | null> {\n const context = await this.getSandboxContext(sessionKey);\n if (!context) {\n return null;\n }\n\n const config = this.getConfig();\n if (!config.browser.enabled) {\n return null;\n }\n\n if (context.browser) {\n return context.browser;\n }\n\n const browserContainerName = `${config.browser.containerPrefix}-${context.containerName.slice(-12)}`;\n\n // Start browser container - build args array safely\n const browserArgs = [\n \"run\",\n \"-d\",\n \"--name\",\n browserContainerName,\n \"-p\",\n `${config.browser.cdpPort}:9222`,\n ];\n\n if (config.browser.enableNoVnc) {\n browserArgs.push(\"-p\", `${config.browser.noVncPort}:6080`);\n }\n\n browserArgs.push(config.browser.image);\n\n // Execute with safe args array (no shell interpolation)\n const result = await this.executeDockerCommand(browserArgs);\n\n if (!result.success) {\n this.runtime.logger.error(\n {\n sessionKey,\n error: result.stderr,\n },\n \"Failed to start browser container\",\n );\n return null;\n }\n\n const browserContext: SandboxBrowserContext = {\n bridgeUrl: `http://localhost:${config.browser.cdpPort}`,\n ...(config.browser.enableNoVnc\n ? { noVncUrl: `http://localhost:${config.browser.noVncPort}` }\n : {}),\n containerName: browserContainerName,\n };\n\n context.browser = browserContext;\n\n this.emitSandboxEvent(\"SANDBOX_BROWSER_STARTED\", {\n sessionKey,\n ...(context.roomId !== undefined ? { roomId: context.roomId } : {}),\n containerName: browserContainerName,\n });\n\n return browserContext;\n }\n\n /**\n * Stops a sandboxed browser.\n */\n async stopBrowser(sessionKey: string): Promise<void> {\n const context = this.contexts.get(sessionKey);\n if (!context?.browser) {\n return;\n }\n\n await this.stopContainer(context.browser.containerName);\n\n this.emitSandboxEvent(\"SANDBOX_BROWSER_STOPPED\", {\n sessionKey,\n ...(context.roomId !== undefined ? { roomId: context.roomId } : {}),\n containerName: context.browser.containerName,\n });\n\n delete context.browser;\n }\n\n // ============================================================================\n // Lifecycle\n // ============================================================================\n\n private startSweeper(): void {\n if (this.sweeper) {\n return;\n }\n\n const config = this.getConfig();\n const intervalMs = Math.max((config.prune.idleHours * 60 * 60 * 1000) / 4, 60000);\n\n this.sweeper = setInterval(() => {\n this.sweepIdleSandboxes();\n }, intervalMs);\n\n this.sweeper.unref?.();\n }\n\n private sweepIdleSandboxes(): void {\n const config = this.getConfig();\n const idleMs = config.prune.idleHours * 60 * 60 * 1000;\n const maxAgeMs = config.prune.maxAgeDays * 24 * 60 * 60 * 1000;\n const now = Date.now();\n\n for (const [sessionKey, context] of this.contexts.entries()) {\n const idle = now - context.lastAccessedAt > idleMs;\n const tooOld = now - context.createdAt > maxAgeMs;\n\n if (idle || tooOld) {\n this.destroySandbox(sessionKey).catch((err) => {\n this.runtime.logger.error(\n {\n sessionKey,\n error: err instanceof Error ? err.message : String(err),\n },\n \"Failed to destroy idle sandbox\",\n );\n });\n }\n }\n }\n\n // ============================================================================\n // Events\n // ============================================================================\n\n on(event: InternalEventType, handler: (payload: SandboxEventPayload) => void): void {\n this.emitter.on(event, handler);\n }\n\n off(event: InternalEventType, handler: (payload: SandboxEventPayload) => void): void {\n this.emitter.off(event, handler);\n }\n\n private emitSandboxEvent(type: SandboxEventType, payload: SandboxEventPayload): void {\n this.emitter.emit(type, payload);\n this.emitter.emit(\"sandbox\", { type, ...payload });\n }\n\n async stop(): Promise<void> {\n if (this.sweeper) {\n clearInterval(this.sweeper);\n this.sweeper = null;\n }\n\n // Stop all containers\n for (const sessionKey of this.contexts.keys()) {\n await this.destroySandbox(sessionKey);\n }\n\n this.emitter.removeAllListeners();\n }\n}\n",
|
|
20
|
-
"import crypto from \"node:crypto\";\nimport { EventEmitter } from \"node:events\";\nimport {\n ChannelType,\n EventType,\n type IAgentRuntime,\n type Memory,\n type Metadata,\n type Room,\n Service,\n type UUID,\n} from \"@elizaos/core\";\nimport type {\n AgentToAgentPolicy,\n DeliveryContext,\n SendToAgentParams,\n SendToAgentResult,\n SpawnSubagentParams,\n SpawnSubagentResult,\n SubagentConfig,\n SubagentEventPayload,\n SubagentEventType,\n SubagentRoomMetadata,\n SubagentRunRecord,\n} from \"../types/subagent.js\";\nimport {\n createSubagentSessionKey,\n extractAgentIdFromSessionKey,\n formatDurationShort,\n hashToUUID,\n isSubagentSessionKey,\n normalizeAgentId,\n normalizeDeliveryContext,\n sessionKeyToRoomId,\n} from \"../utils/session.js\";\n\ntype InternalEventType = \"task\" | SubagentEventType;\n\n/**\n * SubagentService manages subagent lifecycles within the Eliza framework.\n *\n * This replaces Otto's gateway-based subagent system with native Eliza\n * events and services. Subagents are represented as rooms with special metadata.\n */\nexport class SubagentService extends Service {\n static serviceType = \"SUBAGENT\";\n capabilityDescription = \"Manages subagent spawning, lifecycle, and communication\";\n\n private readonly emitter = new EventEmitter();\n private readonly subagentRuns = new Map<string, SubagentRunRecord>();\n private readonly activeRuns = new Map<string, AbortController>();\n private sweeper: NodeJS.Timeout | null = null;\n private initialized = false;\n\n static async start(runtime: IAgentRuntime): Promise<Service> {\n const service = new SubagentService(runtime);\n await service.initialize();\n return service;\n }\n\n async initialize(): Promise<void> {\n if (this.initialized) {\n return;\n }\n this.initialized = true;\n\n // Register event handlers for run lifecycle\n this.runtime.registerEvent(EventType.RUN_ENDED, async (payload) => {\n await this.handleRunEnded(payload);\n });\n\n this.runtime.registerEvent(EventType.RUN_TIMEOUT, async (payload) => {\n await this.handleRunTimeout(payload);\n });\n\n // Start the sweeper for archiving old runs\n this.startSweeper();\n }\n\n // ============================================================================\n // Configuration\n // ============================================================================\n\n /**\n * Gets the subagent configuration from character settings.\n */\n getConfig(): SubagentConfig {\n const settings = this.runtime.character?.settings as Record<string, unknown> | undefined;\n const subagents = (settings?.subagents ?? {}) as SubagentConfig;\n\n return {\n enabled: subagents.enabled !== false, // Enabled by default\n ...(subagents.model !== undefined ? { model: subagents.model } : {}),\n ...(subagents.thinking !== undefined ? { thinking: subagents.thinking } : {}),\n timeoutSeconds: subagents.timeoutSeconds ?? 300, // 5 min default\n allowAgents: subagents.allowAgents ?? [], // Empty = same agent only\n archiveAfterMinutes: subagents.archiveAfterMinutes ?? 60,\n };\n }\n\n /**\n * Gets the agent-to-agent communication policy.\n */\n getAgentToAgentPolicy(): AgentToAgentPolicy {\n const settings = this.runtime.character?.settings as Record<string, unknown> | undefined;\n const a2aConfig = (settings?.agentToAgent ?? {}) as {\n enabled?: boolean;\n allow?: Array<{ source?: string; target?: string }>;\n };\n\n const enabled = a2aConfig.enabled === true;\n const allowRules = (a2aConfig.allow ?? []).map((rule) => ({\n source: rule.source ?? \"*\",\n target: rule.target ?? \"*\",\n }));\n\n return {\n enabled,\n allowRules,\n isAllowed: (sourceAgentId: string, targetAgentId: string): boolean => {\n if (!enabled) {\n return false;\n }\n if (sourceAgentId === targetAgentId) {\n return true; // Same agent always allowed\n }\n const sourceNorm = normalizeAgentId(sourceAgentId);\n const targetNorm = normalizeAgentId(targetAgentId);\n\n for (const rule of allowRules) {\n const sourceMatch = rule.source === \"*\" || normalizeAgentId(rule.source) === sourceNorm;\n const targetMatch = rule.target === \"*\" || normalizeAgentId(rule.target) === targetNorm;\n if (sourceMatch && targetMatch) {\n return true;\n }\n }\n return false;\n },\n };\n }\n\n // ============================================================================\n // Subagent Spawning\n // ============================================================================\n\n /**\n * Spawns a new subagent to execute a task.\n *\n * Instead of calling the gateway, this creates an Eliza room with special\n * metadata and triggers message processing.\n */\n async spawnSubagent(\n params: SpawnSubagentParams,\n requesterContext: {\n sessionKey?: string;\n roomId?: UUID;\n origin?: DeliveryContext;\n },\n ): Promise<SpawnSubagentResult> {\n const config = this.getConfig();\n\n if (!config.enabled) {\n return {\n status: \"forbidden\",\n error: \"Subagent spawning is disabled\",\n };\n }\n\n // Check if requester is a subagent (subagents can't spawn subagents)\n if (requesterContext.sessionKey && isSubagentSessionKey(requesterContext.sessionKey)) {\n return {\n status: \"forbidden\",\n error: \"sessions_spawn is not allowed from sub-agent sessions\",\n };\n }\n\n // Resolve agent IDs\n const requesterAgentId = requesterContext.sessionKey\n ? extractAgentIdFromSessionKey(requesterContext.sessionKey)\n : (this.runtime.character?.name ?? \"unknown\");\n\n const targetAgentId = params.agentId ? normalizeAgentId(params.agentId) : requesterAgentId;\n\n // Check cross-agent permission\n if (targetAgentId !== requesterAgentId) {\n const allowAgents = config.allowAgents ?? [];\n const allowAny = allowAgents.some((v) => v.trim() === \"*\");\n const allowSet = new Set(\n allowAgents.filter((v) => v.trim() && v.trim() !== \"*\").map((v) => normalizeAgentId(v)),\n );\n\n if (!allowAny && !allowSet.has(targetAgentId)) {\n return {\n status: \"forbidden\",\n error: `agentId \"${targetAgentId}\" is not allowed for subagent spawning`,\n };\n }\n }\n\n // Create the subagent session key\n const childSessionKey = createSubagentSessionKey(targetAgentId);\n const runId = crypto.randomUUID();\n\n // Create a room for the subagent\n const childRoomId = sessionKeyToRoomId(childSessionKey, targetAgentId);\n\n const roomMetadata: SubagentRoomMetadata = {\n isSubagent: true,\n sessionKey: childSessionKey,\n task: params.task,\n spawnedAt: Date.now(),\n cleanup: params.cleanup ?? \"keep\",\n };\n if (requesterContext.roomId) roomMetadata.parentRoomId = requesterContext.roomId;\n if (requesterContext.sessionKey) roomMetadata.parentSessionKey = requesterContext.sessionKey;\n if (params.label) roomMetadata.label = params.label;\n\n const childRoom: Room = {\n id: childRoomId,\n name: params.label || `Subagent: ${params.task.slice(0, 50)}`,\n source: \"subagent\",\n type: ChannelType.SELF,\n channelId: childSessionKey,\n agentId: this.runtime.agentId,\n worldId: this.runtime.agentId, // Use agent as world for simplicity\n metadata: roomMetadata as unknown as Metadata,\n };\n\n // Create the room\n await this.runtime.ensureRoomExists(childRoom);\n\n // Register the subagent run\n const now = Date.now();\n const archiveAfterMs = config.archiveAfterMinutes\n ? config.archiveAfterMinutes * 60_000\n : undefined;\n\n const record: SubagentRunRecord = {\n runId,\n childSessionKey,\n requesterSessionKey: requesterContext.sessionKey ?? \"unknown\",\n requesterDisplayKey: requesterContext.sessionKey ?? \"main\",\n task: params.task,\n cleanup: params.cleanup ?? \"keep\",\n createdAt: now,\n startedAt: now,\n cleanupHandled: false,\n roomId: childRoomId,\n worldId: this.runtime.agentId,\n };\n const normalizedOrigin = normalizeDeliveryContext(requesterContext.origin);\n if (normalizedOrigin) record.requesterOrigin = normalizedOrigin;\n if (params.label) record.label = params.label;\n if (archiveAfterMs) record.archiveAtMs = now + archiveAfterMs;\n\n this.subagentRuns.set(runId, record);\n\n // Emit spawn event, only including defined values\n const spawnPayload: SubagentEventPayload = {\n runId,\n childSessionKey,\n childRoomId,\n task: params.task,\n };\n if (requesterContext.sessionKey) spawnPayload.requesterSessionKey = requesterContext.sessionKey;\n if (requesterContext.roomId) spawnPayload.requesterRoomId = requesterContext.roomId;\n if (params.label) spawnPayload.label = params.label;\n this.emitSubagentEvent(\"SUBAGENT_SPAWN_REQUESTED\", spawnPayload);\n\n // Build the system prompt for the subagent\n const systemPromptParams: Parameters<typeof this.buildSubagentSystemPrompt>[0] = {\n childSessionKey,\n task: params.task,\n };\n if (requesterContext.sessionKey)\n systemPromptParams.requesterSessionKey = requesterContext.sessionKey;\n if (requesterContext.origin) systemPromptParams.requesterOrigin = requesterContext.origin;\n if (params.label) systemPromptParams.label = params.label;\n const systemPrompt = this.buildSubagentSystemPrompt(systemPromptParams);\n\n // Build metadata, only including defined values\n const taskMetadata: Record<string, string | boolean> = {\n isSubagentTask: true,\n runId,\n systemPromptOverride: systemPrompt,\n };\n const modelOverride = params.model || config.model;\n const thinkingOverride = params.thinking || config.thinking;\n if (modelOverride) taskMetadata.modelOverride = modelOverride;\n if (thinkingOverride) taskMetadata.thinkingOverride = thinkingOverride;\n\n // Create the initial message to kick off the subagent\n const initialMessage: Memory = {\n id: hashToUUID(`${runId}-initial`),\n entityId: this.runtime.agentId,\n agentId: this.runtime.agentId,\n roomId: childRoomId,\n content: {\n text: params.task,\n type: \"text\",\n metadata: taskMetadata as Memory[\"content\"][\"metadata\"],\n },\n };\n\n // Process the message (this triggers the agent to work on the task)\n // We don't await here - the subagent runs in the background\n this.executeSubagentRun(runId, initialMessage, params.runTimeoutSeconds).catch((error) => {\n this.runtime.logger.error(`Subagent execution error [runId=${runId}]: ${error}`);\n this.handleSubagentError(runId, error);\n });\n\n return {\n status: \"accepted\",\n childSessionKey,\n childRoomId,\n runId,\n modelApplied: !!(params.model || config.model),\n };\n }\n\n /**\n * Executes a subagent run with timeout handling.\n */\n private async executeSubagentRun(\n runId: string,\n initialMessage: Memory,\n timeoutSeconds?: number,\n ): Promise<void> {\n const config = this.getConfig();\n const timeout = (timeoutSeconds ?? config.timeoutSeconds ?? 300) * 1000;\n\n const controller = new AbortController();\n this.activeRuns.set(runId, controller);\n\n // Set up timeout\n const timeoutId =\n timeout > 0\n ? setTimeout(() => {\n controller.abort();\n this.handleSubagentTimeout(runId);\n }, timeout)\n : null;\n\n try {\n // Emit the message for processing\n await this.runtime.emitEvent(EventType.MESSAGE_RECEIVED, {\n runtime: this.runtime,\n message: initialMessage,\n source: \"subagent\",\n });\n\n // Wait for completion (the RUN_ENDED event handler will update the record)\n // This is a polling approach - we check the record status\n await this.waitForCompletion(runId, timeout, controller.signal);\n } finally {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n this.activeRuns.delete(runId);\n }\n }\n\n /**\n * Waits for a subagent run to complete.\n */\n private async waitForCompletion(\n runId: string,\n timeoutMs: number,\n signal: AbortSignal,\n ): Promise<void> {\n const startTime = Date.now();\n const pollInterval = 500;\n\n while (!signal.aborted) {\n const record = this.subagentRuns.get(runId);\n if (!record) {\n return; // Record was deleted\n }\n if (record.endedAt) {\n return; // Completed\n }\n if (Date.now() - startTime > timeoutMs + 5000) {\n return; // Timed out with buffer\n }\n\n await new Promise<void>((resolve) => setTimeout(resolve, pollInterval));\n }\n }\n\n /**\n * Handles subagent timeout.\n */\n private handleSubagentTimeout(runId: string): void {\n const record = this.subagentRuns.get(runId);\n if (!record || record.endedAt) {\n return;\n }\n\n record.endedAt = Date.now();\n record.outcome = { status: \"timeout\" };\n\n const timeoutPayload: SubagentEventPayload = {\n runId,\n childSessionKey: record.childSessionKey,\n task: record.task,\n status: \"timeout\",\n };\n if (record.roomId) timeoutPayload.childRoomId = record.roomId;\n this.emitSubagentEvent(\"SUBAGENT_RUN_TIMEOUT\", timeoutPayload);\n\n // Trigger announcement\n this.announceSubagentResult(runId).catch((err) => {\n this.runtime.logger.error(`Failed to announce timeout [runId=${runId}]: ${err}`);\n });\n }\n\n /**\n * Handles subagent error.\n */\n private handleSubagentError(runId: string, error: unknown): void {\n const record = this.subagentRuns.get(runId);\n if (!record) {\n return;\n }\n\n record.endedAt = Date.now();\n record.outcome = {\n status: \"error\",\n error: error instanceof Error ? error.message : String(error),\n };\n\n const errorPayload: SubagentEventPayload = {\n runId,\n childSessionKey: record.childSessionKey,\n task: record.task,\n status: \"error\",\n };\n if (record.outcome.error) errorPayload.error = record.outcome.error;\n if (record.roomId) errorPayload.childRoomId = record.roomId;\n this.emitSubagentEvent(\"SUBAGENT_RUN_FAILED\", errorPayload);\n\n // Trigger announcement\n this.announceSubagentResult(runId).catch((err) => {\n this.runtime.logger.error(`Failed to announce error [runId=${runId}]: ${err}`);\n });\n }\n\n /**\n * Handles the RUN_ENDED event to update subagent records.\n */\n private async handleRunEnded(payload: unknown): Promise<void> {\n const p = payload as { roomId?: UUID; status?: string };\n if (!p.roomId) {\n return;\n }\n\n // Find the subagent run by room ID\n for (const [runId, record] of this.subagentRuns.entries()) {\n if (record.roomId === p.roomId && !record.endedAt) {\n record.endedAt = Date.now();\n record.outcome = { status: \"ok\" };\n\n const completedPayload: SubagentEventPayload = {\n runId,\n childSessionKey: record.childSessionKey,\n childRoomId: record.roomId,\n task: record.task,\n status: \"completed\",\n endedAt: record.endedAt,\n durationMs: record.endedAt - (record.startedAt ?? record.createdAt),\n };\n if (record.startedAt) completedPayload.startedAt = record.startedAt;\n this.emitSubagentEvent(\"SUBAGENT_RUN_COMPLETED\", completedPayload);\n\n // Trigger announcement\n await this.announceSubagentResult(runId);\n break;\n }\n }\n }\n\n /**\n * Handles the RUN_TIMEOUT event.\n */\n private async handleRunTimeout(payload: unknown): Promise<void> {\n const p = payload as { roomId?: UUID };\n if (!p.roomId) {\n return;\n }\n\n for (const [runId, record] of this.subagentRuns.entries()) {\n if (record.roomId === p.roomId && !record.endedAt) {\n this.handleSubagentTimeout(runId);\n break;\n }\n }\n }\n\n // ============================================================================\n // Announcement\n // ============================================================================\n\n /**\n * Announces a subagent's result to the requester.\n */\n private async announceSubagentResult(runId: string): Promise<boolean> {\n const record = this.subagentRuns.get(runId);\n if (!record) {\n return false;\n }\n\n if (record.cleanupCompletedAt || record.cleanupHandled) {\n return false;\n }\n\n record.cleanupHandled = true;\n\n // Get the last assistant reply from the subagent's room\n let reply: string | undefined;\n if (record.roomId) {\n const memories = await this.runtime.getMemories({\n tableName: \"messages\",\n roomId: record.roomId,\n count: 10,\n });\n\n // Find the last assistant message\n const lastAssistant = memories\n .filter((m) => m.entityId === this.runtime.agentId)\n .sort((a, b) => (b.createdAt ?? 0) - (a.createdAt ?? 0))[0];\n\n reply = lastAssistant?.content?.text;\n }\n\n // Build stats line\n const durationMs = record.endedAt\n ? record.endedAt - (record.startedAt ?? record.createdAt)\n : undefined;\n const statsLine = `Runtime: ${formatDurationShort(durationMs) ?? \"n/a\"} • Session: ${record.childSessionKey}`;\n\n // Build status label\n const outcome = record.outcome ?? { status: \"unknown\" };\n const statusLabel =\n outcome.status === \"ok\"\n ? \"completed successfully\"\n : outcome.status === \"timeout\"\n ? \"timed out\"\n : outcome.status === \"error\"\n ? `failed: ${outcome.error || \"unknown error\"}`\n : \"finished with unknown status\";\n\n // Build announcement message for the main agent\n const taskLabel = record.label || record.task || \"background task\";\n const triggerMessage = [\n `A background task \"${taskLabel}\" just ${statusLabel}.`,\n \"\",\n \"Findings:\",\n reply || \"(no output)\",\n \"\",\n statsLine,\n \"\",\n \"Summarize this naturally for the user. Keep it brief (1-2 sentences).\",\n \"Do not mention technical details like tokens, stats, or that this was a background task.\",\n \"You can respond with NO_REPLY if no announcement is needed.\",\n ].join(\"\\n\");\n\n // Send to the requester's room\n if (record.requesterSessionKey && record.requesterSessionKey !== \"unknown\") {\n const requesterRoomId = sessionKeyToRoomId(\n record.requesterSessionKey,\n extractAgentIdFromSessionKey(record.requesterSessionKey),\n );\n\n // Build metadata, only including defined values\n const metadata: Record<string, unknown> = {\n isSubagentAnnouncement: true,\n subagentRunId: runId,\n };\n if (record.requesterOrigin) {\n metadata.deliveryContext = record.requesterOrigin;\n }\n\n const announceMessage: Memory = {\n id: hashToUUID(`${runId}-announce`),\n entityId: this.runtime.agentId,\n agentId: this.runtime.agentId,\n roomId: requesterRoomId,\n content: {\n text: triggerMessage,\n type: \"text\",\n metadata: metadata as Memory[\"content\"][\"metadata\"],\n },\n };\n\n await this.runtime.emitEvent(EventType.MESSAGE_RECEIVED, {\n runtime: this.runtime,\n message: announceMessage,\n source: \"subagent_announce\",\n });\n }\n\n const announcePayload: SubagentEventPayload = {\n runId,\n childSessionKey: record.childSessionKey,\n task: record.task,\n outcome,\n };\n if (record.requesterSessionKey)\n announcePayload.requesterSessionKey = record.requesterSessionKey;\n this.emitSubagentEvent(\"SUBAGENT_ANNOUNCE_SENT\", announcePayload);\n\n // Handle cleanup\n record.cleanupCompletedAt = Date.now();\n\n if (record.cleanup === \"delete\") {\n this.subagentRuns.delete(runId);\n }\n\n return true;\n }\n\n /**\n * Builds the system prompt for a subagent.\n */\n private buildSubagentSystemPrompt(params: {\n requesterSessionKey?: string;\n requesterOrigin?: DeliveryContext;\n childSessionKey: string;\n label?: string;\n task?: string;\n }): string {\n const taskText =\n typeof params.task === \"string\" && params.task.trim()\n ? params.task.replace(/\\s+/g, \" \").trim()\n : \"{{TASK_DESCRIPTION}}\";\n\n const lines = [\n \"# Subagent Context\",\n \"\",\n \"You are a **subagent** spawned by the main agent for a specific task.\",\n \"\",\n \"## Your Role\",\n `- You were created to handle: ${taskText}`,\n \"- Complete this task. That's your entire purpose.\",\n \"- You are NOT the main agent. Don't try to be.\",\n \"\",\n \"## Rules\",\n \"1. **Stay focused** - Do your assigned task, nothing else\",\n \"2. **Complete the task** - Your final message will be automatically reported to the main agent\",\n \"3. **Don't initiate** - No heartbeats, no proactive actions, no side quests\",\n \"4. **Be ephemeral** - You may be terminated after task completion. That's fine.\",\n \"\",\n \"## Output Format\",\n \"When complete, your final response should include:\",\n \"- What you accomplished or found\",\n \"- Any relevant details the main agent should know\",\n \"- Keep it concise but informative\",\n \"\",\n \"## What You DON'T Do\",\n \"- NO user conversations (that's main agent's job)\",\n \"- NO external messages unless explicitly tasked with a specific recipient\",\n \"- NO cron jobs or persistent state\",\n \"- NO pretending to be the main agent\",\n \"\",\n \"## Session Context\",\n params.label ? `- Label: ${params.label}` : undefined,\n params.requesterSessionKey ? `- Requester session: ${params.requesterSessionKey}` : undefined,\n params.requesterOrigin?.channel\n ? `- Requester channel: ${params.requesterOrigin.channel}`\n : undefined,\n `- Your session: ${params.childSessionKey}`,\n \"\",\n ].filter((line): line is string => line !== undefined);\n\n return lines.join(\"\\n\");\n }\n\n // ============================================================================\n // Agent-to-Agent Communication\n // ============================================================================\n\n /**\n * Sends a message to another agent's session.\n */\n async sendToAgent(\n params: SendToAgentParams,\n requesterContext: {\n sessionKey?: string;\n roomId?: UUID;\n },\n ): Promise<SendToAgentResult> {\n const runId = crypto.randomUUID();\n const policy = this.getAgentToAgentPolicy();\n\n // Resolve target session\n let targetSessionKey = params.sessionKey;\n\n if (!targetSessionKey && params.label) {\n // Resolve label to session key by searching subagent runs\n const matchingRun = this.findSubagentRunByLabel(params.label, params.agentId);\n if (matchingRun) {\n targetSessionKey = matchingRun.childSessionKey;\n } else {\n return {\n status: \"error\",\n runId,\n error: `No subagent found with label \"${params.label}\"`,\n };\n }\n }\n\n if (!targetSessionKey) {\n return {\n status: \"error\",\n runId,\n error: \"Either sessionKey or label is required\",\n };\n }\n\n // Check cross-agent permission\n const requesterAgentId = requesterContext.sessionKey\n ? extractAgentIdFromSessionKey(requesterContext.sessionKey)\n : (this.runtime.character?.name ?? \"unknown\");\n const targetAgentId = extractAgentIdFromSessionKey(targetSessionKey);\n\n if (requesterAgentId !== targetAgentId) {\n if (!policy.enabled) {\n return {\n status: \"forbidden\",\n runId,\n error:\n \"Agent-to-agent messaging is disabled. Set settings.agentToAgent.enabled=true to allow cross-agent sends.\",\n };\n }\n if (!policy.isAllowed(requesterAgentId, targetAgentId)) {\n return {\n status: \"forbidden\",\n runId,\n error: \"Agent-to-agent messaging denied by policy.\",\n };\n }\n }\n\n // Get or create the target room\n const targetRoomId = sessionKeyToRoomId(targetSessionKey, targetAgentId);\n\n // Build context for the message\n const a2aContextParams: Parameters<typeof this.buildAgentToAgentContext>[0] = {\n targetSessionKey,\n };\n if (requesterContext.sessionKey)\n a2aContextParams.requesterSessionKey = requesterContext.sessionKey;\n const contextMessage = this.buildAgentToAgentContext(a2aContextParams);\n\n // Build metadata, only including defined values\n const a2aMetadata: Record<string, unknown> = {\n isAgentToAgent: true,\n runId,\n systemPromptOverride: contextMessage,\n };\n if (requesterContext.sessionKey) a2aMetadata.senderSessionKey = requesterContext.sessionKey;\n if (requesterContext.roomId) a2aMetadata.senderRoomId = requesterContext.roomId;\n\n // Create and send the message\n const message: Memory = {\n id: hashToUUID(`${runId}-a2a`),\n entityId: this.runtime.agentId,\n agentId: this.runtime.agentId,\n roomId: targetRoomId,\n content: {\n text: params.message,\n type: \"text\",\n metadata: a2aMetadata as Memory[\"content\"][\"metadata\"],\n },\n };\n\n const timeoutMs = (params.timeoutSeconds ?? 30) * 1000;\n\n if (params.timeoutSeconds === 0) {\n // Fire and forget\n this.runtime\n .emitEvent(EventType.MESSAGE_RECEIVED, {\n runtime: this.runtime,\n message,\n source: \"a2a\",\n })\n .catch((err) => {\n this.runtime.logger.error(`A2A send error [runId=${runId}]: ${err}`);\n });\n\n const asyncPayload: SubagentEventPayload = {\n runId,\n childSessionKey: targetSessionKey,\n task: params.message,\n };\n if (requesterContext.sessionKey)\n asyncPayload.requesterSessionKey = requesterContext.sessionKey;\n this.emitSubagentEvent(\"A2A_MESSAGE_SENT\", asyncPayload);\n\n return {\n status: \"accepted\",\n runId,\n sessionKey: targetSessionKey,\n delivery: { status: \"pending\", mode: \"async\" },\n };\n }\n\n // Record the timestamp before sending so we can filter for new responses\n const sentAt = Date.now();\n\n // Synchronous send with wait\n await this.runtime.emitEvent(EventType.MESSAGE_RECEIVED, {\n runtime: this.runtime,\n message,\n source: \"a2a\",\n });\n\n // Poll for a reply that's newer than our sent message\n const pollIntervalMs = 500;\n const maxPolls = Math.ceil(timeoutMs / pollIntervalMs);\n let lastReply: Memory | undefined;\n\n for (let poll = 0; poll < maxPolls; poll++) {\n await new Promise<void>((r) => setTimeout(r, pollIntervalMs));\n\n const memories = await this.runtime.getMemories({\n tableName: \"messages\",\n roomId: targetRoomId,\n count: 10,\n });\n\n // Find a response that:\n // 1. Is from the agent (not from the user/sender)\n // 2. Was created after we sent our message\n // 3. Is not our own message (check by ID)\n const newReplies = memories.filter(\n (m) =>\n m.entityId === this.runtime.agentId &&\n m.id !== message.id &&\n m.createdAt &&\n m.createdAt > sentAt,\n );\n\n if (newReplies.length > 0) {\n // Get the most recent reply\n lastReply = newReplies.sort((a, b) => (b.createdAt ?? 0) - (a.createdAt ?? 0))[0];\n break;\n }\n }\n\n const syncPayload: SubagentEventPayload = {\n runId,\n childSessionKey: targetSessionKey,\n task: params.message,\n };\n if (requesterContext.sessionKey) syncPayload.requesterSessionKey = requesterContext.sessionKey;\n this.emitSubagentEvent(\"A2A_MESSAGE_SENT\", syncPayload);\n\n if (!lastReply) {\n return {\n status: \"timeout\",\n runId,\n sessionKey: targetSessionKey,\n error: `No response received within ${params.timeoutSeconds ?? 30} seconds`,\n delivery: { status: \"timeout\", mode: \"sync\" },\n };\n }\n\n const result: SendToAgentResult = {\n status: \"ok\",\n runId,\n sessionKey: targetSessionKey,\n delivery: { status: \"delivered\", mode: \"sync\" },\n };\n if (lastReply.content?.text) result.reply = lastReply.content.text;\n return result;\n }\n\n /**\n * Builds context for agent-to-agent communication.\n */\n private buildAgentToAgentContext(params: {\n requesterSessionKey?: string;\n targetSessionKey: string;\n }): string {\n return [\n \"# Agent-to-Agent Message Context\",\n \"\",\n \"This message was sent by another agent session.\",\n params.requesterSessionKey ? `- Sender: ${params.requesterSessionKey}` : undefined,\n `- Target: ${params.targetSessionKey}`,\n \"\",\n \"Process this message and respond appropriately.\",\n ]\n .filter((l) => l !== undefined)\n .join(\"\\n\");\n }\n\n // ============================================================================\n // Query Methods\n // ============================================================================\n\n /**\n * Gets a subagent run record by ID.\n */\n getSubagentRun(runId: string): SubagentRunRecord | undefined {\n return this.subagentRuns.get(runId);\n }\n\n /**\n * Finds a subagent run by its label.\n *\n * @param label - The label to search for (case-insensitive)\n * @param agentId - Optional agent ID to filter by\n * @returns The matching run record, or undefined if not found\n */\n findSubagentRunByLabel(label: string, agentId?: string): SubagentRunRecord | undefined {\n const normalizedLabel = label.toLowerCase().trim();\n const normalizedAgentId = agentId ? normalizeAgentId(agentId) : undefined;\n\n for (const run of this.subagentRuns.values()) {\n // Check if label matches\n const runLabel = run.label?.toLowerCase().trim();\n if (runLabel !== normalizedLabel) {\n continue;\n }\n\n // Check agent ID if specified\n if (normalizedAgentId) {\n const runAgentId = extractAgentIdFromSessionKey(run.childSessionKey);\n if (normalizeAgentId(runAgentId) !== normalizedAgentId) {\n continue;\n }\n }\n\n // Prefer active runs over completed ones\n if (!run.endedAt) {\n return run;\n }\n }\n\n // If no active run found, return the most recent completed one with matching label\n const completedRuns = [...this.subagentRuns.values()]\n .filter((run) => {\n const runLabel = run.label?.toLowerCase().trim();\n if (runLabel !== normalizedLabel) {\n return false;\n }\n if (normalizedAgentId) {\n const runAgentId = extractAgentIdFromSessionKey(run.childSessionKey);\n if (normalizeAgentId(runAgentId) !== normalizedAgentId) {\n return false;\n }\n }\n return true;\n })\n .sort((a, b) => (b.createdAt ?? 0) - (a.createdAt ?? 0));\n\n return completedRuns[0];\n }\n\n /**\n * Lists subagent runs for a requester.\n */\n listSubagentRuns(requesterSessionKey?: string): SubagentRunRecord[] {\n const runs = [...this.subagentRuns.values()];\n if (!requesterSessionKey) {\n return runs;\n }\n return runs.filter((r) => r.requesterSessionKey === requesterSessionKey);\n }\n\n /**\n * Cancels a running subagent.\n */\n cancelSubagentRun(runId: string): boolean {\n const controller = this.activeRuns.get(runId);\n if (controller) {\n controller.abort();\n return true;\n }\n return false;\n }\n\n // ============================================================================\n // Events\n // ============================================================================\n\n on(event: InternalEventType, handler: (payload: SubagentEventPayload) => void): void {\n this.emitter.on(event, handler);\n }\n\n off(event: InternalEventType, handler: (payload: SubagentEventPayload) => void): void {\n this.emitter.off(event, handler);\n }\n\n private emitSubagentEvent(type: SubagentEventType, payload: SubagentEventPayload): void {\n this.emitter.emit(type, payload);\n this.emitter.emit(\"task\", { type, ...payload });\n }\n\n // ============================================================================\n // Lifecycle\n // ============================================================================\n\n private startSweeper(): void {\n if (this.sweeper) {\n return;\n }\n this.sweeper = setInterval(() => {\n this.sweepOldRuns();\n }, 60_000);\n this.sweeper.unref?.();\n }\n\n private sweepOldRuns(): void {\n const now = Date.now();\n for (const [runId, record] of this.subagentRuns.entries()) {\n if (record.archiveAtMs && record.archiveAtMs <= now) {\n this.subagentRuns.delete(runId);\n }\n }\n }\n\n async stop(): Promise<void> {\n if (this.sweeper) {\n clearInterval(this.sweeper);\n this.sweeper = null;\n }\n\n // Cancel all active runs\n for (const controller of this.activeRuns.values()) {\n controller.abort();\n }\n this.activeRuns.clear();\n this.emitter.removeAllListeners();\n }\n}\n",
|
|
20
|
+
"import crypto from \"node:crypto\";\nimport { EventEmitter } from \"node:events\";\nimport {\n ChannelType,\n EventType,\n type IAgentRuntime,\n type Memory,\n type Room,\n Service,\n type UUID,\n} from \"@elizaos/core\";\nimport type {\n AgentToAgentPolicy,\n DeliveryContext,\n SendToAgentParams,\n SendToAgentResult,\n SpawnSubagentParams,\n SpawnSubagentResult,\n SubagentConfig,\n SubagentEventPayload,\n SubagentEventType,\n SubagentRoomMetadata,\n SubagentRunRecord,\n} from \"../types/subagent.js\";\nimport {\n createSubagentSessionKey,\n extractAgentIdFromSessionKey,\n formatDurationShort,\n hashToUUID,\n isSubagentSessionKey,\n normalizeAgentId,\n normalizeDeliveryContext,\n sessionKeyToRoomId,\n} from \"../utils/session.js\";\n\ntype InternalEventType = \"task\" | SubagentEventType;\n\n/**\n * SubagentService manages subagent lifecycles within the Eliza framework.\n *\n * This replaces Otto's gateway-based subagent system with native Eliza\n * events and services. Subagents are represented as rooms with special metadata.\n */\nexport class SubagentService extends Service {\n static serviceType = \"SUBAGENT\";\n capabilityDescription = \"Manages subagent spawning, lifecycle, and communication\";\n\n private readonly emitter = new EventEmitter();\n private readonly subagentRuns = new Map<string, SubagentRunRecord>();\n private readonly activeRuns = new Map<string, AbortController>();\n private sweeper: NodeJS.Timeout | null = null;\n private initialized = false;\n\n static async start(runtime: IAgentRuntime): Promise<Service> {\n const service = new SubagentService(runtime);\n await service.initialize();\n return service;\n }\n\n async initialize(): Promise<void> {\n if (this.initialized) {\n return;\n }\n this.initialized = true;\n\n // Register event handlers for run lifecycle\n this.runtime.registerEvent(EventType.RUN_ENDED, async (payload) => {\n await this.handleRunEnded(payload);\n });\n\n this.runtime.registerEvent(EventType.RUN_TIMEOUT, async (payload) => {\n await this.handleRunTimeout(payload);\n });\n\n // Start the sweeper for archiving old runs\n this.startSweeper();\n }\n\n // ============================================================================\n // Configuration\n // ============================================================================\n\n /**\n * Gets the subagent configuration from character settings.\n */\n getConfig(): SubagentConfig {\n const settings = this.runtime.character?.settings as Record<string, unknown> | undefined;\n const subagents = (settings?.subagents ?? {}) as SubagentConfig;\n\n return {\n enabled: subagents.enabled !== false, // Enabled by default\n ...(subagents.model !== undefined ? { model: subagents.model } : {}),\n ...(subagents.thinking !== undefined ? { thinking: subagents.thinking } : {}),\n timeoutSeconds: subagents.timeoutSeconds ?? 300, // 5 min default\n allowAgents: subagents.allowAgents ?? [], // Empty = same agent only\n archiveAfterMinutes: subagents.archiveAfterMinutes ?? 60,\n };\n }\n\n /**\n * Gets the agent-to-agent communication policy.\n */\n getAgentToAgentPolicy(): AgentToAgentPolicy {\n const settings = this.runtime.character?.settings as Record<string, unknown> | undefined;\n const a2aConfig = (settings?.agentToAgent ?? {}) as {\n enabled?: boolean;\n allow?: Array<{ source?: string; target?: string }>;\n };\n\n const enabled = a2aConfig.enabled === true;\n const allowRules = (a2aConfig.allow ?? []).map((rule) => ({\n source: rule.source ?? \"*\",\n target: rule.target ?? \"*\",\n }));\n\n return {\n enabled,\n allowRules,\n isAllowed: (sourceAgentId: string, targetAgentId: string): boolean => {\n if (!enabled) {\n return false;\n }\n if (sourceAgentId === targetAgentId) {\n return true; // Same agent always allowed\n }\n const sourceNorm = normalizeAgentId(sourceAgentId);\n const targetNorm = normalizeAgentId(targetAgentId);\n\n for (const rule of allowRules) {\n const sourceMatch = rule.source === \"*\" || normalizeAgentId(rule.source) === sourceNorm;\n const targetMatch = rule.target === \"*\" || normalizeAgentId(rule.target) === targetNorm;\n if (sourceMatch && targetMatch) {\n return true;\n }\n }\n return false;\n },\n };\n }\n\n // ============================================================================\n // Subagent Spawning\n // ============================================================================\n\n /**\n * Spawns a new subagent to execute a task.\n *\n * Instead of calling the gateway, this creates an Eliza room with special\n * metadata and triggers message processing.\n */\n async spawnSubagent(\n params: SpawnSubagentParams,\n requesterContext: {\n sessionKey?: string;\n roomId?: UUID;\n origin?: DeliveryContext;\n },\n ): Promise<SpawnSubagentResult> {\n const config = this.getConfig();\n\n if (!config.enabled) {\n return {\n status: \"forbidden\",\n error: \"Subagent spawning is disabled\",\n };\n }\n\n // Check if requester is a subagent (subagents can't spawn subagents)\n if (requesterContext.sessionKey && isSubagentSessionKey(requesterContext.sessionKey)) {\n return {\n status: \"forbidden\",\n error: \"sessions_spawn is not allowed from sub-agent sessions\",\n };\n }\n\n // Resolve agent IDs\n const requesterAgentId = requesterContext.sessionKey\n ? extractAgentIdFromSessionKey(requesterContext.sessionKey)\n : (this.runtime.character?.name ?? \"unknown\");\n\n const targetAgentId = params.agentId ? normalizeAgentId(params.agentId) : requesterAgentId;\n\n // Check cross-agent permission\n if (targetAgentId !== requesterAgentId) {\n const allowAgents = config.allowAgents ?? [];\n const allowAny = allowAgents.some((v) => v.trim() === \"*\");\n const allowSet = new Set(\n allowAgents.filter((v) => v.trim() && v.trim() !== \"*\").map((v) => normalizeAgentId(v)),\n );\n\n if (!allowAny && !allowSet.has(targetAgentId)) {\n return {\n status: \"forbidden\",\n error: `agentId \"${targetAgentId}\" is not allowed for subagent spawning`,\n };\n }\n }\n\n // Create the subagent session key\n const childSessionKey = createSubagentSessionKey(targetAgentId);\n const runId = crypto.randomUUID();\n\n // Create a room for the subagent\n const childRoomId = sessionKeyToRoomId(childSessionKey, targetAgentId);\n\n const roomMetadata: SubagentRoomMetadata = {\n isSubagent: true,\n sessionKey: childSessionKey,\n task: params.task,\n spawnedAt: Date.now(),\n cleanup: params.cleanup ?? \"keep\",\n };\n if (requesterContext.roomId) roomMetadata.parentRoomId = requesterContext.roomId;\n if (requesterContext.sessionKey) roomMetadata.parentSessionKey = requesterContext.sessionKey;\n if (params.label) roomMetadata.label = params.label;\n\n const childRoom: Room = {\n id: childRoomId,\n name: params.label || `Subagent: ${params.task.slice(0, 50)}`,\n type: ChannelType.SELF,\n channelId: childSessionKey,\n agentId: this.runtime.agentId,\n worldId: this.runtime.agentId, // Use agent as world for simplicity\n metadata: roomMetadata as unknown as Room[\"metadata\"],\n };\n\n // Create the room\n await this.runtime.ensureRoomExists(childRoom);\n\n // Register the subagent run\n const now = Date.now();\n const archiveAfterMs = config.archiveAfterMinutes\n ? config.archiveAfterMinutes * 60_000\n : undefined;\n\n const record: SubagentRunRecord = {\n runId,\n childSessionKey,\n requesterSessionKey: requesterContext.sessionKey ?? \"unknown\",\n requesterDisplayKey: requesterContext.sessionKey ?? \"main\",\n task: params.task,\n cleanup: params.cleanup ?? \"keep\",\n createdAt: now,\n startedAt: now,\n cleanupHandled: false,\n roomId: childRoomId,\n worldId: this.runtime.agentId,\n };\n const normalizedOrigin = normalizeDeliveryContext(requesterContext.origin);\n if (normalizedOrigin) record.requesterOrigin = normalizedOrigin;\n if (params.label) record.label = params.label;\n if (archiveAfterMs) record.archiveAtMs = now + archiveAfterMs;\n\n this.subagentRuns.set(runId, record);\n\n // Emit spawn event, only including defined values\n const spawnPayload: SubagentEventPayload = {\n runId,\n childSessionKey,\n childRoomId,\n task: params.task,\n };\n if (requesterContext.sessionKey) spawnPayload.requesterSessionKey = requesterContext.sessionKey;\n if (requesterContext.roomId) spawnPayload.requesterRoomId = requesterContext.roomId;\n if (params.label) spawnPayload.label = params.label;\n this.emitSubagentEvent(\"SUBAGENT_SPAWN_REQUESTED\", spawnPayload);\n\n // Build the system prompt for the subagent\n const systemPromptParams: Parameters<typeof this.buildSubagentSystemPrompt>[0] = {\n childSessionKey,\n task: params.task,\n };\n if (requesterContext.sessionKey) systemPromptParams.requesterSessionKey = requesterContext.sessionKey;\n if (requesterContext.origin) systemPromptParams.requesterOrigin = requesterContext.origin;\n if (params.label) systemPromptParams.label = params.label;\n const systemPrompt = this.buildSubagentSystemPrompt(systemPromptParams);\n\n // Build metadata, only including defined values\n const taskMetadata: Record<string, string | boolean> = {\n isSubagentTask: true,\n runId,\n systemPromptOverride: systemPrompt,\n };\n const modelOverride = params.model || config.model;\n const thinkingOverride = params.thinking || config.thinking;\n if (modelOverride) taskMetadata.modelOverride = modelOverride;\n if (thinkingOverride) taskMetadata.thinkingOverride = thinkingOverride;\n\n // Create the initial message to kick off the subagent\n const initialMessage: Memory = {\n id: hashToUUID(`${runId}-initial`),\n entityId: this.runtime.agentId,\n agentId: this.runtime.agentId,\n roomId: childRoomId,\n content: {\n text: params.task,\n type: \"text\",\n metadata: taskMetadata as Memory[\"content\"][\"metadata\"],\n },\n };\n\n // Process the message (this triggers the agent to work on the task)\n // We don't await here - the subagent runs in the background\n this.executeSubagentRun(runId, initialMessage, params.runTimeoutSeconds).catch((error) => {\n this.runtime.logger.error(`Subagent execution error [runId=${runId}]: ${error}`);\n this.handleSubagentError(runId, error);\n });\n\n return {\n status: \"accepted\",\n childSessionKey,\n childRoomId,\n runId,\n modelApplied: !!(params.model || config.model),\n };\n }\n\n /**\n * Executes a subagent run with timeout handling.\n */\n private async executeSubagentRun(\n runId: string,\n initialMessage: Memory,\n timeoutSeconds?: number,\n ): Promise<void> {\n const config = this.getConfig();\n const timeout = (timeoutSeconds ?? config.timeoutSeconds ?? 300) * 1000;\n\n const controller = new AbortController();\n this.activeRuns.set(runId, controller);\n\n // Set up timeout\n const timeoutId =\n timeout > 0\n ? setTimeout(() => {\n controller.abort();\n this.handleSubagentTimeout(runId);\n }, timeout)\n : null;\n\n try {\n // Emit the message for processing\n await this.runtime.emitEvent(EventType.MESSAGE_RECEIVED, {\n runtime: this.runtime,\n message: initialMessage,\n source: \"subagent\",\n });\n\n // Wait for completion (the RUN_ENDED event handler will update the record)\n // This is a polling approach - we check the record status\n await this.waitForCompletion(runId, timeout, controller.signal);\n } finally {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n this.activeRuns.delete(runId);\n }\n }\n\n /**\n * Waits for a subagent run to complete.\n */\n private async waitForCompletion(\n runId: string,\n timeoutMs: number,\n signal: AbortSignal,\n ): Promise<void> {\n const startTime = Date.now();\n const pollInterval = 500;\n\n while (!signal.aborted) {\n const record = this.subagentRuns.get(runId);\n if (!record) {\n return; // Record was deleted\n }\n if (record.endedAt) {\n return; // Completed\n }\n if (Date.now() - startTime > timeoutMs + 5000) {\n return; // Timed out with buffer\n }\n\n await new Promise<void>((resolve) => setTimeout(resolve, pollInterval));\n }\n }\n\n /**\n * Handles subagent timeout.\n */\n private handleSubagentTimeout(runId: string): void {\n const record = this.subagentRuns.get(runId);\n if (!record || record.endedAt) {\n return;\n }\n\n record.endedAt = Date.now();\n record.outcome = { status: \"timeout\" };\n\n const timeoutPayload: SubagentEventPayload = {\n runId,\n childSessionKey: record.childSessionKey,\n task: record.task,\n status: \"timeout\",\n };\n if (record.roomId) timeoutPayload.childRoomId = record.roomId;\n this.emitSubagentEvent(\"SUBAGENT_RUN_TIMEOUT\", timeoutPayload);\n\n // Trigger announcement\n this.announceSubagentResult(runId).catch((err) => {\n this.runtime.logger.error(`Failed to announce timeout [runId=${runId}]: ${err}`);\n });\n }\n\n /**\n * Handles subagent error.\n */\n private handleSubagentError(runId: string, error: unknown): void {\n const record = this.subagentRuns.get(runId);\n if (!record) {\n return;\n }\n\n record.endedAt = Date.now();\n record.outcome = {\n status: \"error\",\n error: error instanceof Error ? error.message : String(error),\n };\n\n const errorPayload: SubagentEventPayload = {\n runId,\n childSessionKey: record.childSessionKey,\n task: record.task,\n status: \"error\",\n error: record.outcome.error,\n };\n if (record.roomId) errorPayload.childRoomId = record.roomId;\n this.emitSubagentEvent(\"SUBAGENT_RUN_FAILED\", errorPayload);\n\n // Trigger announcement\n this.announceSubagentResult(runId).catch((err) => {\n this.runtime.logger.error(\"Failed to announce error\", { runId, error: err });\n });\n }\n\n /**\n * Handles the RUN_ENDED event to update subagent records.\n */\n private async handleRunEnded(payload: unknown): Promise<void> {\n const p = payload as { roomId?: UUID; status?: string };\n if (!p.roomId) {\n return;\n }\n\n // Find the subagent run by room ID\n for (const [runId, record] of this.subagentRuns.entries()) {\n if (record.roomId === p.roomId && !record.endedAt) {\n record.endedAt = Date.now();\n record.outcome = { status: \"ok\" };\n\n const completedPayload: SubagentEventPayload = {\n runId,\n childSessionKey: record.childSessionKey,\n childRoomId: record.roomId,\n task: record.task,\n status: \"completed\",\n endedAt: record.endedAt,\n durationMs: record.endedAt - (record.startedAt ?? record.createdAt),\n };\n if (record.startedAt) completedPayload.startedAt = record.startedAt;\n this.emitSubagentEvent(\"SUBAGENT_RUN_COMPLETED\", completedPayload);\n\n // Trigger announcement\n await this.announceSubagentResult(runId);\n break;\n }\n }\n }\n\n /**\n * Handles the RUN_TIMEOUT event.\n */\n private async handleRunTimeout(payload: unknown): Promise<void> {\n const p = payload as { roomId?: UUID };\n if (!p.roomId) {\n return;\n }\n\n for (const [runId, record] of this.subagentRuns.entries()) {\n if (record.roomId === p.roomId && !record.endedAt) {\n this.handleSubagentTimeout(runId);\n break;\n }\n }\n }\n\n // ============================================================================\n // Announcement\n // ============================================================================\n\n /**\n * Announces a subagent's result to the requester.\n */\n private async announceSubagentResult(runId: string): Promise<boolean> {\n const record = this.subagentRuns.get(runId);\n if (!record) {\n return false;\n }\n\n if (record.cleanupCompletedAt || record.cleanupHandled) {\n return false;\n }\n\n record.cleanupHandled = true;\n\n // Get the last assistant reply from the subagent's room\n let reply: string | undefined;\n if (record.roomId) {\n const memories = await this.runtime.getMemories({\n tableName: \"messages\",\n roomId: record.roomId,\n count: 10,\n });\n\n // Find the last assistant message\n const lastAssistant = memories\n .filter((m) => m.entityId === this.runtime.agentId)\n .sort((a, b) => (b.createdAt ?? 0) - (a.createdAt ?? 0))[0];\n\n reply = lastAssistant?.content?.text;\n }\n\n // Build stats line\n const durationMs = record.endedAt\n ? record.endedAt - (record.startedAt ?? record.createdAt)\n : undefined;\n const statsLine = `Runtime: ${formatDurationShort(durationMs) ?? \"n/a\"} • Session: ${record.childSessionKey}`;\n\n // Build status label\n const outcome = record.outcome ?? { status: \"unknown\" };\n const statusLabel =\n outcome.status === \"ok\"\n ? \"completed successfully\"\n : outcome.status === \"timeout\"\n ? \"timed out\"\n : outcome.status === \"error\"\n ? `failed: ${outcome.error || \"unknown error\"}`\n : \"finished with unknown status\";\n\n // Build announcement message for the main agent\n const taskLabel = record.label || record.task || \"background task\";\n const triggerMessage = [\n `A background task \"${taskLabel}\" just ${statusLabel}.`,\n \"\",\n \"Findings:\",\n reply || \"(no output)\",\n \"\",\n statsLine,\n \"\",\n \"Summarize this naturally for the user. Keep it brief (1-2 sentences).\",\n \"Do not mention technical details like tokens, stats, or that this was a background task.\",\n \"You can respond with NO_REPLY if no announcement is needed.\",\n ].join(\"\\n\");\n\n // Send to the requester's room\n if (record.requesterSessionKey && record.requesterSessionKey !== \"unknown\") {\n const requesterRoomId = sessionKeyToRoomId(\n record.requesterSessionKey,\n extractAgentIdFromSessionKey(record.requesterSessionKey),\n );\n\n // Build metadata, only including defined values\n const metadata: Record<string, unknown> = {\n isSubagentAnnouncement: true,\n subagentRunId: runId,\n };\n if (record.requesterOrigin) {\n metadata.deliveryContext = record.requesterOrigin;\n }\n\n const announceMessage: Memory = {\n id: hashToUUID(`${runId}-announce`),\n entityId: this.runtime.agentId,\n agentId: this.runtime.agentId,\n roomId: requesterRoomId,\n content: {\n text: triggerMessage,\n type: \"text\",\n metadata,\n },\n };\n\n await this.runtime.emitEvent(EventType.MESSAGE_RECEIVED, {\n runtime: this.runtime,\n message: announceMessage,\n source: \"subagent_announce\",\n });\n }\n\n const announcePayload: SubagentEventPayload = {\n runId,\n childSessionKey: record.childSessionKey,\n task: record.task,\n outcome,\n };\n if (record.requesterSessionKey)\n announcePayload.requesterSessionKey = record.requesterSessionKey;\n this.emitSubagentEvent(\"SUBAGENT_ANNOUNCE_SENT\", announcePayload);\n\n // Handle cleanup\n record.cleanupCompletedAt = Date.now();\n\n if (record.cleanup === \"delete\") {\n this.subagentRuns.delete(runId);\n }\n\n return true;\n }\n\n /**\n * Builds the system prompt for a subagent.\n */\n private buildSubagentSystemPrompt(params: {\n requesterSessionKey?: string;\n requesterOrigin?: DeliveryContext;\n childSessionKey: string;\n label?: string;\n task?: string;\n }): string {\n const taskText =\n typeof params.task === \"string\" && params.task.trim()\n ? params.task.replace(/\\s+/g, \" \").trim()\n : \"{{TASK_DESCRIPTION}}\";\n\n const lines = [\n \"# Subagent Context\",\n \"\",\n \"You are a **subagent** spawned by the main agent for a specific task.\",\n \"\",\n \"## Your Role\",\n `- You were created to handle: ${taskText}`,\n \"- Complete this task. That's your entire purpose.\",\n \"- You are NOT the main agent. Don't try to be.\",\n \"\",\n \"## Rules\",\n \"1. **Stay focused** - Do your assigned task, nothing else\",\n \"2. **Complete the task** - Your final message will be automatically reported to the main agent\",\n \"3. **Don't initiate** - No heartbeats, no proactive actions, no side quests\",\n \"4. **Be ephemeral** - You may be terminated after task completion. That's fine.\",\n \"\",\n \"## Output Format\",\n \"When complete, your final response should include:\",\n \"- What you accomplished or found\",\n \"- Any relevant details the main agent should know\",\n \"- Keep it concise but informative\",\n \"\",\n \"## What You DON'T Do\",\n \"- NO user conversations (that's main agent's job)\",\n \"- NO external messages unless explicitly tasked with a specific recipient\",\n \"- NO cron jobs or persistent state\",\n \"- NO pretending to be the main agent\",\n \"\",\n \"## Session Context\",\n params.label ? `- Label: ${params.label}` : undefined,\n params.requesterSessionKey ? `- Requester session: ${params.requesterSessionKey}` : undefined,\n params.requesterOrigin?.channel\n ? `- Requester channel: ${params.requesterOrigin.channel}`\n : undefined,\n `- Your session: ${params.childSessionKey}`,\n \"\",\n ].filter((line): line is string => line !== undefined);\n\n return lines.join(\"\\n\");\n }\n\n // ============================================================================\n // Agent-to-Agent Communication\n // ============================================================================\n\n /**\n * Sends a message to another agent's session.\n */\n async sendToAgent(\n params: SendToAgentParams,\n requesterContext: {\n sessionKey?: string;\n roomId?: UUID;\n },\n ): Promise<SendToAgentResult> {\n const runId = crypto.randomUUID();\n const policy = this.getAgentToAgentPolicy();\n\n // Resolve target session\n let targetSessionKey = params.sessionKey;\n\n if (!targetSessionKey && params.label) {\n // Resolve label to session key by searching subagent runs\n const matchingRun = this.findSubagentRunByLabel(params.label, params.agentId);\n if (matchingRun) {\n targetSessionKey = matchingRun.childSessionKey;\n } else {\n return {\n status: \"error\",\n runId,\n error: `No subagent found with label \"${params.label}\"`,\n };\n }\n }\n\n if (!targetSessionKey) {\n return {\n status: \"error\",\n runId,\n error: \"Either sessionKey or label is required\",\n };\n }\n\n // Check cross-agent permission\n const requesterAgentId = requesterContext.sessionKey\n ? extractAgentIdFromSessionKey(requesterContext.sessionKey)\n : (this.runtime.character?.name ?? \"unknown\");\n const targetAgentId = extractAgentIdFromSessionKey(targetSessionKey);\n\n if (requesterAgentId !== targetAgentId) {\n if (!policy.enabled) {\n return {\n status: \"forbidden\",\n runId,\n error:\n \"Agent-to-agent messaging is disabled. Set settings.agentToAgent.enabled=true to allow cross-agent sends.\",\n };\n }\n if (!policy.isAllowed(requesterAgentId, targetAgentId)) {\n return {\n status: \"forbidden\",\n runId,\n error: \"Agent-to-agent messaging denied by policy.\",\n };\n }\n }\n\n // Get or create the target room\n const targetRoomId = sessionKeyToRoomId(targetSessionKey, targetAgentId);\n\n // Build context for the message\n const contextMessage = this.buildAgentToAgentContext({\n requesterSessionKey: requesterContext.sessionKey,\n targetSessionKey,\n });\n\n // Build metadata, only including defined values\n const a2aMetadata: Record<string, unknown> = {\n isAgentToAgent: true,\n runId,\n systemPromptOverride: contextMessage,\n };\n if (requesterContext.sessionKey) a2aMetadata.senderSessionKey = requesterContext.sessionKey;\n if (requesterContext.roomId) a2aMetadata.senderRoomId = requesterContext.roomId;\n\n // Create and send the message\n const message: Memory = {\n id: hashToUUID(`${runId}-a2a`),\n entityId: this.runtime.agentId,\n agentId: this.runtime.agentId,\n roomId: targetRoomId,\n content: {\n text: params.message,\n type: \"text\",\n metadata: a2aMetadata,\n },\n };\n\n const timeoutMs = (params.timeoutSeconds ?? 30) * 1000;\n\n if (params.timeoutSeconds === 0) {\n // Fire and forget\n this.runtime\n .emitEvent(EventType.MESSAGE_RECEIVED, {\n runtime: this.runtime,\n message,\n source: \"a2a\",\n })\n .catch((err) => {\n this.runtime.logger.error(\"A2A send error\", { runId, error: err });\n });\n\n const asyncPayload: SubagentEventPayload = {\n runId,\n childSessionKey: targetSessionKey,\n task: params.message,\n };\n if (requesterContext.sessionKey)\n asyncPayload.requesterSessionKey = requesterContext.sessionKey;\n this.emitSubagentEvent(\"A2A_MESSAGE_SENT\", asyncPayload);\n\n return {\n status: \"accepted\",\n runId,\n sessionKey: targetSessionKey,\n delivery: { status: \"pending\", mode: \"async\" },\n };\n }\n\n // Record the timestamp before sending so we can filter for new responses\n const sentAt = Date.now();\n\n // Synchronous send with wait\n await this.runtime.emitEvent(EventType.MESSAGE_RECEIVED, {\n runtime: this.runtime,\n message,\n source: \"a2a\",\n });\n\n // Poll for a reply that's newer than our sent message\n const pollIntervalMs = 500;\n const maxPolls = Math.ceil(timeoutMs / pollIntervalMs);\n let lastReply: Memory | undefined;\n\n for (let poll = 0; poll < maxPolls; poll++) {\n await new Promise<void>((r) => setTimeout(r, pollIntervalMs));\n\n const memories = await this.runtime.getMemories({\n tableName: \"messages\",\n roomId: targetRoomId,\n count: 10,\n });\n\n // Find a response that:\n // 1. Is from the agent (not from the user/sender)\n // 2. Was created after we sent our message\n // 3. Is not our own message (check by ID)\n const newReplies = memories.filter(\n (m) =>\n m.entityId === this.runtime.agentId &&\n m.id !== message.id &&\n m.createdAt &&\n m.createdAt > sentAt,\n );\n\n if (newReplies.length > 0) {\n // Get the most recent reply\n lastReply = newReplies.sort((a, b) => (b.createdAt ?? 0) - (a.createdAt ?? 0))[0];\n break;\n }\n }\n\n const syncPayload: SubagentEventPayload = {\n runId,\n childSessionKey: targetSessionKey,\n task: params.message,\n };\n if (requesterContext.sessionKey) syncPayload.requesterSessionKey = requesterContext.sessionKey;\n this.emitSubagentEvent(\"A2A_MESSAGE_SENT\", syncPayload);\n\n if (!lastReply) {\n return {\n status: \"timeout\",\n runId,\n sessionKey: targetSessionKey,\n error: `No response received within ${params.timeoutSeconds ?? 30} seconds`,\n delivery: { status: \"timeout\", mode: \"sync\" },\n };\n }\n\n return {\n status: \"ok\",\n runId,\n sessionKey: targetSessionKey,\n reply: lastReply.content?.text,\n delivery: { status: \"delivered\", mode: \"sync\" },\n };\n }\n\n /**\n * Builds context for agent-to-agent communication.\n */\n private buildAgentToAgentContext(params: {\n requesterSessionKey?: string;\n targetSessionKey: string;\n }): string {\n return [\n \"# Agent-to-Agent Message Context\",\n \"\",\n \"This message was sent by another agent session.\",\n params.requesterSessionKey ? `- Sender: ${params.requesterSessionKey}` : undefined,\n `- Target: ${params.targetSessionKey}`,\n \"\",\n \"Process this message and respond appropriately.\",\n ]\n .filter((l) => l !== undefined)\n .join(\"\\n\");\n }\n\n // ============================================================================\n // Query Methods\n // ============================================================================\n\n /**\n * Gets a subagent run record by ID.\n */\n getSubagentRun(runId: string): SubagentRunRecord | undefined {\n return this.subagentRuns.get(runId);\n }\n\n /**\n * Finds a subagent run by its label.\n *\n * @param label - The label to search for (case-insensitive)\n * @param agentId - Optional agent ID to filter by\n * @returns The matching run record, or undefined if not found\n */\n findSubagentRunByLabel(label: string, agentId?: string): SubagentRunRecord | undefined {\n const normalizedLabel = label.toLowerCase().trim();\n const normalizedAgentId = agentId ? normalizeAgentId(agentId) : undefined;\n\n for (const run of this.subagentRuns.values()) {\n // Check if label matches\n const runLabel = run.label?.toLowerCase().trim();\n if (runLabel !== normalizedLabel) {\n continue;\n }\n\n // Check agent ID if specified\n if (normalizedAgentId) {\n const runAgentId = extractAgentIdFromSessionKey(run.childSessionKey);\n if (normalizeAgentId(runAgentId) !== normalizedAgentId) {\n continue;\n }\n }\n\n // Prefer active runs over completed ones\n if (!run.endedAt) {\n return run;\n }\n }\n\n // If no active run found, return the most recent completed one with matching label\n const completedRuns = [...this.subagentRuns.values()]\n .filter((run) => {\n const runLabel = run.label?.toLowerCase().trim();\n if (runLabel !== normalizedLabel) {\n return false;\n }\n if (normalizedAgentId) {\n const runAgentId = extractAgentIdFromSessionKey(run.childSessionKey);\n if (normalizeAgentId(runAgentId) !== normalizedAgentId) {\n return false;\n }\n }\n return true;\n })\n .sort((a, b) => (b.createdAt ?? 0) - (a.createdAt ?? 0));\n\n return completedRuns[0];\n }\n\n /**\n * Lists subagent runs for a requester.\n */\n listSubagentRuns(requesterSessionKey?: string): SubagentRunRecord[] {\n const runs = [...this.subagentRuns.values()];\n if (!requesterSessionKey) {\n return runs;\n }\n return runs.filter((r) => r.requesterSessionKey === requesterSessionKey);\n }\n\n /**\n * Cancels a running subagent.\n */\n cancelSubagentRun(runId: string): boolean {\n const controller = this.activeRuns.get(runId);\n if (controller) {\n controller.abort();\n return true;\n }\n return false;\n }\n\n // ============================================================================\n // Events\n // ============================================================================\n\n on(event: InternalEventType, handler: (payload: SubagentEventPayload) => void): void {\n this.emitter.on(event, handler);\n }\n\n off(event: InternalEventType, handler: (payload: SubagentEventPayload) => void): void {\n this.emitter.off(event, handler);\n }\n\n private emitSubagentEvent(type: SubagentEventType, payload: SubagentEventPayload): void {\n this.emitter.emit(type, payload);\n this.emitter.emit(\"task\", { type, ...payload });\n }\n\n // ============================================================================\n // Lifecycle\n // ============================================================================\n\n private startSweeper(): void {\n if (this.sweeper) {\n return;\n }\n this.sweeper = setInterval(() => {\n this.sweepOldRuns();\n }, 60_000);\n this.sweeper.unref?.();\n }\n\n private sweepOldRuns(): void {\n const now = Date.now();\n for (const [runId, record] of this.subagentRuns.entries()) {\n if (record.archiveAtMs && record.archiveAtMs <= now) {\n this.subagentRuns.delete(runId);\n }\n }\n }\n\n async stop(): Promise<void> {\n if (this.sweeper) {\n clearInterval(this.sweeper);\n this.sweeper = null;\n }\n\n // Cancel all active runs\n for (const controller of this.activeRuns.values()) {\n controller.abort();\n }\n this.activeRuns.clear();\n this.emitter.removeAllListeners();\n }\n}\n",
|
|
21
21
|
"/**\n * Supported messaging channels.\n */\nexport type MessagingChannel =\n | \"discord\"\n | \"telegram\"\n | \"slack\"\n | \"whatsapp\"\n | \"twitch\"\n | \"google_chat\"\n | \"internal\"\n | \"unknown\";\n\n/**\n * Target specification for sending a message.\n */\nexport interface MessageTarget {\n /** The channel/platform to send to */\n channel: MessagingChannel;\n /** The recipient/chat/channel ID */\n to: string;\n /** Optional account ID for multi-account setups */\n accountId?: string;\n /** Optional thread ID for threaded conversations */\n threadId?: string | number;\n /** Optional message to reply to */\n replyToMessageId?: string;\n}\n\n/**\n * Message content to send.\n */\nexport interface MessageContent {\n /** Text content */\n text: string;\n /** Optional attachments */\n attachments?: MessageAttachment[];\n /** Optional embed/card data */\n embed?: MessageEmbed;\n /** Optional inline buttons/actions */\n buttons?: MessageButton[];\n /** Whether to disable link previews */\n disableLinkPreview?: boolean;\n /** Whether to send silently (no notification) */\n silent?: boolean;\n}\n\n/**\n * Attachment to include with a message.\n */\nexport interface MessageAttachment {\n /** Type of attachment */\n type: \"image\" | \"video\" | \"audio\" | \"file\" | \"sticker\";\n /** URL to the attachment */\n url?: string;\n /** Local file path */\n path?: string;\n /** Base64 encoded data */\n data?: string;\n /** Filename */\n filename?: string;\n /** MIME type */\n mimeType?: string;\n /** Caption for the attachment */\n caption?: string;\n}\n\n/**\n * Embed/card data for rich messages.\n */\nexport interface MessageEmbed {\n /** Title of the embed */\n title?: string;\n /** Description text */\n description?: string;\n /** URL the title links to */\n url?: string;\n /** Color (hex string or number) */\n color?: string | number;\n /** Thumbnail image URL */\n thumbnailUrl?: string;\n /** Main image URL */\n imageUrl?: string;\n /** Footer text */\n footer?: string;\n /** Fields/key-value pairs */\n fields?: Array<{ name: string; value: string; inline?: boolean }>;\n /** Timestamp */\n timestamp?: Date | string | number;\n}\n\n/**\n * Button/action for interactive messages.\n */\nexport interface MessageButton {\n /** Button label */\n label: string;\n /** Button type */\n type: \"url\" | \"callback\" | \"action\";\n /** URL for url buttons */\n url?: string;\n /** Callback data for callback buttons */\n data?: string;\n /** Action to trigger */\n action?: string;\n /** Optional emoji */\n emoji?: string;\n}\n\n/**\n * Parameters for sending a message.\n */\nexport interface SendMessageParams {\n /** Target to send to */\n target: MessageTarget;\n /** Content to send */\n content: MessageContent;\n /** Idempotency key to prevent duplicate sends */\n idempotencyKey?: string;\n /** Timeout in milliseconds */\n timeoutMs?: number;\n}\n\n/**\n * Result of sending a message.\n */\nexport interface SendMessageResult {\n /** Whether the send was successful */\n success: boolean;\n /** ID of the sent message */\n messageId?: string;\n /** Channel the message was sent to */\n channel: MessagingChannel;\n /** Target ID */\n targetId: string;\n /** Error message if failed */\n error?: string;\n /** Timestamp when sent */\n sentAt?: number;\n}\n\n/**\n * Message delivery status.\n */\nexport interface DeliveryStatus {\n /** Current status */\n status: \"pending\" | \"sent\" | \"delivered\" | \"read\" | \"failed\";\n /** Message ID */\n messageId?: string;\n /** When status was last updated */\n updatedAt: number;\n /** Error if failed */\n error?: string;\n}\n\n/**\n * Adapter interface for platform-specific messaging.\n * Each platform plugin should implement this interface.\n */\nexport interface MessagingAdapter {\n /** Channel this adapter handles */\n channel: MessagingChannel;\n\n /** Whether the adapter is currently available */\n isAvailable(): boolean;\n\n /** Send a message */\n send(params: SendMessageParams): Promise<SendMessageResult>;\n\n /** Check delivery status (if supported) */\n getDeliveryStatus?(messageId: string): Promise<DeliveryStatus | null>;\n\n /** Delete a message (if supported) */\n deleteMessage?(messageId: string, targetId: string): Promise<boolean>;\n\n /** Edit a message (if supported) */\n editMessage?(\n messageId: string,\n targetId: string,\n content: MessageContent,\n ): Promise<SendMessageResult>;\n}\n\n/**\n * Events emitted by the messaging service.\n */\nexport const MessagingEventType = {\n /** Message send requested */\n SEND_REQUESTED: \"MESSAGING_SEND_REQUESTED\",\n /** Message sent successfully */\n SENT: \"MESSAGING_SENT\",\n /** Message send failed */\n SEND_FAILED: \"MESSAGING_SEND_FAILED\",\n /** Message delivered */\n DELIVERED: \"MESSAGING_DELIVERED\",\n /** Message read */\n READ: \"MESSAGING_READ\",\n} as const;\n\nexport type MessagingEventType = (typeof MessagingEventType)[keyof typeof MessagingEventType];\n\n/**\n * Payload for messaging events.\n */\nexport interface MessagingEventPayload {\n idempotencyKey?: string;\n messageId?: string;\n channel: MessagingChannel;\n targetId: string;\n status: DeliveryStatus[\"status\"];\n error?: string;\n sentAt?: number;\n}\n\n/**\n * Room metadata for messaging routing.\n */\nexport interface MessagingRoomMetadata {\n /** Primary messaging channel for this room */\n messagingChannel?: MessagingChannel;\n /** Primary recipient ID for this room */\n messagingTo?: string;\n /** Account ID for multi-account setups */\n messagingAccountId?: string;\n /** Thread ID for threaded conversations */\n messagingThreadId?: string | number;\n}\n",
|
|
22
22
|
"import type { UUID } from \"@elizaos/core\";\n\n/**\n * Docker container configuration for sandboxed execution.\n */\nexport interface SandboxDockerConfig {\n /** Docker image to use */\n image: string;\n /** Container name prefix */\n containerPrefix: string;\n /** Working directory inside the container */\n workdir: string;\n /** Whether to remove container after execution */\n autoRemove: boolean;\n /** Memory limit (e.g., \"2g\") */\n memoryLimit?: string;\n /** CPU limit (e.g., \"2\") */\n cpuLimit?: string;\n /** Additional environment variables */\n env?: Record<string, string>;\n /** Additional volume mounts */\n mounts?: Array<{ host: string; container: string; mode: \"ro\" | \"rw\" }>;\n /** Network mode */\n network?: \"none\" | \"bridge\" | \"host\";\n /** Additional docker run arguments */\n extraArgs?: string[];\n}\n\n/**\n * Tool execution policy for sandboxed environments.\n */\nexport interface SandboxToolPolicy {\n /** Tools explicitly allowed (overrides deny) */\n allow?: string[];\n /** Tools explicitly denied */\n deny?: string[];\n}\n\n/**\n * Browser configuration for sandboxed environments.\n */\nexport interface SandboxBrowserConfig {\n /** Whether sandboxed browser is enabled */\n enabled: boolean;\n /** Docker image for browser container */\n image: string;\n /** Container name prefix */\n containerPrefix: string;\n /** Chrome DevTools Protocol port */\n cdpPort: number;\n /** VNC port for remote viewing */\n vncPort: number;\n /** noVNC web port */\n noVncPort: number;\n /** Run browser headless */\n headless: boolean;\n /** Enable noVNC web interface */\n enableNoVnc: boolean;\n /** Allow host browser control */\n allowHostControl: boolean;\n /** Auto-start browser on sandbox creation */\n autoStart: boolean;\n /** Timeout for auto-start in milliseconds */\n autoStartTimeoutMs: number;\n}\n\n/**\n * Workspace access level for sandboxed sessions.\n */\nexport type SandboxWorkspaceAccess = \"none\" | \"ro\" | \"rw\";\n\n/**\n * Sandbox scope - determines isolation level.\n */\nexport type SandboxScope = \"session\" | \"agent\" | \"shared\";\n\n/**\n * Sandbox mode - determines when sandboxing applies.\n */\nexport type SandboxMode = \"off\" | \"non-main\" | \"all\";\n\n/**\n * Pruning configuration for sandbox cleanup.\n */\nexport interface SandboxPruneConfig {\n /** Hours of inactivity before marking as idle */\n idleHours: number;\n /** Maximum age in days before forced cleanup */\n maxAgeDays: number;\n}\n\n/**\n * Complete sandbox configuration.\n * Stored in Character.settings.sandbox or world metadata.\n */\nexport interface SandboxConfig {\n /** Sandbox mode */\n mode: SandboxMode;\n /** Isolation scope */\n scope: SandboxScope;\n /** Workspace access level */\n workspaceAccess: SandboxWorkspaceAccess;\n /** Root directory for sandbox workspaces */\n workspaceRoot: string;\n /** Docker configuration */\n docker: SandboxDockerConfig;\n /** Browser configuration */\n browser: SandboxBrowserConfig;\n /** Tool execution policy */\n tools: SandboxToolPolicy;\n /** Pruning configuration */\n prune: SandboxPruneConfig;\n}\n\n/**\n * Browser context for a sandbox.\n */\nexport interface SandboxBrowserContext {\n /** URL to connect to the browser bridge */\n bridgeUrl: string;\n /** URL for noVNC web interface */\n noVncUrl?: string;\n /** Container name running the browser */\n containerName: string;\n}\n\n/**\n * Resolved sandbox context for a session.\n */\nexport interface SandboxContext {\n /** Whether sandboxing is enabled for this session */\n enabled: boolean;\n /** The session key this sandbox is for */\n sessionKey: string;\n /** Eliza room ID associated with this sandbox */\n roomId?: UUID;\n /** Directory where sandbox files are stored */\n workspaceDir: string;\n /** Agent's workspace directory */\n agentWorkspaceDir: string;\n /** Access level for the workspace */\n workspaceAccess: SandboxWorkspaceAccess;\n /** Name of the Docker container */\n containerName: string;\n /** Working directory inside the container */\n containerWorkdir: string;\n /** Docker configuration */\n docker: SandboxDockerConfig;\n /** Tool execution policy */\n tools: SandboxToolPolicy;\n /** Whether host browser control is allowed */\n browserAllowHostControl: boolean;\n /** Browser context if available */\n browser?: SandboxBrowserContext;\n /** When this context was created */\n createdAt: number;\n /** When this context was last accessed */\n lastAccessedAt: number;\n}\n\n/**\n * Minimal workspace info for sandbox operations.\n */\nexport interface SandboxWorkspaceInfo {\n workspaceDir: string;\n containerWorkdir: string;\n}\n\n/**\n * Result of a sandboxed command execution.\n */\nexport interface SandboxExecutionResult {\n /** Whether the command succeeded */\n success: boolean;\n /** Exit code of the command */\n exitCode: number;\n /** Standard output */\n stdout: string;\n /** Standard error */\n stderr: string;\n /** Execution duration in milliseconds */\n durationMs: number;\n /** Whether the command timed out */\n timedOut: boolean;\n /** Error message if failed */\n error?: string;\n}\n\n/**\n * Parameters for executing a command in a sandbox.\n */\nexport interface SandboxExecuteParams {\n /** Command to execute */\n command: string;\n /** Arguments to pass to the command */\n args?: string[];\n /** Working directory (relative to container workdir) */\n cwd?: string;\n /** Environment variables */\n env?: Record<string, string>;\n /** Timeout in milliseconds */\n timeoutMs?: number;\n /** Standard input to pass to the command */\n stdin?: string;\n}\n\n/**\n * Events emitted by the sandbox service.\n */\nexport const SandboxEventType = {\n /** Sandbox created */\n CREATED: \"SANDBOX_CREATED\",\n /** Sandbox destroyed */\n DESTROYED: \"SANDBOX_DESTROYED\",\n /** Command started */\n COMMAND_STARTED: \"SANDBOX_COMMAND_STARTED\",\n /** Command completed */\n COMMAND_COMPLETED: \"SANDBOX_COMMAND_COMPLETED\",\n /** Command failed */\n COMMAND_FAILED: \"SANDBOX_COMMAND_FAILED\",\n /** Browser started */\n BROWSER_STARTED: \"SANDBOX_BROWSER_STARTED\",\n /** Browser stopped */\n BROWSER_STOPPED: \"SANDBOX_BROWSER_STOPPED\",\n} as const;\n\nexport type SandboxEventType = (typeof SandboxEventType)[keyof typeof SandboxEventType];\n\n/**\n * Payload for sandbox events.\n */\nexport interface SandboxEventPayload {\n sessionKey: string;\n roomId?: UUID;\n containerName?: string;\n command?: string;\n result?: SandboxExecutionResult;\n error?: string;\n}\n",
|
|
23
23
|
"import type { UUID } from \"@elizaos/core\";\n\n/**\n * Parsed components of a session key.\n * Otto session keys follow patterns like:\n * - \"agent:mybot:dm:user123\"\n * - \"agent:mybot:subagent:uuid\"\n * - \"agent:mybot:group:channelId\"\n */\nexport interface ParsedSessionKey {\n agentId: string;\n keyType: \"dm\" | \"subagent\" | \"group\" | \"channel\" | \"unknown\";\n identifier: string;\n parentKey?: string;\n}\n\n/**\n * Delivery context for message routing.\n * Captures the channel and target information for message delivery.\n */\nexport interface DeliveryContext {\n channel?: string;\n accountId?: string;\n to?: string;\n threadId?: string | number;\n groupId?: string;\n groupChannel?: string;\n groupSpace?: string;\n}\n\n/**\n * Outcome of a subagent run.\n */\nexport interface SubagentRunOutcome {\n status: \"ok\" | \"error\" | \"timeout\" | \"unknown\";\n error?: string;\n}\n\n/**\n * Record tracking a subagent run's lifecycle.\n */\nexport interface SubagentRunRecord {\n /** Unique run identifier */\n runId: string;\n /** The subagent's session key / room identifier */\n childSessionKey: string;\n /** The parent session that spawned this subagent */\n requesterSessionKey: string;\n /** Delivery context for announcing results */\n requesterOrigin?: DeliveryContext;\n /** Human-readable display key for the requester */\n requesterDisplayKey: string;\n /** The task description given to the subagent */\n task: string;\n /** Cleanup behavior after completion */\n cleanup: \"delete\" | \"keep\";\n /** Optional label for identification */\n label?: string;\n /** When the run was registered */\n createdAt: number;\n /** When execution actually started */\n startedAt?: number;\n /** When execution ended */\n endedAt?: number;\n /** Final outcome */\n outcome?: SubagentRunOutcome;\n /** When to archive/delete this record */\n archiveAtMs?: number;\n /** Whether cleanup has completed */\n cleanupCompletedAt?: number;\n /** Whether cleanup is in progress */\n cleanupHandled?: boolean;\n /** Eliza room ID associated with this subagent */\n roomId?: UUID;\n /** Eliza world ID for context */\n worldId?: UUID;\n}\n\n/**\n * Parameters for spawning a subagent.\n */\nexport interface SpawnSubagentParams {\n /** The task to execute */\n task: string;\n /** Optional label for identification */\n label?: string;\n /** Target agent ID (defaults to current agent) */\n agentId?: string;\n /** Model override (e.g., \"anthropic/claude-3-sonnet\") */\n model?: string;\n /** Thinking level override */\n thinking?: string;\n /** Timeout in seconds (0 = no timeout) */\n runTimeoutSeconds?: number;\n /** Cleanup behavior after completion */\n cleanup?: \"delete\" | \"keep\";\n}\n\n/**\n * Result of spawning a subagent.\n */\nexport interface SpawnSubagentResult {\n status: \"accepted\" | \"forbidden\" | \"error\";\n childSessionKey?: string;\n childRoomId?: UUID;\n runId?: string;\n modelApplied?: boolean;\n warning?: string;\n error?: string;\n}\n\n/**\n * Parameters for sending a message to another agent/session.\n */\nexport interface SendToAgentParams {\n /** Target session key or room ID */\n sessionKey?: string;\n /** Target by label (alternative to sessionKey) */\n label?: string;\n /** Target agent ID (when using label) */\n agentId?: string;\n /** The message to send */\n message: string;\n /** Timeout in seconds */\n timeoutSeconds?: number;\n}\n\n/**\n * Result of sending a message to another agent.\n */\nexport interface SendToAgentResult {\n status: \"ok\" | \"accepted\" | \"timeout\" | \"forbidden\" | \"error\";\n runId: string;\n sessionKey?: string;\n reply?: string;\n delivery?: { status: string; mode: string };\n error?: string;\n}\n\n/**\n * Agent-to-agent communication policy.\n */\nexport interface AgentToAgentPolicy {\n enabled: boolean;\n allowRules: Array<{\n source: string | \"*\";\n target: string | \"*\";\n }>;\n isAllowed(sourceAgentId: string, targetAgentId: string): boolean;\n}\n\n/**\n * Configuration for subagent behavior.\n * Stored in Character.settings.subagents or world metadata.\n */\nexport interface SubagentConfig {\n /** Allow subagent spawning */\n enabled?: boolean;\n /** Default model for subagents */\n model?: string;\n /** Default thinking level */\n thinking?: string;\n /** Timeout in seconds */\n timeoutSeconds?: number;\n /** Allowed agent IDs for cross-agent spawning (* = all) */\n allowAgents?: string[];\n /** Minutes before archiving completed subagent records */\n archiveAfterMinutes?: number;\n}\n\n/**\n * Event types emitted by the subagent system.\n */\nexport const SubagentEventType = {\n /** Subagent spawn requested */\n SPAWN_REQUESTED: \"SUBAGENT_SPAWN_REQUESTED\",\n /** Subagent run started */\n RUN_STARTED: \"SUBAGENT_RUN_STARTED\",\n /** Subagent run completed */\n RUN_COMPLETED: \"SUBAGENT_RUN_COMPLETED\",\n /** Subagent run failed */\n RUN_FAILED: \"SUBAGENT_RUN_FAILED\",\n /** Subagent run timed out */\n RUN_TIMEOUT: \"SUBAGENT_RUN_TIMEOUT\",\n /** Subagent announcement sent */\n ANNOUNCE_SENT: \"SUBAGENT_ANNOUNCE_SENT\",\n /** Agent-to-agent message sent */\n A2A_MESSAGE_SENT: \"A2A_MESSAGE_SENT\",\n /** Agent-to-agent message received */\n A2A_MESSAGE_RECEIVED: \"A2A_MESSAGE_RECEIVED\",\n} as const;\n\nexport type SubagentEventType = (typeof SubagentEventType)[keyof typeof SubagentEventType];\n\n/**\n * Payload for subagent events.\n */\nexport interface SubagentEventPayload {\n runId: string;\n childSessionKey?: string;\n childRoomId?: UUID;\n requesterSessionKey?: string;\n requesterRoomId?: UUID;\n task?: string;\n label?: string;\n status?: string;\n outcome?: SubagentRunOutcome;\n error?: string;\n startedAt?: number;\n endedAt?: number;\n durationMs?: number;\n}\n\n/**\n * Metadata stored on a room to track subagent context.\n */\nexport interface SubagentRoomMetadata {\n /** Indicates this room is for a subagent */\n isSubagent: true;\n /** The subagent's session key */\n sessionKey: string;\n /** Parent room that spawned this subagent */\n parentRoomId?: UUID;\n /** Parent session key */\n parentSessionKey?: string;\n /** The task this subagent is executing */\n task?: string;\n /** Label for identification */\n label?: string;\n /** When the subagent was spawned */\n spawnedAt: number;\n /** Cleanup behavior */\n cleanup: \"delete\" | \"keep\";\n}\n"
|
|
24
24
|
],
|
|
25
|
-
"mappings": "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",
|
|
26
|
-
"debugId": "
|
|
25
|
+
"mappings": "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",
|
|
26
|
+
"debugId": "D58B592C4A9AA05064756E2164756E21",
|
|
27
27
|
"names": []
|
|
28
28
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subagent-service.d.ts","sourceRoot":"","sources":["../../../src/services/subagent-service.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,aAAa,
|
|
1
|
+
{"version":3,"file":"subagent-service.d.ts","sourceRoot":"","sources":["../../../src/services/subagent-service.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,aAAa,EAGlB,OAAO,EACP,KAAK,IAAI,EACV,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EACV,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,EACnB,cAAc,EACd,oBAAoB,EACpB,iBAAiB,EAEjB,iBAAiB,EAClB,MAAM,sBAAsB,CAAC;AAY9B,KAAK,iBAAiB,GAAG,MAAM,GAAG,iBAAiB,CAAC;AAEpD;;;;;GAKG;AACH,qBAAa,eAAgB,SAAQ,OAAO;IAC1C,MAAM,CAAC,WAAW,SAAc;IAChC,qBAAqB,SAA6D;IAElF,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsB;IAC9C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAwC;IACrE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsC;IACjE,OAAO,CAAC,OAAO,CAA+B;IAC9C,OAAO,CAAC,WAAW,CAAS;WAEf,KAAK,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;IAMtD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAuBjC;;OAEG;IACH,SAAS,IAAI,cAAc;IAc3B;;OAEG;IACH,qBAAqB,IAAI,kBAAkB;IA0C3C;;;;;OAKG;IACG,aAAa,CACjB,MAAM,EAAE,mBAAmB,EAC3B,gBAAgB,EAAE;QAChB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,MAAM,CAAC,EAAE,IAAI,CAAC;QACd,MAAM,CAAC,EAAE,eAAe,CAAC;KAC1B,GACA,OAAO,CAAC,mBAAmB,CAAC;IAgK/B;;OAEG;YACW,kBAAkB;IAuChC;;OAEG;YACW,iBAAiB;IAwB/B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAwB7B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA4B3B;;OAEG;YACW,cAAc;IA+B5B;;OAEG;YACW,gBAAgB;IAkB9B;;OAEG;YACW,sBAAsB;IAoHpC;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAyDjC;;OAEG;IACG,WAAW,CACf,MAAM,EAAE,iBAAiB,EACzB,gBAAgB,EAAE;QAChB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,MAAM,CAAC,EAAE,IAAI,CAAC;KACf,GACA,OAAO,CAAC,iBAAiB,CAAC;IAyL7B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAqBhC;;OAEG;IACH,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAI5D;;;;;;OAMG;IACH,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IA6CtF;;OAEG;IACH,gBAAgB,CAAC,mBAAmB,CAAC,EAAE,MAAM,GAAG,iBAAiB,EAAE;IAQnE;;OAEG;IACH,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAazC,EAAE,CAAC,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,IAAI,GAAG,IAAI;IAIpF,GAAG,CAAC,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,IAAI,GAAG,IAAI;IAIrF,OAAO,CAAC,iBAAiB;IASzB,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,YAAY;IASd,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAa5B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/utils/session.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAG9E,OAAO,EACL,kBAAkB,EAElB,wBAAwB,EACxB,wBAAwB,EACxB,oBAAoB,EACpB,oBAAoB,EACpB,uBAAuB,EACvB,wBAAwB,EAExB,kBAAkB,EAElB,qBAAqB,EACrB,2BAA2B,EAC3B,kBAAkB,EAClB,qBAAqB,EACrB,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,oBAAoB,IAAI,wBAAwB,EAChD,mBAAmB,EACnB,eAAe,EAEf,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,IAAI,oBAAoB,EACxC,gBAAgB,EAChB,oBAAoB,EACpB,4BAA4B,EAC5B,uBAAuB,EACvB,8BAA8B,EAC9B,4BAA4B,EAE5B,eAAe,EACf,gBAAgB,EAChB,6BAA6B,EAC7B,wBAAwB,EACxB,KAAK,sBAAsB,EAE3B,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,mBAAmB,EACnB,KAAK,YAAY,EACjB,gBAAgB,EAChB,wBAAwB,EACxB,sBAAsB,EACtB,kBAAkB,EAClB,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,eAAe,CAAC;AAEvB;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAa9C;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAI7E;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAY9D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,gBAAgB,CAwDpE;AAwBD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAG5F;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAExD;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAGhE;AAED;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAGvE;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGhE;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,CAAC,EAAE,eAAe,GAAG,IAAI,GAC/B,eAAe,GAAG,SAAS,CAsC7B;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,CAAC,EAAE,eAAe,EACzB,SAAS,CAAC,EAAE,eAAe,GAC1B,eAAe,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/utils/session.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAG9E,OAAO,EACL,kBAAkB,EAElB,wBAAwB,EACxB,wBAAwB,EACxB,oBAAoB,EACpB,oBAAoB,EACpB,uBAAuB,EACvB,wBAAwB,EAExB,kBAAkB,EAElB,qBAAqB,EACrB,2BAA2B,EAC3B,kBAAkB,EAClB,qBAAqB,EACrB,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,oBAAoB,IAAI,wBAAwB,EAChD,mBAAmB,EACnB,eAAe,EAEf,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,IAAI,oBAAoB,EACxC,gBAAgB,EAChB,oBAAoB,EACpB,4BAA4B,EAC5B,uBAAuB,EACvB,8BAA8B,EAC9B,4BAA4B,EAE5B,eAAe,EACf,gBAAgB,EAChB,6BAA6B,EAC7B,wBAAwB,EACxB,KAAK,sBAAsB,EAE3B,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,mBAAmB,EACnB,KAAK,YAAY,EACjB,gBAAgB,EAChB,wBAAwB,EACxB,sBAAsB,EACtB,kBAAkB,EAClB,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,eAAe,CAAC;AAEvB;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAa9C;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAI7E;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAY9D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,gBAAgB,CAwDpE;AAwBD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAG5F;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAExD;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAGhE;AAED;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAGvE;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGhE;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,CAAC,EAAE,eAAe,GAAG,IAAI,GAC/B,eAAe,GAAG,SAAS,CAsC7B;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,CAAC,EAAE,eAAe,EACzB,SAAS,CAAC,EAAE,eAAe,GAC1B,eAAe,GAAG,SAAS,CAoB7B;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAiBnE;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAWvD"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elizaos/plugin-agent-orchestrator",
|
|
3
3
|
"description": "Agent orchestration plugin for ElizaOS (task lifecycle + agent providers)",
|
|
4
|
-
"version": "2.0.0-alpha.
|
|
4
|
+
"version": "2.0.0-alpha.5",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"module": "dist/index.js",
|
|
@@ -59,5 +59,15 @@
|
|
|
59
59
|
},
|
|
60
60
|
"publishConfig": {
|
|
61
61
|
"access": "public"
|
|
62
|
+
},
|
|
63
|
+
"agentConfig": {
|
|
64
|
+
"pluginParameters": {
|
|
65
|
+
"ORCHESTRATOR_ACTIVE_PROVIDER": {
|
|
66
|
+
"type": "string",
|
|
67
|
+
"description": "Provider selection",
|
|
68
|
+
"required": false,
|
|
69
|
+
"sensitive": false
|
|
70
|
+
}
|
|
71
|
+
}
|
|
62
72
|
}
|
|
63
73
|
}
|