@elizaos/plugin-minecraft 2.0.3-beta.5 → 2.0.3-beta.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/actions/helpers.d.ts +18 -0
- package/dist/actions/helpers.d.ts.map +1 -0
- package/dist/actions/index.d.ts +10 -0
- package/dist/actions/index.d.ts.map +1 -0
- package/dist/actions/mc.d.ts +25 -0
- package/dist/actions/mc.d.ts.map +1 -0
- package/dist/actions/utils.d.ts +7 -0
- package/dist/actions/utils.d.ts.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1362 -0
- package/dist/index.js.map +21 -0
- package/dist/protocol.d.ts +21 -0
- package/dist/protocol.d.ts.map +1 -0
- package/dist/providers/index.d.ts +4 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/vision.d.ts +3 -0
- package/dist/providers/vision.d.ts.map +1 -0
- package/dist/providers/waypoints.d.ts +3 -0
- package/dist/providers/waypoints.d.ts.map +1 -0
- package/dist/providers/world-state.d.ts +3 -0
- package/dist/providers/world-state.d.ts.map +1 -0
- package/dist/services/minecraft-service.d.ts +32 -0
- package/dist/services/minecraft-service.d.ts.map +1 -0
- package/dist/services/process-manager.d.ts +13 -0
- package/dist/services/process-manager.d.ts.map +1 -0
- package/dist/services/waypoints-service.d.ts +29 -0
- package/dist/services/waypoints-service.d.ts.map +1 -0
- package/dist/services/websocket-client.d.ts +13 -0
- package/dist/services/websocket-client.d.ts.map +1 -0
- package/dist/types.d.ts +48 -0
- package/dist/types.d.ts.map +1 -0
- package/package.json +3 -3
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/index.ts", "../src/services/minecraft-service.ts", "../src/types.ts", "../src/services/process-manager.ts", "../src/services/websocket-client.ts", "../src/services/waypoints-service.ts", "../src/actions/utils.ts", "../src/actions/helpers.ts", "../src/actions/mc.ts", "../src/providers/vision.ts", "../src/providers/waypoints.ts", "../src/providers/world-state.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import type { IAgentRuntime, Plugin, Provider } from \"@elizaos/core\";\nimport { logger } from \"@elizaos/core\";\nimport { z } from \"zod\";\n\nexport * from \"./actions/index.js\";\nexport * from \"./protocol.js\";\nexport * from \"./providers/index.js\";\nexport * from \"./services/minecraft-service.js\";\nexport * from \"./services/process-manager.js\";\nexport * from \"./services/waypoints-service.js\";\nexport * from \"./services/websocket-client.js\";\nexport * from \"./types.js\";\n\nimport { minecraftAction } from \"./actions/index.js\";\nimport {\n minecraftVisionProvider,\n minecraftWaypointsProvider,\n minecraftWorldStateProvider,\n} from \"./providers/index.js\";\nimport { MinecraftService } from \"./services/minecraft-service.js\";\nimport { WaypointsService } from \"./services/waypoints-service.js\";\n\nconst configSchema = z.object({\n MC_SERVER_PORT: z.string().optional().default(\"3457\"),\n MC_HOST: z.string().optional().default(\"127.0.0.1\"),\n MC_PORT: z.string().optional().default(\"25565\"),\n MC_USERNAME: z.string().optional(),\n MC_AUTH: z.string().optional().default(\"offline\"),\n MC_VERSION: z.string().optional(),\n});\n\n// Backward-compatible provider reference.\nconst minecraftStateProvider: Provider = minecraftWorldStateProvider;\n\nexport const minecraftPlugin: Plugin = {\n name: \"plugin-minecraft\",\n description: \"Minecraft automation plugin (Mineflayer bridge)\",\n config: {\n MC_SERVER_PORT: process.env.MC_SERVER_PORT ?? \"3457\",\n MC_HOST: process.env.MC_HOST ?? \"127.0.0.1\",\n MC_PORT: process.env.MC_PORT ?? \"25565\",\n MC_USERNAME: process.env.MC_USERNAME ?? null,\n MC_AUTH: process.env.MC_AUTH ?? \"offline\",\n MC_VERSION: process.env.MC_VERSION ?? null,\n },\n async init(config: Record<string, string | null>, _runtime: IAgentRuntime) {\n logger.info(\"Initializing Minecraft plugin\");\n const validatedConfig = await configSchema.parseAsync(config);\n for (const [key, value] of Object.entries(validatedConfig)) {\n if (value !== undefined && value !== null) {\n process.env[key] = String(value);\n }\n }\n logger.info(\"Minecraft plugin initialized\");\n },\n services: [MinecraftService, WaypointsService],\n actions: [minecraftAction],\n providers: [minecraftStateProvider, minecraftWaypointsProvider, minecraftVisionProvider],\n async dispose(runtime) {\n await runtime.getService<WaypointsService>(WaypointsService.serviceType)?.stop();\n await runtime.getService<MinecraftService>(MinecraftService.serviceType)?.stop();\n },\n};\n\nexport default minecraftPlugin;\n",
|
|
6
|
+
"import { type IAgentRuntime, logger, Service } from \"@elizaos/core\";\nimport type { JsonObject, MinecraftBridgeRequestType } from \"../protocol.js\";\nimport {\n type MinecraftSession,\n type MinecraftWorldState,\n minecraftWorldStateSchema,\n} from \"../types.js\";\nimport { MinecraftProcessManager } from \"./process-manager.js\";\nimport { MinecraftWebSocketClient } from \"./websocket-client.js\";\n\nexport const MINECRAFT_SERVICE_TYPE = \"minecraft\" as const;\n\nexport class Session implements MinecraftSession {\n constructor(\n public botId: string,\n public createdAt: Date = new Date()\n ) {}\n}\n\nexport class MinecraftService extends Service {\n static serviceType = MINECRAFT_SERVICE_TYPE;\n capabilityDescription = \"Minecraft automation service (Mineflayer bridge)\";\n\n private session: Session | null = null;\n private processManager: MinecraftProcessManager;\n private client: MinecraftWebSocketClient;\n private isInitialized = false;\n\n constructor(runtime?: IAgentRuntime) {\n super(runtime);\n if (!runtime) throw new Error(\"MinecraftService requires a runtime\");\n this.runtime = runtime;\n const portSetting = runtime.getSetting(\"MC_SERVER_PORT\");\n const port = typeof portSetting === \"number\" ? portSetting : Number(portSetting ?? 3457);\n const serverPort = Number.isFinite(port) ? port : 3457;\n this.processManager = new MinecraftProcessManager(serverPort);\n this.client = new MinecraftWebSocketClient(this.processManager.getServerUrl());\n }\n\n static async start(runtime: IAgentRuntime): Promise<MinecraftService> {\n const service = new MinecraftService(runtime);\n try {\n await service.processManager.start();\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n logger.warn(`Failed to start Mineflayer server process: ${msg}`);\n }\n await service.initialize();\n return service;\n }\n\n async initialize(): Promise<void> {\n if (this.isInitialized) return;\n await this.client.connect();\n await this.waitForReady();\n this.isInitialized = true;\n }\n\n async stop(): Promise<void> {\n if (this.session) {\n try {\n await this.destroyBot(this.session.botId);\n } catch {}\n }\n this.client.disconnect();\n await this.processManager.stop();\n this.isInitialized = false;\n }\n\n getClient(): MinecraftWebSocketClient {\n if (!this.isInitialized) {\n throw new Error(\"Minecraft service not initialized\");\n }\n return this.client;\n }\n\n getCurrentSession(): Session | null {\n return this.session;\n }\n\n async createBot(overrides?: JsonObject): Promise<Session> {\n if (!this.isInitialized) {\n throw new Error(\"Minecraft service not initialized\");\n }\n const resp = await this.client.sendMessage(\"createBot\", undefined, overrides ?? {});\n const botId = typeof resp.data?.botId === \"string\" ? resp.data.botId : null;\n if (!botId) {\n throw new Error(\"Bridge did not return botId\");\n }\n this.session = new Session(botId);\n return this.session;\n }\n\n async destroyBot(botId: string): Promise<void> {\n if (!this.isInitialized) return;\n await this.client.sendMessage(\"destroyBot\", botId, {});\n if (this.session?.botId === botId) {\n this.session = null;\n }\n }\n\n async ensureBot(): Promise<Session> {\n if (this.session) return this.session;\n return await this.createBot();\n }\n\n async chat(message: string): Promise<void> {\n const session = await this.ensureBot();\n await this.client.sendMessage(\"chat\", session.botId, { message });\n }\n\n async request(type: MinecraftBridgeRequestType, data: JsonObject): Promise<JsonObject> {\n const session = await this.ensureBot();\n const resp = await this.client.sendMessage(type, session.botId, data);\n return resp.data ?? {};\n }\n\n async getWorldState(): Promise<MinecraftWorldState> {\n if (!this.session) {\n return { connected: false };\n }\n const resp = await this.client.sendMessage(\"getState\", this.session.botId, {});\n return minecraftWorldStateSchema.parse(resp.data ?? { connected: false });\n }\n\n private async waitForReady(maxAttempts: number = 20, delayMs: number = 500): Promise<void> {\n for (let i = 0; i < maxAttempts; i++) {\n try {\n if (await this.client.health()) return;\n } catch {}\n await new Promise((r) => setTimeout(r, delayMs));\n }\n throw new Error(\"Mineflayer bridge server did not become ready\");\n }\n}\n",
|
|
7
|
+
"import { z } from \"zod\";\nimport type { JsonObject } from \"./protocol.js\";\n\nexport interface MinecraftSession {\n botId: string;\n createdAt: Date;\n}\n\nexport interface MinecraftActionResult {\n success: boolean;\n data?: JsonObject;\n error?: string;\n}\n\nexport const minecraftWorldStateSchema = z\n .object({\n connected: z.boolean(),\n username: z.string().nullable().optional(),\n version: z.string().nullable().optional(),\n health: z.number().nullable().optional(),\n food: z.number().nullable().optional(),\n experience: z.number().nullable().optional(),\n position: z.object({ x: z.number(), y: z.number(), z: z.number() }).nullable().optional(),\n yaw: z.number().nullable().optional(),\n pitch: z.number().nullable().optional(),\n time: z.number().nullable().optional(),\n isRaining: z.boolean().nullable().optional(),\n inventory: z\n .array(\n z.object({\n name: z.string(),\n displayName: z.string(),\n count: z.number(),\n slot: z.number(),\n })\n )\n .optional(),\n nearbyEntities: z\n .array(\n z.object({\n id: z.number(),\n type: z.string(),\n name: z.string().nullable(),\n username: z.string().nullable(),\n kind: z.string().nullable(),\n position: z.object({ x: z.number(), y: z.number(), z: z.number() }),\n })\n )\n .optional(),\n })\n .passthrough();\n\nexport type MinecraftWorldState = z.infer<typeof minecraftWorldStateSchema>;\n",
|
|
8
|
+
"import { type ChildProcess, spawn } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { logger } from \"@elizaos/core\";\n\nexport class MinecraftProcessManager {\n private process: ChildProcess | null = null;\n private isRunning = false;\n private entryPath: string | null = null;\n\n constructor(private serverPort: number) {\n this.entryPath = this.findEntry();\n }\n\n private findEntry(): string | null {\n const moduleDir = dirname(fileURLToPath(import.meta.url));\n\n const possible = [\n // monorepo dev path\n join(moduleDir, \"../../../mineflayer-server/dist/index.js\"),\n join(moduleDir, \"../../../mineflayer-server/src/index.ts\"),\n // installed package layout\n join(moduleDir, \"../../../../mineflayer-server/dist/index.js\"),\n join(moduleDir, \"../../../../mineflayer-server/src/index.ts\"),\n ];\n\n for (const p of possible) {\n if (existsSync(p)) {\n logger.info(`Found mineflayer-server entry at: ${p}`);\n return p;\n }\n }\n\n logger.error(\"Could not find mineflayer-server entry file\");\n logger.error(`Searched paths: ${possible.join(\", \")}`);\n return null;\n }\n\n async start(): Promise<void> {\n if (this.isRunning) return;\n if (!this.entryPath) {\n throw new Error(\"mineflayer-server entry not found (run: bun run build:server)\");\n }\n\n const env = {\n ...process.env,\n MC_SERVER_PORT: this.serverPort.toString(),\n NODE_ENV: process.env.NODE_ENV ?? \"production\",\n };\n\n const entry = this.entryPath;\n const isTypeScript = entry.endsWith(\".ts\");\n\n return await new Promise((resolve, reject) => {\n if (isTypeScript) {\n const require = createRequire(import.meta.url);\n const tsxPath = require.resolve(\"tsx/cli\", { paths: [process.cwd()] });\n this.process = spawn(\"node\", [tsxPath, entry], { env });\n } else {\n this.process = spawn(\"node\", [entry], { env });\n }\n\n this.process.stdout?.on(\"data\", (data: Buffer) => {\n const msg = data.toString().trim();\n logger.debug(`[MinecraftServer] ${msg}`);\n if (msg.includes(\"listening on port\")) {\n this.isRunning = true;\n resolve();\n }\n });\n\n this.process.stderr?.on(\"data\", (data: Buffer) => {\n logger.error(`[MinecraftServer Error] ${data.toString()}`);\n });\n\n this.process.on(\"error\", (err) => {\n this.isRunning = false;\n reject(err);\n });\n\n this.process.on(\"exit\", (code) => {\n logger.info(`Minecraft server process exited with code ${code ?? \"unknown\"}`);\n this.isRunning = false;\n });\n\n // If stdout doesn't include the readiness line, rely on a timeout.\n setTimeout(() => {\n if (!this.isRunning) {\n reject(new Error(\"mineflayer-server failed to start (timeout)\"));\n }\n }, 15_000);\n });\n }\n\n async stop(): Promise<void> {\n if (!this.process || !this.isRunning) return;\n await new Promise<void>((resolve) => {\n this.process?.on(\"exit\", () => resolve());\n this.process?.kill(\"SIGTERM\");\n setTimeout(() => {\n if (this.isRunning && this.process) {\n this.process.kill(\"SIGKILL\");\n }\n }, 5000);\n });\n }\n\n isServerRunning(): boolean {\n return this.isRunning;\n }\n\n getServerUrl(): string {\n return `ws://localhost:${this.serverPort}`;\n }\n}\n",
|
|
9
|
+
"import { logger } from \"@elizaos/core\";\nimport WebSocket from \"ws\";\nimport { z } from \"zod\";\nimport type {\n JsonObject,\n JsonValue,\n MinecraftBridgeRequest,\n MinecraftBridgeRequestType,\n MinecraftBridgeResponse,\n} from \"../protocol.js\";\n\nconst jsonValueSchema: z.ZodType<JsonValue> = z.lazy(() =>\n z.union([\n z.null(),\n z.boolean(),\n z.number(),\n z.string(),\n z.array(jsonValueSchema),\n z.record(z.string(), jsonValueSchema),\n ])\n);\n\nconst responseSchema = z.object({\n type: z.string(),\n requestId: z.string(),\n success: z.boolean(),\n data: z.record(z.string(), jsonValueSchema).optional(),\n error: z.string().optional(),\n});\n\ntype PendingResolver = (value: MinecraftBridgeResponse) => void;\ntype PendingRejecter = (reason: Error) => void;\n\ntype PendingEntry = {\n resolve: PendingResolver;\n reject: PendingRejecter;\n timeoutId: ReturnType<typeof setTimeout>;\n};\n\nexport class MinecraftWebSocketClient {\n private ws: WebSocket | null = null;\n private pending = new Map<string, PendingEntry>();\n\n constructor(private serverUrl: string) {}\n\n async connect(): Promise<void> {\n if (this.ws && this.ws.readyState === WebSocket.OPEN) return;\n\n await new Promise<void>((resolve, reject) => {\n const ws = new WebSocket(this.serverUrl);\n this.ws = ws;\n\n ws.on(\"open\", () => resolve());\n ws.on(\"error\", (err) => reject(err));\n ws.on(\"message\", (data) => this.onMessage(data.toString(\"utf8\")));\n ws.on(\"close\", () => {\n // reject all pending\n for (const [requestId, entry] of this.pending) {\n clearTimeout(entry.timeoutId);\n entry.reject(new Error(`WebSocket closed while waiting for ${requestId}`));\n }\n this.pending.clear();\n });\n });\n\n logger.info(`[Minecraft] Connected to ${this.serverUrl}`);\n }\n\n disconnect(): void {\n this.ws?.close();\n this.ws = null;\n }\n\n async health(): Promise<boolean> {\n const resp = await this.sendMessage(\"health\", undefined, {});\n return resp.success && resp.data?.status === \"ok\";\n }\n\n async sendMessage(\n type: MinecraftBridgeRequestType,\n botId: string | undefined,\n data: JsonObject,\n timeoutMs: number = 30_000\n ): Promise<MinecraftBridgeResponse> {\n const ws = this.ws;\n if (!ws || ws.readyState !== WebSocket.OPEN) {\n throw new Error(\"Not connected to Mineflayer bridge server\");\n }\n\n const requestId = `${Date.now()}-${Math.random().toString(16).slice(2)}`;\n const msg: MinecraftBridgeRequest = {\n type,\n requestId,\n ...(botId ? { botId } : {}),\n ...(Object.keys(data).length > 0 ? { data } : {}),\n };\n\n const payload = JSON.stringify(msg);\n\n const response = await new Promise<MinecraftBridgeResponse>((resolve, reject) => {\n const timeoutId = setTimeout(() => {\n this.pending.delete(requestId);\n reject(new Error(`Request timeout: ${type}`));\n }, timeoutMs);\n\n this.pending.set(requestId, { resolve, reject, timeoutId });\n ws.send(payload, (err) => {\n if (err) {\n clearTimeout(timeoutId);\n this.pending.delete(requestId);\n reject(err);\n }\n });\n });\n\n if (!response.success) {\n throw new Error(response.error ?? `Request failed: ${type}`);\n }\n\n return response;\n }\n\n private onMessage(text: string): void {\n let parsed: MinecraftBridgeResponse;\n try {\n const json = JSON.parse(text) as JsonValue;\n parsed = responseSchema.parse(json) as MinecraftBridgeResponse;\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n logger.error(`[Minecraft] Failed to parse server message: ${msg}`);\n return;\n }\n\n const pending = this.pending.get(parsed.requestId);\n if (!pending) return;\n clearTimeout(pending.timeoutId);\n this.pending.delete(parsed.requestId);\n pending.resolve(parsed);\n }\n}\n",
|
|
10
|
+
"import type {\n Content,\n CustomMetadata,\n IAgentRuntime,\n Memory,\n MemoryMetadata,\n UUID,\n} from \"@elizaos/core\";\nimport { ChannelType, MemoryType, Service, stringToUuid } from \"@elizaos/core\";\n\nexport const WAYPOINTS_SERVICE_TYPE = \"minecraft_waypoints\" as const;\n\nexport type Waypoint = {\n id: UUID;\n name: string;\n x: number;\n y: number;\n z: number;\n createdAt: Date;\n};\n\ntype WaypointMetadata = CustomMetadata & {\n waypointType: \"minecraft_waypoint\";\n waypointName: string;\n x: number;\n y: number;\n z: number;\n};\n\nexport class WaypointsService extends Service {\n static serviceType = WAYPOINTS_SERVICE_TYPE;\n capabilityDescription = \"Minecraft waypoint storage and navigation helpers\";\n\n private waypoints = new Map<string, Waypoint>();\n private waypointsRoomId: UUID;\n private waypointsWorldId: UUID;\n\n constructor(runtime?: IAgentRuntime) {\n super(runtime);\n if (!runtime) {\n throw new Error(\"WaypointsService requires a runtime\");\n }\n this.runtime = runtime;\n\n // Dedicated context for waypoint persistence.\n this.waypointsWorldId = stringToUuid(\"00000000-0000-0000-0000-00000000a001\");\n this.waypointsRoomId = stringToUuid(`minecraft-waypoints:${runtime.agentId}`);\n }\n\n static async start(runtime: IAgentRuntime): Promise<WaypointsService> {\n const service = new WaypointsService(runtime);\n await service.initialize();\n return service;\n }\n\n async stop(): Promise<void> {\n // In-memory only; nothing to tear down.\n }\n\n private async initialize(): Promise<void> {\n // Ensure the world/room exist when supported (so memories are properly scoped).\n if (this.runtime.ensureWorldExists) {\n await this.runtime.ensureWorldExists({\n id: this.waypointsWorldId,\n name: \"Minecraft Waypoints\",\n agentId: this.runtime.agentId,\n messageServerId: stringToUuid(\"00000000-0000-0000-0000-000000000000\"),\n metadata: {\n type: \"minecraft\",\n description: \"Persistent waypoint storage\",\n },\n });\n }\n if (this.runtime.ensureRoomExists) {\n await this.runtime.ensureRoomExists({\n id: this.waypointsRoomId,\n name: \"Minecraft Waypoints\",\n worldId: this.waypointsWorldId,\n source: \"plugin-minecraft\",\n type: ChannelType.SELF,\n metadata: {\n type: \"minecraft\",\n description: \"Persistent waypoint storage\",\n },\n });\n }\n if (this.runtime.ensureParticipantInRoom) {\n await this.runtime.ensureParticipantInRoom(this.runtime.agentId, this.waypointsRoomId);\n }\n\n // Load existing waypoint memories (persisted by plugin-sql or any durable adapter).\n const memories = await this.runtime.getMemories({\n roomId: this.waypointsRoomId,\n count: 500,\n tableName: \"memories\",\n });\n\n for (const m of memories) {\n const md = m.metadata;\n if (!md || md.type !== MemoryType.CUSTOM) continue;\n const cmd = md as WaypointMetadata;\n if (cmd.waypointType !== \"minecraft_waypoint\") continue;\n if (typeof cmd.waypointName !== \"string\") continue;\n if (typeof cmd.x !== \"number\" || typeof cmd.y !== \"number\" || typeof cmd.z !== \"number\")\n continue;\n\n const key = cmd.waypointName.trim().toLowerCase();\n const createdAt = typeof m.createdAt === \"number\" ? new Date(m.createdAt) : new Date();\n const id = m.id ?? stringToUuid(`mc-waypoint:${this.runtime.agentId}:${key}`);\n this.waypoints.set(key, {\n id,\n name: cmd.waypointName,\n x: cmd.x,\n y: cmd.y,\n z: cmd.z,\n createdAt,\n });\n }\n }\n\n private waypointIdForKey(key: string): UUID {\n return stringToUuid(`mc-waypoint:${this.runtime.agentId}:${key}`);\n }\n\n private buildWaypointMemory(_key: string, wp: Waypoint): Memory {\n const createdAt = Date.now();\n const content: Content = {\n text: `Waypoint \"${wp.name}\" at (${wp.x}, ${wp.y}, ${wp.z})`,\n source: \"plugin-minecraft\",\n };\n const metadata: WaypointMetadata = {\n type: MemoryType.CUSTOM,\n scope: \"private\",\n waypointType: \"minecraft_waypoint\",\n waypointName: wp.name,\n x: wp.x,\n y: wp.y,\n z: wp.z,\n tags: [\"minecraft\", \"waypoint\"],\n timestamp: createdAt,\n };\n\n return {\n id: wp.id,\n entityId: this.runtime.agentId,\n agentId: this.runtime.agentId,\n roomId: this.waypointsRoomId,\n worldId: this.waypointsWorldId,\n createdAt,\n content,\n metadata: metadata as MemoryMetadata,\n unique: true,\n };\n }\n\n async setWaypoint(name: string, x: number, y: number, z: number): Promise<Waypoint> {\n const key = name.trim().toLowerCase();\n const wp: Waypoint = {\n id: this.waypointIdForKey(key),\n name: name.trim(),\n x,\n y,\n z,\n createdAt: new Date(),\n };\n this.waypoints.set(key, wp);\n\n const memory = this.buildWaypointMemory(key, wp);\n // Upsert as a memory record; durable when plugin-sql (or another durable adapter) is enabled.\n const existing = await this.runtime.getMemories({\n roomId: this.waypointsRoomId,\n count: 1,\n tableName: \"memories\",\n });\n if (existing.some((m) => m.id === wp.id)) {\n await this.runtime.updateMemory({\n id: wp.id,\n content: memory.content,\n metadata: memory.metadata,\n });\n } else {\n await this.runtime.createMemory(memory, \"memories\", true);\n }\n\n return wp;\n }\n\n async deleteWaypoint(name: string): Promise<boolean> {\n const key = name.trim().toLowerCase();\n const wp = this.waypoints.get(key);\n const deleted = this.waypoints.delete(key);\n if (wp) {\n await this.runtime.deleteMemory(wp.id);\n }\n return deleted;\n }\n\n getWaypoint(name: string): Waypoint | null {\n const key = name.trim().toLowerCase();\n return this.waypoints.get(key) ?? null;\n }\n\n listWaypoints(): Waypoint[] {\n return Array.from(this.waypoints.values()).sort(\n (a, b) => a.createdAt.getTime() - b.createdAt.getTime()\n );\n }\n}\n",
|
|
11
|
+
"import { z } from \"zod\";\n\nexport type Vec3 = { x: number; y: number; z: number };\n\nconst vec3Schema = z.object({ x: z.number(), y: z.number(), z: z.number() });\n\nexport function extractVec3(text: string): Vec3 | null {\n // Supports either JSON object or bare \"x y z\" numbers in the message.\n const trimmed = text.trim();\n if (trimmed.startsWith(\"{\") && trimmed.endsWith(\"}\")) {\n try {\n const parsed = JSON.parse(trimmed) as {\n x?: number;\n y?: number;\n z?: number;\n };\n const v = vec3Schema.parse(parsed);\n return v;\n } catch {\n // fallthrough to regex\n }\n }\n\n const m = trimmed.match(/(-?\\d+(?:\\.\\d+)?)\\s+(-?\\d+(?:\\.\\d+)?)\\s+(-?\\d+(?:\\.\\d+)?)/);\n if (!m) return null;\n const x = Number(m[1]);\n const y = Number(m[2]);\n const z = Number(m[3]);\n if (!Number.isFinite(x) || !Number.isFinite(y) || !Number.isFinite(z)) return null;\n return { x, y, z };\n}\n",
|
|
12
|
+
"import type {\n ActionParameters,\n ActionResult,\n Content,\n HandlerCallback,\n HandlerOptions,\n Memory,\n} from \"@elizaos/core\";\nimport type { JsonValue } from \"../protocol.js\";\nimport { extractVec3, type Vec3 } from \"./utils.js\";\n\nconst MINECRAFT_ACTION_TIMEOUT_MS = 15_000;\nconst MAX_MINECRAFT_TEXT_LENGTH = 2000;\nconst MAX_MINECRAFT_ARRAY_ITEMS = 25;\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value && typeof value === \"object\" && !Array.isArray(value));\n}\n\nexport function parseJsonObject(text: string): Record<string, unknown> {\n const trimmed = text.trim();\n if (!trimmed.startsWith(\"{\") || !trimmed.endsWith(\"}\")) return {};\n try {\n const parsed = JSON.parse(trimmed) as unknown;\n return isRecord(parsed) ? parsed : {};\n } catch {\n return {};\n }\n}\n\nexport function readParams(\n options?: HandlerOptions | Record<string, JsonValue | undefined>\n): Record<string, unknown> {\n const maybe = isRecord(options) && isRecord(options.parameters) ? options.parameters : {};\n return maybe as ActionParameters;\n}\n\nexport function 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\nexport function 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\nexport function 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\nexport function readBoolean(params: Record<string, unknown>, ...keys: string[]): boolean | null {\n for (const key of keys) {\n const value = params[key];\n if (typeof value === \"boolean\") return value;\n if (typeof value === \"string\") {\n const normalized = value.trim().toLowerCase();\n if (normalized === \"true\") return true;\n if (normalized === \"false\") return false;\n }\n }\n return null;\n}\n\nexport function parseVec3(params: Record<string, unknown>, text: string): Vec3 | null {\n const x = readNumber(params, \"x\");\n const y = readNumber(params, \"y\");\n const z = readNumber(params, \"z\");\n if (x !== null && y !== null && z !== null) return { x, y, z };\n return extractVec3(text);\n}\n\nexport type PlaceFace = \"up\" | \"down\" | \"north\" | \"south\" | \"east\" | \"west\";\n\nexport function isPlaceFace(value: string | null): value is PlaceFace {\n return (\n value === \"up\" ||\n value === \"down\" ||\n value === \"north\" ||\n value === \"south\" ||\n value === \"east\" ||\n value === \"west\"\n );\n}\n\nexport function callbackContent(actionName: string, text: string, source: unknown): Content {\n return {\n text,\n actions: [actionName],\n source: typeof source === \"string\" ? source : undefined,\n };\n}\n\nexport async function emit(\n actionName: string,\n callback: HandlerCallback | undefined,\n text: string,\n source: unknown,\n result: Omit<ActionResult, \"text\">\n): Promise<ActionResult> {\n const content = callbackContent(actionName, text.slice(0, MAX_MINECRAFT_TEXT_LENGTH), source);\n await callback?.(content, actionName);\n return { text: content.text ?? text, ...result };\n}\n\nexport async function withMinecraftTimeout<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`)), MINECRAFT_ACTION_TIMEOUT_MS)\n ),\n ]);\n}\n\nexport function capMinecraftData<T>(value: T): T {\n if (Array.isArray(value)) return value.slice(0, MAX_MINECRAFT_ARRAY_ITEMS) as T;\n return value;\n}\n",
|
|
13
|
+
"/**\n * MC — single Pattern C parent action that absorbs the seven leaves\n * (MC_ATTACK, MC_BLOCK, MC_CHAT, MC_CONNECT, MC_DISCONNECT, MC_LOCOMOTE,\n * MC_WAYPOINT) into a single planner-facing surface.\n *\n * Op set:\n * connect { host?, port?, username?, auth?, version? }\n * disconnect { }\n * goto { x, y, z }\n * stop { }\n * look { yaw, pitch }\n * control { control, state, durationMs? }\n * waypoint_goto { name }\n * dig { x, y, z }\n * place { x, y, z, face }\n * chat { message }\n * attack { entityId }\n * waypoint_set { name }\n * waypoint_delete { name }\n *\n * Old leaf names are kept as similes for trace continuity.\n */\n\nimport type {\n Action,\n ActionResult,\n HandlerCallback,\n HandlerOptions,\n IAgentRuntime,\n Memory,\n State,\n} from \"@elizaos/core\";\nimport type { JsonObject, JsonValue } from \"../protocol.js\";\nimport { MINECRAFT_SERVICE_TYPE, type MinecraftService } from \"../services/minecraft-service.js\";\nimport { WAYPOINTS_SERVICE_TYPE, type WaypointsService } from \"../services/waypoints-service.js\";\nimport {\n emit,\n isPlaceFace,\n mergedInput,\n type PlaceFace,\n parseVec3,\n readBoolean,\n readNumber,\n readString,\n withMinecraftTimeout,\n} from \"./helpers.js\";\n\nconst ACTION_NAME = \"MC\";\n\ntype McOp =\n | \"connect\"\n | \"disconnect\"\n | \"goto\"\n | \"stop\"\n | \"look\"\n | \"control\"\n | \"waypoint_goto\"\n | \"dig\"\n | \"place\"\n | \"chat\"\n | \"attack\"\n | \"waypoint_set\"\n | \"waypoint_delete\";\n\nconst MC_OPS: readonly McOp[] = [\n \"connect\",\n \"disconnect\",\n \"goto\",\n \"stop\",\n \"look\",\n \"control\",\n \"waypoint_goto\",\n \"dig\",\n \"place\",\n \"chat\",\n \"attack\",\n \"waypoint_set\",\n \"waypoint_delete\",\n] as const;\n\nfunction normalizeOp(value: unknown): McOp | null {\n if (typeof value !== \"string\") return null;\n const normalized = value\n .trim()\n .replace(/[\\s-]+/g, \"_\")\n .toLowerCase();\n switch (normalized) {\n case \"connect\":\n case \"join\":\n case \"mc_connect\":\n return \"connect\";\n case \"disconnect\":\n case \"leave\":\n case \"quit\":\n case \"mc_disconnect\":\n return \"disconnect\";\n case \"goto\":\n case \"go_to\":\n case \"move\":\n case \"walk\":\n case \"pathfind\":\n return \"goto\";\n case \"stop\":\n case \"cancel\":\n return \"stop\";\n case \"look\":\n case \"view\":\n case \"turn\":\n return \"look\";\n case \"control\":\n case \"press\":\n case \"key\":\n return \"control\";\n case \"waypoint_goto\":\n case \"waypointgoto\":\n case \"navigate\":\n return \"waypoint_goto\";\n case \"dig\":\n case \"mine\":\n case \"break\":\n return \"dig\";\n case \"place\":\n case \"build\":\n return \"place\";\n case \"chat\":\n case \"say\":\n case \"tell\":\n case \"message\":\n case \"mc_chat\":\n return \"chat\";\n case \"attack\":\n case \"hit\":\n case \"mc_attack\":\n return \"attack\";\n case \"waypoint_set\":\n case \"waypointset\":\n case \"save_waypoint\":\n return \"waypoint_set\";\n case \"waypoint_delete\":\n case \"waypointdelete\":\n case \"delete_waypoint\":\n return \"waypoint_delete\";\n default:\n return MC_OPS.includes(normalized as McOp) ? (normalized as McOp) : null;\n }\n}\n\nfunction parseConnectOverrides(params: Record<string, unknown>): JsonObject {\n const out: JsonObject = {};\n const host = readString(params, \"host\");\n const port = readNumber(params, \"port\");\n const username = readString(params, \"username\");\n const auth = readString(params, \"auth\");\n const version = readString(params, \"version\");\n if (host) out.host = host;\n if (port !== null && Number.isInteger(port) && port > 0) out.port = port;\n if (username) out.username = username;\n if (auth === \"offline\" || auth === \"microsoft\") out.auth = auth;\n if (version) out.version = version;\n return out;\n}\n\nfunction parseControl(\n params: Record<string, unknown>,\n text: string\n): { control: string; state: boolean; durationMs?: number } | null {\n const control = readString(params, \"control\", \"key\", \"direction\");\n const state = readBoolean(params, \"state\", \"pressed\", \"enabled\");\n const durationMs = readNumber(params, \"durationMs\", \"duration\");\n if (control && state !== null) {\n return durationMs && durationMs > 0 ? { control, state, durationMs } : { control, state };\n }\n const match = text.trim().match(/^(\\S+)\\s+(true|false)(?:\\s+(\\d+))?$/i);\n if (!match) return null;\n const parsedDuration = match[3] ? Number(match[3]) : undefined;\n if (parsedDuration !== undefined && !Number.isFinite(parsedDuration)) return null;\n return parsedDuration\n ? {\n control: match[1],\n state: match[2].toLowerCase() === \"true\",\n durationMs: parsedDuration,\n }\n : { control: match[1], state: match[2].toLowerCase() === \"true\" };\n}\n\nfunction parseLook(\n params: Record<string, unknown>,\n text: string\n): { yaw: number; pitch: number } | null {\n const yaw = readNumber(params, \"yaw\");\n const pitch = readNumber(params, \"pitch\");\n if (yaw !== null && pitch !== null) return { yaw, pitch };\n const match = text.trim().match(/(-?\\d+(?:\\.\\d+)?)\\s+(-?\\d+(?:\\.\\d+)?)/);\n if (!match) return null;\n const parsedYaw = Number(match[1]);\n const parsedPitch = Number(match[2]);\n if (!Number.isFinite(parsedYaw) || !Number.isFinite(parsedPitch)) return null;\n return { yaw: parsedYaw, pitch: parsedPitch };\n}\n\nfunction parseWaypointName(text: string, params: Record<string, unknown>): string | null {\n const explicit = readString(params, \"name\", \"waypointName\", \"waypoint\", \"target\");\n if (explicit) return explicit;\n const stripped = text\n .trim()\n .replace(\n /\\b(?:minecraft|mc|waypoints?|set|save|create|delete|remove|goto|go to|navigate|to)\\b/gi,\n \" \"\n )\n .replace(/\\s+/g, \" \")\n .trim();\n return stripped || null;\n}\n\nfunction parsePlaceFace(params: Record<string, unknown>, text: string): PlaceFace | null {\n const explicit = readString(params, \"face\");\n if (isPlaceFace(explicit)) return explicit;\n const match = text.trim().match(/\\b(up|down|north|south|east|west)\\b/i);\n if (!match) return null;\n const candidate = match[1].toLowerCase();\n return isPlaceFace(candidate) ? candidate : null;\n}\n\nfunction parseEntityId(params: Record<string, unknown>, text: string): number | null {\n const fromParams = readNumber(params, \"entityId\", \"entity\");\n if (fromParams !== null) return fromParams;\n const match = text.trim().match(/\\b(?:entity\\s*)?(\\d+)\\b/i);\n if (!match) return null;\n const entityId = Number(match[1]);\n return Number.isFinite(entityId) ? entityId : null;\n}\n\nconst MC_SIMILES = [\n \"MC_ATTACK\",\n \"MC_HIT\",\n \"MC_BLOCK\",\n \"MC_DIG\",\n \"MC_PLACE\",\n \"MC_BUILD\",\n \"MC_MINE\",\n \"MC_CHAT\",\n \"MC_SAY\",\n \"MC_MESSAGE\",\n \"MC_CONNECT\",\n \"MC_JOIN\",\n \"MINECRAFT_CONNECT\",\n \"MC_DISCONNECT\",\n \"MC_LEAVE\",\n \"MC_QUIT\",\n \"MC_LOCOMOTE\",\n \"MC_MOVE\",\n \"MC_GOTO\",\n \"MC_STOP\",\n \"MC_LOOK\",\n \"MC_CONTROL\",\n \"MC_WAYPOINT\",\n \"MC_WAYPOINT_SET\",\n \"MC_WAYPOINT_DELETE\",\n \"MC_WAYPOINT_GOTO\",\n];\n\nexport const minecraftAction: Action = {\n name: ACTION_NAME,\n contexts: [\"connectors\", \"automation\", \"media\", \"messaging\", \"memory\"],\n contextGate: {\n anyOf: [\"connectors\", \"automation\", \"media\", \"messaging\", \"memory\"],\n },\n roleGate: { minRole: \"USER\" },\n similes: MC_SIMILES,\n description:\n \"Drive a Minecraft bot. Choose one action: connect (host?,port?,username?,auth?,version?), disconnect, goto (x,y,z), stop, look (yaw,pitch), control (control,state,durationMs?), waypoint_goto (name), dig (x,y,z), place (x,y,z,face), chat (message), attack (entityId), waypoint_set (name), waypoint_delete (name).\",\n descriptionCompressed:\n \"minecraft ops: connect|disconnect|goto|stop|look|control|waypoint_*|dig|place|chat|attack\",\n parameters: [\n {\n name: \"action\",\n description: \"Operation to run.\",\n descriptionCompressed: \"Action.\",\n required: true,\n schema: { type: \"string\", enum: MC_OPS as string[] },\n },\n {\n name: \"params\",\n description: \"Optional JSON object containing the fields required by the chosen op.\",\n descriptionCompressed: \"Op fields.\",\n required: false,\n schema: { type: \"object\" },\n },\n ],\n validate: async (runtime: IAgentRuntime, _message: Memory, _state?: State): Promise<boolean> => {\n return runtime.getService<MinecraftService>(MINECRAFT_SERVICE_TYPE) != null;\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<MinecraftService>(MINECRAFT_SERVICE_TYPE);\n if (!service) return { text: \"Minecraft service is not available\", success: false };\n\n const params = mergedInput(message, options);\n const text = message.content.text ?? \"\";\n const op = normalizeOp(\n params.action ?? params.subaction ?? params.op ?? params.actionType ?? params.type\n );\n if (!op) {\n return emit(\n ACTION_NAME,\n callback,\n `MC requires action: one of ${MC_OPS.join(\"|\")}.`,\n message.content.source,\n { success: false }\n );\n }\n\n try {\n switch (op) {\n case \"connect\": {\n const session = await withMinecraftTimeout(\n service.createBot(parseConnectOverrides(params)),\n \"minecraft connect\"\n );\n return await emit(\n ACTION_NAME,\n callback,\n `Connected Minecraft bot (botId=${session.botId}).`,\n message.content.source,\n {\n success: true,\n data: { botId: session.botId },\n values: { connected: true },\n }\n );\n }\n case \"disconnect\": {\n const session = service.getCurrentSession();\n if (!session) {\n return emit(\n ACTION_NAME,\n callback,\n \"No Minecraft bot is connected.\",\n message.content.source,\n { success: false }\n );\n }\n await withMinecraftTimeout(service.destroyBot(session.botId), \"minecraft disconnect\");\n return await emit(\n ACTION_NAME,\n callback,\n \"Disconnected Minecraft bot.\",\n message.content.source,\n { success: true, values: { connected: false } }\n );\n }\n case \"stop\": {\n await withMinecraftTimeout(service.request(\"stop\", {}), \"minecraft stop\");\n return await emit(ACTION_NAME, callback, \"Stopped movement.\", message.content.source, {\n success: true,\n });\n }\n case \"goto\": {\n const vec = parseVec3(params, text);\n if (!vec) {\n return emit(\n ACTION_NAME,\n callback,\n \"Missing coordinates (x y z).\",\n message.content.source,\n { success: false }\n );\n }\n await withMinecraftTimeout(\n service.request(\"goto\", { x: vec.x, y: vec.y, z: vec.z }),\n \"minecraft goto\"\n );\n return await emit(\n ACTION_NAME,\n callback,\n `Moving to (${vec.x}, ${vec.y}, ${vec.z}).`,\n message.content.source,\n { success: true }\n );\n }\n case \"look\": {\n const req = parseLook(params, text);\n if (!req) {\n return emit(ACTION_NAME, callback, \"Missing yaw/pitch.\", message.content.source, {\n success: false,\n });\n }\n await withMinecraftTimeout(\n service.request(\"look\", { yaw: req.yaw, pitch: req.pitch }),\n \"minecraft look\"\n );\n return await emit(ACTION_NAME, callback, \"Adjusted view.\", message.content.source, {\n success: true,\n });\n }\n case \"control\": {\n const req = parseControl(params, text);\n if (!req) {\n return emit(ACTION_NAME, callback, \"Missing control command.\", message.content.source, {\n success: false,\n });\n }\n await withMinecraftTimeout(\n service.request(\"control\", {\n control: req.control,\n state: req.state,\n ...(typeof req.durationMs === \"number\"\n ? { durationMs: Math.min(req.durationMs, 10_000) }\n : {}),\n }),\n \"minecraft control\"\n );\n return await emit(\n ACTION_NAME,\n callback,\n `Set control ${req.control}=${String(req.state)}${req.durationMs ? ` for ${req.durationMs}ms` : \"\"}.`,\n message.content.source,\n { success: true }\n );\n }\n case \"waypoint_goto\": {\n const waypoints = runtime.getService<WaypointsService>(WAYPOINTS_SERVICE_TYPE);\n if (!waypoints) {\n return emit(\n ACTION_NAME,\n callback,\n \"Waypoints service not available.\",\n message.content.source,\n { success: false }\n );\n }\n const name = parseWaypointName(text, params);\n if (!name) {\n return emit(ACTION_NAME, callback, \"Missing waypoint name.\", message.content.source, {\n success: false,\n });\n }\n const wp = waypoints.getWaypoint(name);\n if (!wp) {\n return emit(\n ACTION_NAME,\n callback,\n `No waypoint named \"${name}\".`,\n message.content.source,\n { success: false }\n );\n }\n await withMinecraftTimeout(\n service.request(\"goto\", { x: wp.x, y: wp.y, z: wp.z }),\n \"minecraft waypoint goto\"\n );\n return await emit(\n ACTION_NAME,\n callback,\n `Navigating to waypoint \"${wp.name}\" at (${wp.x.toFixed(1)}, ${wp.y.toFixed(1)}, ${wp.z.toFixed(1)}).`,\n message.content.source,\n { success: true }\n );\n }\n case \"dig\": {\n const vec = parseVec3(params, text);\n if (!vec) {\n return emit(\n ACTION_NAME,\n callback,\n \"Missing coordinates (x y z).\",\n message.content.source,\n { success: false }\n );\n }\n const data = await withMinecraftTimeout(\n service.request(\"dig\", { x: vec.x, y: vec.y, z: vec.z }),\n \"minecraft dig\"\n );\n const blockName = typeof data.blockName === \"string\" ? data.blockName : \"block\";\n return await emit(\n ACTION_NAME,\n callback,\n `Dug ${blockName} at (${vec.x}, ${vec.y}, ${vec.z}).`,\n message.content.source,\n { success: true, data }\n );\n }\n case \"place\": {\n const vec = parseVec3(params, text);\n if (!vec) {\n return emit(\n ACTION_NAME,\n callback,\n \"Missing coordinates (x y z).\",\n message.content.source,\n { success: false }\n );\n }\n const face = parsePlaceFace(params, text);\n if (!face) {\n return emit(\n ACTION_NAME,\n callback,\n \"Missing placement face (up/down/north/south/east/west).\",\n message.content.source,\n { success: false }\n );\n }\n await withMinecraftTimeout(\n service.request(\"place\", { x: vec.x, y: vec.y, z: vec.z, face }),\n \"minecraft place\"\n );\n return await emit(\n ACTION_NAME,\n callback,\n `Placed block at (${vec.x}, ${vec.y}, ${vec.z}) face=${face}.`,\n message.content.source,\n { success: true }\n );\n }\n case \"chat\": {\n const msg = readString(params, \"message\", \"text\") ?? text.trim();\n if (!msg) {\n return emit(\n ACTION_NAME,\n callback,\n \"No chat message provided.\",\n message.content.source,\n { success: false }\n );\n }\n const maxChatPreviewLength = 500;\n await withMinecraftTimeout(service.chat(msg), \"minecraft chat\");\n return await emit(\n ACTION_NAME,\n callback,\n `Sent Minecraft chat: ${msg.slice(0, maxChatPreviewLength)}`,\n message.content.source,\n { success: true, values: { sent: true } }\n );\n }\n case \"attack\": {\n const entityId = parseEntityId(params, text);\n if (entityId === null) {\n return emit(ACTION_NAME, callback, \"Missing entityId.\", message.content.source, {\n success: false,\n });\n }\n await withMinecraftTimeout(service.request(\"attack\", { entityId }), \"minecraft attack\");\n return await emit(\n ACTION_NAME,\n callback,\n `Attacked entity ${entityId}.`,\n message.content.source,\n { success: true }\n );\n }\n case \"waypoint_set\": {\n const waypoints = runtime.getService<WaypointsService>(WAYPOINTS_SERVICE_TYPE);\n if (!waypoints) {\n return emit(\n ACTION_NAME,\n callback,\n \"Waypoints service not available.\",\n message.content.source,\n { success: false }\n );\n }\n const name = parseWaypointName(text, params);\n if (!name) {\n return emit(ACTION_NAME, callback, \"Missing waypoint name.\", message.content.source, {\n success: false,\n });\n }\n const worldState = await withMinecraftTimeout(\n service.getWorldState(),\n \"minecraft world state\"\n );\n const pos = worldState.position;\n if (!pos) {\n return emit(\n ACTION_NAME,\n callback,\n \"No position available (is the bot connected?).\",\n message.content.source,\n { success: false }\n );\n }\n const wp = await waypoints.setWaypoint(name, pos.x, pos.y, pos.z);\n return await emit(\n ACTION_NAME,\n callback,\n `Saved waypoint \"${wp.name}\" at (${wp.x.toFixed(1)}, ${wp.y.toFixed(1)}, ${wp.z.toFixed(1)}).`,\n message.content.source,\n {\n success: true,\n data: {\n name: wp.name,\n x: wp.x,\n y: wp.y,\n z: wp.z,\n createdAt: wp.createdAt.toISOString(),\n },\n }\n );\n }\n case \"waypoint_delete\": {\n const waypoints = runtime.getService<WaypointsService>(WAYPOINTS_SERVICE_TYPE);\n if (!waypoints) {\n return emit(\n ACTION_NAME,\n callback,\n \"Waypoints service not available.\",\n message.content.source,\n { success: false }\n );\n }\n const name = parseWaypointName(text, params);\n if (!name) {\n return emit(ACTION_NAME, callback, \"Missing waypoint name.\", message.content.source, {\n success: false,\n });\n }\n const deleted = await waypoints.deleteWaypoint(name);\n return await emit(\n ACTION_NAME,\n callback,\n deleted ? `Deleted waypoint \"${name}\".` : `No waypoint named \"${name}\".`,\n message.content.source,\n { success: deleted, values: { deleted } }\n );\n }\n default: {\n const _exhaustive: never = op;\n void _exhaustive;\n return emit(ACTION_NAME, callback, \"Unknown MC op.\", message.content.source, {\n success: false,\n });\n }\n }\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n return emit(ACTION_NAME, callback, `MC ${op} failed: ${msg}`, message.content.source, {\n success: false,\n data: { error: msg },\n });\n }\n },\n examples: [],\n};\n",
|
|
14
|
+
"import type { IAgentRuntime, Memory, Provider, ProviderResult, State } from \"@elizaos/core\";\nimport { MINECRAFT_SERVICE_TYPE, type MinecraftService } from \"../services/minecraft-service.js\";\n\nconst MAX_NEARBY_ENTITIES_IN_STATE = 24;\nconst MAX_NEARBY_BLOCKS_IN_STATE = 24;\n\nexport const minecraftVisionProvider: Provider = {\n name: \"MC_VISION\",\n description:\n \"Semantic environment context: biome, what I'm looking at, key nearby blocks (logs/ores), nearby entities\",\n descriptionCompressed:\n \"Read live Minecraft biome, looked-at block, nearby blocks, and nearby entities.\",\n dynamic: true,\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 mc = runtime.getService<MinecraftService>(MINECRAFT_SERVICE_TYPE);\n if (!mc) {\n return {\n text: \"Minecraft service not available\",\n values: { connected: false },\n data: {},\n };\n }\n\n try {\n const ws = await mc.getWorldState();\n if (!ws.connected) {\n return {\n text: \"Minecraft bot not connected\",\n values: { connected: false },\n data: {},\n };\n }\n\n // Best-effort, bounded scan for key blocks to give the LLM spatial anchors.\n const scan = await mc.request(\"scan\", {\n blocks: [\n \"oak_log\",\n \"spruce_log\",\n \"birch_log\",\n \"jungle_log\",\n \"acacia_log\",\n \"dark_oak_log\",\n \"stone\",\n \"coal_ore\",\n \"iron_ore\",\n ],\n radius: 16,\n maxResults: MAX_NEARBY_BLOCKS_IN_STATE,\n });\n\n const blocks = Array.isArray(scan.blocks)\n ? scan.blocks.slice(0, MAX_NEARBY_BLOCKS_IN_STATE)\n : [];\n const nearbyEntities = Array.isArray(ws.nearbyEntities)\n ? ws.nearbyEntities.slice(0, MAX_NEARBY_ENTITIES_IN_STATE)\n : [];\n const pos = ws.position\n ? `(${ws.position.x.toFixed(1)}, ${ws.position.y.toFixed(1)}, ${ws.position.z.toFixed(1)})`\n : \"(unknown)\";\n const biomeName =\n ws.biome &&\n typeof ws.biome === \"object\" &&\n \"name\" in ws.biome &&\n typeof ws.biome.name === \"string\"\n ? ws.biome.name\n : null;\n const lookingAt = ws.lookingAt as\n | {\n name?: string | null;\n position?: { x?: number; y?: number; z?: number } | null;\n }\n | null\n | undefined;\n const laName = lookingAt && typeof lookingAt.name === \"string\" ? lookingAt.name : null;\n const laPos = lookingAt?.position\n ? {\n x: typeof lookingAt.position.x === \"number\" ? lookingAt.position.x : null,\n y: typeof lookingAt.position.y === \"number\" ? lookingAt.position.y : null,\n z: typeof lookingAt.position.z === \"number\" ? lookingAt.position.z : null,\n }\n : null;\n const lookingText =\n laName && laPos && laPos.x !== null && laPos.y !== null && laPos.z !== null\n ? `Looking at: ${laName} at (${laPos.x}, ${laPos.y}, ${laPos.z})`\n : \"Looking at: (unknown)\";\n\n const entityCount = Array.isArray(ws.nearbyEntities) ? ws.nearbyEntities.length : 0;\n\n return {\n text: `Biome: ${biomeName ?? \"unknown\"}\\nPosition: ${pos}\\n${lookingText}\\nNearbyEntities: ${entityCount}\\nNearbyBlocksFound: ${blocks.length}`,\n values: {\n connected: true,\n biome: biomeName ?? null,\n entityCount,\n shownEntityCount: nearbyEntities.length,\n blocksFound: blocks.length,\n },\n data: {\n biome: ws.biome ?? null,\n position: ws.position ?? null,\n lookingAt: ws.lookingAt ?? null,\n nearbyEntities,\n nearbyBlocks: blocks,\n },\n };\n } catch (error) {\n return {\n text: \"Unable to load Minecraft vision context\",\n values: { connected: false, error: true },\n data: { error: error instanceof Error ? error.message : String(error) },\n };\n }\n },\n};\n",
|
|
15
|
+
"import type { IAgentRuntime, Memory, Provider, ProviderResult, State } from \"@elizaos/core\";\nimport { WAYPOINTS_SERVICE_TYPE, type WaypointsService } from \"../services/waypoints-service.js\";\n\nconst MAX_WAYPOINTS_IN_STATE = 50;\n\nexport const minecraftWaypointsProvider: Provider = {\n name: \"MC_WAYPOINTS\",\n description: \"Saved Minecraft waypoints (names and coordinates)\",\n descriptionCompressed: \"List saved Minecraft waypoint names and coordinates.\",\n dynamic: true,\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 service = runtime.getService<WaypointsService>(WAYPOINTS_SERVICE_TYPE);\n if (!service) {\n return {\n text: \"Waypoints service not available\",\n values: { count: 0 },\n data: { waypoints: [] },\n };\n }\n\n try {\n const list = service.listWaypoints();\n const shown = list.slice(0, MAX_WAYPOINTS_IN_STATE);\n const truncated = list.length > shown.length;\n const lines = shown.map(\n (w) => `- ${w.name}: (${w.x.toFixed(1)}, ${w.y.toFixed(1)}, ${w.z.toFixed(1)})`\n );\n return {\n text: list.length\n ? `Waypoints (${shown.length}/${list.length}${truncated ? \", truncated\" : \"\"}):\\n${lines.join(\"\\n\")}`\n : \"No waypoints saved.\",\n values: { count: list.length, shown: shown.length, truncated },\n data: {\n waypoints: shown.map((w) => ({\n name: w.name,\n x: w.x,\n y: w.y,\n z: w.z,\n createdAt: w.createdAt.toISOString(),\n })),\n },\n };\n } catch (error) {\n return {\n text: \"Unable to load Minecraft waypoints\",\n values: { count: 0, error: true },\n data: { waypoints: [], error: error instanceof Error ? error.message : String(error) },\n };\n }\n },\n};\n",
|
|
16
|
+
"import {\n type IAgentRuntime,\n logger,\n type Memory,\n type Provider,\n type ProviderResult,\n type State,\n} from \"@elizaos/core\";\nimport { MINECRAFT_SERVICE_TYPE, type MinecraftService } from \"../services/minecraft-service.js\";\n\ntype InventoryRow = { slot: number; name: string; count: number };\ntype EntityRow = { id: number; type: string; name: string; x: number; y: number; z: number };\nconst MAX_INVENTORY_ROWS_IN_STATE = 36;\nconst MAX_ENTITY_ROWS_IN_STATE = 24;\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value && typeof value === \"object\" && !Array.isArray(value));\n}\n\nfunction pickInventoryRows(inventory: unknown): InventoryRow[] {\n if (!Array.isArray(inventory)) return [];\n const rows: InventoryRow[] = [];\n for (const item of inventory) {\n if (!isRecord(item)) continue;\n const slot = typeof item.slot === \"number\" ? item.slot : null;\n const count = typeof item.count === \"number\" ? item.count : null;\n const name =\n typeof item.displayName === \"string\"\n ? item.displayName\n : typeof item.name === \"string\"\n ? item.name\n : null;\n if (slot === null || count === null || !name) continue;\n rows.push({ slot, name, count });\n }\n return rows;\n}\n\nfunction pickEntityRows(nearby: unknown): EntityRow[] {\n if (!Array.isArray(nearby)) return [];\n const rows: EntityRow[] = [];\n for (const ent of nearby) {\n if (!isRecord(ent)) continue;\n const id = typeof ent.id === \"number\" ? ent.id : null;\n const type = typeof ent.type === \"string\" ? ent.type : null;\n const username = typeof ent.username === \"string\" ? ent.username : null;\n const entName = typeof ent.name === \"string\" ? ent.name : null;\n const name = username ?? entName ?? type ?? \"unknown\";\n const pos = isRecord(ent.position) ? ent.position : null;\n const x = pos && typeof pos.x === \"number\" ? pos.x : null;\n const y = pos && typeof pos.y === \"number\" ? pos.y : null;\n const z = pos && typeof pos.z === \"number\" ? pos.z : null;\n if (id === null || !type || x === null || y === null || z === null) continue;\n rows.push({\n id,\n type,\n name,\n x: Math.round(x * 10) / 10,\n y: Math.round(y * 10) / 10,\n z: Math.round(z * 10) / 10,\n });\n }\n return rows;\n}\n\nexport const minecraftWorldStateProvider: Provider = {\n name: \"MC_WORLD_STATE\",\n description: \"Minecraft world state: connection, position, health, inventory, nearby entities\",\n descriptionCompressed:\n \"Read live Minecraft connection, position, health, inventory, and nearby entities.\",\n dynamic: true,\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 service = runtime.getService<MinecraftService>(MINECRAFT_SERVICE_TYPE);\n if (!service) {\n return {\n text: \"Minecraft service is not available\",\n values: { connected: false },\n data: {},\n };\n }\n\n try {\n const state = await service.getWorldState();\n if (!state.connected) {\n return {\n text: \"Minecraft bot is not connected. Use MC_CONNECT to join a server.\",\n values: { connected: false },\n data: {},\n };\n }\n\n const pos = state.position\n ? `(${state.position.x.toFixed(1)}, ${state.position.y.toFixed(1)}, ${state.position.z.toFixed(1)})`\n : \"(unknown)\";\n const inventoryRows = pickInventoryRows(state.inventory).slice(\n 0,\n MAX_INVENTORY_ROWS_IN_STATE\n );\n const entityRows = pickEntityRows(state.nearbyEntities).slice(0, MAX_ENTITY_ROWS_IN_STATE);\n\n const headerLines = [\n `Minecraft: hp=${state.health ?? \"?\"} food=${state.food ?? \"?\"} pos=${pos} invItems=${inventoryRows.length} nearbyEntities=${entityRows.length}`,\n ];\n if (inventoryRows.length > 0) {\n headerLines.push(JSON.stringify({ inventory: inventoryRows }));\n }\n if (entityRows.length > 0) {\n headerLines.push(JSON.stringify({ nearbyEntities: entityRows }));\n }\n\n return {\n text: headerLines.join(\"\\n\"),\n values: {\n connected: true,\n health: state.health ?? null,\n food: state.food ?? null,\n x: state.position?.x ?? null,\n y: state.position?.y ?? null,\n z: state.position?.z ?? null,\n inventoryCount: inventoryRows.length,\n nearbyEntitiesCount: entityRows.length,\n },\n data: {\n ...state,\n inventory: inventoryRows,\n nearbyEntities: entityRows,\n },\n };\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n logger.error(`[Minecraft] Error getting world state: ${msg}`);\n return {\n text: \"Error getting Minecraft world state\",\n values: { connected: false, error: true },\n data: {},\n };\n }\n },\n};\n"
|
|
17
|
+
],
|
|
18
|
+
"mappings": "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",
|
|
19
|
+
"debugId": "81388854C4EA756164756E2164756E21",
|
|
20
|
+
"names": []
|
|
21
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export type JsonValue = null | boolean | number | string | {
|
|
2
|
+
[key: string]: JsonValue;
|
|
3
|
+
} | JsonValue[];
|
|
4
|
+
export type JsonObject = {
|
|
5
|
+
[key: string]: JsonValue;
|
|
6
|
+
};
|
|
7
|
+
export type MinecraftBridgeRequestType = "health" | "createBot" | "destroyBot" | "chat" | "control" | "look" | "goto" | "stop" | "dig" | "place" | "equip" | "useItem" | "attack" | "getState" | "getInventory" | "scan";
|
|
8
|
+
export interface MinecraftBridgeRequest {
|
|
9
|
+
type: MinecraftBridgeRequestType;
|
|
10
|
+
requestId: string;
|
|
11
|
+
botId?: string;
|
|
12
|
+
data?: JsonObject;
|
|
13
|
+
}
|
|
14
|
+
export interface MinecraftBridgeResponse {
|
|
15
|
+
type: string;
|
|
16
|
+
requestId: string;
|
|
17
|
+
success: boolean;
|
|
18
|
+
data?: JsonObject;
|
|
19
|
+
error?: string;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=protocol.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GACjB,IAAI,GACJ,OAAO,GACP,MAAM,GACN,MAAM,GACN;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GAC5B,SAAS,EAAE,CAAC;AAEhB,MAAM,MAAM,UAAU,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAEtD,MAAM,MAAM,0BAA0B,GAClC,QAAQ,GACR,WAAW,GACX,YAAY,GACZ,MAAM,GACN,SAAS,GACT,MAAM,GACN,MAAM,GACN,MAAM,GACN,KAAK,GACL,OAAO,GACP,OAAO,GACP,SAAS,GACT,QAAQ,GACR,UAAU,GACV,cAAc,GACd,MAAM,CAAC;AAEX,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,0BAA0B,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vision.d.ts","sourceRoot":"","sources":["../../src/providers/vision.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAyB,QAAQ,EAAyB,MAAM,eAAe,CAAC;AAM5F,eAAO,MAAM,uBAAuB,EAAE,QAmHrC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"waypoints.d.ts","sourceRoot":"","sources":["../../src/providers/waypoints.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAyB,QAAQ,EAAyB,MAAM,eAAe,CAAC;AAK5F,eAAO,MAAM,0BAA0B,EAAE,QAqDxC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"world-state.d.ts","sourceRoot":"","sources":["../../src/providers/world-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,QAAQ,EAGd,MAAM,eAAe,CAAC;AA0DvB,eAAO,MAAM,2BAA2B,EAAE,QAiFzC,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { type IAgentRuntime, Service } from "@elizaos/core";
|
|
2
|
+
import type { JsonObject, MinecraftBridgeRequestType } from "../protocol.js";
|
|
3
|
+
import { type MinecraftSession, type MinecraftWorldState } from "../types.js";
|
|
4
|
+
import { MinecraftWebSocketClient } from "./websocket-client.js";
|
|
5
|
+
export declare const MINECRAFT_SERVICE_TYPE: "minecraft";
|
|
6
|
+
export declare class Session implements MinecraftSession {
|
|
7
|
+
botId: string;
|
|
8
|
+
createdAt: Date;
|
|
9
|
+
constructor(botId: string, createdAt?: Date);
|
|
10
|
+
}
|
|
11
|
+
export declare class MinecraftService extends Service {
|
|
12
|
+
static serviceType: "minecraft";
|
|
13
|
+
capabilityDescription: string;
|
|
14
|
+
private session;
|
|
15
|
+
private processManager;
|
|
16
|
+
private client;
|
|
17
|
+
private isInitialized;
|
|
18
|
+
constructor(runtime?: IAgentRuntime);
|
|
19
|
+
static start(runtime: IAgentRuntime): Promise<MinecraftService>;
|
|
20
|
+
initialize(): Promise<void>;
|
|
21
|
+
stop(): Promise<void>;
|
|
22
|
+
getClient(): MinecraftWebSocketClient;
|
|
23
|
+
getCurrentSession(): Session | null;
|
|
24
|
+
createBot(overrides?: JsonObject): Promise<Session>;
|
|
25
|
+
destroyBot(botId: string): Promise<void>;
|
|
26
|
+
ensureBot(): Promise<Session>;
|
|
27
|
+
chat(message: string): Promise<void>;
|
|
28
|
+
request(type: MinecraftBridgeRequestType, data: JsonObject): Promise<JsonObject>;
|
|
29
|
+
getWorldState(): Promise<MinecraftWorldState>;
|
|
30
|
+
private waitForReady;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=minecraft-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"minecraft-service.d.ts","sourceRoot":"","sources":["../../src/services/minecraft-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAU,OAAO,EAAE,MAAM,eAAe,CAAC;AACpE,OAAO,KAAK,EAAE,UAAU,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;AAC7E,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EAEzB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAEjE,eAAO,MAAM,sBAAsB,EAAG,WAAoB,CAAC;AAE3D,qBAAa,OAAQ,YAAW,gBAAgB;IAErC,KAAK,EAAE,MAAM;IACb,SAAS,EAAE,IAAI;gBADf,KAAK,EAAE,MAAM,EACb,SAAS,GAAE,IAAiB;CAEtC;AAED,qBAAa,gBAAiB,SAAQ,OAAO;IAC3C,MAAM,CAAC,WAAW,cAA0B;IAC5C,qBAAqB,SAAsD;IAE3E,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,cAAc,CAA0B;IAChD,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,aAAa,CAAS;gBAElB,OAAO,CAAC,EAAE,aAAa;WAWtB,KAAK,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAY/D,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAO3B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAW3B,SAAS,IAAI,wBAAwB;IAOrC,iBAAiB,IAAI,OAAO,GAAG,IAAI;IAI7B,SAAS,CAAC,SAAS,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC;IAanD,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQxC,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAK7B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKpC,OAAO,CAAC,IAAI,EAAE,0BAA0B,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAMhF,aAAa,IAAI,OAAO,CAAC,mBAAmB,CAAC;YAQrC,YAAY;CAS3B"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare class MinecraftProcessManager {
|
|
2
|
+
private serverPort;
|
|
3
|
+
private process;
|
|
4
|
+
private isRunning;
|
|
5
|
+
private entryPath;
|
|
6
|
+
constructor(serverPort: number);
|
|
7
|
+
private findEntry;
|
|
8
|
+
start(): Promise<void>;
|
|
9
|
+
stop(): Promise<void>;
|
|
10
|
+
isServerRunning(): boolean;
|
|
11
|
+
getServerUrl(): string;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=process-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-manager.d.ts","sourceRoot":"","sources":["../../src/services/process-manager.ts"],"names":[],"mappings":"AAOA,qBAAa,uBAAuB;IAKtB,OAAO,CAAC,UAAU;IAJ9B,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAuB;gBAEpB,UAAU,EAAE,MAAM;IAItC,OAAO,CAAC,SAAS;IAwBX,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAwDtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAa3B,eAAe,IAAI,OAAO;IAI1B,YAAY,IAAI,MAAM;CAGvB"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { IAgentRuntime, UUID } from "@elizaos/core";
|
|
2
|
+
import { Service } from "@elizaos/core";
|
|
3
|
+
export declare const WAYPOINTS_SERVICE_TYPE: "minecraft_waypoints";
|
|
4
|
+
export type Waypoint = {
|
|
5
|
+
id: UUID;
|
|
6
|
+
name: string;
|
|
7
|
+
x: number;
|
|
8
|
+
y: number;
|
|
9
|
+
z: number;
|
|
10
|
+
createdAt: Date;
|
|
11
|
+
};
|
|
12
|
+
export declare class WaypointsService extends Service {
|
|
13
|
+
static serviceType: "minecraft_waypoints";
|
|
14
|
+
capabilityDescription: string;
|
|
15
|
+
private waypoints;
|
|
16
|
+
private waypointsRoomId;
|
|
17
|
+
private waypointsWorldId;
|
|
18
|
+
constructor(runtime?: IAgentRuntime);
|
|
19
|
+
static start(runtime: IAgentRuntime): Promise<WaypointsService>;
|
|
20
|
+
stop(): Promise<void>;
|
|
21
|
+
private initialize;
|
|
22
|
+
private waypointIdForKey;
|
|
23
|
+
private buildWaypointMemory;
|
|
24
|
+
setWaypoint(name: string, x: number, y: number, z: number): Promise<Waypoint>;
|
|
25
|
+
deleteWaypoint(name: string): Promise<boolean>;
|
|
26
|
+
getWaypoint(name: string): Waypoint | null;
|
|
27
|
+
listWaypoints(): Waypoint[];
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=waypoints-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"waypoints-service.d.ts","sourceRoot":"","sources":["../../src/services/waypoints-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,aAAa,EAGb,IAAI,EACL,MAAM,eAAe,CAAC;AACvB,OAAO,EAA2B,OAAO,EAAgB,MAAM,eAAe,CAAC;AAE/E,eAAO,MAAM,sBAAsB,EAAG,qBAA8B,CAAC;AAErE,MAAM,MAAM,QAAQ,GAAG;IACrB,EAAE,EAAE,IAAI,CAAC;IACT,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,SAAS,EAAE,IAAI,CAAC;CACjB,CAAC;AAUF,qBAAa,gBAAiB,SAAQ,OAAO;IAC3C,MAAM,CAAC,WAAW,wBAA0B;IAC5C,qBAAqB,SAAuD;IAE5E,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,eAAe,CAAO;IAC9B,OAAO,CAAC,gBAAgB,CAAO;gBAEnB,OAAO,CAAC,EAAE,aAAa;WAYtB,KAAK,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAM/D,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAIb,UAAU;IA6DxB,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,mBAAmB;IA+BrB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAgC7E,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAUpD,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI;IAK1C,aAAa,IAAI,QAAQ,EAAE;CAK5B"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { JsonObject, MinecraftBridgeRequestType, MinecraftBridgeResponse } from "../protocol.js";
|
|
2
|
+
export declare class MinecraftWebSocketClient {
|
|
3
|
+
private serverUrl;
|
|
4
|
+
private ws;
|
|
5
|
+
private pending;
|
|
6
|
+
constructor(serverUrl: string);
|
|
7
|
+
connect(): Promise<void>;
|
|
8
|
+
disconnect(): void;
|
|
9
|
+
health(): Promise<boolean>;
|
|
10
|
+
sendMessage(type: MinecraftBridgeRequestType, botId: string | undefined, data: JsonObject, timeoutMs?: number): Promise<MinecraftBridgeResponse>;
|
|
11
|
+
private onMessage;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=websocket-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websocket-client.d.ts","sourceRoot":"","sources":["../../src/services/websocket-client.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,UAAU,EAGV,0BAA0B,EAC1B,uBAAuB,EACxB,MAAM,gBAAgB,CAAC;AA8BxB,qBAAa,wBAAwB;IAIvB,OAAO,CAAC,SAAS;IAH7B,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,OAAO,CAAmC;gBAE9B,SAAS,EAAE,MAAM;IAE/B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAuB9B,UAAU,IAAI,IAAI;IAKZ,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IAK1B,WAAW,CACf,IAAI,EAAE,0BAA0B,EAChC,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,IAAI,EAAE,UAAU,EAChB,SAAS,GAAE,MAAe,GACzB,OAAO,CAAC,uBAAuB,CAAC;IAuCnC,OAAO,CAAC,SAAS;CAiBlB"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import type { JsonObject } from "./protocol.js";
|
|
3
|
+
export interface MinecraftSession {
|
|
4
|
+
botId: string;
|
|
5
|
+
createdAt: Date;
|
|
6
|
+
}
|
|
7
|
+
export interface MinecraftActionResult {
|
|
8
|
+
success: boolean;
|
|
9
|
+
data?: JsonObject;
|
|
10
|
+
error?: string;
|
|
11
|
+
}
|
|
12
|
+
export declare const minecraftWorldStateSchema: z.ZodObject<{
|
|
13
|
+
connected: z.ZodBoolean;
|
|
14
|
+
username: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
15
|
+
version: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
16
|
+
health: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
17
|
+
food: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
18
|
+
experience: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
19
|
+
position: z.ZodOptional<z.ZodNullable<z.ZodObject<{
|
|
20
|
+
x: z.ZodNumber;
|
|
21
|
+
y: z.ZodNumber;
|
|
22
|
+
z: z.ZodNumber;
|
|
23
|
+
}, z.core.$strip>>>;
|
|
24
|
+
yaw: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
25
|
+
pitch: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
26
|
+
time: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
27
|
+
isRaining: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
|
|
28
|
+
inventory: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
29
|
+
name: z.ZodString;
|
|
30
|
+
displayName: z.ZodString;
|
|
31
|
+
count: z.ZodNumber;
|
|
32
|
+
slot: z.ZodNumber;
|
|
33
|
+
}, z.core.$strip>>>;
|
|
34
|
+
nearbyEntities: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
35
|
+
id: z.ZodNumber;
|
|
36
|
+
type: z.ZodString;
|
|
37
|
+
name: z.ZodNullable<z.ZodString>;
|
|
38
|
+
username: z.ZodNullable<z.ZodString>;
|
|
39
|
+
kind: z.ZodNullable<z.ZodString>;
|
|
40
|
+
position: z.ZodObject<{
|
|
41
|
+
x: z.ZodNumber;
|
|
42
|
+
y: z.ZodNumber;
|
|
43
|
+
z: z.ZodNumber;
|
|
44
|
+
}, z.core.$strip>;
|
|
45
|
+
}, z.core.$strip>>>;
|
|
46
|
+
}, z.core.$loose>;
|
|
47
|
+
export type MinecraftWorldState = z.infer<typeof minecraftWorldStateSchema>;
|
|
48
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAoCtB,CAAC;AAEjB,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elizaos/plugin-minecraft",
|
|
3
3
|
"description": "Minecraft automation plugin for ElizaOS (Mineflayer bridge)",
|
|
4
|
-
"version": "2.0.3-beta.
|
|
4
|
+
"version": "2.0.3-beta.7",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"module": "dist/index.js",
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
"zod": "^4.4.3"
|
|
56
56
|
},
|
|
57
57
|
"peerDependencies": {
|
|
58
|
-
"@elizaos/core": "2.0.3-beta.
|
|
58
|
+
"@elizaos/core": "2.0.3-beta.7"
|
|
59
59
|
},
|
|
60
60
|
"devDependencies": {
|
|
61
61
|
"@biomejs/biome": "^2.4.14",
|
|
@@ -126,5 +126,5 @@
|
|
|
126
126
|
}
|
|
127
127
|
}
|
|
128
128
|
},
|
|
129
|
-
"gitHead": "
|
|
129
|
+
"gitHead": "61094f10458d11055c75b3dd0bae374e3f66bac5"
|
|
130
130
|
}
|