@elizaos/plugin-roblox 2.0.0-beta.1 → 2.0.3-beta.3

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.
Files changed (49) hide show
  1. package/README.md +67 -130
  2. package/package.json +18 -10
  3. package/registry-entry.json +88 -0
  4. package/dist/__tests__/suite.d.ts +0 -7
  5. package/dist/__tests__/suite.d.ts.map +0 -1
  6. package/dist/actions/executeGameAction.d.ts +0 -4
  7. package/dist/actions/executeGameAction.d.ts.map +0 -1
  8. package/dist/actions/executeRobloxAction.d.ts +0 -4
  9. package/dist/actions/executeRobloxAction.d.ts.map +0 -1
  10. package/dist/actions/getPlayerInfo.d.ts +0 -4
  11. package/dist/actions/getPlayerInfo.d.ts.map +0 -1
  12. package/dist/actions/index.d.ts +0 -5
  13. package/dist/actions/index.d.ts.map +0 -1
  14. package/dist/actions/robloxAction.d.ts +0 -4
  15. package/dist/actions/robloxAction.d.ts.map +0 -1
  16. package/dist/actions/sendGameMessage.d.ts +0 -4
  17. package/dist/actions/sendGameMessage.d.ts.map +0 -1
  18. package/dist/actions/sendRobloxMessage.d.ts +0 -4
  19. package/dist/actions/sendRobloxMessage.d.ts.map +0 -1
  20. package/dist/client/RobloxClient.d.ts +0 -29
  21. package/dist/client/RobloxClient.d.ts.map +0 -1
  22. package/dist/client/index.d.ts +0 -2
  23. package/dist/client/index.d.ts.map +0 -1
  24. package/dist/generated/specs/specs.d.ts +0 -46
  25. package/dist/generated/specs/specs.d.ts.map +0 -1
  26. package/dist/index.browser.d.ts +0 -4
  27. package/dist/index.browser.d.ts.map +0 -1
  28. package/dist/index.d.ts +0 -6
  29. package/dist/index.d.ts.map +0 -1
  30. package/dist/index.js +0 -1058
  31. package/dist/index.js.map +0 -19
  32. package/dist/providers/gameStateProvider.d.ts +0 -3
  33. package/dist/providers/gameStateProvider.d.ts.map +0 -1
  34. package/dist/providers/index.d.ts +0 -5
  35. package/dist/providers/index.d.ts.map +0 -1
  36. package/dist/providers/robloxPlayerProvider.d.ts +0 -3
  37. package/dist/providers/robloxPlayerProvider.d.ts.map +0 -1
  38. package/dist/services/RobloxService.d.ts +0 -40
  39. package/dist/services/RobloxService.d.ts.map +0 -1
  40. package/dist/services/index.d.ts +0 -2
  41. package/dist/services/index.d.ts.map +0 -1
  42. package/dist/types/index.d.ts +0 -124
  43. package/dist/types/index.d.ts.map +0 -1
  44. package/dist/utils/config.d.ts +0 -11
  45. package/dist/utils/config.d.ts.map +0 -1
  46. package/dist/utils/index.d.ts +0 -2
  47. package/dist/utils/index.d.ts.map +0 -1
  48. package/dist/vitest.config.d.ts +0 -3
  49. package/dist/vitest.config.d.ts.map +0 -1
package/dist/index.js.map DELETED
@@ -1,19 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../types/index.ts", "../__tests__/suite.ts", "../actions/robloxAction.ts", "../actions/index.ts", "../providers/gameStateProvider.ts", "../providers/index.ts", "../services/RobloxService.ts", "../client/RobloxClient.ts", "../utils/config.ts", "../index.ts"],
4
- "sourcesContent": [
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 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
- "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 ActionParameters,\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 {\n type JsonValue,\n ROBLOX_SERVICE_NAME,\n type RobloxGameAction,\n type RobloxUser,\n} from \"../types\";\n\ntype RobloxSubaction = \"message\" | \"execute\" | \"get_player\";\ntype RobloxActionParameters = Record<string, string | number | boolean | null>;\n\nconst actionName = \"ROBLOX\";\nconst ROBLOX_ACTION_TIMEOUT_MS = 15_000;\nconst MAX_ROBLOX_TARGET_IDS = 25;\nconst MAX_ROBLOX_MESSAGE_LENGTH = 1000;\n\ninterface GameActionConfig {\n name: string;\n patterns: RegExp[];\n extractParams: (match: RegExpMatchArray) => RobloxActionParameters;\n}\n\nconst KNOWN_GAME_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) => {\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: Number.parseInt(match[1], 10),\n amount: Number.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) => ({ destination: match[1] }),\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) => ({ eventType: match[1] }),\n },\n];\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value && typeof value === \"object\" && !Array.isArray(value));\n}\n\nfunction parseJsonObject(text: string): Record<string, unknown> {\n const trimmed = text.trim();\n if (!trimmed.startsWith(\"{\") || !trimmed.endsWith(\"}\")) return {};\n\n try {\n const parsed = JSON.parse(trimmed) as unknown;\n return isRecord(parsed) ? parsed : {};\n } catch {\n return {};\n }\n}\n\nfunction readParams(\n options?: HandlerOptions | Record<string, JsonValue | undefined>\n): Record<string, unknown> {\n const maybeParams = isRecord(options) && isRecord(options.parameters) ? options.parameters : {};\n return maybeParams as ActionParameters;\n}\n\nfunction mergedInput(\n message: Memory,\n options?: HandlerOptions | Record<string, JsonValue | undefined>\n): Record<string, unknown> {\n return {\n ...parseJsonObject(message.content.text ?? \"\"),\n ...readParams(options),\n };\n}\n\nfunction readString(params: Record<string, unknown>, ...keys: string[]): string | null {\n for (const key of keys) {\n const value = params[key];\n if (typeof value === \"string\" && value.trim()) return value.trim();\n }\n return null;\n}\n\nfunction readNumber(params: Record<string, unknown>, ...keys: string[]): number | null {\n for (const key of keys) {\n const value = params[key];\n if (typeof value === \"number\" && Number.isFinite(value)) return value;\n if (typeof value === \"string\" && value.trim()) {\n const parsed = Number(value);\n if (Number.isFinite(parsed)) return parsed;\n }\n }\n return null;\n}\n\nfunction normalizeSubaction(value: string | null): RobloxSubaction | null {\n const normalized = value\n ?.trim()\n .toLowerCase()\n .replace(/[_\\s-]+/g, \"_\");\n if (!normalized) return null;\n if ([\"message\", \"send_message\", \"send\", \"chat\", \"announce\"].includes(normalized)) {\n return \"message\";\n }\n if ([\"execute\", \"action\", \"game_action\", \"run\", \"trigger\"].includes(normalized)) {\n return \"execute\";\n }\n if ([\"get_player\", \"player\", \"player_info\", \"user\", \"lookup\"].includes(normalized)) {\n return \"get_player\";\n }\n return null;\n}\n\nfunction inferSubaction(text: string, params: Record<string, unknown>): RobloxSubaction | null {\n const explicit = normalizeSubaction(readString(params, \"subaction\", \"action\", \"type\"));\n if (explicit) return explicit;\n\n const lower = text.toLowerCase();\n if (/\\b(who is|look up|lookup|find|get).*\\b(player|user|roblox)\\b/.test(lower)) {\n return \"get_player\";\n }\n if (/\\b(execute|run|trigger|start|give|teleport|spawn|move|walk)\\b/.test(lower)) {\n return \"execute\";\n }\n if (/\\b(send|message|tell|announce|chat|say)\\b/.test(lower)) {\n return \"message\";\n }\n return null;\n}\n\nfunction readTargetPlayerIds(params: Record<string, unknown>, text: string): number[] | undefined {\n const explicit = params.targetPlayerIds;\n if (Array.isArray(explicit)) {\n const ids = explicit\n .map((value) =>\n typeof value === \"number\" ? value : typeof value === \"string\" ? Number(value) : NaN\n )\n .filter((value) => Number.isInteger(value) && value > 0);\n if (ids.length) return ids.slice(0, MAX_ROBLOX_TARGET_IDS);\n }\n\n const single = readNumber(params, \"targetPlayerId\", \"playerId\", \"userId\");\n if (single !== null && Number.isInteger(single) && single > 0) return [single];\n\n const matches = [...text.matchAll(/\\bplayer\\s*(\\d+)\\b/gi)];\n return matches.length\n ? matches.map((match) => Number.parseInt(match[1], 10)).slice(0, MAX_ROBLOX_TARGET_IDS)\n : undefined;\n}\n\nfunction withRobloxTimeout<T>(promise: Promise<T>, label: string): Promise<T> {\n return Promise.race([\n promise,\n new Promise<never>((_, reject) =>\n setTimeout(() => reject(new Error(`${label} timed out`)), ROBLOX_ACTION_TIMEOUT_MS)\n ),\n ]);\n}\n\nfunction parseGameAction(text: string, params: Record<string, unknown>): RobloxGameAction | null {\n const explicitActionName = readString(params, \"actionName\", \"gameAction\", \"command\");\n const explicitParameters = params.parameters;\n if (explicitActionName) {\n return {\n name: explicitActionName,\n parameters: sanitizeParameters(explicitParameters),\n targetPlayerIds: readTargetPlayerIds(params, text),\n };\n }\n\n for (const gameAction of KNOWN_GAME_ACTIONS) {\n for (const pattern of gameAction.patterns) {\n const match = text.match(pattern);\n if (match) {\n return {\n name: gameAction.name,\n parameters: gameAction.extractParams(match),\n targetPlayerIds: readTargetPlayerIds(params, text),\n };\n }\n }\n }\n\n const genericMatch = text.match(/(?:execute|run|do|trigger)\\s+(\\w+)/i);\n if (genericMatch) {\n return {\n name: genericMatch[1].toLowerCase(),\n parameters: {},\n targetPlayerIds: readTargetPlayerIds(params, text),\n };\n }\n\n return null;\n}\n\nfunction sanitizeParameters(value: unknown): RobloxActionParameters {\n if (!isRecord(value)) return {};\n const out: RobloxActionParameters = {};\n for (const [key, item] of Object.entries(value)) {\n if (item === null) {\n out[key] = null;\n } else if (typeof item === \"string\" || typeof item === \"number\" || typeof item === \"boolean\") {\n out[key] = item;\n }\n }\n return out;\n}\n\nfunction extractUserIdentifier(\n text: string,\n params: Record<string, unknown>\n): { type: \"id\"; value: number } | { type: \"username\"; value: string } | null {\n const userId = readNumber(params, \"playerId\", \"userId\", \"id\");\n if (userId !== null && Number.isInteger(userId) && userId > 0) {\n return { type: \"id\", value: userId };\n }\n\n const username = readString(params, \"username\", \"playerName\", \"user\");\n if (username && !/^\\d+$/.test(username)) {\n return { type: \"username\", value: username };\n }\n\n const idMatch = text.match(/\\b(?:player|user|id)\\s*[:#]?\\s*(\\d{5,})\\b/i);\n if (idMatch) {\n return { type: \"id\", value: Number.parseInt(idMatch[1], 10) };\n }\n\n const usernameMatch = text.match(/\\b(?:user(?:name)?|player)\\s*[:#]?\\s*([A-Za-z0-9_]{3,20})\\b/i);\n if (usernameMatch && !/^\\d+$/.test(usernameMatch[1])) {\n return { type: \"username\", value: usernameMatch[1] };\n }\n\n return null;\n}\n\nasync function handleMessage(\n runtime: IAgentRuntime,\n service: RobloxService,\n message: Memory,\n state: State | undefined,\n params: Record<string, unknown>,\n callback?: HandlerCallback\n): Promise<ActionResult> {\n const content =\n readString(params, \"message\", \"text\", \"content\") ??\n (typeof state?.message === \"string\" ? state.message : undefined) ??\n (message.content.text ?? \"\").trim();\n\n if (!content) {\n await callback?.({ text: \"I need a message to send to the Roblox game.\", action: actionName });\n return { success: false, error: \"No message content to send\" };\n }\n\n const targetPlayerIds = readTargetPlayerIds(params, content);\n const cappedContent = content.slice(0, MAX_ROBLOX_MESSAGE_LENGTH);\n await withRobloxTimeout(\n service.sendMessage(runtime.agentId, cappedContent, targetPlayerIds),\n \"roblox message\"\n );\n\n const targetText =\n targetPlayerIds && targetPlayerIds.length > 0\n ? `to ${targetPlayerIds.length} player(s)`\n : \"to all players\";\n await callback?.({ text: `Sent Roblox message ${targetText}.`, action: actionName });\n return {\n success: true,\n text: `Sent Roblox message ${targetText}`,\n data: { subaction: \"message\", targetPlayerIds, messageLength: cappedContent.length },\n };\n}\n\nasync function handleExecute(\n runtime: IAgentRuntime,\n service: RobloxService,\n message: Memory,\n params: Record<string, unknown>,\n callback?: HandlerCallback\n): Promise<ActionResult> {\n const parsedAction = parseGameAction(message.content.text ?? \"\", params);\n if (!parsedAction) {\n await callback?.({ text: \"Could not parse Roblox game action.\", action: actionName });\n return { success: false, error: \"Could not parse Roblox game action\" };\n }\n\n await withRobloxTimeout(\n service.executeAction(\n runtime.agentId,\n parsedAction.name,\n parsedAction.parameters,\n parsedAction.targetPlayerIds\n ),\n \"roblox execute\"\n );\n\n await callback?.({ text: `Triggered Roblox action \"${parsedAction.name}\".`, action: actionName });\n return {\n success: true,\n text: `Executed Roblox action \"${parsedAction.name}\"`,\n data: {\n subaction: \"execute\",\n actionName: parsedAction.name,\n parameters: parsedAction.parameters,\n targetPlayerIds: parsedAction.targetPlayerIds,\n },\n };\n}\n\nasync function handleGetPlayer(\n runtime: IAgentRuntime,\n service: RobloxService,\n message: Memory,\n params: Record<string, unknown>,\n callback?: HandlerCallback\n): Promise<ActionResult> {\n const client = service.getClient(runtime.agentId);\n if (!client) {\n await callback?.({ text: \"The Roblox client is not available.\", action: actionName });\n return { success: false, error: \"Roblox client not found for agent\" };\n }\n\n const identifier = extractUserIdentifier(message.content.text ?? \"\", params);\n if (!identifier) {\n await callback?.({\n text: \"I need a Roblox player ID or username to look up.\",\n action: actionName,\n });\n return { success: false, error: \"Could not extract Roblox player identifier\" };\n }\n\n let user: RobloxUser | null;\n if (identifier.type === \"id\") {\n user = await withRobloxTimeout(client.getUserById(identifier.value), \"roblox get user\");\n } else {\n user = await withRobloxTimeout(client.getUserByUsername(identifier.value), \"roblox get user\");\n }\n\n if (!user) {\n await callback?.({\n text: `No Roblox user found for ${identifier.type}: ${identifier.value}.`,\n action: actionName,\n });\n return {\n success: true,\n text: `Roblox user not found for ${identifier.type}: ${identifier.value}`,\n data: { subaction: \"get_player\", found: false, identifier },\n };\n }\n\n const avatarUrl = await withRobloxTimeout(client.getAvatarUrl(user.id), \"roblox avatar\");\n user.avatarUrl = avatarUrl;\n\n await callback?.({\n text: `${user.displayName} (@${user.username}) - Roblox user ID ${user.id}`,\n action: actionName,\n });\n return {\n success: true,\n text: `Found Roblox user: ${user.displayName} (@${user.username})`,\n data: {\n subaction: \"get_player\",\n found: true,\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}\n\nexport const robloxAction: Action = {\n name: actionName,\n contexts: [\"media\", \"automation\"],\n contextGate: { anyOf: [\"media\", \"automation\"] },\n roleGate: { minRole: \"USER\" },\n similes: [\"ROBLOX\", \"ROBLOX_ROUTER\", \"ROBLOX_GAME_ACTION\"],\n description: \"Route Roblox game integration with action message, execute, or get_player.\",\n descriptionCompressed: \"Route Roblox action: message, execute, or get_player.\",\n parameters: [\n {\n name: \"action\",\n description: \"Roblox operation: message, execute, or get_player.\",\n descriptionCompressed: \"Roblox action.\",\n required: true,\n schema: { type: \"string\", enum: [\"message\", \"execute\", \"get_player\"] },\n },\n {\n name: \"message\",\n description: \"Message content for the message subaction.\",\n descriptionCompressed: \"message text\",\n required: false,\n schema: { type: \"string\" },\n },\n {\n name: \"actionName\",\n description: \"Game-side action name for execute.\",\n descriptionCompressed: \"game action name\",\n required: false,\n schema: { type: \"string\" },\n },\n {\n name: \"parameters\",\n description: \"Game-side action parameters for execute.\",\n descriptionCompressed: \"game action params\",\n required: false,\n schema: { type: \"object\" },\n },\n {\n name: \"targetPlayerIds\",\n description: \"Roblox player IDs to target for message or execute.\",\n descriptionCompressed: \"target player ids\",\n required: false,\n schema: { type: \"array\", items: { type: \"number\" } },\n },\n {\n name: \"playerId\",\n description: \"Roblox player/user ID for lookup or targeting.\",\n descriptionCompressed: \"Roblox user id\",\n required: false,\n schema: { type: \"number\" },\n },\n {\n name: \"username\",\n description: \"Roblox username for lookup.\",\n descriptionCompressed: \"Roblox username\",\n required: false,\n schema: { type: \"string\" },\n },\n ],\n validate: async (runtime: IAgentRuntime, message: Memory, _state?: State): Promise<boolean> => {\n const params = parseJsonObject(message.content.text ?? \"\");\n const hasIntent =\n Boolean(normalizeSubaction(readString(params, \"subaction\", \"action\", \"type\"))) ||\n /\\b(roblox|player|user|send|message|announce|execute|trigger|teleport|spawn|coins|lookup|look up)\\b/i.test(\n message.content.text ?? \"\"\n );\n if (!hasIntent) return false;\n\n const apiKey = runtime.getSetting(\"ROBLOX_API_KEY\");\n const universeId = runtime.getSetting(\"ROBLOX_UNIVERSE_ID\");\n return Boolean(apiKey && universeId);\n },\n handler: async (\n runtime: IAgentRuntime,\n message: Memory,\n state?: State,\n options?: HandlerOptions | Record<string, JsonValue | undefined>,\n callback?: HandlerCallback\n ): Promise<ActionResult> => {\n const service = runtime.getService<RobloxService>(ROBLOX_SERVICE_NAME);\n if (!service) {\n logger.error(\"Roblox service not found\");\n await callback?.({ text: \"Roblox service not available.\", action: actionName });\n return { success: false, error: \"Roblox service not found\" };\n }\n\n const params = mergedInput(message, options);\n const maxRobloxTargetIds = MAX_ROBLOX_TARGET_IDS;\n if (Array.isArray(params.targetPlayerIds)) {\n params.targetPlayerIds = params.targetPlayerIds.slice(0, maxRobloxTargetIds);\n }\n const subaction = inferSubaction(message.content.text ?? \"\", params);\n\n try {\n if (subaction === \"message\") {\n return await handleMessage(runtime, service, message, state, params, callback);\n }\n if (subaction === \"execute\") {\n return await handleExecute(runtime, service, message, params, callback);\n }\n if (subaction === \"get_player\") {\n return await handleGetPlayer(runtime, service, message, params, callback);\n }\n\n return {\n success: false,\n error: \"Missing Roblox subaction\",\n text: \"Missing Roblox subaction\",\n };\n } catch (error) {\n logger.error({ error }, \"Roblox action failed\");\n const errorMessage = error instanceof Error ? error.message : \"Unknown error\";\n await callback?.({ text: `Roblox action failed: ${errorMessage}`, action: actionName });\n return { success: false, error: errorMessage };\n }\n },\n examples: [\n [\n {\n name: \"{{user1}}\",\n content: { text: \"Tell everyone in Roblox that the event starts now\" },\n },\n {\n name: \"{{agentName}}\",\n content: {\n text: \"I'll send that message to the Roblox game.\",\n action: actionName,\n },\n },\n ],\n ] as ActionExample[][],\n};\n\nexport default robloxAction;\n",
8
- "import type { Action } from \"@elizaos/core\";\nimport robloxAction from \"./robloxAction\";\n\nexport const robloxActions: Action[] = [robloxAction];\n\nexport { robloxAction };\n",
9
- "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\";\nconst EXPERIENCE_NAME_LIMIT = 160;\n\nexport const gameStateProvider: Provider = {\n name: providerName,\n description: \"Provides information about the connected Roblox game/experience\",\n descriptionCompressed: \"Read Roblox connection state, experience metadata, and messaging topic.\",\n contexts: [\"automation\", \"agent_internal\"],\n contextGate: { anyOf: [\"automation\", \"agent_internal\"] },\n cacheStable: false,\n cacheScope: \"turn\",\n get: async (\n runtime: IAgentRuntime,\n _message: Memory,\n _state?: State\n ): Promise<ProviderResult> => {\n const apiKeyConfigured = Boolean(runtime.getSetting(\"ROBLOX_API_KEY\"));\n const universeIdSetting = runtime.getSetting(\"ROBLOX_UNIVERSE_ID\");\n const universeId = typeof universeIdSetting === \"string\" ? universeIdSetting : undefined;\n const configured = apiKeyConfigured && Boolean(universeId);\n\n try {\n const service = runtime.getService<RobloxService>(ROBLOX_SERVICE_NAME);\n if (!service) {\n return {\n text: [\n \"Roblox:\",\n `configured: ${configured}`,\n \"service: unavailable\",\n `apiKey: ${apiKeyConfigured ? \"configured\" : \"missing\"}`,\n `universeId: ${universeId ?? \"missing\"}`,\n ].join(\"\\n\"),\n data: {\n configured,\n apiKeyConfigured,\n universeId: universeId ?? null,\n serviceAvailable: false,\n clientAvailable: false,\n },\n values: {\n configured,\n serviceAvailable: false,\n clientAvailable: false,\n },\n };\n }\n\n const client = service.getClient(runtime.agentId);\n if (!client) {\n return {\n text: [\n \"Roblox:\",\n `configured: ${configured}`,\n \"service: available\",\n \"client: unavailable\",\n `apiKey: ${apiKeyConfigured ? \"configured\" : \"missing\"}`,\n `universeId: ${universeId ?? \"missing\"}`,\n ].join(\"\\n\"),\n data: {\n configured,\n apiKeyConfigured,\n universeId: universeId ?? null,\n serviceAvailable: true,\n clientAvailable: false,\n },\n values: {\n configured,\n serviceAvailable: true,\n clientAvailable: false,\n },\n };\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:\",\n \"configured: true\",\n \"service: available\",\n \"client: available\",\n `universeId: ${config.universeId}`,\n ];\n\n if (config.placeId) {\n parts.push(`placeId: ${config.placeId}`);\n }\n\n if (experienceInfo) {\n parts.push(`experienceName: ${experienceInfo.name.slice(0, EXPERIENCE_NAME_LIMIT)}`);\n if (experienceInfo.playing !== undefined) {\n parts.push(`activePlayers: ${experienceInfo.playing}`);\n }\n if (experienceInfo.visits !== undefined) {\n parts.push(`totalVisits: ${experienceInfo.visits}`);\n }\n parts.push(`creator: ${experienceInfo.creator.name} (${experienceInfo.creator.type})`);\n } else {\n parts.push(\"experience: unavailable\");\n }\n\n parts.push(`messagingTopic: ${config.messagingTopic}`);\n\n if (config.dryRun) {\n parts.push(\"dryRun: true\");\n }\n\n return {\n text: parts.join(\"\\n\"),\n data: {\n configured: true,\n serviceAvailable: true,\n clientAvailable: true,\n universeId: config.universeId,\n placeId: config.placeId ?? null,\n messagingTopic: config.messagingTopic,\n dryRun: config.dryRun,\n experienceInfo,\n },\n values: {\n configured: true,\n serviceAvailable: true,\n clientAvailable: true,\n universeId: config.universeId,\n placeId: config.placeId ?? null,\n messagingTopic: config.messagingTopic,\n dryRun: config.dryRun,\n experienceName: experienceInfo?.name ?? null,\n activePlayers: experienceInfo?.playing ?? null,\n },\n };\n } catch (error) {\n runtime.logger.error({ error }, \"Error in gameStateProvider\");\n const message = error instanceof Error ? error.message : String(error);\n return {\n text: `Roblox provider error: ${message}`,\n data: { configured, error: message },\n values: { configured, error: true },\n };\n }\n },\n};\n",
10
- "import type { Provider } from \"@elizaos/core\";\nimport { gameStateProvider } from \"./gameStateProvider\";\n\nexport const robloxProviders: Provider[] = [gameStateProvider];\n\nexport { gameStateProvider };\n",
11
- "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 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\n async stop(): Promise<void> {\n this.isRunning = false;\n this.runtime.logger.info(\"Roblox agent manager stopped\");\n }\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",
12
- "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",
13
- "import type { IAgentRuntime } from \"@elizaos/core\";\nimport type { RobloxConfig } from \"../types\";\n\nexport const ROBLOX_DEFAULTS = {\n MESSAGING_TOPIC: \"eliza-agent\",\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 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 dryRun,\n };\n}\n",
14
- "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"
15
- ],
16
- "mappings": "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",
17
- "debugId": "A93F5CB897AB162864756E2164756E21",
18
- "names": []
19
- }
@@ -1,3 +0,0 @@
1
- import type { Provider } from "@elizaos/core";
2
- export declare const gameStateProvider: Provider;
3
- //# sourceMappingURL=gameStateProvider.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gameStateProvider.d.ts","sourceRoot":"","sources":["../../providers/gameStateProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAyB,QAAQ,EAAyB,MAAM,eAAe,CAAC;AAO5F,eAAO,MAAM,iBAAiB,EAAE,QAgJ/B,CAAC"}
@@ -1,5 +0,0 @@
1
- import type { Provider } from "@elizaos/core";
2
- import { gameStateProvider } from "./gameStateProvider";
3
- export declare const robloxProviders: Provider[];
4
- export { gameStateProvider };
5
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,eAAO,MAAM,eAAe,EAAE,QAAQ,EAAwB,CAAC;AAE/D,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
@@ -1,3 +0,0 @@
1
- import type { Provider } from "@elizaos/core";
2
- export declare const robloxPlayerProvider: Provider;
3
- //# sourceMappingURL=robloxPlayerProvider.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"robloxPlayerProvider.d.ts","sourceRoot":"","sources":["../../providers/robloxPlayerProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAyB,QAAQ,EAAyB,MAAM,eAAe,CAAC;AAsF5F,eAAO,MAAM,oBAAoB,EAAE,QA0FlC,CAAC"}
@@ -1,40 +0,0 @@
1
- import { type IAgentRuntime, Service, type UUID } from "@elizaos/core";
2
- import { RobloxClient } from "../client/RobloxClient";
3
- import { type ManagerHealthStatus, type RobloxConfig } from "../types";
4
- declare class RobloxAgentManager {
5
- runtime: IAgentRuntime;
6
- client: RobloxClient;
7
- config: RobloxConfig;
8
- private isRunning;
9
- constructor(runtime: IAgentRuntime, config: RobloxConfig);
10
- start(): Promise<void>;
11
- stop(): Promise<void>;
12
- sendMessage(content: string, targetPlayerIds?: number[]): Promise<void>;
13
- executeAction(actionName: string, parameters: Record<string, string | number | boolean | null>, targetPlayerIds?: number[]): Promise<void>;
14
- }
15
- export declare class RobloxService extends Service {
16
- private static instance?;
17
- private managers;
18
- static serviceType: string;
19
- readonly description = "Roblox integration service for game communication";
20
- readonly capabilityDescription = "The agent can communicate with Roblox games and players";
21
- private static getInstance;
22
- initialize(runtime: IAgentRuntime): Promise<void>;
23
- static start(runtime: IAgentRuntime): Promise<Service>;
24
- static stop(runtime: IAgentRuntime): Promise<void>;
25
- stop(): Promise<void>;
26
- getManager(agentId: UUID): RobloxAgentManager | undefined;
27
- getClient(agentId: UUID): RobloxClient | undefined;
28
- sendMessage(agentId: UUID, content: string, targetPlayerIds?: number[]): Promise<void>;
29
- executeAction(agentId: UUID, actionName: string, parameters: Record<string, string | number | boolean | null>, targetPlayerIds?: number[]): Promise<void>;
30
- healthCheck(): Promise<{
31
- healthy: boolean;
32
- details: {
33
- activeManagers: number;
34
- managerStatuses: Record<string, ManagerHealthStatus>;
35
- };
36
- }>;
37
- getActiveManagers(): Map<UUID, RobloxAgentManager>;
38
- }
39
- export {};
40
- //# sourceMappingURL=RobloxService.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RobloxService.d.ts","sourceRoot":"","sources":["../../services/RobloxService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,KAAK,mBAAmB,EAAuB,KAAK,YAAY,EAAE,MAAM,UAAU,CAAC;AAG5F,cAAM,kBAAkB;IACf,OAAO,EAAE,aAAa,CAAC;IACvB,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,YAAY,CAAC;IAC5B,OAAO,CAAC,SAAS,CAAS;gBAEd,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY;IAMlD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAYtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAKrB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBvE,aAAa,CACjB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,EAC5D,eAAe,CAAC,EAAE,MAAM,EAAE,GACzB,OAAO,CAAC,IAAI,CAAC;CAgBjB;AAED,qBAAa,aAAc,SAAQ,OAAO;IACxC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAgB;IACxC,OAAO,CAAC,QAAQ,CAAuC;IAEvD,MAAM,CAAC,WAAW,SAAuB;IAEzC,QAAQ,CAAC,WAAW,uDAAuD;IAC3E,QAAQ,CAAC,qBAAqB,6DAA6D;IAE3F,OAAO,CAAC,MAAM,CAAC,WAAW;IAOpB,UAAU,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;WAI1C,KAAK,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;WA8B/C,IAAI,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAalD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAY3B,UAAU,CAAC,OAAO,EAAE,IAAI,GAAG,kBAAkB,GAAG,SAAS;IAIzD,SAAS,CAAC,OAAO,EAAE,IAAI,GAAG,YAAY,GAAG,SAAS;IAI5C,WAAW,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAQtF,aAAa,CACjB,OAAO,EAAE,IAAI,EACb,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,EAC5D,eAAe,CAAC,EAAE,MAAM,EAAE,GACzB,OAAO,CAAC,IAAI,CAAC;IAQV,WAAW,IAAI,OAAO,CAAC;QAC3B,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE;YACP,cAAc,EAAE,MAAM,CAAC;YACvB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;SACtD,CAAC;KACH,CAAC;IA+BF,iBAAiB,IAAI,GAAG,CAAC,IAAI,EAAE,kBAAkB,CAAC;CAGnD"}
@@ -1,2 +0,0 @@
1
- export { RobloxService } from "./RobloxService";
2
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../services/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
@@ -1,124 +0,0 @@
1
- import type { UUID } from "@elizaos/core";
2
- export declare const ROBLOX_SERVICE_NAME = "roblox";
3
- export declare const ROBLOX_SOURCE = "roblox";
4
- export type JsonPrimitive = string | number | boolean | null;
5
- export type JsonValue = JsonPrimitive | JsonValue[] | {
6
- [key: string]: JsonValue;
7
- };
8
- export type JsonValueOrUndefined = JsonValue | undefined;
9
- export interface RobloxConfig {
10
- apiKey: string;
11
- universeId: string;
12
- placeId?: string;
13
- webhookSecret?: string;
14
- messagingTopic: string;
15
- dryRun: boolean;
16
- }
17
- export interface RobloxUser {
18
- id: number;
19
- username: string;
20
- displayName: string;
21
- avatarUrl?: string;
22
- createdAt?: Date;
23
- isBanned?: boolean;
24
- }
25
- export interface RobloxPlayerSession {
26
- user: RobloxUser;
27
- jobId: string;
28
- placeId: string;
29
- joinedAt: Date;
30
- }
31
- export interface RobloxGameMessage {
32
- id: string;
33
- user: RobloxUser;
34
- content: string;
35
- jobId: string;
36
- placeId: string;
37
- timestamp: Date;
38
- context?: Record<string, string>;
39
- }
40
- export interface RobloxResponse {
41
- content: string;
42
- action?: RobloxGameAction;
43
- flagged?: boolean;
44
- }
45
- export interface RobloxGameAction {
46
- name: string;
47
- parameters: Record<string, string | number | boolean | null>;
48
- targetPlayerIds?: number[];
49
- }
50
- export interface DataStoreEntry<T = JsonValue> {
51
- key: string;
52
- value: T;
53
- version: string;
54
- createdAt: Date;
55
- updatedAt: Date;
56
- }
57
- export type MessagingServiceDataValue = JsonValueOrUndefined;
58
- export interface MessagingServiceMessage {
59
- topic: string;
60
- data: Record<string, MessagingServiceDataValue>;
61
- sender?: {
62
- agentId: UUID;
63
- agentName: string;
64
- };
65
- }
66
- export declare enum RobloxEventType {
67
- PLAYER_JOINED = "roblox:player_joined",
68
- PLAYER_LEFT = "roblox:player_left",
69
- PLAYER_MESSAGE = "roblox:player_message",
70
- GAME_EVENT = "roblox:game_event",
71
- WEBHOOK_RECEIVED = "roblox:webhook_received"
72
- }
73
- export interface RobloxEventTypes {
74
- [RobloxEventType.PLAYER_JOINED]: {
75
- session: RobloxPlayerSession;
76
- };
77
- [RobloxEventType.PLAYER_LEFT]: {
78
- session: RobloxPlayerSession;
79
- duration: number;
80
- };
81
- [RobloxEventType.PLAYER_MESSAGE]: {
82
- message: RobloxGameMessage;
83
- };
84
- [RobloxEventType.GAME_EVENT]: {
85
- eventName: string;
86
- data: Record<string, string | number | boolean | null>;
87
- triggeredBy?: RobloxUser;
88
- };
89
- [RobloxEventType.WEBHOOK_RECEIVED]: {
90
- type: string;
91
- payload: Record<string, string | number | boolean | null>;
92
- };
93
- }
94
- export interface RobloxServerInfo {
95
- jobId: string;
96
- placeId: string;
97
- playerCount: number;
98
- maxPlayers: number;
99
- region?: string;
100
- uptime?: number;
101
- }
102
- export interface RobloxExperienceInfo {
103
- universeId: string;
104
- name: string;
105
- description?: string;
106
- creator: {
107
- id: number;
108
- type: "User" | "Group";
109
- name: string;
110
- };
111
- playing?: number;
112
- visits?: number;
113
- rootPlaceId: string;
114
- }
115
- export type ManagerHealthStatus = {
116
- status: "healthy";
117
- universeId: string;
118
- experienceName: string;
119
- playing?: number;
120
- } | {
121
- status: "unhealthy";
122
- error: string;
123
- };
124
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../types/index.ts"],"names":[],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- import type { IAgentRuntime } from "@elizaos/core";
2
- import type { RobloxConfig } from "../types";
3
- export declare const ROBLOX_DEFAULTS: {
4
- readonly MESSAGING_TOPIC: "eliza-agent";
5
- readonly DRY_RUN: false;
6
- };
7
- export declare function hasRobloxEnabled(runtime: IAgentRuntime): boolean;
8
- export declare function getRobloxApiKey(runtime: IAgentRuntime): string | undefined;
9
- export declare function getRobloxUniverseId(runtime: IAgentRuntime): string | undefined;
10
- export declare function validateRobloxConfig(runtime: IAgentRuntime): RobloxConfig;
11
- //# sourceMappingURL=config.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../utils/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,eAAO,MAAM,eAAe;;;CAGlB,CAAC;AAEX,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAIhE;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,GAAG,SAAS,CAE1E;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,GAAG,SAAS,CAE9E;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,aAAa,GAAG,YAAY,CA2BzE"}
@@ -1,2 +0,0 @@
1
- export * from "./config";
2
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC"}
@@ -1,3 +0,0 @@
1
- declare const _default: import("vite").UserConfig;
2
- export default _default;
3
- //# sourceMappingURL=vitest.config.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"vitest.config.d.ts","sourceRoot":"","sources":["../vitest.config.ts"],"names":[],"mappings":";AAEA,wBAMG"}