agentshire 2026.4.12
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/CHANGELOG.md +36 -0
- package/LICENSE +21 -0
- package/README.md +437 -0
- package/README.zh-CN.md +441 -0
- package/ROADMAP.md +207 -0
- package/THIRD_PARTY_NOTICES.md +49 -0
- package/VISION.md +101 -0
- package/index.ts +386 -0
- package/openclaw.plugin.json +27 -0
- package/package.json +94 -0
- package/src/bridge/AGENTS.md +136 -0
- package/src/bridge/ActivityStream.ts +184 -0
- package/src/bridge/CitizenManager.ts +280 -0
- package/src/bridge/DirectorBridge.ts +1076 -0
- package/src/bridge/EventTranslator.ts +142 -0
- package/src/bridge/NpcEventQueue.ts +61 -0
- package/src/bridge/ReconnectManager.ts +42 -0
- package/src/bridge/RouteManager.ts +270 -0
- package/src/bridge/StateTracker.ts +100 -0
- package/src/bridge/ToolVfxMapper.ts +94 -0
- package/src/bridge/__tests__/ActivityStream.test.ts +156 -0
- package/src/bridge/__tests__/CitizenManager.test.ts +174 -0
- package/src/bridge/__tests__/EventTranslator.test.ts +292 -0
- package/src/bridge/__tests__/NpcEventQueue.test.ts +92 -0
- package/src/bridge/__tests__/RouteManager.test.ts +106 -0
- package/src/bridge/data/route-config.json +36 -0
- package/src/bridge/data/route-config.ts +19 -0
- package/src/bridge/implicit-chat.ts +192 -0
- package/src/bridge/index.ts +12 -0
- package/src/contracts/agent-state.ts +87 -0
- package/src/contracts/agui.ts +212 -0
- package/src/contracts/chat.ts +67 -0
- package/src/contracts/events.ts +170 -0
- package/src/contracts/index.ts +71 -0
- package/src/contracts/media.ts +77 -0
- package/src/contracts/registry.ts +32 -0
- package/src/plugin/AGENTS.md +192 -0
- package/src/plugin/__tests__/editor-serve-megapack.test.ts +150 -0
- package/src/plugin/__tests__/hook-translator.test.ts +197 -0
- package/src/plugin/auto-config.ts +126 -0
- package/src/plugin/channel.ts +399 -0
- package/src/plugin/chat-asset-resolver.ts +75 -0
- package/src/plugin/chat-session-watcher.ts +98 -0
- package/src/plugin/citizen-agent-manager.ts +178 -0
- package/src/plugin/citizen-chat-router.ts +83 -0
- package/src/plugin/citizen-workshop-manager.ts +96 -0
- package/src/plugin/custom-asset-manager.ts +250 -0
- package/src/plugin/editor-serve.ts +1368 -0
- package/src/plugin/group-discussion.ts +223 -0
- package/src/plugin/hook-translator.ts +202 -0
- package/src/plugin/llm-agent-proxy.ts +193 -0
- package/src/plugin/outbound-adapter.ts +187 -0
- package/src/plugin/paths.ts +33 -0
- package/src/plugin/plan-manager.ts +594 -0
- package/src/plugin/runtime.ts +9 -0
- package/src/plugin/session-history.ts +838 -0
- package/src/plugin/session-log-watcher.ts +221 -0
- package/src/plugin/soul-prompt-template.ts +290 -0
- package/src/plugin/subagent-tracker.ts +205 -0
- package/src/plugin/tools.ts +493 -0
- package/src/plugin/town-session.ts +40 -0
- package/src/plugin/ws-server.ts +680 -0
- package/src/town-souls.ts +134 -0
- package/town-frontend/dist/assets/CustomAssetStore-oi8aIurt.js +2 -0
- package/town-frontend/dist/assets/GLTFLoader-BA5RqSME.js +3804 -0
- package/town-frontend/dist/assets/OrbitControls-ZmySp9sQ.js +2 -0
- package/town-frontend/dist/assets/SettingsPanel-BO52reJe.js +2 -0
- package/town-frontend/dist/assets/SkeletonUtils-BCVmgslc.js +2 -0
- package/town-frontend/dist/assets/SkillLearnCard-Dk38iDpy.js +6 -0
- package/town-frontend/dist/assets/TopicSetupPanel-DLaLHB_Z.js +2 -0
- package/town-frontend/dist/assets/Trap-Bold-CT0JBE39.woff2 +0 -0
- package/town-frontend/dist/assets/Trap-SemiBold-R4_-Ld0j.woff2 +0 -0
- package/town-frontend/dist/assets/WeatherSystem-Cb3BvHes.js +550 -0
- package/town-frontend/dist/assets/avatars/char-female-a.webp +0 -0
- package/town-frontend/dist/assets/avatars/char-female-b.webp +0 -0
- package/town-frontend/dist/assets/avatars/char-female-c.webp +0 -0
- package/town-frontend/dist/assets/avatars/char-female-d.webp +0 -0
- package/town-frontend/dist/assets/avatars/char-female-e.webp +0 -0
- package/town-frontend/dist/assets/avatars/char-female-f.webp +0 -0
- package/town-frontend/dist/assets/avatars/char-male-a.webp +0 -0
- package/town-frontend/dist/assets/avatars/char-male-b.webp +0 -0
- package/town-frontend/dist/assets/avatars/char-male-c.webp +0 -0
- package/town-frontend/dist/assets/avatars/char-male-d.webp +0 -0
- package/town-frontend/dist/assets/avatars/char-male-e.webp +0 -0
- package/town-frontend/dist/assets/avatars/char-male-f.webp +0 -0
- package/town-frontend/dist/assets/avatars/char-pet-beaver.webp +0 -0
- package/town-frontend/dist/assets/avatars/char-pet-bee.webp +0 -0
- package/town-frontend/dist/assets/avatars/char-pet-bunny.webp +0 -0
- package/town-frontend/dist/assets/avatars/char-pet-cat.webp +0 -0
- package/town-frontend/dist/assets/avatars/char-pet-caterpillar.webp +0 -0
- package/town-frontend/dist/assets/avatars/char-pet-chick.webp +0 -0
- package/town-frontend/dist/assets/avatars/char-pet-cow.webp +0 -0
- package/town-frontend/dist/assets/avatars/char-pet-crab.webp +0 -0
- package/town-frontend/dist/assets/avatars/char-pet-deer.webp +0 -0
- package/town-frontend/dist/assets/avatars/char-pet-dog.webp +0 -0
- package/town-frontend/dist/assets/avatars/char-pet-elephant.webp +0 -0
- package/town-frontend/dist/assets/avatars/char-pet-fish.webp +0 -0
- package/town-frontend/dist/assets/avatars/char-pet-fox.webp +0 -0
- package/town-frontend/dist/assets/avatars/char-pet-giraffe.webp +0 -0
- package/town-frontend/dist/assets/avatars/char-pet-hog.webp +0 -0
- package/town-frontend/dist/assets/avatars/char-pet-koala.webp +0 -0
- package/town-frontend/dist/assets/avatars/char-pet-lion.webp +0 -0
- package/town-frontend/dist/assets/avatars/char-pet-monkey.webp +0 -0
- package/town-frontend/dist/assets/avatars/char-pet-panda.webp +0 -0
- package/town-frontend/dist/assets/avatars/char-pet-parrot.webp +0 -0
- package/town-frontend/dist/assets/avatars/char-pet-penguin.webp +0 -0
- package/town-frontend/dist/assets/avatars/char-pet-pig.webp +0 -0
- package/town-frontend/dist/assets/avatars/char-pet-polar.webp +0 -0
- package/town-frontend/dist/assets/avatars/char-pet-tiger.webp +0 -0
- package/town-frontend/dist/assets/character-catalog-DSmLtlNC.js +2 -0
- package/town-frontend/dist/assets/citizenEditor-DubGSJOQ.js +296 -0
- package/town-frontend/dist/assets/command-parser-BUd15Bmv.js +12 -0
- package/town-frontend/dist/assets/editor-B5QO0OtX.js +258 -0
- package/town-frontend/dist/assets/editor-Bk8g1NCD.css +1 -0
- package/town-frontend/dist/assets/index-BWfrufil.js +2 -0
- package/town-frontend/dist/assets/index-faS20RJk.js +6 -0
- package/town-frontend/dist/assets/logo-DJI6EtST.png +0 -0
- package/town-frontend/dist/assets/logo-title-AdKPZX5E.png +0 -0
- package/town-frontend/dist/assets/main-CqsN43aT.js +224 -0
- package/town-frontend/dist/assets/main-D7neuy3w.css +1 -0
- package/town-frontend/dist/assets/models/buildings/base.bin +0 -0
- package/town-frontend/dist/assets/models/buildings/base.gltf +136 -0
- package/town-frontend/dist/assets/models/buildings/bench.bin +0 -0
- package/town-frontend/dist/assets/models/buildings/bench.gltf +136 -0
- package/town-frontend/dist/assets/models/buildings/box_A.bin +0 -0
- package/town-frontend/dist/assets/models/buildings/box_A.gltf +136 -0
- package/town-frontend/dist/assets/models/buildings/box_B.bin +0 -0
- package/town-frontend/dist/assets/models/buildings/box_B.gltf +136 -0
- package/town-frontend/dist/assets/models/buildings/building_A.bin +0 -0
- package/town-frontend/dist/assets/models/buildings/building_A.gltf +136 -0
- package/town-frontend/dist/assets/models/buildings/building_A_withoutBase.bin +0 -0
- package/town-frontend/dist/assets/models/buildings/building_A_withoutBase.gltf +136 -0
- package/town-frontend/dist/assets/models/buildings/building_B.bin +0 -0
- package/town-frontend/dist/assets/models/buildings/building_B.gltf +136 -0
- package/town-frontend/dist/assets/models/buildings/building_B_withoutBase.bin +0 -0
- package/town-frontend/dist/assets/models/buildings/building_B_withoutBase.gltf +136 -0
- package/town-frontend/dist/assets/models/buildings/building_C.bin +0 -0
- package/town-frontend/dist/assets/models/buildings/building_C.gltf +136 -0
- package/town-frontend/dist/assets/models/buildings/building_C_withoutBase.bin +0 -0
- package/town-frontend/dist/assets/models/buildings/building_C_withoutBase.gltf +136 -0
- package/town-frontend/dist/assets/models/buildings/building_D.bin +0 -0
- package/town-frontend/dist/assets/models/buildings/building_D.gltf +136 -0
- package/town-frontend/dist/assets/models/buildings/building_D_withoutBase.bin +0 -0
- package/town-frontend/dist/assets/models/buildings/building_D_withoutBase.gltf +136 -0
- package/town-frontend/dist/assets/models/buildings/building_E.bin +0 -0
- package/town-frontend/dist/assets/models/buildings/building_E.gltf +136 -0
- package/town-frontend/dist/assets/models/buildings/building_E_withoutBase.bin +0 -0
- package/town-frontend/dist/assets/models/buildings/building_E_withoutBase.gltf +136 -0
- package/town-frontend/dist/assets/models/buildings/building_F.bin +0 -0
- package/town-frontend/dist/assets/models/buildings/building_F.gltf +136 -0
- package/town-frontend/dist/assets/models/buildings/building_F_withoutBase.bin +0 -0
- package/town-frontend/dist/assets/models/buildings/building_F_withoutBase.gltf +136 -0
- package/town-frontend/dist/assets/models/buildings/building_G.bin +0 -0
- package/town-frontend/dist/assets/models/buildings/building_G.gltf +136 -0
- package/town-frontend/dist/assets/models/buildings/building_G_withoutBase.bin +0 -0
- package/town-frontend/dist/assets/models/buildings/building_G_withoutBase.gltf +136 -0
- package/town-frontend/dist/assets/models/buildings/building_H.bin +0 -0
- package/town-frontend/dist/assets/models/buildings/building_H.gltf +136 -0
- package/town-frontend/dist/assets/models/buildings/building_H_withoutBase.bin +0 -0
- package/town-frontend/dist/assets/models/buildings/building_H_withoutBase.gltf +136 -0
- package/town-frontend/dist/assets/models/buildings/bush.bin +0 -0
- package/town-frontend/dist/assets/models/buildings/bush.gltf +136 -0
- package/town-frontend/dist/assets/models/buildings/car_hatchback.bin +0 -0
- package/town-frontend/dist/assets/models/buildings/car_hatchback.gltf +442 -0
- package/town-frontend/dist/assets/models/buildings/car_police.bin +0 -0
- package/town-frontend/dist/assets/models/buildings/car_police.gltf +442 -0
- package/town-frontend/dist/assets/models/buildings/car_sedan.bin +0 -0
- package/town-frontend/dist/assets/models/buildings/car_sedan.gltf +442 -0
- package/town-frontend/dist/assets/models/buildings/car_stationwagon.bin +0 -0
- package/town-frontend/dist/assets/models/buildings/car_stationwagon.gltf +442 -0
- package/town-frontend/dist/assets/models/buildings/car_taxi.bin +0 -0
- package/town-frontend/dist/assets/models/buildings/car_taxi.gltf +442 -0
- package/town-frontend/dist/assets/models/buildings/citybits_texture.png +0 -0
- package/town-frontend/dist/assets/models/buildings/dumpster.bin +0 -0
- package/town-frontend/dist/assets/models/buildings/dumpster.gltf +136 -0
- package/town-frontend/dist/assets/models/buildings/firehydrant.bin +0 -0
- package/town-frontend/dist/assets/models/buildings/firehydrant.gltf +136 -0
- package/town-frontend/dist/assets/models/buildings/road_corner.bin +0 -0
- package/town-frontend/dist/assets/models/buildings/road_corner.gltf +136 -0
- package/town-frontend/dist/assets/models/buildings/road_corner_curved.bin +0 -0
- package/town-frontend/dist/assets/models/buildings/road_corner_curved.gltf +136 -0
- package/town-frontend/dist/assets/models/buildings/road_junction.bin +0 -0
- package/town-frontend/dist/assets/models/buildings/road_junction.gltf +136 -0
- package/town-frontend/dist/assets/models/buildings/road_straight.bin +0 -0
- package/town-frontend/dist/assets/models/buildings/road_straight.gltf +136 -0
- package/town-frontend/dist/assets/models/buildings/road_straight_crossing.bin +0 -0
- package/town-frontend/dist/assets/models/buildings/road_straight_crossing.gltf +136 -0
- package/town-frontend/dist/assets/models/buildings/road_tsplit.bin +0 -0
- package/town-frontend/dist/assets/models/buildings/road_tsplit.gltf +136 -0
- package/town-frontend/dist/assets/models/buildings/streetlight.bin +0 -0
- package/town-frontend/dist/assets/models/buildings/streetlight.gltf +136 -0
- package/town-frontend/dist/assets/models/buildings/trafficlight_A.bin +0 -0
- package/town-frontend/dist/assets/models/buildings/trafficlight_A.gltf +136 -0
- package/town-frontend/dist/assets/models/buildings/trafficlight_B.bin +0 -0
- package/town-frontend/dist/assets/models/buildings/trafficlight_B.gltf +136 -0
- package/town-frontend/dist/assets/models/buildings/trafficlight_C.bin +0 -0
- package/town-frontend/dist/assets/models/buildings/trafficlight_C.gltf +136 -0
- package/town-frontend/dist/assets/models/buildings/trash_A.bin +0 -0
- package/town-frontend/dist/assets/models/buildings/trash_A.gltf +136 -0
- package/town-frontend/dist/assets/models/buildings/trash_B.bin +0 -0
- package/town-frontend/dist/assets/models/buildings/trash_B.gltf +136 -0
- package/town-frontend/dist/assets/models/buildings/watertower.bin +0 -0
- package/town-frontend/dist/assets/models/buildings/watertower.gltf +136 -0
- package/town-frontend/dist/assets/models/characters/Textures/colormap.png +0 -0
- package/town-frontend/dist/assets/models/characters/character-female-a.glb +0 -0
- package/town-frontend/dist/assets/models/characters/character-female-b.glb +0 -0
- package/town-frontend/dist/assets/models/characters/character-female-c.glb +0 -0
- package/town-frontend/dist/assets/models/characters/character-female-d.glb +0 -0
- package/town-frontend/dist/assets/models/characters/character-female-e.glb +0 -0
- package/town-frontend/dist/assets/models/characters/character-female-f.glb +0 -0
- package/town-frontend/dist/assets/models/characters/character-male-a.glb +0 -0
- package/town-frontend/dist/assets/models/characters/character-male-b.glb +0 -0
- package/town-frontend/dist/assets/models/characters/character-male-c.glb +0 -0
- package/town-frontend/dist/assets/models/characters/character-male-d.glb +0 -0
- package/town-frontend/dist/assets/models/characters/character-male-e.glb +0 -0
- package/town-frontend/dist/assets/models/characters/character-male-f.glb +0 -0
- package/town-frontend/dist/assets/models/characters/character-pet-beaver.glb +0 -0
- package/town-frontend/dist/assets/models/characters/character-pet-bee.glb +0 -0
- package/town-frontend/dist/assets/models/characters/character-pet-bunny.glb +0 -0
- package/town-frontend/dist/assets/models/characters/character-pet-cat.glb +0 -0
- package/town-frontend/dist/assets/models/characters/character-pet-caterpillar.glb +0 -0
- package/town-frontend/dist/assets/models/characters/character-pet-chick.glb +0 -0
- package/town-frontend/dist/assets/models/characters/character-pet-cow.glb +0 -0
- package/town-frontend/dist/assets/models/characters/character-pet-crab.glb +0 -0
- package/town-frontend/dist/assets/models/characters/character-pet-deer.glb +0 -0
- package/town-frontend/dist/assets/models/characters/character-pet-dog.glb +0 -0
- package/town-frontend/dist/assets/models/characters/character-pet-elephant.glb +0 -0
- package/town-frontend/dist/assets/models/characters/character-pet-fish.glb +0 -0
- package/town-frontend/dist/assets/models/characters/character-pet-fox.glb +0 -0
- package/town-frontend/dist/assets/models/characters/character-pet-giraffe.glb +0 -0
- package/town-frontend/dist/assets/models/characters/character-pet-hog.glb +0 -0
- package/town-frontend/dist/assets/models/characters/character-pet-koala.glb +0 -0
- package/town-frontend/dist/assets/models/characters/character-pet-lion.glb +0 -0
- package/town-frontend/dist/assets/models/characters/character-pet-monkey.glb +0 -0
- package/town-frontend/dist/assets/models/characters/character-pet-panda.glb +0 -0
- package/town-frontend/dist/assets/models/characters/character-pet-parrot.glb +0 -0
- package/town-frontend/dist/assets/models/characters/character-pet-penguin.glb +0 -0
- package/town-frontend/dist/assets/models/characters/character-pet-pig.glb +0 -0
- package/town-frontend/dist/assets/models/characters/character-pet-polar.glb +0 -0
- package/town-frontend/dist/assets/models/characters/character-pet-tiger.glb +0 -0
- package/town-frontend/dist/assets/models/characters/colormap.png +0 -0
- package/town-frontend/dist/assets/models/furniture/armchair.bin +0 -0
- package/town-frontend/dist/assets/models/furniture/armchair.gltf +136 -0
- package/town-frontend/dist/assets/models/furniture/armchair_pillows.bin +0 -0
- package/town-frontend/dist/assets/models/furniture/armchair_pillows.gltf +136 -0
- package/town-frontend/dist/assets/models/furniture/bed_double_A.bin +0 -0
- package/town-frontend/dist/assets/models/furniture/bed_double_A.gltf +136 -0
- package/town-frontend/dist/assets/models/furniture/bed_double_B.bin +0 -0
- package/town-frontend/dist/assets/models/furniture/bed_double_B.gltf +136 -0
- package/town-frontend/dist/assets/models/furniture/bed_single_A.bin +0 -0
- package/town-frontend/dist/assets/models/furniture/bed_single_A.gltf +136 -0
- package/town-frontend/dist/assets/models/furniture/bed_single_B.bin +0 -0
- package/town-frontend/dist/assets/models/furniture/bed_single_B.gltf +136 -0
- package/town-frontend/dist/assets/models/furniture/book_set.bin +0 -0
- package/town-frontend/dist/assets/models/furniture/book_set.gltf +136 -0
- package/town-frontend/dist/assets/models/furniture/book_single.bin +0 -0
- package/town-frontend/dist/assets/models/furniture/book_single.gltf +136 -0
- package/town-frontend/dist/assets/models/furniture/cabinet_medium.bin +0 -0
- package/town-frontend/dist/assets/models/furniture/cabinet_medium.gltf +136 -0
- package/town-frontend/dist/assets/models/furniture/cabinet_medium_decorated.bin +0 -0
- package/town-frontend/dist/assets/models/furniture/cabinet_medium_decorated.gltf +136 -0
- package/town-frontend/dist/assets/models/furniture/cabinet_small.bin +0 -0
- package/town-frontend/dist/assets/models/furniture/cabinet_small.gltf +136 -0
- package/town-frontend/dist/assets/models/furniture/cabinet_small_decorated.bin +0 -0
- package/town-frontend/dist/assets/models/furniture/cabinet_small_decorated.gltf +136 -0
- package/town-frontend/dist/assets/models/furniture/cactus_medium_A.bin +0 -0
- package/town-frontend/dist/assets/models/furniture/cactus_medium_A.gltf +136 -0
- package/town-frontend/dist/assets/models/furniture/cactus_medium_B.bin +0 -0
- package/town-frontend/dist/assets/models/furniture/cactus_medium_B.gltf +136 -0
- package/town-frontend/dist/assets/models/furniture/cactus_small_A.bin +0 -0
- package/town-frontend/dist/assets/models/furniture/cactus_small_A.gltf +136 -0
- package/town-frontend/dist/assets/models/furniture/cactus_small_B.bin +0 -0
- package/town-frontend/dist/assets/models/furniture/cactus_small_B.gltf +136 -0
- package/town-frontend/dist/assets/models/furniture/chair_A.bin +0 -0
- package/town-frontend/dist/assets/models/furniture/chair_A.gltf +136 -0
- package/town-frontend/dist/assets/models/furniture/chair_A_wood.bin +0 -0
- package/town-frontend/dist/assets/models/furniture/chair_A_wood.gltf +136 -0
- package/town-frontend/dist/assets/models/furniture/chair_B.bin +0 -0
- package/town-frontend/dist/assets/models/furniture/chair_B.gltf +136 -0
- package/town-frontend/dist/assets/models/furniture/chair_B_wood.bin +0 -0
- package/town-frontend/dist/assets/models/furniture/chair_B_wood.gltf +136 -0
- package/town-frontend/dist/assets/models/furniture/chair_C.bin +0 -0
- package/town-frontend/dist/assets/models/furniture/chair_C.gltf +136 -0
- package/town-frontend/dist/assets/models/furniture/chair_stool.bin +0 -0
- package/town-frontend/dist/assets/models/furniture/chair_stool.gltf +136 -0
- package/town-frontend/dist/assets/models/furniture/chair_stool_wood.bin +0 -0
- package/town-frontend/dist/assets/models/furniture/chair_stool_wood.gltf +136 -0
- package/town-frontend/dist/assets/models/furniture/couch.bin +0 -0
- package/town-frontend/dist/assets/models/furniture/couch.gltf +136 -0
- package/town-frontend/dist/assets/models/furniture/couch_pillows.bin +0 -0
- package/town-frontend/dist/assets/models/furniture/couch_pillows.gltf +136 -0
- package/town-frontend/dist/assets/models/furniture/furniturebits_texture.png +0 -0
- package/town-frontend/dist/assets/models/furniture/lamp_standing.bin +0 -0
- package/town-frontend/dist/assets/models/furniture/lamp_standing.gltf +136 -0
- package/town-frontend/dist/assets/models/furniture/lamp_table.bin +0 -0
- package/town-frontend/dist/assets/models/furniture/lamp_table.gltf +136 -0
- package/town-frontend/dist/assets/models/furniture/pictureframe_large_A.bin +0 -0
- package/town-frontend/dist/assets/models/furniture/pictureframe_large_A.gltf +136 -0
- package/town-frontend/dist/assets/models/furniture/pictureframe_large_B.bin +0 -0
- package/town-frontend/dist/assets/models/furniture/pictureframe_large_B.gltf +136 -0
- package/town-frontend/dist/assets/models/furniture/pictureframe_medium.bin +0 -0
- package/town-frontend/dist/assets/models/furniture/pictureframe_medium.gltf +136 -0
- package/town-frontend/dist/assets/models/furniture/pictureframe_small_A.bin +0 -0
- package/town-frontend/dist/assets/models/furniture/pictureframe_small_A.gltf +136 -0
- package/town-frontend/dist/assets/models/furniture/pictureframe_small_B.bin +0 -0
- package/town-frontend/dist/assets/models/furniture/pictureframe_small_B.gltf +136 -0
- package/town-frontend/dist/assets/models/furniture/pictureframe_small_C.bin +0 -0
- package/town-frontend/dist/assets/models/furniture/pictureframe_small_C.gltf +136 -0
- package/town-frontend/dist/assets/models/furniture/pictureframe_standing_A.bin +0 -0
- package/town-frontend/dist/assets/models/furniture/pictureframe_standing_A.gltf +136 -0
- package/town-frontend/dist/assets/models/furniture/pictureframe_standing_B.bin +0 -0
- package/town-frontend/dist/assets/models/furniture/pictureframe_standing_B.gltf +136 -0
- package/town-frontend/dist/assets/models/furniture/pillow_A.bin +0 -0
- package/town-frontend/dist/assets/models/furniture/pillow_A.gltf +136 -0
- package/town-frontend/dist/assets/models/furniture/pillow_B.bin +0 -0
- package/town-frontend/dist/assets/models/furniture/pillow_B.gltf +136 -0
- package/town-frontend/dist/assets/models/furniture/rug_oval_A.bin +0 -0
- package/town-frontend/dist/assets/models/furniture/rug_oval_A.gltf +136 -0
- package/town-frontend/dist/assets/models/furniture/rug_oval_B.bin +0 -0
- package/town-frontend/dist/assets/models/furniture/rug_oval_B.gltf +136 -0
- package/town-frontend/dist/assets/models/furniture/rug_rectangle_A.bin +0 -0
- package/town-frontend/dist/assets/models/furniture/rug_rectangle_A.gltf +136 -0
- package/town-frontend/dist/assets/models/furniture/rug_rectangle_B.bin +0 -0
- package/town-frontend/dist/assets/models/furniture/rug_rectangle_B.gltf +136 -0
- package/town-frontend/dist/assets/models/furniture/rug_rectangle_stripes_A.bin +0 -0
- package/town-frontend/dist/assets/models/furniture/rug_rectangle_stripes_A.gltf +136 -0
- package/town-frontend/dist/assets/models/furniture/rug_rectangle_stripes_B.bin +0 -0
- package/town-frontend/dist/assets/models/furniture/rug_rectangle_stripes_B.gltf +136 -0
- package/town-frontend/dist/assets/models/furniture/shelf_A_big.bin +0 -0
- package/town-frontend/dist/assets/models/furniture/shelf_A_big.gltf +136 -0
- package/town-frontend/dist/assets/models/furniture/shelf_A_small.bin +0 -0
- package/town-frontend/dist/assets/models/furniture/shelf_A_small.gltf +136 -0
- package/town-frontend/dist/assets/models/furniture/shelf_B_large.bin +0 -0
- package/town-frontend/dist/assets/models/furniture/shelf_B_large.gltf +136 -0
- package/town-frontend/dist/assets/models/furniture/shelf_B_large_decorated.bin +0 -0
- package/town-frontend/dist/assets/models/furniture/shelf_B_large_decorated.gltf +136 -0
- package/town-frontend/dist/assets/models/furniture/shelf_B_small.bin +0 -0
- package/town-frontend/dist/assets/models/furniture/shelf_B_small.gltf +136 -0
- package/town-frontend/dist/assets/models/furniture/shelf_B_small_decorated.bin +0 -0
- package/town-frontend/dist/assets/models/furniture/shelf_B_small_decorated.gltf +136 -0
- package/town-frontend/dist/assets/models/furniture/table_low.bin +0 -0
- package/town-frontend/dist/assets/models/furniture/table_low.gltf +136 -0
- package/town-frontend/dist/assets/models/furniture/table_medium.bin +0 -0
- package/town-frontend/dist/assets/models/furniture/table_medium.gltf +136 -0
- package/town-frontend/dist/assets/models/furniture/table_medium_long.bin +0 -0
- package/town-frontend/dist/assets/models/furniture/table_medium_long.gltf +136 -0
- package/town-frontend/dist/assets/models/furniture/table_small.bin +0 -0
- package/town-frontend/dist/assets/models/furniture/table_small.gltf +136 -0
- package/town-frontend/dist/assets/models/props/bench.bin +0 -0
- package/town-frontend/dist/assets/models/props/bench.gltf +136 -0
- package/town-frontend/dist/assets/models/props/bush.bin +0 -0
- package/town-frontend/dist/assets/models/props/bush.gltf +136 -0
- package/town-frontend/dist/assets/models/props/capybara.glb +0 -0
- package/town-frontend/dist/assets/models/props/car_hatchback.bin +0 -0
- package/town-frontend/dist/assets/models/props/car_hatchback.gltf +442 -0
- package/town-frontend/dist/assets/models/props/car_sedan.bin +0 -0
- package/town-frontend/dist/assets/models/props/car_sedan.gltf +442 -0
- package/town-frontend/dist/assets/models/props/car_taxi.bin +0 -0
- package/town-frontend/dist/assets/models/props/car_taxi.gltf +442 -0
- package/town-frontend/dist/assets/models/props/citybits_texture.png +0 -0
- package/town-frontend/dist/assets/models/props/dumpster.bin +0 -0
- package/town-frontend/dist/assets/models/props/dumpster.gltf +136 -0
- package/town-frontend/dist/assets/models/props/firehydrant.bin +0 -0
- package/town-frontend/dist/assets/models/props/firehydrant.gltf +136 -0
- package/town-frontend/dist/assets/models/props/streetlight.bin +0 -0
- package/town-frontend/dist/assets/models/props/streetlight.gltf +136 -0
- package/town-frontend/dist/assets/models/props/trafficlight_A.bin +0 -0
- package/town-frontend/dist/assets/models/props/trafficlight_A.gltf +136 -0
- package/town-frontend/dist/assets/models/props/trash_A.bin +0 -0
- package/town-frontend/dist/assets/models/props/trash_A.gltf +136 -0
- package/town-frontend/dist/assets/models/props/watertower.bin +0 -0
- package/town-frontend/dist/assets/models/props/watertower.gltf +136 -0
- package/town-frontend/dist/assets/models/stage-deco/Flowers_1_D.glb +0 -0
- package/town-frontend/dist/assets/models/stage-deco/Flowers_2_B.glb +0 -0
- package/town-frontend/dist/assets/models/stage-deco/Grass_A_1.glb +0 -0
- package/town-frontend/dist/assets/models/stage-deco/Park_GrassHill_A.glb +0 -0
- package/town-frontend/dist/assets/models/stage-deco/Pebles_1_A_2.glb +0 -0
- package/town-frontend/dist/assets/music/bgm_day.mp3 +0 -0
- package/town-frontend/dist/assets/music/bgm_dusk.mp3 +0 -0
- package/town-frontend/dist/assets/music/bgm_night.mp3 +0 -0
- package/town-frontend/dist/assets/music/bgm_work.mp3 +0 -0
- package/town-frontend/dist/assets/office-whiteboard-idle-CyEwBrq_.webp +0 -0
- package/town-frontend/dist/assets/preview-B6hYEQij.js +2 -0
- package/town-frontend/dist/assets/town-BKesnERP.js +8888 -0
- package/town-frontend/dist/assets/town-BnswKsjF.css +1 -0
- package/town-frontend/dist/citizen-editor.html +166 -0
- package/town-frontend/dist/editor.html +227 -0
- package/town-frontend/dist/index.html +22 -0
- package/town-frontend/dist/preview.html +56 -0
- package/town-frontend/dist/town.html +165 -0
- package/town-frontend/dist/viewer.html +91 -0
- package/town-souls/CHEN.md +130 -0
- package/town-souls/CHENGZI.md +92 -0
- package/town-souls/CITIZEN_tpl.md +16 -0
- package/town-souls/DIANDIAN.md +92 -0
- package/town-souls/HAITANG.md +94 -0
- package/town-souls/QIQI.md +119 -0
- package/town-souls/SOUL.md +141 -0
- package/town-souls/SOUL_tpl.md +135 -0
- package/town-souls/XIAOLIE.md +107 -0
- package/town-souls/YAN.md +107 -0
- package/town-workspace/IDENTITY.md +5 -0
- package/town-workspace/SOUL.md +141 -0
- package/town-workspace/project-workflow.md +81 -0
- package/town-workspace/town-defaults.json +92 -0
- package/town-workspace/town-guide.md +45 -0
package/README.zh-CN.md
ADDED
|
@@ -0,0 +1,441 @@
|
|
|
1
|
+
# Agentshire — 夏尔小镇
|
|
2
|
+
|
|
3
|
+
[English](README.md) | 中文
|
|
4
|
+
|
|
5
|
+
> **Agentshire — 让你的 OpenClaw/QClaw Agent 住进你亲手搭建的3D游戏小镇,而不是ChatBox。**
|
|
6
|
+
|
|
7
|
+
Agentshire 是一个支持OpenClaw/QClaw的插件,让 AI Agent 变成 3D 游戏小镇里活生生的 NPC——你可以观看、对话、也可以亲手改造这个世界。它融合了生活模拟与 UGC 工具:天气系统、昼夜循环、NPC 自主社交、地图编辑器、角色工坊。
|
|
8
|
+
|
|
9
|
+
**同时支持 OpenClaw CLI 和 [QClaw](https://qclaw.cn) 桌面端。**
|
|
10
|
+
|
|
11
|
+
**[查看完整愿景](VISION.md)** | **[查看路线图](ROADMAP.md)**
|
|
12
|
+
|
|
13
|
+
> **⚠️ 兼容性说明**
|
|
14
|
+
>
|
|
15
|
+
> | 平台 | 版本 | 状态 |
|
|
16
|
+
> |---|---|---|
|
|
17
|
+
> | **OpenClaw CLI** | 2026.3.13 | ✅ 推荐 |
|
|
18
|
+
> | **QClaw 桌面端** | 0.2.x | ✅ 支持 |
|
|
19
|
+
> | OpenClaw CLI | 2026.3.7 – 3.12 | ⚠️ 可能兼容 |
|
|
20
|
+
> | OpenClaw CLI | 2026.4.x+ | ❌ 暂不支持 — Channel 初始化存在回归问题 |
|
|
21
|
+
>
|
|
22
|
+
> 版本相关问题请查看[故障排除](#故障排除)。
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## 眼见为实
|
|
27
|
+
|
|
28
|
+
> **📺 [观看完整 Demo 视频](https://www.youtube.com/watch?v=R6YXvkkwo9I)**
|
|
29
|
+
|
|
30
|
+
**一座小镇,不是仪表盘。**
|
|
31
|
+
|
|
32
|
+
https://github.com/user-attachments/assets/c888d2ef-dcba-4caa-b0af-9b5f3e3b1365
|
|
33
|
+
|
|
34
|
+
**造你的居民——选模型,赋灵魂,看他活过来。**
|
|
35
|
+
|
|
36
|
+
https://github.com/user-attachments/assets/b9697432-b3ba-4e23-85fe-4c0b5c35a1b9
|
|
37
|
+
|
|
38
|
+
**造你的小镇——拖拽搭建,一键预览。**
|
|
39
|
+
|
|
40
|
+
https://github.com/user-attachments/assets/3328aa6c-3432-4f71-abfd-91aea4db15df
|
|
41
|
+
|
|
42
|
+
**每个居民都有自己的想法。**
|
|
43
|
+
|
|
44
|
+
https://github.com/user-attachments/assets/720a63fc-863c-483c-bfdf-5e07e82c6f0e
|
|
45
|
+
|
|
46
|
+
**下达任务,居民集结。**
|
|
47
|
+
|
|
48
|
+
https://github.com/user-attachments/assets/1983f60b-aaf6-4adc-b46c-5612e4ba4c83
|
|
49
|
+
|
|
50
|
+
**干太久?班味 Boss 来了。消灭它。**
|
|
51
|
+
|
|
52
|
+
https://github.com/user-attachments/assets/9be946e0-9ecf-42de-b793-a5d7ebe55612
|
|
53
|
+
|
|
54
|
+
**任务完成。烟花庆祝。成品交付。**
|
|
55
|
+
|
|
56
|
+
https://github.com/user-attachments/assets/fa6563ae-e78b-49b1-ae7b-8a8a96738341
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## 功能特性
|
|
61
|
+
|
|
62
|
+
### 双模式界面
|
|
63
|
+
|
|
64
|
+
- **Town 模式** — 3D 低多边形小镇,实时观看 NPC 生活、工作、协作、庆祝
|
|
65
|
+
- **Chat 模式** — IM 风格聊天界面,左侧 Agent 列表(管家 + 居民,在线状态),右侧消息流,支持文本/图片多模态、聊天历史(游标分页)、命令系统(`/new` `/help` `/stop`)
|
|
66
|
+
- **顶部导航栏** — Town / Chat 一键切换,右上角快捷菜单(居民管理 / 小镇改造 / 技能商店 / 设置)
|
|
67
|
+
- **双语界面** — 完整中英文界面,自动检测或手动切换
|
|
68
|
+
|
|
69
|
+
### 核心
|
|
70
|
+
|
|
71
|
+
- **Agent = NPC** — 每个子 Agent 自动变成小镇里的 3D 居民,有名字、有形象、有人格
|
|
72
|
+
- **电影级工作流** — 召唤 → 集结 → 分配 → 进办公室 → 编码 → 庆祝 → 返回小镇,全程动画编排
|
|
73
|
+
- **实时对话气泡** — AI 的回复以打字机效果显示在 NPC 头顶,支持流式更新和分页
|
|
74
|
+
- **多 Agent 协作** — 管家自动拆解任务、分步骤并行 spawn 子 Agent,支持文件边界校验
|
|
75
|
+
- **零配置** — 安装插件,启动 Gateway,小镇自动运行
|
|
76
|
+
|
|
77
|
+
### 小镇生活
|
|
78
|
+
|
|
79
|
+
- **昼夜循环** — 24 小时时钟系统(6 个时段)、实时光照变化、路灯/窗灯自动开关
|
|
80
|
+
- **12 种天气** — 晴/阴/雾/小雨/大雨/暴风/雪/暴雪/沙尘暴/极光…每天随机日主题,时段间平滑过渡
|
|
81
|
+
- **程序合成环境音** — 雨声、风声、鸟鸣、蟋蟀、交通噪声、雷声——全部零音频文件,Web Audio API 实时合成
|
|
82
|
+
- **4 轨 BGM** — day / dusk / night / work 四首背景音乐,按天气、时段、场景自动切换,3.5 秒交叉淡化
|
|
83
|
+
- **NPC 日常行为(双模式)** — 默认算法驱动:DailyBehavior 状态机 + 5 种行为模板(按专业匹配) + 400+ 条预设台词社交,零 LLM 开销;开启灵魂模式后切换为 AI 驱动:AgentBrain 三层决策(L1 日计划 / L2 战术 / L3 对话)+ LLM 深度多轮对话 + 关系图谱 + 每日叙事摘要
|
|
84
|
+
- **居民独立聊天** — 点击居民 NPC 直接发起对话,消息路由到居民自己的独立 Agent 会话
|
|
85
|
+
- **话题讨论** — 发起多居民参与的群组话题讨论,支持结构化轮流发言和 AI 主持
|
|
86
|
+
- **班味消除小游戏** — NPC 工作时头顶生成"班味团子",点击消除!含 combo 连击、Boss 战、NPC 压力系统,可扩展更多玩法
|
|
87
|
+
|
|
88
|
+
### UGC 工具
|
|
89
|
+
|
|
90
|
+
- **居民工坊** — 创建和配置居民角色:选择/上传 3D 模型、编辑灵魂人设(支持 AI 一键生成)、配置动画映射(8 槽位)、发布为独立 Agent
|
|
91
|
+
- **小镇编辑器** — 可视化拖拽编辑地图:放置建筑/道路/道具/灯光,支持组合、对齐、撤销、导入导出(已支持导出 JSON,与小镇接入开发中)
|
|
92
|
+
- **编辑器预览** — 一键打开游戏级预览窗口(WASD 控制 + 完整昼夜天气 + 车辆动画 + 音频)
|
|
93
|
+
- **灵魂系统** — 每个 NPC 有一份 Markdown 人设文件,定义性格、说话风格、专长和工作方式
|
|
94
|
+
|
|
95
|
+
### 交互与视觉
|
|
96
|
+
|
|
97
|
+
- **交互式 3D** — 点击 NPC 查看状态卡片(头像/人格/工作日志/thinking 流/TODO),拖拽视角,滚轮缩放
|
|
98
|
+
- **三场景切换** — 小镇(日常生活)/ 办公室(工作)/ 展示厅(开发中),带淡入淡出过渡和 NPC 迁移
|
|
99
|
+
- **丰富的 VFX** — 召唤冲击波、完成烟花、错误闪电、人格变换魔法阵、思考光环、搜索雷达、部署彩纸…
|
|
100
|
+
- **10 工位办公室** — 每个工位有独立显示器(实时代码动画),NPC 进场/工作/离场全流程编排
|
|
101
|
+
- **交付物预览** — 项目完成后弹出交付物卡片,支持图片(lightbox 放大)、视频、音频预览和下载,游戏/网站类直接 iframe 启动
|
|
102
|
+
- **AI 工具控制** — Agent 可以通过工具主动控制小镇(广播消息、生成 NPC、触发特效、设置时间/天气)
|
|
103
|
+
- **断线重连** — WebSocket 断线自动指数退避重连,工作状态自动恢复
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## 环境要求
|
|
108
|
+
|
|
109
|
+
- [OpenClaw](https://github.com/openclaw/openclaw) **2026.3.13** 或 [QClaw](https://qclaw.cn) **0.2.x**
|
|
110
|
+
- Node.js >= 18(QClaw 用户无需安装)
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## 快速安装
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
openclaw plugins install agentshire
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
就这样。重启 Gateway,小镇会自动在浏览器打开。
|
|
121
|
+
|
|
122
|
+
### 备选:Link 安装(开发用)
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
git clone https://github.com/Agentshire/Agentshire.git
|
|
126
|
+
cd Agentshire && npm install
|
|
127
|
+
openclaw plugins install --link .
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
> 前端已**预编译**(`town-frontend/dist/`),无需 build。开发者可用 `npm run build:town` 重新构建。
|
|
131
|
+
|
|
132
|
+
### 首次启动时插件自动配置
|
|
133
|
+
|
|
134
|
+
1. 在状态目录下创建管家工作区(`workspace-town-steward/`)
|
|
135
|
+
2. 在 `openclaw.json` 中注册 `town-steward` Agent
|
|
136
|
+
3. 添加路由规则,将小镇频道的消息路由到管家
|
|
137
|
+
4. 设置 `subagents.runTimeoutSeconds: 600` — 子 Agent 运行超时 10 分钟,防止提前终止
|
|
138
|
+
|
|
139
|
+
> 状态目录自动检测:OpenClaw CLI 为 `~/.openclaw/`,QClaw 为 `~/.qclaw/`。
|
|
140
|
+
|
|
141
|
+
> **重要**:请勿在 `openclaw.json` 中手动添加 `tools` 配置段。插件通过 `api.registerTool()` 注册工具。手动添加 `tools.allow` 列表会覆盖插件注册的工具,导致 Agent 无法使用。
|
|
142
|
+
|
|
143
|
+
### 更新
|
|
144
|
+
|
|
145
|
+
```bash
|
|
146
|
+
openclaw plugins install agentshire
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
Link 安装用户:`cd Agentshire && git pull && npm install`。
|
|
150
|
+
|
|
151
|
+
然后重启 Gateway(或重启 QClaw)。
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
## 使用方式
|
|
156
|
+
|
|
157
|
+
1. 完成[快速安装](#快速安装)
|
|
158
|
+
2. 启动(或重启)OpenClaw Gateway:
|
|
159
|
+
```bash
|
|
160
|
+
openclaw gateway
|
|
161
|
+
```
|
|
162
|
+
3. 小镇会自动在浏览器中打开
|
|
163
|
+
4. 在浏览器中对话——所有 Agent 活动会自动映射到小镇中
|
|
164
|
+
|
|
165
|
+
> **提示**:如果浏览器没有自动打开,手动访问:
|
|
166
|
+
> `http://localhost:55210?ws=ws://localhost:55211`
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
### 居民工坊
|
|
170
|
+
|
|
171
|
+
访问 `http://localhost:55210/citizen-editor.html` 打开居民工坊,创建和配置你的 NPC 团队。
|
|
172
|
+
|
|
173
|
+
### 小镇编辑器
|
|
174
|
+
|
|
175
|
+
访问 `http://localhost:55210/editor.html` 打开小镇编辑器,可视化编辑地图布局。
|
|
176
|
+
|
|
177
|
+
### 配置(可选)
|
|
178
|
+
|
|
179
|
+
在你的 `openclaw.json` 中自定义端口和行为(OpenClaw CLI 为 `~/.openclaw/openclaw.json`,QClaw 为 `~/.qclaw/openclaw.json`):
|
|
180
|
+
|
|
181
|
+
```json
|
|
182
|
+
{
|
|
183
|
+
"plugins": {
|
|
184
|
+
"entries": {
|
|
185
|
+
"agentshire": {
|
|
186
|
+
"enabled": true,
|
|
187
|
+
"config": {
|
|
188
|
+
"wsPort": 55211,
|
|
189
|
+
"townPort": 55210,
|
|
190
|
+
"autoLaunch": true
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
| 配置项 | 默认值 | 说明 |
|
|
199
|
+
|--------|--------|------|
|
|
200
|
+
| `wsPort` | 55211 | WebSocket 端口(插件与前端实时通信) |
|
|
201
|
+
| `townPort` | 55210 | HTTP 端口(前端静态资源 + 编辑器 API) |
|
|
202
|
+
| `autoLaunch` | true | 启动时自动在浏览器中打开小镇 |
|
|
203
|
+
|
|
204
|
+
### AI 可用工具
|
|
205
|
+
|
|
206
|
+
| 工具名 | 说明 |
|
|
207
|
+
|--------|------|
|
|
208
|
+
| `town_announce` | 在小镇广播消息 |
|
|
209
|
+
| `town_spawn_npc` | 生成新 NPC |
|
|
210
|
+
| `town_effect` | 触发视觉特效(庆祝/烟花/光圈等) |
|
|
211
|
+
| `town_set_time` | 控制游戏时钟(设置时间) |
|
|
212
|
+
| `town_set_weather` | 控制天气(12 种天气可选) |
|
|
213
|
+
| `town_status` | 查看小镇当前状态 |
|
|
214
|
+
| `register_project` | 注册简单项目(单 Agent 或管家独立完成) |
|
|
215
|
+
| `create_project` | 创建多 Agent 项目目录 |
|
|
216
|
+
| `create_task` | 创建单次委派任务目录 |
|
|
217
|
+
| `create_plan` | 创建协作计划(分步骤并行执行,需先 `create_project` 或 `create_task`) |
|
|
218
|
+
| `next_step` | 查询计划进度,获取下一步指令 |
|
|
219
|
+
| `mission_complete` | 统一完成处理 — 自动判断触发庆祝结束或仅发交付物卡片 |
|
|
220
|
+
|
|
221
|
+
---
|
|
222
|
+
|
|
223
|
+
## 灵魂系统
|
|
224
|
+
|
|
225
|
+
每个 NPC 都有独立的**灵魂文件**(Markdown),定义了角色的性格、说话风格、专长和工作方式。
|
|
226
|
+
|
|
227
|
+
灵魂文件格式:以 `# 角色名` 开头的 Markdown 文件,可包含元数据(模型 id、性别、岗位)、人设核心、性格详细设定、对话示例等。内容会作为 system prompt 注入 Agent。
|
|
228
|
+
|
|
229
|
+
**搜索优先级**(后者覆盖前者):
|
|
230
|
+
|
|
231
|
+
1. `插件内置/town-souls/` — 预设灵魂(8 个居民 + 管家)
|
|
232
|
+
2. `当前工作目录/town-souls/` — 项目级灵魂
|
|
233
|
+
3. `{状态目录}/town-souls/` — 用户自定义灵魂(`~/.openclaw/` 或 `~/.qclaw/`)
|
|
234
|
+
4. `town-data/souls/` — 居民工坊发布的灵魂
|
|
235
|
+
|
|
236
|
+
你可以:
|
|
237
|
+
- 在居民工坊中 **AI 一键生成**灵魂文件
|
|
238
|
+
- 修改内置灵魂文件来调整角色性格
|
|
239
|
+
- 在状态目录的 `town-souls/` 下放置自定义灵魂来覆盖预设
|
|
240
|
+
- 创建全新的灵魂文件来定义新角色
|
|
241
|
+
|
|
242
|
+
---
|
|
243
|
+
|
|
244
|
+
## 架构概览
|
|
245
|
+
|
|
246
|
+
|
|
247
|
+
```
|
|
248
|
+
┌──────────────────────────────────────────────────────────┐
|
|
249
|
+
│ OpenClaw Runtime │
|
|
250
|
+
│ │
|
|
251
|
+
│ Gateway ─── Agent Sessions ─── Hook System ─── LLM │
|
|
252
|
+
└──────┬────────────────────────────┬──────────────────────┘
|
|
253
|
+
│ dispatch │ hook callback
|
|
254
|
+
▼ ▼
|
|
255
|
+
┌──────────────────────────────────────────────────────────┐
|
|
256
|
+
│ Plugin Layer (Node.js) src/plugin/ │
|
|
257
|
+
│ │
|
|
258
|
+
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
|
|
259
|
+
│ │ channel │ │ hook- │ │ws-server │ │ tools │ │
|
|
260
|
+
│ │ dispatch │ │translator│ │ WS:55211 │ │ 11 tools │ │
|
|
261
|
+
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
|
|
262
|
+
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
|
|
263
|
+
│ │ plan- │ │ editor- │ │ citizen- │ │llm-proxy │ │
|
|
264
|
+
│ │ manager │ │ serve │ │ router │ │ 2 concur │ │
|
|
265
|
+
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
|
|
266
|
+
└──────┬───────────────┬───────────────────────────────────┘
|
|
267
|
+
│ WS :55211 │ HTTP :55210
|
|
268
|
+
│ AgentEvent │ Editor API
|
|
269
|
+
▼ ▼
|
|
270
|
+
┌──────────────────────────────────────────────────────────┐
|
|
271
|
+
│ Bridge Layer (Browser) src/bridge/ │
|
|
272
|
+
│ │
|
|
273
|
+
│ ┌────────────────────────────────────────────────────┐ │
|
|
274
|
+
│ │ DirectorBridge — Phase State Machine │ │
|
|
275
|
+
│ │ idle→summoning→assigning→office→working→publish→ret│ │
|
|
276
|
+
│ └────────────────────────────────────────────────────┘ │
|
|
277
|
+
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
|
|
278
|
+
│ │ Event- │ │ Route- │ │ Citizen- │ │implicit- │ │
|
|
279
|
+
│ │Transltor │ │ Manager │ │ Manager │ │ chat │ │
|
|
280
|
+
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
|
|
281
|
+
└──────┬────────────────────────────────────────────┬──────┘
|
|
282
|
+
│ GameEvent (65) GameAction │
|
|
283
|
+
▼ (14) ▲
|
|
284
|
+
┌──────────────────────────────────────────────────────────┐
|
|
285
|
+
│ Frontend Layer (Three.js) town-frontend/src/ │
|
|
286
|
+
│ │
|
|
287
|
+
│ ┌────────────────────────────────────────────────────┐ │
|
|
288
|
+
│ │ MainScene ── EventDispatcher ── update() loop │ │
|
|
289
|
+
│ └────────────────────────────────────────────────────┘ │
|
|
290
|
+
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
|
|
291
|
+
│ │workflow/ │ │ npc/ │ │ ui/ │ │ audio/ │ │
|
|
292
|
+
│ │Choreogr │ │ NPC 7-SM │ │ChatBubbl │ │ BGM+Amb │ │
|
|
293
|
+
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
|
|
294
|
+
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
|
|
295
|
+
│ │ scene/ │ │ editor/ │ │ engine/ │ │ data/ │ │
|
|
296
|
+
│ │Town/Offc │ │Workshop │ │ Render │ │ Protocol │ │
|
|
297
|
+
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
|
|
298
|
+
└──────────────────────────────────────────────────────────┘
|
|
299
|
+
```
|
|
300
|
+
> 开发者架构指南见 [AGENTS.md](AGENTS.md)。
|
|
301
|
+
|
|
302
|
+
---
|
|
303
|
+
|
|
304
|
+
## 开发
|
|
305
|
+
|
|
306
|
+
```bash
|
|
307
|
+
# 克隆仓库后
|
|
308
|
+
cd agentshire
|
|
309
|
+
|
|
310
|
+
# 构建小镇前端
|
|
311
|
+
cd town-frontend && npm install && npm run build
|
|
312
|
+
|
|
313
|
+
# 开发模式(前端热更新)
|
|
314
|
+
cd town-frontend && npm run dev
|
|
315
|
+
|
|
316
|
+
# 运行测试
|
|
317
|
+
npm test # 插件 + 桥接层
|
|
318
|
+
cd town-frontend && npx vitest run # 前端
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
前端有 4 个入口页面:
|
|
322
|
+
|
|
323
|
+
| 页面 | URL | 说明 |
|
|
324
|
+
|------|-----|------|
|
|
325
|
+
| 小镇主页 | `index.html` | 3D 小镇 + 聊天 |
|
|
326
|
+
| 小镇编辑器 | `editor.html` | 地图可视化编辑 |
|
|
327
|
+
| 居民工坊 | `citizen-editor.html` | 角色创建和配置 |
|
|
328
|
+
| 编辑器预览 | `preview.html` | 游戏级预览窗口 |
|
|
329
|
+
|
|
330
|
+
> 开发者架构指南见 [AGENTS.md](AGENTS.md)。
|
|
331
|
+
|
|
332
|
+
---
|
|
333
|
+
|
|
334
|
+
## 扩展资产包(可选)
|
|
335
|
+
|
|
336
|
+
基础功能**不需要额外下载**——小镇、办公室、NPC 使用的内置模型(KayKit + Kenney)已包含在仓库中。
|
|
337
|
+
|
|
338
|
+
如果你需要以下高级功能,可以下载扩展资产包:
|
|
339
|
+
|
|
340
|
+
- **居民工坊 Library 角色**(308 个角色模型,多种变体和配色)
|
|
341
|
+
- **编辑器 Cartoon City 资产**(建筑、车辆、道路、公园等数百个模型)
|
|
342
|
+
|
|
343
|
+
### 下载方式
|
|
344
|
+
|
|
345
|
+
1. 从 [GitHub Releases (v0.1.0)](https://github.com/Agentshire/Agentshire/releases/tag/v0.1.0) 下载 `agentshire-assets.7z`(约 164MB,解压后约 4.4GB)
|
|
346
|
+
2. 解压到插件根目录:
|
|
347
|
+
```bash
|
|
348
|
+
cd /path/to/agentshire
|
|
349
|
+
7z x agentshire-assets.7z
|
|
350
|
+
```
|
|
351
|
+
3. 确保目录结构为:
|
|
352
|
+
|
|
353
|
+
```
|
|
354
|
+
agentshire/
|
|
355
|
+
├── assets/
|
|
356
|
+
│ ├── Characters_1/ ← Library 角色模型 + 共享动画
|
|
357
|
+
│ └── Map_1/ ← Cartoon City 编辑器资产
|
|
358
|
+
├── src/
|
|
359
|
+
├── town-frontend/
|
|
360
|
+
└── ...
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
不下载资产包时:游戏正常运行,编辑器基础资产可用,居民工坊仅显示内置和自定义模型。
|
|
364
|
+
|
|
365
|
+
> 资产来源和许可证见 [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md)。
|
|
366
|
+
|
|
367
|
+
---
|
|
368
|
+
|
|
369
|
+
## 故障排除
|
|
370
|
+
|
|
371
|
+
### Agent 无法识别插件工具
|
|
372
|
+
|
|
373
|
+
**现象**:管家 Agent 无法找到 `create_project`、`create_plan` 等插件工具。
|
|
374
|
+
|
|
375
|
+
**原因**:OpenClaw 2026.3.13 中 Rollup 代码分割会创建独立的模块实例,导致 `api.registerTool()` 注册的工具对 Agent 运行时不可见。此外,`openclaw.json` 中手动添加的 `tools` 配置段会覆盖插件注册的工具。
|
|
376
|
+
|
|
377
|
+
**解决**:
|
|
378
|
+
1. 删除 `openclaw.json` 中的整个 `tools` 配置段(如果有)
|
|
379
|
+
2. 重启 Gateway
|
|
380
|
+
|
|
381
|
+
### QClaw:插件更新后仍运行旧代码
|
|
382
|
+
|
|
383
|
+
**原因**:关闭 QClaw 窗口不会停止后台 `openclaw-gateway` 进程。
|
|
384
|
+
|
|
385
|
+
**解决**:重启前先杀掉 gateway:`ps aux | grep openclaw-gateway | grep -v grep | awk '{print $2}' | xargs kill`
|
|
386
|
+
|
|
387
|
+
### OpenClaw 2026.4.x 上 Channel 不启动
|
|
388
|
+
|
|
389
|
+
**现象**:插件加载成功但 WebSocket 连接未建立,小镇页面一直显示"连接中…"。
|
|
390
|
+
|
|
391
|
+
**原因**:OpenClaw 2026.4.x 在外部插件的 Channel 初始化流程中存在回归 Bug,`defineChannelPluginEntry` 生命周期未被正确调用。
|
|
392
|
+
|
|
393
|
+
**解决**:降级到 OpenClaw 2026.3.13。这是已知的上游问题。
|
|
394
|
+
|
|
395
|
+
### 角色工坊"AI 生成"返回 500 错误
|
|
396
|
+
|
|
397
|
+
**现象**:在角色工坊中点击"AI 生成"失败。
|
|
398
|
+
|
|
399
|
+
**原因**:灵魂生成接口需要 `openclaw.json` 中配置有效的 LLM 提供商。如果未配置或 API Key 无效,请求会失败。
|
|
400
|
+
|
|
401
|
+
**解决**:确保 `openclaw.json` 中有有效的 `models` 配置,详见 [OpenClaw 文档](https://github.com/openclaw/openclaw)。
|
|
402
|
+
|
|
403
|
+
---
|
|
404
|
+
|
|
405
|
+
## 为什么叫 Agentshire
|
|
406
|
+
|
|
407
|
+
**Agentshire** 这个名字的灵感来自《指环王》里的**夏尔(Shire)**。
|
|
408
|
+
|
|
409
|
+
夏尔最打动人的地方,从来不是宏大的史诗感,而是它的宁静、日常、缓慢、丰饶,与那种"这里适合好好生活"的感觉。是田野、小路、窗灯、饭香、邻里、散步、闲谈——一种不需要时刻战斗、时刻加速的存在状态。
|
|
410
|
+
|
|
411
|
+
今天很多 AI 产品对未来的想象,总是赛博朋克的、高压的、极度加速的。Agent 活在 dashboard 里,活在日志/接口里,却不像真正生活在某个地方。
|
|
412
|
+
|
|
413
|
+
但我想象的是另一种未来——一个更安静的未来,一个更温柔的界面。让智能体不只是被调用、被驱动、被消费,而是可以真正"住下来"的地方。
|
|
414
|
+
|
|
415
|
+
**如果智能体会越来越进入我们的生活,那么它们也应该拥有一个像"家"一样的地方。**
|
|
416
|
+
|
|
417
|
+
不是冰冷的机房,不是永远待命的控制台,而是一个有道路、有广场、有咖啡馆、有日常节奏的游戏小镇。
|
|
418
|
+
|
|
419
|
+
AI 的未来不一定非要长得像未来战场。它也可以像一个让人愿意住进去、也愿意让自己的 Agent 住进去的地方。
|
|
420
|
+
|
|
421
|
+
---
|
|
422
|
+
|
|
423
|
+
## 愿景与路线图
|
|
424
|
+
|
|
425
|
+
> 团队不住在仪表盘里。团队住在一座小镇里。
|
|
426
|
+
> 当孤岛连成大陆,小镇就长成了世界。
|
|
427
|
+
|
|
428
|
+
| 阶段 | 方向 | 状态 |
|
|
429
|
+
|------|------|------|
|
|
430
|
+
| **一座小镇** | 3D 可视化、工作流编排、灵魂系统、居民工坊、双模式界面 | ✅ 已实现 |
|
|
431
|
+
| **让小镇稳定运行** | QClaw + OpenClaw 兼容、双语 i18n、话题讨论、npm 发布 | 🔥 当前重点 |
|
|
432
|
+
| **让小镇活起来** | 编辑器打通、生活模拟(衣食住行玩)、成长体系、手机版 | 📋 下一步 |
|
|
433
|
+
| **连成世界** | 小镇联邦协议、跨镇 NPC 互访、技能交换、世界事件 | 🌍 远期愿景 |
|
|
434
|
+
|
|
435
|
+
详见 **[VISION.md](VISION.md)** 和 **[ROADMAP.md](ROADMAP.md)**。
|
|
436
|
+
|
|
437
|
+
---
|
|
438
|
+
|
|
439
|
+
## License
|
|
440
|
+
|
|
441
|
+
MIT
|
package/ROADMAP.md
ADDED
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
# ROADMAP
|
|
2
|
+
|
|
3
|
+
> This roadmap tracks where Agentshire is and where it's going.
|
|
4
|
+
> Agentshire is an OpenClaw/QClaw plugin that turns AI agents into living NPCs in a 3D town with UGC tools.
|
|
5
|
+
> See [README](./README.md) for full feature list, [VISION](./VISION.md) for why we're building this.
|
|
6
|
+
|
|
7
|
+
> Agentshire doesn't lack a vision.
|
|
8
|
+
> What it needs most right now is a solid foundation — so everyone can install it, run it, and rely on it.
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## What We've Built ✅
|
|
13
|
+
|
|
14
|
+
Agentshire is not a slide deck. It's a working system with:
|
|
15
|
+
|
|
16
|
+
- **3D Town + IM Chat** dual-mode interface, real-time dialog bubbles, multimodal support, **bilingual UI (Chinese + English)**
|
|
17
|
+
- **Agent = NPC** real-time mapping, cinematic workflow choreography (summon → assign → code → celebrate → return)
|
|
18
|
+
- **Day/night cycle + 12 weather types + procedural ambient sound (zero audio files) + 4-track dynamic BGM**
|
|
19
|
+
- **Citizen Workshop**: three-source character models (12 built-in + 300+ library + custom upload), AI soul generation, 8-slot animation mapping, publish as independent Agents
|
|
20
|
+
- **Town Editor**: drag-and-drop buildings/roads/lights, grouping/alignment/undo, JSON export + game-level preview
|
|
21
|
+
- **Soul Mode (basic)**: AgentBrain 3-tier AI decisions + LLM deep conversations + relationship graph
|
|
22
|
+
- **Zero-LLM daily social interactions** + Banwei Buster mini-game
|
|
23
|
+
- **Topic Discussions**: multi-citizen group discussions with structured turn-taking
|
|
24
|
+
- **QClaw + OpenClaw compatibility**: auto-detects state directory, works on both platforms
|
|
25
|
+
|
|
26
|
+
The focus of this roadmap is not "0 to 1" — it's **stabilizing the foundation before building higher**.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Current Sprint 🔥
|
|
31
|
+
|
|
32
|
+
> Core principle: **Make the town run reliably first, then make it fun.**
|
|
33
|
+
|
|
34
|
+
| # | Direction | Status | Needs |
|
|
35
|
+
|---|-----------|--------|-------|
|
|
36
|
+
| 1 | **Platform Compatibility** | ✅ QClaw done, CLI 4.x pending | Architect · Systems Engineer |
|
|
37
|
+
| 2 | **npm One-Click Install** | Blocked | Systems Engineer |
|
|
38
|
+
| 3 | **Plugin Stability** | In Progress | Full-Stack Engineer |
|
|
39
|
+
| 4 | Soul Mode Improvements | In Progress | AI Engineer · Frontend |
|
|
40
|
+
| 5 | Editor ↔ Town Integration | In Progress | Three.js Frontend · Systems |
|
|
41
|
+
| 6 | Open Source & Community | In Progress | Everyone willing to help |
|
|
42
|
+
|
|
43
|
+
### 1. Platform Compatibility
|
|
44
|
+
|
|
45
|
+
No matter how many features we add, if users can't install it or upgrading breaks everything, none of it matters.
|
|
46
|
+
|
|
47
|
+
**Current state**: OpenClaw CLI 2026.3.13 and QClaw 0.2.x are fully supported. CLI 4.x is broken.
|
|
48
|
+
|
|
49
|
+
- [x] ~~**QClaw compatibility**: Auto-detect state directory (`~/.qclaw/` vs `~/.openclaw/`), centralized path resolution~~
|
|
50
|
+
- [x] ~~**Agent routing fix**: SessionKey format updated to ensure correct routing to `town-steward` regardless of `agents.list` order~~
|
|
51
|
+
- [x] ~~**Dynamic model display**: Show actual model name from runtime config instead of hardcoded value~~
|
|
52
|
+
- [ ] **4.x Channel initialization regression**: External plugin `defineChannelPluginEntry` lifecycle is not correctly invoked — needs upstream fix or a compatibility workaround
|
|
53
|
+
- [ ] **Rollup code-splitting breaks tool registration**: `api.registerTool()` state is isolated across JS chunks — needs upstream fix or workaround
|
|
54
|
+
- [ ] **Plugin SDK API availability varies by version**: needs a unified compatibility layer
|
|
55
|
+
- [x] ~~**Security scanner false positives**~~: Resolved
|
|
56
|
+
- [ ] Establish a cross-version compatibility test matrix (3.13 / 4.x / latest)
|
|
57
|
+
|
|
58
|
+
**Goal**: Support 3.13 + QClaw 0.2.x + latest CLI stable simultaneously.
|
|
59
|
+
|
|
60
|
+
### 2. npm One-Click Install
|
|
61
|
+
|
|
62
|
+
The plugin has not been published to npm or ClawHub yet. Users must clone → build → link install.
|
|
63
|
+
|
|
64
|
+
- [x] ~~Refactor browser launch to eliminate `child_process` dependency~~ — Done: uses `api.runtime.system.runCommandWithTimeout` with dynamic import fallback
|
|
65
|
+
- [x] ~~Refactor LLM proxy API key resolution to eliminate all `process.env` access~~ — Done: reads from `rt.config.loadConfig()`
|
|
66
|
+
- [ ] Publish to npm and/or ClawHub registry
|
|
67
|
+
- [ ] Automated npm publish pipeline (GitHub Actions)
|
|
68
|
+
|
|
69
|
+
**Goal**: `openclaw plugins install agentshire` works out of the box.
|
|
70
|
+
|
|
71
|
+
### 3. Plugin Stability
|
|
72
|
+
|
|
73
|
+
Make existing features truly reliable.
|
|
74
|
+
|
|
75
|
+
- [ ] ActivityStream state matching fix: out-of-order `tool_result` arrivals cause "step forever in progress"
|
|
76
|
+
- [ ] ChatSessionWatcher reliability in cold-start scenarios
|
|
77
|
+
- [ ] Full state recovery after WebSocket reconnect (workflow phase + NPC positions + dialog context)
|
|
78
|
+
- [ ] Better error messages: clear diagnostics for install failure / connection failure / missing LLM config
|
|
79
|
+
- [ ] Diagnostic command: help users self-check their environment
|
|
80
|
+
|
|
81
|
+
### 4. Soul Mode Improvements
|
|
82
|
+
|
|
83
|
+
NPCs can already make their own decisions. But if they forget everything after a "night's sleep," that's not really living.
|
|
84
|
+
|
|
85
|
+
- [ ] NPC long-term memory persistence (remember important events across sessions)
|
|
86
|
+
- [ ] Soul Mode product toggle and behavior configuration panel
|
|
87
|
+
- [ ] implicit-chat token cost control and fallback strategy optimization
|
|
88
|
+
|
|
89
|
+
### 5. Editor ↔ Town Integration
|
|
90
|
+
|
|
91
|
+
You've built a beautiful map in the editor, hit export — then what? There's one last step missing.
|
|
92
|
+
|
|
93
|
+
- [ ] Load editor-exported JSON map data at runtime
|
|
94
|
+
- [ ] Custom building interaction binding and lighting restoration
|
|
95
|
+
- [ ] Auto-generate pathfinding graph when map changes
|
|
96
|
+
|
|
97
|
+
### 6. Open Source & Community
|
|
98
|
+
|
|
99
|
+
- [ ] Automated npm package publishing (depends on #2)
|
|
100
|
+
- [x] CONTRIBUTING.md
|
|
101
|
+
- [x] First-launch welcome message and onboarding guide
|
|
102
|
+
- [ ] Comprehensive error diagnostics and FAQ documentation
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## Up Next 🗺️
|
|
107
|
+
|
|
108
|
+
### Plugin SDK Compatibility Layer
|
|
109
|
+
|
|
110
|
+
Abstract a unified compat shim to hide OpenClaw version differences:
|
|
111
|
+
|
|
112
|
+
- **LLM calls**: Auto-select from `prepareSimpleCompletionModel` → `runEmbeddedPiAgent` → direct fetch fallback chain
|
|
113
|
+
- **Tool registration**: Detect if `registerTool` is effective, auto-supplement with workspace `TOOLS.md` as fallback
|
|
114
|
+
- **Workspace paths**: ~~Unified resolution logic compatible with different version defaults~~ ✅ Done (centralized `stateDir()`)
|
|
115
|
+
- **Sub-agent management**: Wrap `subagent.run()` context limitations behind a unified async task interface
|
|
116
|
+
|
|
117
|
+
### Developer Experience
|
|
118
|
+
|
|
119
|
+
- e2e test coverage: install → start → chat → workflow full pipeline automated verification
|
|
120
|
+
- Version compatibility CI: every PR automatically tested across multiple OpenClaw versions
|
|
121
|
+
- Plugin development docs: let other developers use Agentshire as a reference for building their own OpenClaw plugins
|
|
122
|
+
|
|
123
|
+
### Mobile Experience
|
|
124
|
+
|
|
125
|
+
The hard part isn't responsive layout — it's: **how does a phone seamlessly connect to OpenClaw running on a local machine?**
|
|
126
|
+
|
|
127
|
+
- [ ] Solve mobile ↔ local Gateway WebSocket tunneling (may require cloud relay)
|
|
128
|
+
- [ ] Mobile 3D performance optimization (model LOD, particle downgrade)
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## Mid-Term Vision: A Town That Feels Alive 🏘️
|
|
133
|
+
|
|
134
|
+
Once the engineering foundation is solid, take the town from "animated" to "alive":
|
|
135
|
+
|
|
136
|
+
- **Clothing**: NPC outfit changes based on season / mood / growth
|
|
137
|
+
- **Food**: In-building interactions — cafés restore energy, restaurants as social scenes
|
|
138
|
+
- **Shelter**: Home ownership — coming home, decorating, neighbor relationships
|
|
139
|
+
- **Travel**: More natural movement — with purpose and small random events along the way
|
|
140
|
+
- **Play**: More mini-games + NPC entertainment interactions (Banwei Buster is just the first)
|
|
141
|
+
|
|
142
|
+
Plus a full progression system:
|
|
143
|
+
|
|
144
|
+
- NPC experience points and skill trees
|
|
145
|
+
- Town prosperity score (accumulates with activity, unlocks new lots and buildings)
|
|
146
|
+
- Achievement system / Town chronicles
|
|
147
|
+
|
|
148
|
+
**This is where game designers and artists can truly shine.**
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
## Long-Term Vision: When Islands Connect 🌍
|
|
153
|
+
|
|
154
|
+
A single town is cozy.
|
|
155
|
+
|
|
156
|
+
But if every user has their own town — those towns shouldn't stay isolated forever.
|
|
157
|
+
|
|
158
|
+
Your architect visits a friend's town to help review some code.
|
|
159
|
+
Two agents from different owners meet at the border and exchange newly learned skills.
|
|
160
|
+
When a global event happens, all connected towns respond together.
|
|
161
|
+
|
|
162
|
+
Dashboards don't form connections.
|
|
163
|
+
But towns and towns? They naturally do.
|
|
164
|
+
|
|
165
|
+
**When islands connect into a continent, towns grow into a world.**
|
|
166
|
+
|
|
167
|
+
---
|
|
168
|
+
|
|
169
|
+
## Join Us 🤝
|
|
170
|
+
|
|
171
|
+
Agentshire doesn't just welcome one type of contributor.
|
|
172
|
+
|
|
173
|
+
**We need most right now:**
|
|
174
|
+
|
|
175
|
+
- **Architects / Systems Engineers**: OpenClaw plugin SDK compatibility layer, cross-version testing, build and release pipelines
|
|
176
|
+
- **OpenClaw Community Contributors**: Upstream bug fixes (Channel init regression, code-splitting state isolation, tool registration)
|
|
177
|
+
- **Full-Stack Engineers**: Plugin stability, WebSocket reliability, error diagnostics
|
|
178
|
+
|
|
179
|
+
**Also welcome:**
|
|
180
|
+
|
|
181
|
+
- **AI Engineers**: Soul mode, NPC brain, long-term memory, multi-agent orchestration
|
|
182
|
+
- **Game Designers**: Game loops, progression balance, event systems, town rhythm
|
|
183
|
+
- **Game Artists**: Buildings / characters / props / animations / UI / world atmosphere
|
|
184
|
+
- **Developers**: Three.js frontend, Node backend, editor integration, mini-games, protocols
|
|
185
|
+
- **Content Creators**: NPC personas, soul files, dialog, town narratives
|
|
186
|
+
|
|
187
|
+
**Most importantly:** We welcome everyone who doesn't fit neatly into a category.
|
|
188
|
+
|
|
189
|
+
You don't have to be a professional game designer, a trained artist, or even an AI expert.
|
|
190
|
+
If you believe in this:
|
|
191
|
+
|
|
192
|
+
> Every user will eventually have their own AI team.
|
|
193
|
+
> And those teams deserve a place to live, grow, work, and play.
|
|
194
|
+
|
|
195
|
+
Then you're already one of us.
|
|
196
|
+
|
|
197
|
+
**How to get involved:**
|
|
198
|
+
|
|
199
|
+
- Browse [Issues](https://github.com/Agentshire/Agentshire/issues) for something that interests you
|
|
200
|
+
- Open an Issue or Discussion to share ideas
|
|
201
|
+
- Fork → PR — contributions of any size are welcome
|
|
202
|
+
- Reach us: `hello@agentshire.dev` · [@AgentshireDev](https://x.com/AgentshireDev)
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
> *This roadmap will keep evolving. But one thing won't change:*
|
|
207
|
+
> *You can't build high on an unstable foundation. First, let everyone walk into their town reliably. Then, together, we'll build a world worth living in.*
|