feat(playground): 3D hackathon world MVP

Nous x Kimi hackathon pivot: Hermes Playground, the first open-world
AI agent RPG inside Hermes Workspace.

Adds:
- /playground route (SSR disabled)
- R3F/Three/Drei deps for 3D rendering
- 3D Greek Agora world with marble pillars, medallion, sky, fog, lights
- Generated Cyberpunk Forge world with neon terminals and portal loop
- WASD/arrow movement + shift sprint
- Third-person follow camera
- Hermes player avatar billboard + simple 3D body
- Athena agent companion that follows the player
- In-world Athena speech bubble
- Mission checklist overlay
- Prompt box: ask Athena, including generated-world path
- Portal click swaps Agora <-> Forge and completes mission
- Sidebar/mobile nav entries for Playground

This is intentionally demo-first: local single-player 3D playground,
AI-agent RPG framing, and a visible generated-world loop. Multiplayer,
voice, real agent backend, quests, and hosting are next.
This commit is contained in:
Aurora release bot
2026-05-03 02:56:59 -04:00
parent 5b1e38aa4e
commit f17defe34c
8 changed files with 875 additions and 12 deletions

View File

@@ -32,6 +32,8 @@
"@lobehub/icons": "^5.0.1",
"@lobehub/icons-static-png": "^1.83.0",
"@monaco-editor/react": "^4.7.0",
"@react-three/drei": "^10.7.7",
"@react-three/fiber": "^9.6.1",
"@tailwindcss/vite": "^4.1.18",
"@tanstack/react-query": "^5.84.1",
"@tanstack/react-router": "^1.132.0",
@@ -42,8 +44,12 @@
"@types/react-grid-layout": "^1.3.6",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"electron-updater": "^6.6.2",
"framer-motion": "^12.36.0",
"marked": "^17.0.1",
"motion": "^12.29.2",
"motion-dom": "^12.36.0",
"motion-utils": "^12.36.0",
"playwright": "^1.58.2",
"playwright-extra": "^4.3.6",
"puppeteer-extra-plugin-stealth": "^2.11.2",
@@ -57,6 +63,7 @@
"shiki": "^3.21.0",
"tailwind-merge": "^3.4.0",
"tailwindcss": "^4.1.18",
"three": "^0.184.0",
"vite-tsconfig-paths": "^6.0.2",
"ws": "^8.19.0",
"xterm": "^5.3.0",
@@ -65,21 +72,20 @@
"xterm-addon-web-links": "^0.9.0",
"yaml": "^2.8.2",
"zod": "^3.25.76",
"zustand": "^5.0.11",
"framer-motion": "^12.36.0",
"motion-dom": "^12.36.0",
"motion-utils": "^12.36.0",
"electron-updater": "^6.6.2"
"zustand": "^5.0.11"
},
"devDependencies": {
"@tanstack/eslint-config": "^0.3.0",
"concurrently": "^8.2.2",
"@testing-library/dom": "^10.4.0",
"@testing-library/react": "^16.2.0",
"@types/node": "^22.10.2",
"@types/react": "^19.2.0",
"@types/react-dom": "^19.2.0",
"@vitejs/plugin-react": "^5.0.4",
"concurrently": "^8.2.2",
"electron": "^40.8.2",
"electron-builder": "^26.8.1",
"esbuild": "^0.27.0",
"eslint": "^10.2.0",
"jsdom": "^27.0.0",
"prettier": "^3.5.3",
@@ -87,9 +93,6 @@
"typescript": "^5.7.2",
"vite": "^7.3.2",
"vitest": "^3.0.5",
"web-vitals": "^5.1.0",
"electron": "^40.8.2",
"electron-builder": "^26.8.1",
"esbuild": "^0.27.0"
"web-vitals": "^5.1.0"
}
}