@elizaos/plugin-roblox 2.0.0-alpha.4 → 2.0.0-alpha.6

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.
@@ -1 +1 @@
1
- {"version":3,"file":"executeGameAction.d.ts","sourceRoot":"","sources":["../../actions/executeGameAction.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,MAAM,EASZ,MAAM,eAAe,CAAC;AAwIvB,QAAA,MAAM,iBAAiB,EAAE,MA8FxB,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
1
+ {"version":3,"file":"executeGameAction.d.ts","sourceRoot":"","sources":["../../actions/executeGameAction.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,MAAM,EASZ,MAAM,eAAe,CAAC;AAwIvB,QAAA,MAAM,iBAAiB,EAAE,MA2HxB,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"getPlayerInfo.d.ts","sourceRoot":"","sources":["../../actions/getPlayerInfo.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,MAAM,EASZ,MAAM,eAAe,CAAC;AA4DvB,QAAA,MAAM,aAAa,EAAE,MAoIpB,CAAC;AAEF,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"getPlayerInfo.d.ts","sourceRoot":"","sources":["../../actions/getPlayerInfo.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,MAAM,EASZ,MAAM,eAAe,CAAC;AA4DvB,QAAA,MAAM,aAAa,EAAE,MAiKpB,CAAC;AAEF,eAAe,aAAa,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"sendGameMessage.d.ts","sourceRoot":"","sources":["../../actions/sendGameMessage.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,MAAM,EASZ,MAAM,eAAe,CAAC;AAuCvB,QAAA,MAAM,eAAe,EAAE,MA+FtB,CAAC;AAaF,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"sendGameMessage.d.ts","sourceRoot":"","sources":["../../actions/sendGameMessage.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,MAAM,EASZ,MAAM,eAAe,CAAC;AAuCvB,QAAA,MAAM,eAAe,EAAE,MA4HtB,CAAC;AAaF,eAAe,eAAe,CAAC"}
package/dist/index.js CHANGED
@@ -178,10 +178,31 @@ var executeGameAction = {
178
178
  similes: [],
179
179
  description: "Execute an action in the connected Roblox game.",
180
180
  examples: executeGameActionExamples,
181
- validate: async (runtime) => {
182
- const apiKey = runtime.getSetting("ROBLOX_API_KEY");
183
- const universeId = runtime.getSetting("ROBLOX_UNIVERSE_ID");
184
- return Boolean(apiKey && universeId);
181
+ validate: async (runtime, message, state, options) => {
182
+ const __avTextRaw = typeof message?.content?.text === "string" ? message.content.text : "";
183
+ const __avText = __avTextRaw.toLowerCase();
184
+ const __avKeywords = ["execute", "roblox"];
185
+ const __avKeywordOk = __avKeywords.length > 0 && __avKeywords.some((kw) => kw.length > 0 && __avText.includes(kw));
186
+ const __avRegex = /\b(?:execute|roblox)\b/i;
187
+ const __avRegexOk = __avRegex.test(__avText);
188
+ const __avSource = String(message?.content?.source ?? message?.source ?? "");
189
+ const __avExpectedSource = "";
190
+ const __avSourceOk = __avExpectedSource ? __avSource === __avExpectedSource : Boolean(__avSource || state || runtime?.agentId || runtime?.getService);
191
+ const __avOptions = options && typeof options === "object" ? options : {};
192
+ const __avInputOk = __avText.trim().length > 0 || Object.keys(__avOptions).length > 0 || Boolean(message?.content && typeof message.content === "object");
193
+ if (!(__avKeywordOk && __avRegexOk && __avSourceOk && __avInputOk)) {
194
+ return false;
195
+ }
196
+ const __avLegacyValidate = async (runtime2) => {
197
+ const apiKey = runtime2.getSetting("ROBLOX_API_KEY");
198
+ const universeId = runtime2.getSetting("ROBLOX_UNIVERSE_ID");
199
+ return Boolean(apiKey && universeId);
200
+ };
201
+ try {
202
+ return Boolean(await __avLegacyValidate(runtime, message, state, options));
203
+ } catch {
204
+ return false;
205
+ }
185
206
  },
186
207
  handler: async (runtime, message, state, _options, callback) => {
187
208
  try {
@@ -308,9 +329,30 @@ var getPlayerInfo = {
308
329
  similes: [],
309
330
  description: "Fetch Roblox player information by username or user id.",
310
331
  examples: getPlayerInfoExamples,
311
- validate: async (runtime) => {
312
- const apiKey = runtime.getSetting("ROBLOX_API_KEY");
313
- return Boolean(apiKey);
332
+ validate: async (runtime, message, state, options) => {
333
+ const __avTextRaw = typeof message?.content?.text === "string" ? message.content.text : "";
334
+ const __avText = __avTextRaw.toLowerCase();
335
+ const __avKeywords = ["get", "roblox", "player"];
336
+ const __avKeywordOk = __avKeywords.length > 0 && __avKeywords.some((kw) => kw.length > 0 && __avText.includes(kw));
337
+ const __avRegex = /\b(?:get|roblox|player)\b/i;
338
+ const __avRegexOk = __avRegex.test(__avText);
339
+ const __avSource = String(message?.content?.source ?? message?.source ?? "");
340
+ const __avExpectedSource = "";
341
+ const __avSourceOk = __avExpectedSource ? __avSource === __avExpectedSource : Boolean(__avSource || state || runtime?.agentId || runtime?.getService);
342
+ const __avOptions = options && typeof options === "object" ? options : {};
343
+ const __avInputOk = __avText.trim().length > 0 || Object.keys(__avOptions).length > 0 || Boolean(message?.content && typeof message.content === "object");
344
+ if (!(__avKeywordOk && __avRegexOk && __avSourceOk && __avInputOk)) {
345
+ return false;
346
+ }
347
+ const __avLegacyValidate = async (runtime2) => {
348
+ const apiKey = runtime2.getSetting("ROBLOX_API_KEY");
349
+ return Boolean(apiKey);
350
+ };
351
+ try {
352
+ return Boolean(await __avLegacyValidate(runtime, message, state, options));
353
+ } catch {
354
+ return false;
355
+ }
314
356
  },
315
357
  handler: async (runtime, message, state, _options, callback) => {
316
358
  try {
@@ -460,10 +502,31 @@ var sendGameMessage = {
460
502
  similes: [],
461
503
  description: "Send a message to players in the Roblox game.",
462
504
  examples: sendGameMessageExamples,
463
- validate: async (runtime) => {
464
- const apiKey = runtime.getSetting("ROBLOX_API_KEY");
465
- const universeId = runtime.getSetting("ROBLOX_UNIVERSE_ID");
466
- return Boolean(apiKey && universeId);
505
+ validate: async (runtime, message, state, options) => {
506
+ const __avTextRaw = typeof message?.content?.text === "string" ? message.content.text : "";
507
+ const __avText = __avTextRaw.toLowerCase();
508
+ const __avKeywords = ["send", "roblox", "message"];
509
+ const __avKeywordOk = __avKeywords.length > 0 && __avKeywords.some((kw) => kw.length > 0 && __avText.includes(kw));
510
+ const __avRegex = /\b(?:send|roblox|message)\b/i;
511
+ const __avRegexOk = __avRegex.test(__avText);
512
+ const __avSource = String(message?.content?.source ?? message?.source ?? "");
513
+ const __avExpectedSource = "";
514
+ const __avSourceOk = __avExpectedSource ? __avSource === __avExpectedSource : Boolean(__avSource || state || runtime?.agentId || runtime?.getService);
515
+ const __avOptions = options && typeof options === "object" ? options : {};
516
+ const __avInputOk = __avText.trim().length > 0 || Object.keys(__avOptions).length > 0 || Boolean(message?.content && typeof message.content === "object");
517
+ if (!(__avKeywordOk && __avRegexOk && __avSourceOk && __avInputOk)) {
518
+ return false;
519
+ }
520
+ const __avLegacyValidate = async (runtime2) => {
521
+ const apiKey = runtime2.getSetting("ROBLOX_API_KEY");
522
+ const universeId = runtime2.getSetting("ROBLOX_UNIVERSE_ID");
523
+ return Boolean(apiKey && universeId);
524
+ };
525
+ try {
526
+ return Boolean(await __avLegacyValidate(runtime, message, state, options));
527
+ } catch {
528
+ return false;
529
+ }
467
530
  },
468
531
  handler: async (runtime, message, state, _options, callback) => {
469
532
  try {
@@ -1067,4 +1130,4 @@ export {
1067
1130
  RobloxApiError
1068
1131
  };
1069
1132
 
1070
- //# debugId=0663B7918D7036F064756E2164756E21
1133
+ //# debugId=740C50B5F8DE5EDA64756E2164756E21
package/dist/index.js.map CHANGED
@@ -4,18 +4,18 @@
4
4
  "sourcesContent": [
5
5
  "import type { UUID } from \"@elizaos/core\";\n\nexport const ROBLOX_SERVICE_NAME = \"roblox\";\nexport const ROBLOX_SOURCE = \"roblox\";\n\nexport type JsonPrimitive = string | number | boolean | null;\nexport type JsonValue = JsonPrimitive | JsonValue[] | { [key: string]: JsonValue };\nexport type JsonValueOrUndefined = JsonValue | undefined;\n\nexport interface RobloxConfig {\n apiKey: string;\n universeId: string;\n placeId?: string;\n webhookSecret?: string;\n messagingTopic: string;\n pollInterval: number;\n dryRun: boolean;\n}\n\nexport interface RobloxUser {\n id: number;\n username: string;\n displayName: string;\n avatarUrl?: string;\n createdAt?: Date;\n isBanned?: boolean;\n}\n\nexport interface RobloxPlayerSession {\n user: RobloxUser;\n jobId: string;\n placeId: string;\n joinedAt: Date;\n}\n\nexport interface RobloxGameMessage {\n id: string;\n user: RobloxUser;\n content: string;\n jobId: string;\n placeId: string;\n timestamp: Date;\n context?: Record<string, string>;\n}\n\nexport interface RobloxResponse {\n content: string;\n action?: RobloxGameAction;\n flagged?: boolean;\n}\n\nexport interface RobloxGameAction {\n name: string;\n parameters: Record<string, string | number | boolean | null>;\n targetPlayerIds?: number[];\n}\n\nexport interface DataStoreEntry<T = JsonValue> {\n key: string;\n value: T;\n version: string;\n createdAt: Date;\n updatedAt: Date;\n}\n\nexport type MessagingServiceDataValue = JsonValueOrUndefined;\n\nexport interface MessagingServiceMessage {\n topic: string;\n data: Record<string, MessagingServiceDataValue>;\n sender?: {\n agentId: UUID;\n agentName: string;\n };\n}\n\nexport enum RobloxEventType {\n PLAYER_JOINED = \"roblox:player_joined\",\n PLAYER_LEFT = \"roblox:player_left\",\n PLAYER_MESSAGE = \"roblox:player_message\",\n GAME_EVENT = \"roblox:game_event\",\n WEBHOOK_RECEIVED = \"roblox:webhook_received\",\n}\n\nexport interface RobloxEventTypes {\n [RobloxEventType.PLAYER_JOINED]: {\n session: RobloxPlayerSession;\n };\n [RobloxEventType.PLAYER_LEFT]: {\n session: RobloxPlayerSession;\n duration: number;\n };\n [RobloxEventType.PLAYER_MESSAGE]: {\n message: RobloxGameMessage;\n };\n [RobloxEventType.GAME_EVENT]: {\n eventName: string;\n data: Record<string, string | number | boolean | null>;\n triggeredBy?: RobloxUser;\n };\n [RobloxEventType.WEBHOOK_RECEIVED]: {\n type: string;\n payload: Record<string, string | number | boolean | null>;\n };\n}\n\nexport interface RobloxServerInfo {\n jobId: string;\n placeId: string;\n playerCount: number;\n maxPlayers: number;\n region?: string;\n uptime?: number;\n}\n\nexport interface RobloxExperienceInfo {\n universeId: string;\n name: string;\n description?: string;\n creator: {\n id: number;\n type: \"User\" | \"Group\";\n name: string;\n };\n playing?: number;\n visits?: number;\n rootPlaceId: string;\n}\n\nexport type ManagerHealthStatus =\n | {\n status: \"healthy\";\n universeId: string;\n experienceName: string;\n playing?: number;\n }\n | {\n status: \"unhealthy\";\n error: string;\n };\n",
6
6
  "import type { IAgentRuntime, TestCase, TestSuite } from \"@elizaos/core\";\nimport type { RobloxService } from \"../services/RobloxService\";\nimport { ROBLOX_SERVICE_NAME } from \"../types\";\n\nexport class RobloxTestSuite implements TestSuite {\n name = \"roblox\";\n description = \"Test suite for Roblox plugin\";\n\n tests: TestCase[] = [\n {\n name: \"Service initialization\",\n fn: async (runtime: IAgentRuntime) => {\n const service = runtime.getService<RobloxService>(ROBLOX_SERVICE_NAME);\n\n const apiKey = runtime.getSetting(\"ROBLOX_API_KEY\");\n const universeId = runtime.getSetting(\"ROBLOX_UNIVERSE_ID\");\n\n if (apiKey && universeId) {\n if (!service) {\n throw new Error(\n \"Roblox service should be initialized when API key and Universe ID are provided\"\n );\n }\n } else {\n runtime.logger.info(\"Roblox service not initialized - missing configuration (expected)\");\n }\n },\n },\n {\n name: \"Configuration validation\",\n fn: async (runtime: IAgentRuntime) => {\n const apiKey = runtime.getSetting(\"ROBLOX_API_KEY\");\n const universeId = runtime.getSetting(\"ROBLOX_UNIVERSE_ID\");\n\n if (apiKey && universeId) {\n const service = runtime.getService<RobloxService>(ROBLOX_SERVICE_NAME);\n if (!service) {\n throw new Error(\"Service should exist when properly configured\");\n }\n\n const client = service.getClient(runtime.agentId);\n if (!client) {\n throw new Error(\"Client should exist for agent\");\n }\n\n const config = client.getConfig();\n if (config.universeId !== universeId) {\n throw new Error(\"Universe ID mismatch in config\");\n }\n }\n },\n },\n {\n name: \"Actions registered\",\n fn: async (runtime: IAgentRuntime) => {\n runtime.logger.info(\"Roblox actions registration check passed\");\n },\n },\n ];\n}\n",
7
- "import {\n type Action,\n type ActionExample,\n type ActionResult,\n type HandlerCallback,\n type HandlerOptions,\n type IAgentRuntime,\n logger,\n type Memory,\n type State,\n} from \"@elizaos/core\";\nimport type { RobloxService } from \"../services/RobloxService\";\nimport { ROBLOX_SERVICE_NAME } from \"../types\";\n\nconst actionName = \"EXECUTE_ROBLOX_ACTION\";\n\nconst executeGameActionExamples: ActionExample[][] = [\n [\n {\n name: actionName,\n content: {\n text: \"Start a fireworks show in the game\",\n },\n },\n {\n name: actionName,\n content: {\n text: \"I'll trigger the fireworks show for everyone in the game!\",\n action: \"EXECUTE_ROBLOX_ACTION\",\n },\n },\n ],\n [\n {\n name: \"{{user1}}\",\n content: {\n text: \"Give player456 100 coins as a reward\",\n },\n },\n {\n name: \"{{agentName}}\",\n content: {\n text: \"I'll give player456 100 coins right away!\",\n action: \"EXECUTE_ROBLOX_ACTION\",\n },\n },\n ],\n [\n {\n name: \"{{user1}}\",\n content: {\n text: \"Teleport everyone to the lobby\",\n },\n },\n {\n name: \"{{agentName}}\",\n content: {\n text: \"Teleporting all players to the lobby now!\",\n action: \"EXECUTE_ROBLOX_ACTION\",\n },\n },\n ],\n];\n\ninterface GameActionConfig {\n name: string;\n patterns: RegExp[];\n extractParams: (match: RegExpMatchArray) => Record<string, string | number>;\n}\n\nconst KNOWN_ACTIONS: GameActionConfig[] = [\n {\n name: \"move_npc\",\n patterns: [\n /(?:move|walk)\\s+(?:the\\s+)?(?:npc|bot|agent)?\\s*(?:to|towards)\\s+(?:the\\s+)?(\\w+)/i,\n /(?:move|walk)\\s+to\\s+\\(?(-?\\d+(?:\\.\\d+)?)\\s*,\\s*(-?\\d+(?:\\.\\d+)?)\\s*,\\s*(-?\\d+(?:\\.\\d+)?)\\)?/i,\n ],\n extractParams: (match): Record<string, string | number> => {\n if (match.length >= 4 && match[1] && match[2] && match[3]) {\n return {\n x: Number.parseFloat(match[1]),\n y: Number.parseFloat(match[2]),\n z: Number.parseFloat(match[3]),\n };\n }\n return { waypoint: match[1] || \"\" };\n },\n },\n {\n name: \"give_coins\",\n patterns: [/give\\s+(?:player\\s*)?(\\d+)\\s+(\\d+)\\s+coins?/i],\n extractParams: (match) => ({\n playerId: parseInt(match[1], 10),\n amount: parseInt(match[2], 10),\n }),\n },\n {\n name: \"teleport\",\n patterns: [/teleport\\s+(?:everyone|all)\\s+to\\s+(?:the\\s+)?(\\w+)/i],\n extractParams: (match) => ({\n destination: match[1],\n }),\n },\n {\n name: \"spawn_entity\",\n patterns: [/spawn\\s+(?:a\\s+)?(\\w+)\\s+at\\s+(\\w+)/i],\n extractParams: (match) => ({\n entityType: match[1],\n location: match[2],\n }),\n },\n {\n name: \"start_event\",\n patterns: [/start\\s+(?:a\\s+)?(\\w+)\\s+(?:show|event|celebration)/i],\n extractParams: (match) => ({\n eventType: match[1],\n }),\n },\n];\n\nfunction parseGameAction(\n message: string\n): { actionName: string; parameters: Record<string, string | number> } | null {\n for (const action of KNOWN_ACTIONS) {\n for (const pattern of action.patterns) {\n const match = message.match(pattern);\n if (match) {\n return {\n actionName: action.name,\n parameters: action.extractParams(match),\n };\n }\n }\n }\n\n const genericMatch = message.match(/(?:execute|run|do)\\s+(\\w+)/i);\n if (genericMatch) {\n return {\n actionName: genericMatch[1].toLowerCase(),\n parameters: {},\n };\n }\n\n return null;\n}\n\nconst executeGameAction: Action = {\n name: actionName,\n similes: [],\n description: \"Execute an action in the connected Roblox game.\",\n examples: executeGameActionExamples,\n\n validate: async (runtime: IAgentRuntime): Promise<boolean> => {\n const apiKey = runtime.getSetting(\"ROBLOX_API_KEY\");\n const universeId = runtime.getSetting(\"ROBLOX_UNIVERSE_ID\");\n return Boolean(apiKey && universeId);\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n _options?: HandlerOptions,\n callback?: HandlerCallback\n ): Promise<ActionResult | undefined> => {\n try {\n const service = runtime.getService<RobloxService>(ROBLOX_SERVICE_NAME);\n if (!service) {\n logger.error(\"Roblox service not found\");\n if (callback) {\n callback({\n text: \"Roblox service not available.\",\n action: \"EXECUTE_ROBLOX_ACTION\",\n });\n }\n return {\n success: false,\n error: \"Roblox service not found\",\n };\n }\n\n const messageContent =\n (state?.message as string) || (message.content as { text?: string }).text || \"\";\n\n const parsedAction = parseGameAction(messageContent);\n\n if (!parsedAction) {\n logger.warn(\"Could not parse game action from message\");\n if (callback) {\n callback({\n text: \"Could not parse action from message.\",\n action: \"EXECUTE_ROBLOX_ACTION\",\n });\n }\n return {\n success: false,\n error: \"Could not parse game action from message\",\n };\n }\n\n const { actionName, parameters } = parsedAction;\n\n const playerIdMatch = messageContent.match(/player\\s*(\\d+)/i);\n const targetPlayerIds = playerIdMatch ? [parseInt(playerIdMatch[1], 10)] : undefined;\n\n await service.executeAction(runtime.agentId, actionName, parameters, targetPlayerIds);\n\n logger.info({ actionName, parameters, targetPlayerIds }, \"Executed Roblox game action\");\n\n if (callback) {\n callback({\n text: `I've triggered the \"${actionName}\" action in the game.`,\n action: \"EXECUTE_ROBLOX_ACTION\",\n });\n }\n\n return {\n success: true,\n text: `Executed \"${actionName}\" action in the game`,\n data: {\n actionName,\n parameters: parameters as Record<string, string | number | boolean | null | undefined>,\n targetPlayerIds: targetPlayerIds || undefined,\n },\n };\n } catch (error) {\n logger.error({ error }, \"Failed to execute Roblox action\");\n const errorMessage = error instanceof Error ? error.message : \"Unknown error\";\n if (callback) {\n callback({\n text: \"Error executing action.\",\n action: \"EXECUTE_ROBLOX_ACTION\",\n });\n }\n return {\n success: false,\n error: errorMessage,\n };\n }\n },\n};\n\nexport default executeGameAction;\n",
8
- "import {\n type Action,\n type ActionExample,\n type ActionResult,\n type HandlerCallback,\n type HandlerOptions,\n type IAgentRuntime,\n logger,\n type Memory,\n type State,\n} from \"@elizaos/core\";\nimport type { RobloxService } from \"../services/RobloxService\";\nimport { ROBLOX_SERVICE_NAME, type RobloxUser } from \"../types\";\n\nconst actionName = \"GET_ROBLOX_PLAYER\";\n\nconst getPlayerInfoExamples: ActionExample[][] = [\n [\n {\n name: actionName,\n content: {\n text: \"Who is player 12345678?\",\n },\n },\n {\n name: actionName,\n content: {\n text: \"Let me look up that player's information for you.\",\n action: \"GET_ROBLOX_PLAYER\",\n },\n },\n ],\n [\n {\n name: \"{{user1}}\",\n content: {\n text: \"Look up the Roblox user JohnDoe123\",\n },\n },\n {\n name: \"{{agentName}}\",\n content: {\n text: \"I'll find the information for JohnDoe123.\",\n action: \"GET_ROBLOX_PLAYER\",\n },\n },\n ],\n];\n\nfunction extractUserIdentifier(\n message: string\n): { type: \"id\"; value: number } | { type: \"username\"; value: string } | null {\n const idMatch = message.match(/\\b(?:player|user|id)\\s*[:#]?\\s*(\\d{5,})\\b/i);\n if (idMatch) {\n return { type: \"id\", value: parseInt(idMatch[1], 10) };\n }\n\n const usernameMatch = message.match(\n /\\b(?:user(?:name)?|player)\\s*[:#]?\\s*([A-Za-z0-9_]{3,20})\\b/i\n );\n if (usernameMatch) {\n const username = usernameMatch[1];\n if (!/^\\d+$/.test(username)) {\n return { type: \"username\", value: username };\n }\n }\n\n return null;\n}\n\nconst getPlayerInfo: Action = {\n name: actionName,\n similes: [],\n description: \"Fetch Roblox player information by username or user id.\",\n examples: getPlayerInfoExamples,\n\n validate: async (runtime: IAgentRuntime): Promise<boolean> => {\n const apiKey = runtime.getSetting(\"ROBLOX_API_KEY\");\n return Boolean(apiKey);\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n _options?: HandlerOptions,\n callback?: HandlerCallback\n ): Promise<ActionResult | undefined> => {\n try {\n const service = runtime.getService<RobloxService>(ROBLOX_SERVICE_NAME);\n if (!service) {\n logger.error(\"Roblox service not found\");\n if (callback) {\n callback({\n text: \"I couldn't connect to the Roblox service.\",\n action: \"GET_ROBLOX_PLAYER\",\n });\n }\n return {\n success: false,\n error: \"Roblox service not found\",\n };\n }\n\n const client = service.getClient(runtime.agentId);\n if (!client) {\n logger.error(\"Roblox client not found for agent\");\n if (callback) {\n callback({\n text: \"The Roblox client isn't available right now.\",\n action: \"GET_ROBLOX_PLAYER\",\n });\n }\n return {\n success: false,\n error: \"Roblox client not found for agent\",\n };\n }\n\n const messageContent =\n (state?.message as string) || (message.content as { text?: string }).text || \"\";\n\n const identifier = extractUserIdentifier(messageContent);\n\n if (!identifier) {\n logger.warn(\"Could not extract user identifier from message\");\n if (callback) {\n callback({\n text: \"I need a player ID or username to look up. Please provide one.\",\n action: \"GET_ROBLOX_PLAYER\",\n });\n }\n return {\n success: false,\n error: \"Could not extract user identifier from message\",\n };\n }\n\n let user: RobloxUser | null;\n if (identifier.type === \"id\") {\n user = await client.getUserById(identifier.value);\n } else {\n user = await client.getUserByUsername(identifier.value);\n }\n\n if (!user) {\n if (callback) {\n callback({\n text: `I couldn't find a Roblox user with that ${identifier.type === \"id\" ? \"ID\" : \"username\"}.`,\n action: \"GET_ROBLOX_PLAYER\",\n });\n }\n return {\n success: true,\n text: `User not found with ${identifier.type === \"id\" ? \"ID\" : \"username\"}: ${identifier.value}`,\n };\n }\n\n const avatarUrl = await client.getAvatarUrl(user.id);\n user.avatarUrl = avatarUrl;\n\n logger.info({ userId: user.id, username: user.username }, \"Found Roblox user\");\n\n if (callback) {\n const createdDate = user.createdAt ? user.createdAt.toLocaleDateString() : \"Unknown\";\n const bannedStatus = user.isBanned ? \" (Banned)\" : \"\";\n\n callback({\n text: `**${user.displayName}** (@${user.username})${bannedStatus}\n- User ID: ${user.id}\n- Account created: ${createdDate}`,\n action: \"GET_ROBLOX_PLAYER\",\n });\n }\n\n return {\n success: true,\n text: `Found Roblox user: ${user.displayName} (@${user.username})`,\n data: {\n userId: user.id,\n username: user.username,\n displayName: user.displayName,\n avatarUrl: avatarUrl || undefined,\n isBanned: user.isBanned,\n createdAt: user.createdAt ? user.createdAt.toISOString() : undefined,\n },\n };\n } catch (error) {\n logger.error({ error }, \"Failed to get Roblox player info\");\n const errorMessage = error instanceof Error ? error.message : \"Unknown error\";\n if (callback) {\n callback({\n text: \"I encountered an error looking up that player. Please try again.\",\n action: \"GET_ROBLOX_PLAYER\",\n });\n }\n return {\n success: false,\n error: errorMessage,\n };\n }\n },\n};\n\nexport default getPlayerInfo;\n",
9
- "import {\n type Action,\n type ActionExample,\n type ActionResult,\n type HandlerCallback,\n type HandlerOptions,\n type IAgentRuntime,\n logger,\n type Memory,\n type State,\n} from \"@elizaos/core\";\nimport type { RobloxService } from \"../services/RobloxService\";\nimport { ROBLOX_SERVICE_NAME } from \"../types\";\n\nconst actionName = \"SEND_ROBLOX_MESSAGE\";\n\nconst sendGameMessageExamples: ActionExample[][] = [\n [\n {\n name: actionName,\n content: {\n text: \"Tell everyone in the game that there's a special event happening\",\n },\n },\n {\n name: actionName,\n content: {\n text: \"I'll announce the special event to all players in the game!\",\n action: \"SEND_ROBLOX_MESSAGE\",\n },\n },\n ],\n [\n {\n name: \"{{user1}}\",\n content: {\n text: \"Send a message to player123 welcoming them to the game\",\n },\n },\n {\n name: \"{{agentName}}\",\n content: {\n text: \"I'll send a personalized welcome message to player123.\",\n action: \"SEND_ROBLOX_MESSAGE\",\n },\n },\n ],\n];\n\nconst sendGameMessage: Action = {\n name: actionName,\n similes: [],\n description: \"Send a message to players in the Roblox game.\",\n examples: sendGameMessageExamples,\n\n validate: async (runtime: IAgentRuntime): Promise<boolean> => {\n const apiKey = runtime.getSetting(\"ROBLOX_API_KEY\");\n const universeId = runtime.getSetting(\"ROBLOX_UNIVERSE_ID\");\n return Boolean(apiKey && universeId);\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n _options?: HandlerOptions,\n callback?: HandlerCallback\n ): Promise<ActionResult | undefined> => {\n try {\n const service = runtime.getService<RobloxService>(ROBLOX_SERVICE_NAME);\n if (!service) {\n logger.error(\"Roblox service not found\");\n if (callback) {\n callback({\n text: \"Roblox service not available.\",\n action: \"SEND_ROBLOX_MESSAGE\",\n });\n }\n return {\n success: false,\n error: \"Roblox service not found\",\n };\n }\n\n const messageContent =\n (state?.message as string) || (message.content as { text?: string }).text || \"\";\n\n if (!messageContent) {\n logger.warn(\"No message content to send\");\n if (callback) {\n callback({\n text: \"I need a message to send to the game.\",\n action: \"SEND_ROBLOX_MESSAGE\",\n });\n }\n return {\n success: false,\n error: \"No message content to send\",\n };\n }\n\n const targetPlayerIds = extractPlayerIds(messageContent);\n\n await service.sendMessage(runtime.agentId, messageContent, targetPlayerIds);\n\n logger.info(\n { targetPlayerIds, messageLength: messageContent.length },\n \"Sent message to Roblox game\"\n );\n\n if (callback) {\n const targetInfo =\n targetPlayerIds && targetPlayerIds.length > 0\n ? `to ${targetPlayerIds.length} specific player(s)`\n : \"to all players\";\n callback({\n text: `I've sent the message ${targetInfo} in the game.`,\n action: \"SEND_ROBLOX_MESSAGE\",\n });\n }\n\n return {\n success: true,\n text: `Sent message ${targetPlayerIds && targetPlayerIds.length > 0 ? `to ${targetPlayerIds.length} specific player(s)` : \"to all players\"} in the game`,\n data: {\n targetPlayerIds,\n messageLength: messageContent.length,\n },\n };\n } catch (error) {\n logger.error({ error }, \"Failed to send Roblox message\");\n const errorMessage = error instanceof Error ? error.message : \"Unknown error\";\n if (callback) {\n callback({\n text: \"Error sending message.\",\n action: \"SEND_ROBLOX_MESSAGE\",\n });\n }\n return {\n success: false,\n error: errorMessage,\n };\n }\n },\n};\n\nfunction extractPlayerIds(message: string): number[] | undefined {\n const playerIdPattern = /\\bplayer\\s*(\\d+)\\b/gi;\n const matches = [...message.matchAll(playerIdPattern)];\n\n if (matches.length > 0) {\n return matches.map((m) => parseInt(m[1], 10));\n }\n\n return undefined;\n}\n\nexport default sendGameMessage;\n",
7
+ "import {\n type Action,\n type ActionExample,\n type ActionResult,\n type HandlerCallback,\n type HandlerOptions,\n type IAgentRuntime,\n logger,\n type Memory,\n type State,\n} from \"@elizaos/core\";\nimport type { RobloxService } from \"../services/RobloxService\";\nimport { ROBLOX_SERVICE_NAME } from \"../types\";\n\nconst actionName = \"EXECUTE_ROBLOX_ACTION\";\n\nconst executeGameActionExamples: ActionExample[][] = [\n [\n {\n name: actionName,\n content: {\n text: \"Start a fireworks show in the game\",\n },\n },\n {\n name: actionName,\n content: {\n text: \"I'll trigger the fireworks show for everyone in the game!\",\n action: \"EXECUTE_ROBLOX_ACTION\",\n },\n },\n ],\n [\n {\n name: \"{{user1}}\",\n content: {\n text: \"Give player456 100 coins as a reward\",\n },\n },\n {\n name: \"{{agentName}}\",\n content: {\n text: \"I'll give player456 100 coins right away!\",\n action: \"EXECUTE_ROBLOX_ACTION\",\n },\n },\n ],\n [\n {\n name: \"{{user1}}\",\n content: {\n text: \"Teleport everyone to the lobby\",\n },\n },\n {\n name: \"{{agentName}}\",\n content: {\n text: \"Teleporting all players to the lobby now!\",\n action: \"EXECUTE_ROBLOX_ACTION\",\n },\n },\n ],\n];\n\ninterface GameActionConfig {\n name: string;\n patterns: RegExp[];\n extractParams: (match: RegExpMatchArray) => Record<string, string | number>;\n}\n\nconst KNOWN_ACTIONS: GameActionConfig[] = [\n {\n name: \"move_npc\",\n patterns: [\n /(?:move|walk)\\s+(?:the\\s+)?(?:npc|bot|agent)?\\s*(?:to|towards)\\s+(?:the\\s+)?(\\w+)/i,\n /(?:move|walk)\\s+to\\s+\\(?(-?\\d+(?:\\.\\d+)?)\\s*,\\s*(-?\\d+(?:\\.\\d+)?)\\s*,\\s*(-?\\d+(?:\\.\\d+)?)\\)?/i,\n ],\n extractParams: (match): Record<string, string | number> => {\n if (match.length >= 4 && match[1] && match[2] && match[3]) {\n return {\n x: Number.parseFloat(match[1]),\n y: Number.parseFloat(match[2]),\n z: Number.parseFloat(match[3]),\n };\n }\n return { waypoint: match[1] || \"\" };\n },\n },\n {\n name: \"give_coins\",\n patterns: [/give\\s+(?:player\\s*)?(\\d+)\\s+(\\d+)\\s+coins?/i],\n extractParams: (match) => ({\n playerId: parseInt(match[1], 10),\n amount: parseInt(match[2], 10),\n }),\n },\n {\n name: \"teleport\",\n patterns: [/teleport\\s+(?:everyone|all)\\s+to\\s+(?:the\\s+)?(\\w+)/i],\n extractParams: (match) => ({\n destination: match[1],\n }),\n },\n {\n name: \"spawn_entity\",\n patterns: [/spawn\\s+(?:a\\s+)?(\\w+)\\s+at\\s+(\\w+)/i],\n extractParams: (match) => ({\n entityType: match[1],\n location: match[2],\n }),\n },\n {\n name: \"start_event\",\n patterns: [/start\\s+(?:a\\s+)?(\\w+)\\s+(?:show|event|celebration)/i],\n extractParams: (match) => ({\n eventType: match[1],\n }),\n },\n];\n\nfunction parseGameAction(\n message: string\n): { actionName: string; parameters: Record<string, string | number> } | null {\n for (const action of KNOWN_ACTIONS) {\n for (const pattern of action.patterns) {\n const match = message.match(pattern);\n if (match) {\n return {\n actionName: action.name,\n parameters: action.extractParams(match),\n };\n }\n }\n }\n\n const genericMatch = message.match(/(?:execute|run|do)\\s+(\\w+)/i);\n if (genericMatch) {\n return {\n actionName: genericMatch[1].toLowerCase(),\n parameters: {},\n };\n }\n\n return null;\n}\n\nconst executeGameAction: Action = {\n name: actionName,\n similes: [],\n description: \"Execute an action in the connected Roblox game.\",\n examples: executeGameActionExamples,\n\n validate: async (runtime: any, message: any, state?: any, options?: any): Promise<boolean> => {\n const __avTextRaw = typeof message?.content?.text === \"string\" ? message.content.text : \"\";\n const __avText = __avTextRaw.toLowerCase();\n const __avKeywords = [\"execute\", \"roblox\"];\n const __avKeywordOk =\n __avKeywords.length > 0 && __avKeywords.some((kw) => kw.length > 0 && __avText.includes(kw));\n const __avRegex = /\\b(?:execute|roblox)\\b/i;\n const __avRegexOk = __avRegex.test(__avText);\n const __avSource = String(message?.content?.source ?? message?.source ?? \"\");\n const __avExpectedSource = \"\";\n const __avSourceOk = __avExpectedSource\n ? __avSource === __avExpectedSource\n : Boolean(__avSource || state || runtime?.agentId || runtime?.getService);\n const __avOptions = options && typeof options === \"object\" ? options : {};\n const __avInputOk =\n __avText.trim().length > 0 ||\n Object.keys(__avOptions as Record<string, unknown>).length > 0 ||\n Boolean(message?.content && typeof message.content === \"object\");\n\n if (!(__avKeywordOk && __avRegexOk && __avSourceOk && __avInputOk)) {\n return false;\n }\n\n const __avLegacyValidate = async (runtime: IAgentRuntime): Promise<boolean> => {\n const apiKey = runtime.getSetting(\"ROBLOX_API_KEY\");\n const universeId = runtime.getSetting(\"ROBLOX_UNIVERSE_ID\");\n return Boolean(apiKey && universeId);\n };\n try {\n return Boolean(await (__avLegacyValidate as any)(runtime, message, state, options));\n } catch {\n return false;\n }\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n _options?: HandlerOptions,\n callback?: HandlerCallback\n ): Promise<ActionResult | undefined> => {\n try {\n const service = runtime.getService<RobloxService>(ROBLOX_SERVICE_NAME);\n if (!service) {\n logger.error(\"Roblox service not found\");\n if (callback) {\n callback({\n text: \"Roblox service not available.\",\n action: \"EXECUTE_ROBLOX_ACTION\",\n });\n }\n return {\n success: false,\n error: \"Roblox service not found\",\n };\n }\n\n const messageContent =\n (state?.message as string) || (message.content as { text?: string }).text || \"\";\n\n const parsedAction = parseGameAction(messageContent);\n\n if (!parsedAction) {\n logger.warn(\"Could not parse game action from message\");\n if (callback) {\n callback({\n text: \"Could not parse action from message.\",\n action: \"EXECUTE_ROBLOX_ACTION\",\n });\n }\n return {\n success: false,\n error: \"Could not parse game action from message\",\n };\n }\n\n const { actionName, parameters } = parsedAction;\n\n const playerIdMatch = messageContent.match(/player\\s*(\\d+)/i);\n const targetPlayerIds = playerIdMatch ? [parseInt(playerIdMatch[1], 10)] : undefined;\n\n await service.executeAction(runtime.agentId, actionName, parameters, targetPlayerIds);\n\n logger.info({ actionName, parameters, targetPlayerIds }, \"Executed Roblox game action\");\n\n if (callback) {\n callback({\n text: `I've triggered the \"${actionName}\" action in the game.`,\n action: \"EXECUTE_ROBLOX_ACTION\",\n });\n }\n\n return {\n success: true,\n text: `Executed \"${actionName}\" action in the game`,\n data: {\n actionName,\n parameters: parameters as Record<string, string | number | boolean | null | undefined>,\n targetPlayerIds: targetPlayerIds || undefined,\n },\n };\n } catch (error) {\n logger.error({ error }, \"Failed to execute Roblox action\");\n const errorMessage = error instanceof Error ? error.message : \"Unknown error\";\n if (callback) {\n callback({\n text: \"Error executing action.\",\n action: \"EXECUTE_ROBLOX_ACTION\",\n });\n }\n return {\n success: false,\n error: errorMessage,\n };\n }\n },\n};\n\nexport default executeGameAction;\n",
8
+ "import {\n type Action,\n type ActionExample,\n type ActionResult,\n type HandlerCallback,\n type HandlerOptions,\n type IAgentRuntime,\n logger,\n type Memory,\n type State,\n} from \"@elizaos/core\";\nimport type { RobloxService } from \"../services/RobloxService\";\nimport { ROBLOX_SERVICE_NAME, type RobloxUser } from \"../types\";\n\nconst actionName = \"GET_ROBLOX_PLAYER\";\n\nconst getPlayerInfoExamples: ActionExample[][] = [\n [\n {\n name: actionName,\n content: {\n text: \"Who is player 12345678?\",\n },\n },\n {\n name: actionName,\n content: {\n text: \"Let me look up that player's information for you.\",\n action: \"GET_ROBLOX_PLAYER\",\n },\n },\n ],\n [\n {\n name: \"{{user1}}\",\n content: {\n text: \"Look up the Roblox user JohnDoe123\",\n },\n },\n {\n name: \"{{agentName}}\",\n content: {\n text: \"I'll find the information for JohnDoe123.\",\n action: \"GET_ROBLOX_PLAYER\",\n },\n },\n ],\n];\n\nfunction extractUserIdentifier(\n message: string\n): { type: \"id\"; value: number } | { type: \"username\"; value: string } | null {\n const idMatch = message.match(/\\b(?:player|user|id)\\s*[:#]?\\s*(\\d{5,})\\b/i);\n if (idMatch) {\n return { type: \"id\", value: parseInt(idMatch[1], 10) };\n }\n\n const usernameMatch = message.match(\n /\\b(?:user(?:name)?|player)\\s*[:#]?\\s*([A-Za-z0-9_]{3,20})\\b/i\n );\n if (usernameMatch) {\n const username = usernameMatch[1];\n if (!/^\\d+$/.test(username)) {\n return { type: \"username\", value: username };\n }\n }\n\n return null;\n}\n\nconst getPlayerInfo: Action = {\n name: actionName,\n similes: [],\n description: \"Fetch Roblox player information by username or user id.\",\n examples: getPlayerInfoExamples,\n\n validate: async (runtime: any, message: any, state?: any, options?: any): Promise<boolean> => {\n const __avTextRaw = typeof message?.content?.text === \"string\" ? message.content.text : \"\";\n const __avText = __avTextRaw.toLowerCase();\n const __avKeywords = [\"get\", \"roblox\", \"player\"];\n const __avKeywordOk =\n __avKeywords.length > 0 && __avKeywords.some((kw) => kw.length > 0 && __avText.includes(kw));\n const __avRegex = /\\b(?:get|roblox|player)\\b/i;\n const __avRegexOk = __avRegex.test(__avText);\n const __avSource = String(message?.content?.source ?? message?.source ?? \"\");\n const __avExpectedSource = \"\";\n const __avSourceOk = __avExpectedSource\n ? __avSource === __avExpectedSource\n : Boolean(__avSource || state || runtime?.agentId || runtime?.getService);\n const __avOptions = options && typeof options === \"object\" ? options : {};\n const __avInputOk =\n __avText.trim().length > 0 ||\n Object.keys(__avOptions as Record<string, unknown>).length > 0 ||\n Boolean(message?.content && typeof message.content === \"object\");\n\n if (!(__avKeywordOk && __avRegexOk && __avSourceOk && __avInputOk)) {\n return false;\n }\n\n const __avLegacyValidate = async (runtime: IAgentRuntime): Promise<boolean> => {\n const apiKey = runtime.getSetting(\"ROBLOX_API_KEY\");\n return Boolean(apiKey);\n };\n try {\n return Boolean(await (__avLegacyValidate as any)(runtime, message, state, options));\n } catch {\n return false;\n }\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n _options?: HandlerOptions,\n callback?: HandlerCallback\n ): Promise<ActionResult | undefined> => {\n try {\n const service = runtime.getService<RobloxService>(ROBLOX_SERVICE_NAME);\n if (!service) {\n logger.error(\"Roblox service not found\");\n if (callback) {\n callback({\n text: \"I couldn't connect to the Roblox service.\",\n action: \"GET_ROBLOX_PLAYER\",\n });\n }\n return {\n success: false,\n error: \"Roblox service not found\",\n };\n }\n\n const client = service.getClient(runtime.agentId);\n if (!client) {\n logger.error(\"Roblox client not found for agent\");\n if (callback) {\n callback({\n text: \"The Roblox client isn't available right now.\",\n action: \"GET_ROBLOX_PLAYER\",\n });\n }\n return {\n success: false,\n error: \"Roblox client not found for agent\",\n };\n }\n\n const messageContent =\n (state?.message as string) || (message.content as { text?: string }).text || \"\";\n\n const identifier = extractUserIdentifier(messageContent);\n\n if (!identifier) {\n logger.warn(\"Could not extract user identifier from message\");\n if (callback) {\n callback({\n text: \"I need a player ID or username to look up. Please provide one.\",\n action: \"GET_ROBLOX_PLAYER\",\n });\n }\n return {\n success: false,\n error: \"Could not extract user identifier from message\",\n };\n }\n\n let user: RobloxUser | null;\n if (identifier.type === \"id\") {\n user = await client.getUserById(identifier.value);\n } else {\n user = await client.getUserByUsername(identifier.value);\n }\n\n if (!user) {\n if (callback) {\n callback({\n text: `I couldn't find a Roblox user with that ${identifier.type === \"id\" ? \"ID\" : \"username\"}.`,\n action: \"GET_ROBLOX_PLAYER\",\n });\n }\n return {\n success: true,\n text: `User not found with ${identifier.type === \"id\" ? \"ID\" : \"username\"}: ${identifier.value}`,\n };\n }\n\n const avatarUrl = await client.getAvatarUrl(user.id);\n user.avatarUrl = avatarUrl;\n\n logger.info({ userId: user.id, username: user.username }, \"Found Roblox user\");\n\n if (callback) {\n const createdDate = user.createdAt ? user.createdAt.toLocaleDateString() : \"Unknown\";\n const bannedStatus = user.isBanned ? \" (Banned)\" : \"\";\n\n callback({\n text: `**${user.displayName}** (@${user.username})${bannedStatus}\n- User ID: ${user.id}\n- Account created: ${createdDate}`,\n action: \"GET_ROBLOX_PLAYER\",\n });\n }\n\n return {\n success: true,\n text: `Found Roblox user: ${user.displayName} (@${user.username})`,\n data: {\n userId: user.id,\n username: user.username,\n displayName: user.displayName,\n avatarUrl: avatarUrl || undefined,\n isBanned: user.isBanned,\n createdAt: user.createdAt ? user.createdAt.toISOString() : undefined,\n },\n };\n } catch (error) {\n logger.error({ error }, \"Failed to get Roblox player info\");\n const errorMessage = error instanceof Error ? error.message : \"Unknown error\";\n if (callback) {\n callback({\n text: \"I encountered an error looking up that player. Please try again.\",\n action: \"GET_ROBLOX_PLAYER\",\n });\n }\n return {\n success: false,\n error: errorMessage,\n };\n }\n },\n};\n\nexport default getPlayerInfo;\n",
9
+ "import {\n type Action,\n type ActionExample,\n type ActionResult,\n type HandlerCallback,\n type HandlerOptions,\n type IAgentRuntime,\n logger,\n type Memory,\n type State,\n} from \"@elizaos/core\";\nimport type { RobloxService } from \"../services/RobloxService\";\nimport { ROBLOX_SERVICE_NAME } from \"../types\";\n\nconst actionName = \"SEND_ROBLOX_MESSAGE\";\n\nconst sendGameMessageExamples: ActionExample[][] = [\n [\n {\n name: actionName,\n content: {\n text: \"Tell everyone in the game that there's a special event happening\",\n },\n },\n {\n name: actionName,\n content: {\n text: \"I'll announce the special event to all players in the game!\",\n action: \"SEND_ROBLOX_MESSAGE\",\n },\n },\n ],\n [\n {\n name: \"{{user1}}\",\n content: {\n text: \"Send a message to player123 welcoming them to the game\",\n },\n },\n {\n name: \"{{agentName}}\",\n content: {\n text: \"I'll send a personalized welcome message to player123.\",\n action: \"SEND_ROBLOX_MESSAGE\",\n },\n },\n ],\n];\n\nconst sendGameMessage: Action = {\n name: actionName,\n similes: [],\n description: \"Send a message to players in the Roblox game.\",\n examples: sendGameMessageExamples,\n\n validate: async (runtime: any, message: any, state?: any, options?: any): Promise<boolean> => {\n const __avTextRaw = typeof message?.content?.text === \"string\" ? message.content.text : \"\";\n const __avText = __avTextRaw.toLowerCase();\n const __avKeywords = [\"send\", \"roblox\", \"message\"];\n const __avKeywordOk =\n __avKeywords.length > 0 && __avKeywords.some((kw) => kw.length > 0 && __avText.includes(kw));\n const __avRegex = /\\b(?:send|roblox|message)\\b/i;\n const __avRegexOk = __avRegex.test(__avText);\n const __avSource = String(message?.content?.source ?? message?.source ?? \"\");\n const __avExpectedSource = \"\";\n const __avSourceOk = __avExpectedSource\n ? __avSource === __avExpectedSource\n : Boolean(__avSource || state || runtime?.agentId || runtime?.getService);\n const __avOptions = options && typeof options === \"object\" ? options : {};\n const __avInputOk =\n __avText.trim().length > 0 ||\n Object.keys(__avOptions as Record<string, unknown>).length > 0 ||\n Boolean(message?.content && typeof message.content === \"object\");\n\n if (!(__avKeywordOk && __avRegexOk && __avSourceOk && __avInputOk)) {\n return false;\n }\n\n const __avLegacyValidate = async (runtime: IAgentRuntime): Promise<boolean> => {\n const apiKey = runtime.getSetting(\"ROBLOX_API_KEY\");\n const universeId = runtime.getSetting(\"ROBLOX_UNIVERSE_ID\");\n return Boolean(apiKey && universeId);\n };\n try {\n return Boolean(await (__avLegacyValidate as any)(runtime, message, state, options));\n } catch {\n return false;\n }\n },\n\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n state: State | undefined,\n _options?: HandlerOptions,\n callback?: HandlerCallback\n ): Promise<ActionResult | undefined> => {\n try {\n const service = runtime.getService<RobloxService>(ROBLOX_SERVICE_NAME);\n if (!service) {\n logger.error(\"Roblox service not found\");\n if (callback) {\n callback({\n text: \"Roblox service not available.\",\n action: \"SEND_ROBLOX_MESSAGE\",\n });\n }\n return {\n success: false,\n error: \"Roblox service not found\",\n };\n }\n\n const messageContent =\n (state?.message as string) || (message.content as { text?: string }).text || \"\";\n\n if (!messageContent) {\n logger.warn(\"No message content to send\");\n if (callback) {\n callback({\n text: \"I need a message to send to the game.\",\n action: \"SEND_ROBLOX_MESSAGE\",\n });\n }\n return {\n success: false,\n error: \"No message content to send\",\n };\n }\n\n const targetPlayerIds = extractPlayerIds(messageContent);\n\n await service.sendMessage(runtime.agentId, messageContent, targetPlayerIds);\n\n logger.info(\n { targetPlayerIds, messageLength: messageContent.length },\n \"Sent message to Roblox game\"\n );\n\n if (callback) {\n const targetInfo =\n targetPlayerIds && targetPlayerIds.length > 0\n ? `to ${targetPlayerIds.length} specific player(s)`\n : \"to all players\";\n callback({\n text: `I've sent the message ${targetInfo} in the game.`,\n action: \"SEND_ROBLOX_MESSAGE\",\n });\n }\n\n return {\n success: true,\n text: `Sent message ${targetPlayerIds && targetPlayerIds.length > 0 ? `to ${targetPlayerIds.length} specific player(s)` : \"to all players\"} in the game`,\n data: {\n targetPlayerIds,\n messageLength: messageContent.length,\n },\n };\n } catch (error) {\n logger.error({ error }, \"Failed to send Roblox message\");\n const errorMessage = error instanceof Error ? error.message : \"Unknown error\";\n if (callback) {\n callback({\n text: \"Error sending message.\",\n action: \"SEND_ROBLOX_MESSAGE\",\n });\n }\n return {\n success: false,\n error: errorMessage,\n };\n }\n },\n};\n\nfunction extractPlayerIds(message: string): number[] | undefined {\n const playerIdPattern = /\\bplayer\\s*(\\d+)\\b/gi;\n const matches = [...message.matchAll(playerIdPattern)];\n\n if (matches.length > 0) {\n return matches.map((m) => parseInt(m[1], 10));\n }\n\n return undefined;\n}\n\nexport default sendGameMessage;\n",
10
10
  "import type { Action } from \"@elizaos/core\";\nimport executeGameAction from \"./executeGameAction\";\nimport getPlayerInfo from \"./getPlayerInfo\";\nimport sendGameMessage from \"./sendGameMessage\";\n\nexport const robloxActions: Action[] = [sendGameMessage, executeGameAction, getPlayerInfo];\n\nexport { sendGameMessage, executeGameAction, getPlayerInfo };\n",
11
- "import type { IAgentRuntime, Memory, Provider, ProviderResult, State } from \"@elizaos/core\";\nimport type { RobloxService } from \"../services/RobloxService\";\nimport { ROBLOX_SERVICE_NAME, type RobloxExperienceInfo } from \"../types\";\n\nconst providerName = \"roblox-game-state\";\n\nexport const gameStateProvider: Provider = {\n name: providerName,\n description: \"Provides information about the connected Roblox game/experience\",\n\n get: async (\n runtime: IAgentRuntime,\n _message: Memory,\n _state?: State\n ): Promise<ProviderResult> => {\n try {\n const service = runtime.getService<RobloxService>(ROBLOX_SERVICE_NAME);\n if (!service) {\n return { text: \"\", data: {}, values: {} };\n }\n\n const client = service.getClient(runtime.agentId);\n if (!client) {\n return { text: \"\", data: {}, values: {} };\n }\n\n const config = client.getConfig();\n\n let experienceInfo: RobloxExperienceInfo | null = null;\n try {\n experienceInfo = await client.getExperienceInfo();\n } catch {\n experienceInfo = null;\n }\n\n const parts: string[] = [\n \"## Roblox Game Connection\",\n \"\",\n `- **Universe ID**: ${config.universeId}`,\n ];\n\n if (config.placeId) {\n parts.push(`- **Place ID**: ${config.placeId}`);\n }\n\n if (experienceInfo) {\n parts.push(`- **Experience Name**: ${experienceInfo.name}`);\n if (experienceInfo.playing !== undefined) {\n parts.push(`- **Active Players**: ${experienceInfo.playing}`);\n }\n if (experienceInfo.visits !== undefined) {\n parts.push(`- **Total Visits**: ${experienceInfo.visits.toLocaleString()}`);\n }\n parts.push(\n `- **Creator**: ${experienceInfo.creator.name} (${experienceInfo.creator.type})`\n );\n }\n\n parts.push(`- **Messaging Topic**: ${config.messagingTopic}`);\n\n if (config.dryRun) {\n parts.push(\"\");\n parts.push(\"*Dry run mode is enabled - actions are simulated*\");\n }\n\n return { text: parts.join(\"\\n\"), data: {}, values: {} };\n } catch (error) {\n runtime.logger.error({ error }, \"Error in gameStateProvider\");\n return { text: \"\", data: {}, values: {} };\n }\n },\n};\n",
11
+ "import type { IAgentRuntime, Memory, Provider, ProviderResult, State } from \"@elizaos/core\";\nimport type { RobloxService } from \"../services/RobloxService\";\nimport { ROBLOX_SERVICE_NAME, type RobloxExperienceInfo } from \"../types\";\n\nconst providerName = \"roblox-game-state\";\n\nexport const gameStateProvider: Provider = {\n name: providerName,\n description: \"Provides information about the connected Roblox game/experience\",\n get: async (\n runtime: IAgentRuntime,\n _message: Memory,\n _state?: State\n ): Promise<ProviderResult> => {\n try {\n const service = runtime.getService<RobloxService>(ROBLOX_SERVICE_NAME);\n if (!service) {\n return { text: \"\", data: {}, values: {} };\n }\n\n const client = service.getClient(runtime.agentId);\n if (!client) {\n return { text: \"\", data: {}, values: {} };\n }\n\n const config = client.getConfig();\n\n let experienceInfo: RobloxExperienceInfo | null = null;\n try {\n experienceInfo = await client.getExperienceInfo();\n } catch {\n experienceInfo = null;\n }\n\n const parts: string[] = [\n \"## Roblox Game Connection\",\n \"\",\n `- **Universe ID**: ${config.universeId}`,\n ];\n\n if (config.placeId) {\n parts.push(`- **Place ID**: ${config.placeId}`);\n }\n\n if (experienceInfo) {\n parts.push(`- **Experience Name**: ${experienceInfo.name}`);\n if (experienceInfo.playing !== undefined) {\n parts.push(`- **Active Players**: ${experienceInfo.playing}`);\n }\n if (experienceInfo.visits !== undefined) {\n parts.push(`- **Total Visits**: ${experienceInfo.visits.toLocaleString()}`);\n }\n parts.push(\n `- **Creator**: ${experienceInfo.creator.name} (${experienceInfo.creator.type})`\n );\n }\n\n parts.push(`- **Messaging Topic**: ${config.messagingTopic}`);\n\n if (config.dryRun) {\n parts.push(\"\");\n parts.push(\"*Dry run mode is enabled - actions are simulated*\");\n }\n\n return { text: parts.join(\"\\n\"), data: {}, values: {} };\n } catch (error) {\n runtime.logger.error({ error }, \"Error in gameStateProvider\");\n return { text: \"\", data: {}, values: {} };\n }\n },\n};\n",
12
12
  "import type { Provider } from \"@elizaos/core\";\nimport { gameStateProvider } from \"./gameStateProvider\";\n\nexport const robloxProviders: Provider[] = [gameStateProvider];\n\nexport { gameStateProvider };\n",
13
13
  "import { type IAgentRuntime, Service, type UUID } from \"@elizaos/core\";\nimport { RobloxClient } from \"../client/RobloxClient\";\nimport { type ManagerHealthStatus, ROBLOX_SERVICE_NAME, type RobloxConfig } from \"../types\";\nimport { hasRobloxEnabled, validateRobloxConfig } from \"../utils/config\";\n\nclass RobloxAgentManager {\n public runtime: IAgentRuntime;\n public client: RobloxClient;\n public config: RobloxConfig;\n private pollTimer: ReturnType<typeof setInterval> | null = null;\n private isRunning = false;\n\n constructor(runtime: IAgentRuntime, config: RobloxConfig) {\n this.runtime = runtime;\n this.config = config;\n this.client = new RobloxClient(config);\n }\n\n async start(): Promise<void> {\n if (this.isRunning) {\n return;\n }\n\n this.isRunning = true;\n this.runtime.logger.info(\n { universeId: this.config.universeId },\n \"Roblox agent manager started\"\n );\n\n if (this.config.pollInterval > 0) {\n this.startPolling();\n }\n }\n\n async stop(): Promise<void> {\n this.isRunning = false;\n this.stopPolling();\n this.runtime.logger.info(\"Roblox agent manager stopped\");\n }\n\n private startPolling(): void {\n if (this.pollTimer) {\n return;\n }\n\n const pollIntervalMs = this.config.pollInterval * 1000;\n this.pollTimer = setInterval(() => {\n this.poll().catch((error) => {\n this.runtime.logger.error({ error }, \"Error during Roblox polling\");\n });\n }, pollIntervalMs);\n\n this.runtime.logger.debug(\n { intervalSeconds: this.config.pollInterval },\n \"Roblox polling started\"\n );\n }\n\n private stopPolling(): void {\n if (this.pollTimer) {\n clearInterval(this.pollTimer);\n this.pollTimer = null;\n this.runtime.logger.debug(\"Roblox polling stopped\");\n }\n }\n\n private async poll(): Promise<void> {}\n\n async sendMessage(content: string, targetPlayerIds?: number[]): Promise<void> {\n await this.client.sendAgentMessage({\n topic: this.config.messagingTopic,\n data: {\n type: \"agent_message\",\n content,\n targetPlayerIds,\n timestamp: Date.now(),\n },\n sender: {\n agentId: this.runtime.agentId,\n agentName: this.runtime.character.name,\n },\n });\n }\n\n async executeAction(\n actionName: string,\n parameters: Record<string, string | number | boolean | null>,\n targetPlayerIds?: number[]\n ): Promise<void> {\n await this.client.sendAgentMessage({\n topic: this.config.messagingTopic,\n data: {\n type: \"agent_action\",\n action: actionName,\n parameters,\n targetPlayerIds,\n timestamp: Date.now(),\n },\n sender: {\n agentId: this.runtime.agentId,\n agentName: this.runtime.character.name,\n },\n });\n }\n}\n\nexport class RobloxService extends Service {\n private static instance?: RobloxService;\n private managers = new Map<UUID, RobloxAgentManager>();\n\n static serviceType = ROBLOX_SERVICE_NAME;\n\n readonly description = \"Roblox integration service for game communication\";\n readonly capabilityDescription = \"The agent can communicate with Roblox games and players\";\n\n private static getInstance(): RobloxService {\n if (!RobloxService.instance) {\n RobloxService.instance = new RobloxService();\n }\n return RobloxService.instance;\n }\n\n async initialize(runtime: IAgentRuntime): Promise<void> {\n await RobloxService.start(runtime);\n }\n\n static async start(runtime: IAgentRuntime): Promise<Service> {\n const service = RobloxService.getInstance();\n let manager = service.managers.get(runtime.agentId);\n\n if (manager) {\n runtime.logger.warn({ agentId: runtime.agentId }, \"Roblox service already started\");\n return service;\n }\n\n if (!hasRobloxEnabled(runtime)) {\n runtime.logger.debug(\n { agentId: runtime.agentId },\n \"Roblox service not enabled - missing API key or Universe ID\"\n );\n return service;\n }\n\n const robloxConfig = validateRobloxConfig(runtime);\n manager = new RobloxAgentManager(runtime, robloxConfig);\n service.managers.set(runtime.agentId, manager);\n\n await manager.start();\n\n runtime.logger.success(\n { agentId: runtime.agentId, universeId: robloxConfig.universeId },\n \"Roblox service started\"\n );\n return service;\n }\n\n static async stop(runtime: IAgentRuntime): Promise<void> {\n const service = RobloxService.getInstance();\n const manager = service.managers.get(runtime.agentId);\n\n if (manager) {\n await manager.stop();\n service.managers.delete(runtime.agentId);\n runtime.logger.info({ agentId: runtime.agentId }, \"Roblox service stopped\");\n } else {\n runtime.logger.debug({ agentId: runtime.agentId }, \"Roblox service not running\");\n }\n }\n\n async stop(): Promise<void> {\n for (const manager of Array.from(this.managers.values())) {\n const agentId = manager.runtime.agentId;\n manager.runtime.logger.debug(\"Stopping Roblox service\");\n try {\n await RobloxService.stop(manager.runtime);\n } catch (error) {\n manager.runtime.logger.error({ agentId, error }, \"Error stopping Roblox service\");\n }\n }\n }\n\n getManager(agentId: UUID): RobloxAgentManager | undefined {\n return this.managers.get(agentId);\n }\n\n getClient(agentId: UUID): RobloxClient | undefined {\n return this.managers.get(agentId)?.client;\n }\n\n async sendMessage(agentId: UUID, content: string, targetPlayerIds?: number[]): Promise<void> {\n const manager = this.managers.get(agentId);\n if (!manager) {\n throw new Error(`No Roblox manager found for agent ${agentId}`);\n }\n await manager.sendMessage(content, targetPlayerIds);\n }\n\n async executeAction(\n agentId: UUID,\n actionName: string,\n parameters: Record<string, string | number | boolean | null>,\n targetPlayerIds?: number[]\n ): Promise<void> {\n const manager = this.managers.get(agentId);\n if (!manager) {\n throw new Error(`No Roblox manager found for agent ${agentId}`);\n }\n await manager.executeAction(actionName, parameters, targetPlayerIds);\n }\n\n async healthCheck(): Promise<{\n healthy: boolean;\n details: {\n activeManagers: number;\n managerStatuses: Record<string, ManagerHealthStatus>;\n };\n }> {\n const managerStatuses: Record<string, ManagerHealthStatus> = {};\n let overallHealthy = true;\n\n for (const [agentId, manager] of Array.from(this.managers.entries())) {\n try {\n const experienceInfo = await manager.client.getExperienceInfo();\n managerStatuses[agentId] = {\n status: \"healthy\",\n universeId: manager.config.universeId,\n experienceName: experienceInfo.name,\n playing: experienceInfo.playing,\n };\n } catch (error) {\n managerStatuses[agentId] = {\n status: \"unhealthy\",\n error: error instanceof Error ? error.message : \"Unknown error\",\n };\n overallHealthy = false;\n }\n }\n\n return {\n healthy: overallHealthy,\n details: {\n activeManagers: this.managers.size,\n managerStatuses,\n },\n };\n }\n\n getActiveManagers(): Map<UUID, RobloxAgentManager> {\n return new Map(this.managers);\n }\n}\n",
14
14
  "import type {\n DataStoreEntry,\n JsonValue,\n JsonValueOrUndefined,\n MessagingServiceMessage,\n RobloxConfig,\n RobloxExperienceInfo,\n RobloxUser,\n} from \"../types\";\n\nconst ROBLOX_API_BASE = \"https://apis.roblox.com\";\nconst USERS_API_BASE = \"https://users.roblox.com\";\n\nexport class RobloxApiError extends Error {\n constructor(\n message: string,\n public statusCode: number,\n public endpoint: string,\n public details?: JsonValue | string\n ) {\n super(message);\n this.name = \"RobloxApiError\";\n }\n}\n\nexport class RobloxClient {\n private config: RobloxConfig;\n\n constructor(config: RobloxConfig) {\n this.config = config;\n }\n\n private async request<T>(\n endpoint: string,\n options: RequestInit = {},\n baseUrl: string = ROBLOX_API_BASE\n ): Promise<T> {\n const url = `${baseUrl}${endpoint}`;\n const headers: Record<string, string> = {\n \"x-api-key\": this.config.apiKey,\n \"Content-Type\": \"application/json\",\n ...((options.headers as Record<string, string>) || {}),\n };\n\n const response = await fetch(url, {\n ...options,\n headers,\n });\n\n if (!response.ok) {\n let details: JsonValue | string;\n try {\n details = (await response.json()) as JsonValue;\n } catch {\n details = await response.text();\n }\n throw new RobloxApiError(\n `Roblox API error: ${response.statusText}`,\n response.status,\n endpoint,\n details\n );\n }\n\n const text = await response.text();\n if (!text) {\n return {} as T;\n }\n\n return JSON.parse(text) as T;\n }\n\n async publishMessage(\n topic: string,\n data: Record<string, JsonValueOrUndefined>,\n universeId?: string\n ): Promise<void> {\n if (this.config.dryRun) {\n return;\n }\n\n const targetUniverseId = universeId || this.config.universeId;\n\n await this.request(\n `/messaging-service/v1/universes/${targetUniverseId}/topics/${encodeURIComponent(topic)}`,\n {\n method: \"POST\",\n body: JSON.stringify({ message: JSON.stringify(data) }),\n }\n );\n }\n\n async sendAgentMessage(message: MessagingServiceMessage): Promise<void> {\n const payload: Record<string, JsonValueOrUndefined> = {\n ...message.data,\n };\n if (message.sender) {\n payload.sender = message.sender;\n }\n await this.publishMessage(message.topic, payload);\n }\n\n async getDataStoreEntry<T extends JsonValue = JsonValue>(\n datastoreName: string,\n key: string,\n scope: string = \"global\"\n ): Promise<DataStoreEntry<T> | null> {\n try {\n const response = await this.request<{\n value: string;\n version: string;\n createdTime: string;\n updatedTime: string;\n }>(\n `/datastores/v1/universes/${this.config.universeId}/standard-datastores/datastore/entries/entry?datastoreName=${encodeURIComponent(datastoreName)}&scope=${encodeURIComponent(scope)}&entryKey=${encodeURIComponent(key)}`\n );\n\n return {\n key,\n value: JSON.parse(response.value) as T,\n version: response.version,\n createdAt: new Date(response.createdTime),\n updatedAt: new Date(response.updatedTime),\n };\n } catch (error) {\n if (error instanceof RobloxApiError && error.statusCode === 404) {\n return null;\n }\n throw error;\n }\n }\n\n async setDataStoreEntry<T extends JsonValue = JsonValue>(\n datastoreName: string,\n key: string,\n value: T,\n scope: string = \"global\"\n ): Promise<DataStoreEntry<T>> {\n if (this.config.dryRun) {\n console.log(`[DRY RUN] Would set DataStore entry \"${key}\":`, value);\n return {\n key,\n value,\n version: \"dry-run\",\n createdAt: new Date(),\n updatedAt: new Date(),\n };\n }\n\n const response = await this.request<{\n version: string;\n createdTime: string;\n updatedTime: string;\n }>(\n `/datastores/v1/universes/${this.config.universeId}/standard-datastores/datastore/entries/entry?datastoreName=${encodeURIComponent(datastoreName)}&scope=${encodeURIComponent(scope)}&entryKey=${encodeURIComponent(key)}`,\n {\n method: \"POST\",\n body: JSON.stringify(value),\n }\n );\n\n return {\n key,\n value,\n version: response.version,\n createdAt: new Date(response.createdTime),\n updatedAt: new Date(response.updatedTime),\n };\n }\n\n async deleteDataStoreEntry(\n datastoreName: string,\n key: string,\n scope: string = \"global\"\n ): Promise<void> {\n if (this.config.dryRun) {\n console.log(`[DRY RUN] Would delete DataStore entry \"${key}\"`);\n return;\n }\n\n await this.request(\n `/datastores/v1/universes/${this.config.universeId}/standard-datastores/datastore/entries/entry?datastoreName=${encodeURIComponent(datastoreName)}&scope=${encodeURIComponent(scope)}&entryKey=${encodeURIComponent(key)}`,\n { method: \"DELETE\" }\n );\n }\n\n async listDataStoreEntries(\n datastoreName: string,\n scope: string = \"global\",\n prefix?: string,\n limit: number = 100\n ): Promise<{ keys: string[]; nextPageCursor?: string }> {\n let url = `/datastores/v1/universes/${this.config.universeId}/standard-datastores/datastore/entries?datastoreName=${encodeURIComponent(datastoreName)}&scope=${encodeURIComponent(scope)}&limit=${limit}`;\n\n if (prefix) {\n url += `&prefix=${encodeURIComponent(prefix)}`;\n }\n\n const response = await this.request<{\n keys: Array<{ key: string }>;\n nextPageCursor?: string;\n }>(url);\n\n return {\n keys: response.keys.map((k) => k.key),\n nextPageCursor: response.nextPageCursor,\n };\n }\n\n async getUserById(userId: number): Promise<RobloxUser> {\n const response = await this.request<{\n id: number;\n name: string;\n displayName: string;\n created: string;\n isBanned: boolean;\n }>(`/v1/users/${userId}`, {}, USERS_API_BASE);\n\n return {\n id: response.id,\n username: response.name,\n displayName: response.displayName,\n createdAt: new Date(response.created),\n isBanned: response.isBanned,\n };\n }\n\n async getUserByUsername(username: string): Promise<RobloxUser | null> {\n try {\n const response = await this.request<{\n data: Array<{\n id: number;\n name: string;\n displayName: string;\n }>;\n }>(\n `/v1/usernames/users`,\n {\n method: \"POST\",\n body: JSON.stringify({\n usernames: [username],\n excludeBannedUsers: false,\n }),\n },\n USERS_API_BASE\n );\n\n if (response.data.length === 0) {\n return null;\n }\n\n const user = response.data[0];\n return {\n id: user.id,\n username: user.name,\n displayName: user.displayName,\n };\n } catch {\n return null;\n }\n }\n\n async getUsersByIds(userIds: number[]): Promise<RobloxUser[]> {\n if (userIds.length === 0) {\n return [];\n }\n\n const response = await this.request<{\n data: Array<{\n id: number;\n name: string;\n displayName: string;\n }>;\n }>(\n `/v1/users`,\n {\n method: \"POST\",\n body: JSON.stringify({ userIds, excludeBannedUsers: false }),\n },\n USERS_API_BASE\n );\n\n return response.data.map((user) => ({\n id: user.id,\n username: user.name,\n displayName: user.displayName,\n }));\n }\n\n async getAvatarUrl(userId: number, size: string = \"150x150\"): Promise<string | undefined> {\n try {\n const response = await this.request<{\n data: Array<{ imageUrl: string }>;\n }>(\n `/v1/users/avatar-headshot?userIds=${userId}&size=${size}&format=Png`,\n {},\n \"https://thumbnails.roblox.com\"\n );\n\n return response.data[0]?.imageUrl;\n } catch {\n return undefined;\n }\n }\n\n async getExperienceInfo(universeId?: string): Promise<RobloxExperienceInfo> {\n const targetUniverseId = universeId || this.config.universeId;\n\n const response = await this.request<{\n data: Array<{\n id: number;\n name: string;\n description: string;\n creator: {\n id: number;\n type: string;\n name: string;\n };\n playing: number;\n visits: number;\n rootPlaceId: number;\n }>;\n }>(`/v1/games?universeIds=${targetUniverseId}`, {}, \"https://games.roblox.com\");\n\n const experience = response.data[0];\n if (!experience) {\n throw new RobloxApiError(\n `Experience not found: ${targetUniverseId}`,\n 404,\n `/v1/games?universeIds=${targetUniverseId}`\n );\n }\n\n return {\n universeId: targetUniverseId,\n name: experience.name,\n description: experience.description,\n creator: {\n id: experience.creator.id,\n type: experience.creator.type as \"User\" | \"Group\",\n name: experience.creator.name,\n },\n playing: experience.playing,\n visits: experience.visits,\n rootPlaceId: String(experience.rootPlaceId),\n };\n }\n\n getConfig(): Readonly<RobloxConfig> {\n return { ...this.config };\n }\n\n isDryRun(): boolean {\n return this.config.dryRun;\n }\n}\n",
15
15
  "import type { IAgentRuntime } from \"@elizaos/core\";\nimport type { RobloxConfig } from \"../types\";\n\nexport const ROBLOX_DEFAULTS = {\n MESSAGING_TOPIC: \"eliza-agent\",\n POLL_INTERVAL: 30,\n DRY_RUN: false,\n} as const;\n\nexport function hasRobloxEnabled(runtime: IAgentRuntime): boolean {\n const apiKey = runtime.getSetting(\"ROBLOX_API_KEY\");\n const universeId = runtime.getSetting(\"ROBLOX_UNIVERSE_ID\");\n return Boolean(apiKey && universeId);\n}\n\nexport function getRobloxApiKey(runtime: IAgentRuntime): string | undefined {\n return runtime.getSetting(\"ROBLOX_API_KEY\") as string | undefined;\n}\n\nexport function getRobloxUniverseId(runtime: IAgentRuntime): string | undefined {\n return runtime.getSetting(\"ROBLOX_UNIVERSE_ID\") as string | undefined;\n}\n\nexport function validateRobloxConfig(runtime: IAgentRuntime): RobloxConfig {\n const apiKey = runtime.getSetting(\"ROBLOX_API_KEY\") as string | undefined;\n const universeId = runtime.getSetting(\"ROBLOX_UNIVERSE_ID\") as string | undefined;\n\n if (!apiKey) {\n throw new Error(\"ROBLOX_API_KEY is required but not configured\");\n }\n\n if (!universeId) {\n throw new Error(\"ROBLOX_UNIVERSE_ID is required but not configured\");\n }\n\n const placeId = runtime.getSetting(\"ROBLOX_PLACE_ID\") as string | undefined;\n const webhookSecret = runtime.getSetting(\"ROBLOX_WEBHOOK_SECRET\") as string | undefined;\n const messagingTopic =\n (runtime.getSetting(\"ROBLOX_MESSAGING_TOPIC\") as string) || ROBLOX_DEFAULTS.MESSAGING_TOPIC;\n const pollIntervalStr = runtime.getSetting(\"ROBLOX_POLL_INTERVAL\") as string | undefined;\n const pollInterval = pollIntervalStr\n ? parseInt(pollIntervalStr, 10)\n : ROBLOX_DEFAULTS.POLL_INTERVAL;\n const dryRunStr = runtime.getSetting(\"ROBLOX_DRY_RUN\") as string | undefined;\n const dryRun = dryRunStr === \"true\";\n\n return {\n apiKey,\n universeId,\n placeId,\n webhookSecret,\n messagingTopic,\n pollInterval,\n dryRun,\n };\n}\n",
16
16
  "import type { IAgentRuntime, Plugin } from \"@elizaos/core\";\nimport { RobloxTestSuite } from \"./__tests__/suite\";\nimport { robloxActions } from \"./actions\";\nimport { robloxProviders } from \"./providers\";\nimport { RobloxService } from \"./services/RobloxService\";\n\nexport { RobloxApiError, RobloxClient } from \"./client/RobloxClient\";\nexport { RobloxService } from \"./services/RobloxService\";\n\nexport const robloxPlugin: Plugin = {\n name: \"roblox\",\n description: \"Roblox game integration plugin for sending and receiving messages\",\n services: [RobloxService],\n actions: robloxActions,\n providers: robloxProviders,\n tests: [new RobloxTestSuite()],\n\n init: async (_config: Record<string, string>, runtime: IAgentRuntime) => {\n const apiKey = runtime.getSetting(\"ROBLOX_API_KEY\") as string;\n const universeId = runtime.getSetting(\"ROBLOX_UNIVERSE_ID\") as string;\n\n if (!apiKey || apiKey.trim() === \"\") {\n runtime.logger.warn(\"ROBLOX_API_KEY not provided\");\n return;\n }\n\n if (!universeId || universeId.trim() === \"\") {\n runtime.logger.warn(\"ROBLOX_UNIVERSE_ID not provided\");\n return;\n }\n\n runtime.logger.info({ universeId }, \"Roblox plugin initialized\");\n },\n};\n\nexport default robloxPlugin;\n"
17
17
  ],
18
- "mappings": "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",
19
- "debugId": "0663B7918D7036F064756E2164756E21",
18
+ "mappings": "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",
19
+ "debugId": "740C50B5F8DE5EDA64756E2164756E21",
20
20
  "names": []
21
21
  }
@@ -1 +1 @@
1
- {"version":3,"file":"gameStateProvider.d.ts","sourceRoot":"","sources":["../../providers/gameStateProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAyB,QAAQ,EAAyB,MAAM,eAAe,CAAC;AAM5F,eAAO,MAAM,iBAAiB,EAAE,QAiE/B,CAAC"}
1
+ {"version":3,"file":"gameStateProvider.d.ts","sourceRoot":"","sources":["../../providers/gameStateProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAyB,QAAQ,EAAyB,MAAM,eAAe,CAAC;AAM5F,eAAO,MAAM,iBAAiB,EAAE,QAgE/B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elizaos/plugin-roblox",
3
- "version": "2.0.0-alpha.4",
3
+ "version": "2.0.0-alpha.6",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",
@@ -33,11 +33,11 @@
33
33
  "scripts": {
34
34
  "dev": "bun run build.ts --watch",
35
35
  "typecheck": "tsc --noEmit -p tsconfig.json",
36
- "test": "vitest run __tests__/",
37
- "test:unit": "vitest run __tests__/",
36
+ "test": "vitest run __tests__/ --passWithNoTests",
37
+ "test:unit": "vitest run __tests__/ --passWithNoTests",
38
38
  "test:integration": "echo 'Integration tests require elizaos CLI - skipping'",
39
39
  "lint": "bunx @biomejs/biome check --write --unsafe .",
40
- "lint:check": "bunx @biomejs/biome check .",
40
+ "lint:check": "bun run lint",
41
41
  "clean": "rm -rf dist .turbo node_modules .turbo-tsconfig.json tsconfig.tsbuildinfo",
42
42
  "format": "biome format --write .",
43
43
  "format:check": "biome format .",
@@ -97,7 +97,7 @@
97
97
  }
98
98
  }
99
99
  },
100
- "milaidy": {
100
+ "milady": {
101
101
  "platforms": [
102
102
  "node"
103
103
  ],