cyberia 3.2.5 → 3.2.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (301) hide show
  1. package/.github/workflows/engine-cyberia.cd.yml +2 -2
  2. package/.github/workflows/release.cd.yml +1 -2
  3. package/CHANGELOG.md +351 -1
  4. package/CLI-HELP.md +40 -13
  5. package/Dockerfile +0 -4
  6. package/README.md +242 -497
  7. package/bin/build.js +19 -5
  8. package/bin/cyberia.js +1149 -240
  9. package/bin/deploy.js +570 -1
  10. package/bin/file.js +6 -0
  11. package/bin/index.js +1149 -240
  12. package/bin/vs.js +1 -1
  13. package/conf.js +67 -89
  14. package/deployment.yaml +4 -222
  15. package/hardhat/package-lock.json +32 -32
  16. package/hardhat/package.json +3 -3
  17. package/jsconfig.json +1 -1
  18. package/manifests/cronjobs/dd-cron/dd-cron-backup.yaml +2 -2
  19. package/manifests/cronjobs/dd-cron/dd-cron-dns.yaml +2 -2
  20. package/manifests/deployment/dd-cyberia-development/deployment.yaml +4 -222
  21. package/manifests/deployment/dd-cyberia-development/proxy.yaml +10 -118
  22. package/manifests/deployment/dd-default-development/deployment.yaml +2 -6
  23. package/manifests/deployment/dd-test-development/deployment.yaml +136 -66
  24. package/manifests/deployment/dd-test-development/proxy.yaml +41 -5
  25. package/package.json +23 -14
  26. package/proxy.yaml +10 -118
  27. package/scripts/k3s-node-setup.sh +2 -2
  28. package/scripts/nat-iptables.sh +103 -18
  29. package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.controller.js +18 -18
  30. package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.model.js +7 -14
  31. package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.service.js +76 -21
  32. package/src/api/core/core.controller.js +10 -10
  33. package/src/api/core/core.service.js +10 -10
  34. package/src/api/crypto/crypto.controller.js +8 -8
  35. package/src/api/crypto/crypto.service.js +8 -8
  36. package/src/api/cyberia-action/cyberia-action.controller.js +74 -0
  37. package/src/api/cyberia-action/cyberia-action.model.js +87 -0
  38. package/src/api/cyberia-action/cyberia-action.router.js +27 -0
  39. package/src/api/cyberia-action/cyberia-action.service.js +42 -0
  40. package/src/api/cyberia-dialogue/cyberia-dialogue.controller.js +13 -13
  41. package/src/api/cyberia-dialogue/cyberia-dialogue.model.js +11 -11
  42. package/src/api/cyberia-dialogue/cyberia-dialogue.router.js +2 -2
  43. package/src/api/cyberia-dialogue/cyberia-dialogue.service.js +16 -16
  44. package/src/api/cyberia-entity/cyberia-entity.controller.js +10 -10
  45. package/src/api/cyberia-entity/cyberia-entity.service.js +10 -10
  46. package/src/api/cyberia-instance/cyberia-fallback-world.js +19 -209
  47. package/src/api/cyberia-instance/cyberia-instance.controller.js +14 -14
  48. package/src/api/cyberia-instance/cyberia-instance.model.js +3 -0
  49. package/src/api/cyberia-instance/cyberia-instance.service.js +22 -57
  50. package/src/api/cyberia-instance/cyberia-portal-connector.js +20 -246
  51. package/src/api/cyberia-instance/cyberia-world-generator.js +505 -0
  52. package/src/api/cyberia-instance-conf/cyberia-instance-conf.controller.js +10 -10
  53. package/src/api/cyberia-instance-conf/cyberia-instance-conf.defaults.js +216 -55
  54. package/src/api/cyberia-instance-conf/cyberia-instance-conf.model.js +4 -1
  55. package/src/api/cyberia-instance-conf/cyberia-instance-conf.service.js +18 -14
  56. package/src/api/cyberia-map/cyberia-map.controller.js +10 -10
  57. package/src/api/cyberia-map/cyberia-map.service.js +10 -10
  58. package/src/api/cyberia-quest/cyberia-quest.controller.js +74 -0
  59. package/src/api/cyberia-quest/cyberia-quest.model.js +67 -0
  60. package/src/api/cyberia-quest/cyberia-quest.router.js +27 -0
  61. package/src/api/cyberia-quest/cyberia-quest.service.js +42 -0
  62. package/src/api/cyberia-quest-progress/cyberia-quest-progress.controller.js +74 -0
  63. package/src/api/cyberia-quest-progress/cyberia-quest-progress.model.js +49 -0
  64. package/src/api/cyberia-quest-progress/cyberia-quest-progress.router.js +27 -0
  65. package/src/api/cyberia-quest-progress/cyberia-quest-progress.service.js +42 -0
  66. package/src/api/default/default.controller.js +10 -10
  67. package/src/api/default/default.service.js +10 -10
  68. package/src/api/document/document.controller.js +12 -12
  69. package/src/api/document/document.model.js +10 -16
  70. package/src/api/file/file.controller.js +8 -8
  71. package/src/api/file/file.model.js +10 -10
  72. package/src/api/file/file.service.js +36 -36
  73. package/src/api/instance/instance.controller.js +10 -10
  74. package/src/api/instance/instance.model.js +4 -10
  75. package/src/api/instance/instance.service.js +10 -10
  76. package/src/api/ipfs/ipfs.controller.js +12 -12
  77. package/src/api/ipfs/ipfs.model.js +4 -13
  78. package/src/api/ipfs/ipfs.service.js +14 -28
  79. package/src/api/object-layer/object-layer.controller.js +12 -12
  80. package/src/api/object-layer/object-layer.model.js +4 -17
  81. package/src/api/object-layer/object-layer.service.js +12 -12
  82. package/src/api/object-layer-render-frames/object-layer-render-frames.controller.js +10 -10
  83. package/src/api/object-layer-render-frames/object-layer-render-frames.model.js +6 -16
  84. package/src/api/object-layer-render-frames/object-layer-render-frames.service.js +18 -14
  85. package/src/api/test/test.controller.js +8 -8
  86. package/src/api/test/test.service.js +8 -8
  87. package/src/api/user/guest.service.js +99 -0
  88. package/src/api/user/user.controller.js +6 -6
  89. package/src/api/user/user.model.js +8 -13
  90. package/src/api/user/user.service.js +3 -20
  91. package/src/cli/cluster.js +61 -14
  92. package/src/cli/db.js +47 -2
  93. package/src/cli/deploy.js +67 -35
  94. package/src/cli/fs.js +79 -8
  95. package/src/cli/image.js +43 -1
  96. package/src/cli/index.js +26 -1
  97. package/src/cli/release.js +57 -1
  98. package/src/cli/repository.js +69 -31
  99. package/src/cli/run.js +415 -36
  100. package/src/cli/ssh.js +1 -1
  101. package/src/cli/static.js +43 -115
  102. package/src/client/Cryptokoyn.index.js +18 -21
  103. package/src/client/CyberiaPortal.index.js +19 -23
  104. package/src/client/Default.index.js +21 -33
  105. package/src/client/Itemledger.index.js +20 -26
  106. package/src/client/Underpost.index.js +19 -23
  107. package/src/client/components/core/404.js +4 -4
  108. package/src/client/components/core/500.js +4 -4
  109. package/src/client/components/core/Account.js +73 -60
  110. package/src/client/components/core/AgGrid.js +23 -33
  111. package/src/client/components/core/Alert.js +12 -13
  112. package/src/client/components/core/AppStore.js +1 -1
  113. package/src/client/components/core/Auth.js +35 -37
  114. package/src/client/components/core/Badge.js +7 -13
  115. package/src/client/components/core/BtnIcon.js +15 -17
  116. package/src/client/components/core/CalendarCore.js +42 -63
  117. package/src/client/components/core/Chat.js +13 -15
  118. package/src/client/components/core/ClientEvents.js +87 -0
  119. package/src/client/components/core/ColorPaletteElement.js +309 -0
  120. package/src/client/components/core/Content.js +17 -14
  121. package/src/client/components/core/Css.js +15 -71
  122. package/src/client/components/core/CssCore.js +12 -16
  123. package/src/client/components/core/D3Chart.js +4 -4
  124. package/src/client/components/core/Docs.js +64 -91
  125. package/src/client/components/core/DropDown.js +69 -91
  126. package/src/client/components/core/EventBus.js +92 -0
  127. package/src/client/components/core/EventsUI.js +14 -17
  128. package/src/client/components/core/FileExplorer.js +96 -228
  129. package/src/client/components/core/FullScreen.js +47 -75
  130. package/src/client/components/core/Input.js +24 -69
  131. package/src/client/components/core/Keyboard.js +25 -18
  132. package/src/client/components/core/KeyboardAvoidance.js +145 -0
  133. package/src/client/components/core/LoadingAnimation.js +25 -31
  134. package/src/client/components/core/LogIn.js +41 -41
  135. package/src/client/components/core/LogOut.js +23 -14
  136. package/src/client/components/core/Modal.js +462 -178
  137. package/src/client/components/core/NotificationManager.js +14 -18
  138. package/src/client/components/core/Panel.js +54 -50
  139. package/src/client/components/core/PanelForm.js +25 -125
  140. package/src/client/components/core/Polyhedron.js +110 -214
  141. package/src/client/components/core/PublicProfile.js +39 -32
  142. package/src/client/components/core/Recover.js +48 -44
  143. package/src/client/components/core/Responsive.js +88 -32
  144. package/src/client/components/core/RichText.js +9 -18
  145. package/src/client/components/core/Router.js +24 -3
  146. package/src/client/components/core/SearchBox.js +37 -37
  147. package/src/client/components/core/SignUp.js +39 -30
  148. package/src/client/components/core/SocketIo.js +31 -2
  149. package/src/client/components/core/SocketIoHandler.js +6 -6
  150. package/src/client/components/core/ToggleSwitch.js +8 -20
  151. package/src/client/components/core/ToolTip.js +5 -17
  152. package/src/client/components/core/Translate.js +56 -59
  153. package/src/client/components/core/Validator.js +26 -16
  154. package/src/client/components/core/Wallet.js +15 -26
  155. package/src/client/components/core/Worker.js +163 -27
  156. package/src/client/components/core/windowGetDimensions.js +7 -7
  157. package/src/client/components/cryptokoyn/{MenuCryptokoyn.js → AppShellCryptokoyn.js} +57 -57
  158. package/src/client/components/cryptokoyn/CssCryptokoyn.js +15 -15
  159. package/src/client/components/cryptokoyn/LogInCryptokoyn.js +6 -4
  160. package/src/client/components/cryptokoyn/LogOutCryptokoyn.js +6 -4
  161. package/src/client/components/cryptokoyn/RouterCryptokoyn.js +37 -0
  162. package/src/client/components/cryptokoyn/SettingsCryptokoyn.js +4 -4
  163. package/src/client/components/cryptokoyn/SignUpCryptokoyn.js +6 -4
  164. package/src/client/components/cyberia/InstanceEngineCyberia.js +141 -60
  165. package/src/client/components/cyberia/MapEngineCyberia.js +691 -214
  166. package/src/client/components/cyberia/ObjectLayerEngine.js +19 -0
  167. package/src/client/components/cyberia/ObjectLayerEngineModal.js +1204 -94
  168. package/src/client/components/cyberia/ObjectLayerEngineViewer.js +196 -298
  169. package/src/client/components/cyberia-portal/{MenuCyberiaPortal.js → AppShellCyberiaPortal.js} +102 -102
  170. package/src/client/components/cyberia-portal/CommonCyberiaPortal.js +305 -61
  171. package/src/client/components/cyberia-portal/CssCyberiaPortal.js +15 -15
  172. package/src/client/components/cyberia-portal/LogInCyberiaPortal.js +6 -4
  173. package/src/client/components/cyberia-portal/LogOutCyberiaPortal.js +6 -4
  174. package/src/client/components/cyberia-portal/MainBodyCyberiaPortal.js +4 -4
  175. package/src/client/components/cyberia-portal/RouterCyberiaPortal.js +60 -0
  176. package/src/client/components/cyberia-portal/SettingsCyberiaPortal.js +4 -4
  177. package/src/client/components/cyberia-portal/SignUpCyberiaPortal.js +6 -4
  178. package/src/client/components/cyberia-portal/TranslateCyberiaPortal.js +4 -4
  179. package/src/client/components/default/{MenuDefault.js → AppShellDefault.js} +87 -87
  180. package/src/client/components/default/CssDefault.js +12 -12
  181. package/src/client/components/default/LogInDefault.js +6 -4
  182. package/src/client/components/default/LogOutDefault.js +6 -4
  183. package/src/client/components/default/RouterDefault.js +47 -0
  184. package/src/client/components/default/SettingsDefault.js +4 -4
  185. package/src/client/components/default/SignUpDefault.js +6 -4
  186. package/src/client/components/default/TranslateDefault.js +3 -3
  187. package/src/client/components/itemledger/{MenuItemledger.js → AppShellItemledger.js} +57 -57
  188. package/src/client/components/itemledger/CssItemledger.js +15 -15
  189. package/src/client/components/itemledger/LogInItemledger.js +6 -4
  190. package/src/client/components/itemledger/LogOutItemledger.js +6 -4
  191. package/src/client/components/itemledger/RouterItemledger.js +38 -0
  192. package/src/client/components/itemledger/SettingsItemledger.js +4 -4
  193. package/src/client/components/itemledger/SignUpItemledger.js +6 -4
  194. package/src/client/components/itemledger/TranslateItemledger.js +3 -3
  195. package/src/client/components/underpost/{MenuUnderpost.js → AppShellUnderpost.js} +88 -88
  196. package/src/client/components/underpost/CssUnderpost.js +14 -14
  197. package/src/client/components/underpost/CyberpunkBloggerUnderpost.js +4 -4
  198. package/src/client/components/underpost/DocumentSearchProvider.js +1 -1
  199. package/src/client/components/underpost/LabGalleryUnderpost.js +12 -15
  200. package/src/client/components/underpost/LogInUnderpost.js +6 -4
  201. package/src/client/components/underpost/LogOutUnderpost.js +6 -4
  202. package/src/client/components/underpost/RouterUnderpost.js +45 -0
  203. package/src/client/components/underpost/SettingsUnderpost.js +4 -4
  204. package/src/client/components/underpost/SignUpUnderpost.js +6 -4
  205. package/src/client/components/underpost/TranslateUnderpost.js +4 -4
  206. package/src/client/public/cyberia-docs/ACTION-SYSTEM.md +235 -0
  207. package/src/client/public/cyberia-docs/ARCHITECTURE.md +443 -0
  208. package/src/client/public/cyberia-docs/CYBERIA-CLI.md +417 -0
  209. package/src/client/public/cyberia-docs/CYBERIA-CLIENT.md +313 -0
  210. package/src/client/public/cyberia-docs/CYBERIA-SERVER.md +260 -0
  211. package/src/client/public/cyberia-docs/ENTITY-PROFILE.md +241 -0
  212. package/src/client/public/cyberia-docs/HARDHAT-MODULE.md +300 -0
  213. package/src/client/public/cyberia-docs/OFF-CHAIN-ECONOMY.md +279 -0
  214. package/src/client/public/cyberia-docs/QUEST-SYSTEM.md +206 -0
  215. package/src/client/public/cyberia-docs/ROADMAP.md +240 -0
  216. package/src/client/public/cyberia-docs/WHITE-PAPER.md +732 -0
  217. package/src/client/services/atlas-sprite-sheet/atlas-sprite-sheet.service.js +14 -20
  218. package/src/client/services/core/core.service.js +17 -49
  219. package/src/client/services/crypto/crypto.service.js +8 -13
  220. package/src/client/services/cyberia-action/cyberia-action.service.js +99 -0
  221. package/src/client/services/cyberia-dialogue/cyberia-dialogue.service.js +10 -16
  222. package/src/client/services/cyberia-entity/cyberia-entity.management.js +5 -5
  223. package/src/client/services/cyberia-entity/cyberia-entity.service.js +10 -16
  224. package/src/client/services/cyberia-instance/cyberia-instance.management.js +6 -6
  225. package/src/client/services/cyberia-instance/cyberia-instance.service.js +12 -18
  226. package/src/client/services/cyberia-instance-conf/cyberia-instance-conf.service.js +10 -16
  227. package/src/client/services/cyberia-map/cyberia-map.management.js +6 -6
  228. package/src/client/services/cyberia-map/cyberia-map.service.js +12 -18
  229. package/src/client/services/cyberia-quest/cyberia-quest.service.js +99 -0
  230. package/src/client/services/cyberia-quest-progress/cyberia-quest-progress.service.js +99 -0
  231. package/src/client/services/default/default.management.js +159 -267
  232. package/src/client/services/default/default.service.js +10 -16
  233. package/src/client/services/document/document.service.js +14 -19
  234. package/src/client/services/file/file.service.js +8 -13
  235. package/src/client/services/instance/instance.management.js +5 -5
  236. package/src/client/services/instance/instance.service.js +10 -15
  237. package/src/client/services/ipfs/ipfs.service.js +12 -18
  238. package/src/client/services/object-layer/object-layer.management.js +12 -12
  239. package/src/client/services/object-layer/object-layer.service.js +20 -26
  240. package/src/client/services/object-layer-render-frames/object-layer-render-frames.service.js +10 -16
  241. package/src/client/services/test/test.service.js +8 -13
  242. package/src/client/services/user/guest.service.js +86 -0
  243. package/src/client/services/user/user.management.js +5 -5
  244. package/src/client/services/user/user.service.js +14 -20
  245. package/src/client/ssr/body/404.js +3 -3
  246. package/src/client/ssr/body/500.js +3 -3
  247. package/src/client/ssr/body/CacheControl.js +5 -2
  248. package/src/client/ssr/body/DefaultSplashScreen.js +19 -12
  249. package/src/client/ssr/body/UnderpostDefaultSplashScreen.js +13 -6
  250. package/src/client/ssr/head/PwaItemledger.js +197 -60
  251. package/src/client/ssr/mailer/DefaultRecoverEmail.js +19 -20
  252. package/src/client/ssr/mailer/DefaultVerifyEmail.js +15 -16
  253. package/src/client/ssr/offline/Maintenance.js +12 -11
  254. package/src/client/ssr/offline/NoNetworkConnection.js +3 -3
  255. package/src/client/ssr/pages/Test.js +2 -2
  256. package/src/client/sw/core.sw.js +212 -0
  257. package/src/grpc/cyberia/grpc-server.js +179 -67
  258. package/src/index.js +1 -1
  259. package/src/runtime/cyberia-client/Dockerfile +80 -0
  260. package/src/runtime/cyberia-server/Dockerfile +37 -0
  261. package/src/runtime/express/Dockerfile +4 -4
  262. package/src/runtime/lampp/Dockerfile +8 -7
  263. package/src/runtime/wp/Dockerfile +11 -17
  264. package/src/server/atlas-sprite-sheet-generator.js +4 -2
  265. package/src/server/client-build-docs.js +45 -46
  266. package/src/server/client-build.js +334 -60
  267. package/src/server/client-formatted.js +47 -16
  268. package/src/server/conf.js +5 -4
  269. package/src/server/data-query.js +32 -20
  270. package/src/server/dns.js +22 -0
  271. package/src/server/ipfs-client.js +232 -91
  272. package/src/server/object-layer.js +1 -6
  273. package/src/server/process.js +13 -27
  274. package/src/server/semantic-layer-generator-floor.js +11 -51
  275. package/src/server/semantic-layer-generator-resource.js +259 -0
  276. package/src/server/semantic-layer-generator-skin.js +41 -171
  277. package/src/server/semantic-layer-generator.js +122 -14
  278. package/src/server/shape-generator.js +108 -0
  279. package/src/server/start.js +17 -3
  280. package/src/server/valkey.js +141 -235
  281. package/tsconfig.docs.json +15 -0
  282. package/typedoc.dd-cyberia.json +29 -0
  283. package/typedoc.json +29 -0
  284. package/WHITE-PAPER.md +0 -1540
  285. package/hardhat/README.md +0 -531
  286. package/hardhat/WHITE-PAPER.md +0 -1540
  287. package/jsdoc.dd-cyberia.json +0 -68
  288. package/jsdoc.json +0 -68
  289. package/src/api/object-layer/README.md +0 -672
  290. package/src/client/components/core/ColorPalette.js +0 -5267
  291. package/src/client/components/core/JoyStick.js +0 -80
  292. package/src/client/components/cryptokoyn/RoutesCryptokoyn.js +0 -39
  293. package/src/client/components/cyberia-portal/RoutesCyberiaPortal.js +0 -62
  294. package/src/client/components/cyberia-portal/ServerCyberiaPortal.js +0 -136
  295. package/src/client/components/default/RoutesDefault.js +0 -49
  296. package/src/client/components/itemledger/RoutesItemledger.js +0 -40
  297. package/src/client/components/underpost/RoutesUnderpost.js +0 -47
  298. package/src/client/sw/default.sw.js +0 -127
  299. package/src/client/sw/template.sw.js +0 -84
  300. package/src/grpc/cyberia/OFF_CHAIN_ECONOMY.md +0 -305
  301. package/src/grpc/cyberia/README.md +0 -326
package/README.md CHANGED
@@ -1,672 +1,417 @@
1
1
  <p align="center">
2
- <img src="https://www.cyberiaonline.com/assets/splash/apple-touch-icon-precomposed.png" alt="CYBERIA Network Object Layer Engine CLI"/>
2
+ <img src="https://www.cyberiaonline.com/assets/splash/apple-touch-icon-precomposed.png" alt="CYBERIA Network Object Layer Engine"/>
3
3
  </p>
4
4
 
5
5
  <div align="center">
6
6
 
7
- <h1>cyberia</h1>
7
+ ### CYBERIA
8
8
 
9
- <h2>Network Object Layer Engine CLI</h2>
9
+ **Network Object Layers**
10
10
 
11
- [![Downloads](https://img.shields.io/npm/dm/cyberia.svg)](https://www.npmjs.com/package/cyberia) [![Version](https://img.shields.io/npm/v/cyberia.svg)](https://www.npmjs.org/package/cyberia)
11
+ _Stackable Rendering Layers as a Unified Tokenized Reality_
12
12
 
13
- </div>
14
-
15
- This Command Line Interface (CLI) is a core tool for the **Cyberia Network Object Layer Engine**, specifically designed for processing, generating, and managing game assets, primarily **Object Layer** elements like skins, floors, and weapons.
13
+ [![Version](https://img.shields.io/npm/v/cyberia.svg)](https://www.npmjs.org/package/cyberia)
16
14
 
17
- It handles image asset quantization, generates data matrices and color palettes, creates separate render frame documents, and persists the resulting structured data into the game's database with top-level references to render frames and atlas sprite sheets.
15
+ </div>
18
16
 
19
- ## What this tool does
17
+ # Cyberia CLI
20
18
 
21
- The CLI scans the local asset folders (`./src/client/public/cyberia/assets/{type}/{id}/{direction}/{frame}`), quantizes images to a tile matrix and color palette, creates separate ObjectLayerRenderFrames documents, and persists the resulting object-layer documents with references to your configured MongoDB. It also supports reconstructing a visual PNG from the stored matrix for inspection.
19
+ **Path:** `bin/cyberia.js`
22
20
 
23
- Key features:
21
+ ---
24
22
 
25
- - Walks the asset directory structure and processes PNG/GIF files.
26
- - Produces `frame_matrix` and `map_color` arrays from images.
27
- - **Procedurally generates object layers** from semantic item-id descriptors with deterministic seeds and temporal coherence.
28
- - Saves processed objects to the `ObjectLayer` model with top-level references to `ObjectLayerRenderFrames`.
29
- - Creates separate `ObjectLayerRenderFrames` documents for render data.
30
- - Links ObjectLayers to AtlasSpriteSheet documents via top-level `atlasSpriteSheetId`.
31
- - Generates unique UUID v4 seeds (via `crypto.randomUUID()`) for SHA256 hash uniqueness.
32
- - Generates SHA256 hash using `fast-json-stable-stringify` for deterministic serialization.
33
- - Reconstructs PNG frames from stored tile data for debugging.
34
- - Writes static asset PNGs, atlas sprite sheets, and metadata to the conventional directory structure.
35
- - **Drop and cleanup** — removes ObjectLayer, RenderFrames, AtlasSpriteSheet, File documents and unpins IPFS CIDs. Supports targeted drop (specific items) or full drop.
36
- - **Static asset cleanup** — optionally removes client-side static asset folders and runs git-clean on the asset directory.
37
- - **IPFS integration** — pins CIDs to IPFS Cluster and Kubo, manages MFS paths, and unpins on drop.
38
- - **Blockchain integration** — deploys Besu IBFT2 networks, manages ERC-1155 tokens (register, mint, transfer, burn), and resolves canonical CIDs from MongoDB for on-chain registration.
39
- - **Cut-over consistency** — stages all IPFS operations, file creation, and atlas generation in-memory before atomically updating live MongoDB documents.
23
+ ## Overview
40
24
 
41
- ## Getting Started
25
+ The Cyberia CLI (`cyberia`) is an extension of the **Underpost CLI** specifically for the Cyberia MMORPG ecosystem. Underpost is the end-to-end bare-metal infrastructure platform for general-purpose applications; `cyberia` extends it with tooling for the game's content pipeline, economy, and MMO engine toolchain. Unrecognized commands are transparently passed through to `underpost` for infrastructure operations.
42
26
 
43
- ### Prerequisites
27
+ The CLI manages:
44
28
 
45
- You must have the following installed in your environment:
29
+ - **Object Layer (`ol`)** import, generate, and manage game item definitions and sprite atlases.
30
+ - **Instance (`instance`)** — export/import/seed game instance data (maps, entities, configs).
31
+ - **Chain (`chain`)** — Hyperledger Besu deployment and ERC-1155 ObjectLayerToken lifecycle.
32
+ - **Run-Workflow (`run-workflow`)** — execute named operational scripts (seed defaults, build manifests).
46
33
 
47
- - **Node.js** (v24.10.0 recommended)
48
- - **npm** or **yarn**
49
- - **MongoDB** (or access to the configured MongoDB instance)
34
+ ---
50
35
 
51
- ### **Installation**
36
+ ## Global Usage
52
37
 
53
38
  ```bash
54
-
55
- npm install -g cyberia
39
+ node bin/cyberia.js <command> [subcommand] [options]
40
+ # or if installed globally:
41
+ cyberia <command> [subcommand] [options]
56
42
  ```
57
43
 
58
- ### **Environment Setup**
59
-
60
- Ensure your required environment variables (e.g., `DEFAULT_DEPLOY_ID`, `DEFAULT_DEPLOY_HOST`, `DEFAULT_DEPLOY_PATH`) are correctly configured, typically in a .env file, to point the CLI to the correct database instance defined in conf.server.json.
61
-
62
- ## Usage
63
-
64
- The CLI is executed from the project root via the `cyberia.js` script.
44
+ ---
65
45
 
66
- ### Import specific items with `--import`
46
+ ## `cyberia ol` Object Layer Management
67
47
 
68
- Import one or more object layers by item-id. The CLI searches all asset type directories for matching items.
48
+ Manages the Object Layer content pipeline: import PNG assets, generate procedural layers, build atlas sprite sheets, and push to IPFS/MongoDB.
69
49
 
70
50
  ```bash
71
- # Import a single item
72
- cyberia ol hatchet --import
73
-
74
- # Import multiple items (comma-separated)
75
- cyberia ol hatchet,sword,shield --import
51
+ cyberia ol [item-id] [options]
76
52
  ```
77
53
 
78
- ### Batch import by type with `--import-types`
79
-
80
- Iterate asset folders for the given types and store processed objects in MongoDB.
81
-
82
- ```bash
83
- # Process specific types (comma-separated)
84
- cyberia ol --import-types skin,floor
85
-
86
- # Process all recognized types (skips items that already exist in the database)
87
- cyberia ol --import-types all
88
- ```
54
+ ### Options
89
55
 
90
- ### Procedural generation with `--generate`
56
+ | Option | Description |
57
+ | ------------------------------- | --------------------------------------------------------------------------------------------- |
58
+ | `--import` | Import specific item-id(s) (comma-separated) from the PNG asset directory into MongoDB + IPFS |
59
+ | `--import-types [types]` | Batch import by type (e.g. `skin,floor`) or `all` |
60
+ | `--generate` | Generate procedural layers for a semantic item-id (see Semantic Registry below) |
61
+ | `--count <n>` | Shape element count multiplier for `--generate` (default: `3`) |
62
+ | `--seed <seed>` | Deterministic seed string for `--generate` (e.g. `fx-42`) |
63
+ | `--frame-index <n>` | Starting frame index for `--generate` (default: `0`) |
64
+ | `--frame-count <n>` | Number of frames to generate for `--generate` (default: `1`) |
65
+ | `--density <0..1>` | Shape density factor for `--generate` (default: `0.5`) |
66
+ | `--to-atlas-sprite-sheet [dim]` | Convert ObjectLayer frames to a consolidated atlas PNG |
67
+ | `--show-atlas-sprite-sheet` | Display the atlas PNG for the given item-id |
68
+ | `--show-frame [dir_frame]` | View a single frame (e.g. `08_0`; default: `08_0`) |
69
+ | `--drop` | Drop existing data before importing |
70
+ | `--client-public` | With `--drop`: also remove static client asset folders |
71
+ | `--git-clean` | With `--drop`: run clean on the cyberia asset directory |
72
+ | `--dev` | Force development env (uses `.env.development` for localhost IPFS) |
73
+ | `--env-path <path>` | Path to `.env` file (e.g. `./engine-private/conf/dd-cyberia/.env.development`) |
74
+ | `--mongo-host <host>` | MongoDB host override |
75
+ | `--storage-file-path <path>` | Storage filter JSON path override |
91
76
 
92
- Produces semantically consistent object layers with controlled, reproducible variation and short-term temporal coherence (consecutive frames stay visually consistent). Uses the parametric shape generator and object layer engine under the hood.
77
+ ### Examples
93
78
 
94
79
  ```bash
95
- # Generate a desert floor tile (single frame, auto seed)
96
- cyberia ol floor-desert --generate
97
-
98
- # Full control: 3 frames, explicit seed, density
99
- cyberia ol floor-desert --generate --count 3 --seed fx-42 --frame-index 0 --frame-count 3 --density 0.5
100
-
101
- # Grass terrain, sparse, 5 frames
102
- cyberia ol floor-grass --generate --seed meadow-7 --frame-count 5 --density 0.3
103
-
104
- # Water surface, dense, high element count
105
- cyberia ol floor-water --generate --seed ocean-1 --count 5 --density 0.8 --frame-count 4
106
-
107
- # Stone cobblestone
108
- cyberia ol floor-stone --generate --seed cobble-99 --count 4 --density 0.6
109
-
110
- # Lava flow, 3-frame animation
111
- cyberia ol floor-lava --generate --seed magma-3 --frame-count 3 --density 0.7
112
-
113
- # Skin: random skin tone and hair
114
- cyberia ol skin-random --generate --seed hero-1 --frame-count 4
115
-
116
- # Skin: dark skin only
117
- cyberia ol skin-dark --generate --seed hero-dark-7
118
-
119
- # Skin: light/pale skin only
120
- cyberia ol skin-light --generate --seed hero-light-3 --frame-count 4
121
-
122
- # Skin: any skin tone with vivid (blue/red/green…) hair
123
- cyberia ol skin-vivid --generate --seed hero-vivid-2
124
-
125
- # Skin: any skin tone with natural hair only (brown, blond, grey…)
126
- cyberia ol skin-natural --generate --seed hero-nat-5 --frame-count 4
127
-
128
- # Skin: shaved / bald head (no hair at all)
129
- cyberia ol skin-shaved --generate --seed hero-bald-1 --frame-count 4
130
- ```
80
+ # Import a single item from PNG source
81
+ cyberia ol hatchet --import --env-path ./engine-private/conf/dd-cyberia/.env.development
131
82
 
132
- **`--generate` options:**
83
+ # Import all items of type 'skin' and 'floor'
84
+ cyberia ol --import-types skin,floor
133
85
 
134
- | Option | Default | Description |
135
- | ------------------- | --------- | --------------------------------------------------- |
136
- | `--seed <str>` | auto UUID | Deterministic seed string. Same seed → same output. |
137
- | `--count <n>` | `3` | Shape element count multiplier per layer. |
138
- | `--frame-index <n>` | `0` | Starting frame index. |
139
- | `--frame-count <n>` | `1` | Number of consecutive frames to generate. |
140
- | `--density <f>` | `0.5` | Overall density factor (`0`–`1`). Lower = sparser. |
86
+ # Import all types
87
+ cyberia ol --import-types all
141
88
 
142
- **Available semantic item-id prefixes:**
89
+ # Generate a procedural floor tile (desert biome, seed fx-42)
90
+ cyberia ol floor-desert --generate --seed fx-42
143
91
 
144
- | Prefix | Type | Tags | Palette |
145
- | -------------- | ----- | -------------------- | -------------------------- |
146
- | `floor-desert` | floor | sand, dune, arid | warm ochres, sand tones |
147
- | `floor-grass` | floor | grass, meadow, earth | greens, earth browns |
148
- | `floor-water` | floor | water, ocean, wave | blues, foam whites |
149
- | `floor-stone` | floor | stone, rock, cobble | greys, warm/cool stone |
150
- | `floor-lava` | floor | lava, magma, fire | reds, oranges, dark crust |
151
- | `skin-random` | skin | character, body | any skin tone, any hair |
152
- | `skin-dark` | skin | character, body | dark/melanin-rich skin only |
153
- | `skin-light` | skin | character, body | light/pale skin only |
154
- | `skin-vivid` | skin | character, body | any skin + vivid hair (blue, red…) |
155
- | `skin-natural` | skin | character, body | any skin + natural hair (brown…) |
156
- | `skin-shaved` | skin | character, body | any skin, bald/shaved head |
92
+ # Generate 4 frames of a procedural floor with custom count and density
93
+ cyberia ol floor-grass --generate --frame-count 4 --count 5 --density 0.7
157
94
 
158
- #### How generation works
95
+ # Generate a character skin
96
+ cyberia ol skin-dark-001 --generate --seed my-seed
159
97
 
160
- Each item-id maps to a **semantic descriptor** that provides `semanticTags`, `paletteHints`, `preferredShapes`, and named **layer specs** (e.g. `base`, `dunes`, `rocks`, `tufts` for `floor-desert`).
98
+ # View a specific frame of an item
99
+ cyberia ol hatchet --show-frame 08_0
161
100
 
162
- **Seed derivation** deterministic at every level:
101
+ # Rebuild atlas sprite sheet for an item
102
+ cyberia ol hatchet --to-atlas-sprite-sheet
163
103
 
164
- ```
165
- layerSeed = hash(seed + ':' + itemId + ':' + layerKey)
166
- frameSeed = hash(layerSeed + ':' + frameIndex)
104
+ # Drop and re-import a single item
105
+ cyberia ol hatchet --drop --import
167
106
  ```
168
107
 
169
- **Temporal coherence** — shape topology (which shapes, how many, where) is locked to `layerSeed` and never changes between frames. Only smooth, low-frequency noise perturbations (position jitter, slight rotation/scale wobble) are derived from `frameSeed`, so frame N and N+1 differ by ~2% of cells.
108
+ ---
170
109
 
171
- **Layer naming** every generated layer gets an id: `<itemId>-<layerKey>` (e.g. `floor-desert-dunes`).
110
+ ## Semantic Item-ID Registry
172
111
 
173
- **Generation pipeline per layer:**
112
+ The `--generate` flag uses item-id prefixes to look up a procedural descriptor from the semantic registry.
174
113
 
175
- 1. Pick generator type (`noise-field` for base fills, `shape` for element placement).
176
- 2. Select palette colors deterministically from `paletteHints` with per-element `colorShift`.
177
- 3. For shape layers: pick shape via weighted `preferredShapes`, compute stable base transform `(x, y, scale, rotation)`, apply frame-level smooth noise.
178
- 4. Stamp shapes onto a 24×24 grid via `intCoords` rasterization from the parametric shape generator.
179
- 5. Composite all layers into a final `frame_matrix` + unified `colors` palette.
114
+ ### Floor Prefixes
180
115
 
181
- **Variability factors per layer:**
182
- `scaleVariance`, `rotationVariance`, `colorShift`, `jitter`, `noiseLevel`, `detailLevel`, `sparsity` — small, deterministic variations that keep each generation unique but semantically coherent.
116
+ | Prefix | Biome | Description |
117
+ | -------------- | ------ | ----------------------------------------------- |
118
+ | `floor-desert` | Desert | Sandy, arid tile with warm yellow/brown palette |
119
+ | `floor-grass` | Grass | Meadow tile with green/earth tones |
120
+ | `floor-water` | Water | Ocean/lake tile with blue/teal palette |
121
+ | `floor-stone` | Stone | Rock/cobble tile with grey palette |
122
+ | `floor-lava` | Lava | Magma tile with red/orange palette |
183
123
 
184
- #### What `--generate` persists
124
+ ### Skin Prefixes
185
125
 
186
- The full pipeline runs automatically:
126
+ | Prefix | Description |
127
+ | -------------- | ----------------------------------------------- |
128
+ | `skin-random` | Fully random skin tone and hair |
129
+ | `skin-dark` | Dark skin tones |
130
+ | `skin-light` | Light / pale skin tones |
131
+ | `skin-vivid` | Vivid / exotic hair colours (blue, red, green…) |
132
+ | `skin-natural` | Natural hair colours (brown, blond, grey…) |
133
+ | `skin-shaved` | Shaved / bald head — no hair |
187
134
 
188
- 1. **Static assets** — PNGs written to `./src/client/public/cyberia/assets/{type}/{itemId}/{dirCode}/{frame}.png` + `metadata.json`.
189
- 2. **MongoDB** — `ObjectLayerRenderFrames` + `ObjectLayer` documents created with SHA-256 hash.
190
- 3. **Atlas sprite sheet** — generated, saved to `File` + `AtlasSpriteSheet` collections, and linked via `atlasSpriteSheetId`.
135
+ ### Resource Prefixes
191
136
 
192
- #### Reproducibility example
137
+ Resource prefixes follow the pattern `resource-{biome}-{shape}`:
193
138
 
194
- Running the same command twice produces byte-identical output:
139
+ | Shape Family | Description |
140
+ | ------------ | -------------------------------------- |
141
+ | `petal` | Parabolic arc shapes — coloured petals |
142
+ | `stone` | Hard, angular mineral shapes |
143
+ | `polygon` | Crystal/geometric faceted shapes |
144
+ | `thread` | Thin, wispy Bézier lines |
195
145
 
196
- ```bash
197
- # Run 1
198
- cyberia ol floor-desert --generate --seed fx-42 --count 3 --frame-count 2
199
-
200
- # Run 2 (identical output)
201
- cyberia ol floor-desert --generate --seed fx-42 --count 3 --frame-count 2
202
- ```
146
+ **Biomes:** `desert`, `grass`, `water`, `stone`, `lava`
203
147
 
204
- Different seeds produce different but semantically consistent results:
148
+ **Full matrix (20 prefixes):**
205
149
 
206
- ```bash
207
- cyberia ol floor-desert --generate --seed fx-42 # variant A
208
- cyberia ol floor-desert --generate --seed fx-99 # variant B (same style, different arrangement)
209
150
  ```
151
+ resource-desert-petal resource-grass-petal resource-water-petal
152
+ resource-desert-stone resource-grass-stone resource-water-stone
153
+ resource-desert-polygon resource-grass-polygon resource-water-polygon
154
+ resource-desert-thread resource-grass-thread resource-water-thread
210
155
 
211
- ### Drop and cleanup with `--drop`
212
-
213
- Removes object layer data from MongoDB and IPFS. Supports both targeted (specific items) and full drop.
214
-
215
- ```bash
216
- # Drop specific items by item-id
217
- cyberia ol anon,skin --drop
218
-
219
- # Drop all object layers before re-importing
220
- cyberia ol --drop --import-types all
156
+ resource-stone-petal resource-lava-petal
157
+ resource-stone-stone resource-lava-stone
158
+ resource-stone-polygon resource-lava-polygon
159
+ resource-stone-thread resource-lava-thread
221
160
  ```
222
161
 
223
- **What `--drop` removes per item:**
224
-
225
- - `ObjectLayer` document
226
- - `ObjectLayerRenderFrames` document
227
- - `AtlasSpriteSheet` document
228
- - Associated `File` documents
229
- - IPFS CID pins (objectLayer.cid, render.cid, render.metadataCid, AtlasSpriteSheet.cid) from both IPFS Cluster and Kubo
230
- - MFS paths (`/object-layer/{itemKey}`)
162
+ ---
231
163
 
232
- **`--drop` companion flags:**
164
+ ## `cyberia instance` — Instance Management
233
165
 
234
- | Flag | Description |
235
- | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
236
- | `--client-public` | Also remove static asset folders: `./src/client/public/cyberia/assets/{type}/{itemId}/` and `./public/{host}{path}/assets/{type}/{itemId}/` |
237
- | `--git-clean` | Run `underpost run clean .` on the `src/client/public/cyberia` directory to remove untracked files |
166
+ Manages game instance documents (maps, entities, actions, quests, skill config) in MongoDB.
238
167
 
239
168
  ```bash
240
- # Drop items and remove their static asset folders
241
- cyberia ol anon --drop --client-public
242
-
243
- # Full rebuild: drop everything, clean assets, re-import all
244
- cyberia ol --drop --git-clean --import-types all
169
+ cyberia instance [instance-code] [options]
245
170
  ```
246
171
 
247
- ### Environment and database flags
172
+ ### Options
248
173
 
249
- These flags apply to both `ol` and `chain` commands where database or environment access is needed.
174
+ | Option | Description |
175
+ | --------------------- | ----------------------------------------------------------------------------------------------------------------- |
176
+ | `--export [path]` | Export instance and all related documents to a backup directory |
177
+ | `--import [path]` | Import instance documents from a backup directory (upsert, preserves UUIDs) |
178
+ | `--conf` | With `--export`/`--import`: only process instance and instance-conf documents (skip maps, entities, ObjectLayers) |
179
+ | `--drop` | Drop all documents associated with the instance code |
180
+ | `--env-path <path>` | Path to `.env` file |
181
+ | `--mongo-host <host>` | MongoDB host override |
182
+ | `--dev` | Force development environment |
250
183
 
251
- | Flag | Default | Description |
252
- | ---------------------------- | -------- | ----------------------------------------------------------------------------- |
253
- | `--env-path <path>` | `./.env` | Path to .env file (e.g., `./engine-private/conf/dd-cyberia/.env.development`) |
254
- | `--mongo-host <host>` | — | MongoDB host override |
255
- | `--storage-file-path <path>` | — | Storage file path override (JSON filter for selective import) |
256
- | `--dev` | `false` | Force development environment (loads `.env.development` for IPFS localhost) |
184
+ ### Examples
257
185
 
258
186
  ```bash
259
- # Import using a specific environment
260
- cyberia ol --import-types all --env-path ./engine-private/conf/dd-cyberia/.env.development
187
+ # Export instance to backup
188
+ cyberia instance cyberia-main --export ./backups/cyberia-main
261
189
 
262
- # Use development IPFS localhost
263
- cyberia ol anon --import --dev
190
+ # Import instance from backup
191
+ cyberia instance cyberia-main --import ./backups/cyberia-main
264
192
 
265
- # Override MongoDB host
266
- cyberia ol --import-types skin --mongo-host mongodb://localhost:27017
193
+ # Drop instance data
194
+ cyberia instance cyberia-main --drop
267
195
  ```
268
196
 
269
- ## Visualize a processed frame
270
-
271
- Reconstructs and opens a PNG from the database-stored frame data. Requires item-id as the first positional argument, followed by direction and frame index in the format `[direction]_[frameIndex]`.
272
-
273
- ```bash
274
- # Show frame with default direction and frame (08_0)
275
- cyberia ol anon --show-frame
276
-
277
- # Show specific direction and frame
278
- cyberia ol anon --show-frame 08_0
279
-
280
- # Show different directions
281
- cyberia ol anon --show-frame 02_0 # up_idle
282
- cyberia ol anon --show-frame 04_1 # left_idle (second frame)
283
- ```
197
+ ---
284
198
 
285
- **Valid direction codes:**
199
+ ## `cyberia chain` — Blockchain Lifecycle
286
200
 
287
- - `08`: down_idle, none_idle, default_idle
288
- - `18`: down_walking
289
- - `02`: up_idle
290
- - `12`: up_walking
291
- - `04`: left_idle, up_left_idle, down_left_idle
292
- - `14`: left_walking, up_left_walking, down_left_walking
293
- - `06`: right_idle, up_right_idle, down_right_idle
294
- - `16`: right_walking, up_right_walking, down_right_walking
201
+ Full lifecycle management for the Hyperledger Besu network and `ObjectLayerToken` ERC-1155 contract.
295
202
 
296
- This command:
203
+ ### Network Commands
297
204
 
298
- - Finds the ObjectLayer by item-id
299
- - Loads the associated ObjectLayerRenderFrames document
300
- - Reconstructs the PNG from the stored `frame_matrix` and `map_color`
301
- - Saves it temporarily to disk as `{item-id}_{direction}_{frame}.png`
302
- - Opens it with Firefox for visual inspection
205
+ #### `cyberia chain deploy`
303
206
 
304
- ### Generate Atlas Sprite Sheet
305
-
306
- Consolidates all frames (8 directions, multiple modes) from an object layer's render frames into a single optimized PNG atlas with metadata.
207
+ Deploy a new Hyperledger Besu IBFT2 network to Kubernetes:
307
208
 
308
209
  ```bash
309
- # Generate atlas sprite sheet with auto-calculated dimensions (recommended)
310
- cyberia ol anon --to-atlas-sprite-sheet
311
-
312
- # Generate atlas with custom dimensions (manual override)
313
- cyberia ol anon --to-atlas-sprite-sheet 4096
314
-
315
-
210
+ cyberia chain deploy [options]
316
211
  ```
317
212
 
318
- This command:
319
-
320
- - Finds the ObjectLayer by item-id or MongoDB `_id`
321
- - Loads the associated ObjectLayerRenderFrames document
322
- - **Auto-calculates optimal atlas dimensions** based on total frame count (8 directions × all animation modes)
323
- - Generates a consolidated PNG with all animation frames properly arranged
324
- - Stores the PNG in the File collection
325
- - Creates/updates an AtlasSpriteSheet document with frame positions
326
- - Updates the ObjectLayer with top-level `atlasSpriteSheetId` reference
327
- - Uses power-of-2 dimensions for GPU efficiency
328
-
329
- **Atlas Dimension Calculation:**
213
+ | Option | Default | Description |
214
+ | ------------------------ | -------------------------- | ----------------------------------------- |
215
+ | `--validators <n>` | `4` | Number of IBFT2 validators |
216
+ | `--chain-id <id>` | `777771` | EVM chain ID |
217
+ | `--block-period <s>` | `5` | IBFT2 block period in seconds |
218
+ | `--epoch-length <n>` | `30000` | IBFT2 epoch length |
219
+ | `--besu-image <img>` | `hyperledger/besu:24.12.1` | Besu container image |
220
+ | `--node-port-rpc <port>` | `30545` | Kubernetes NodePort for JSON-RPC |
221
+ | `--node-port-ws <port>` | `30546` | Kubernetes NodePort for WebSocket |
222
+ | `--namespace <ns>` | `besu` | Kubernetes namespace |
223
+ | `--pull-image` | — | Pull Besu images before deploying |
224
+ | `--skip-generate` | — | Use existing `manifests/besu/` as-is |
225
+ | `--skip-wait` | — | Skip waiting for validators to be Running |
330
226
 
331
- - **Auto (default)**: Dynamically calculates optimal size based on:
332
- - Total number of frames across all directions and modes
333
- - Individual frame dimensions
334
- - Grid layout to minimize wasted space
335
- - Power-of-2 optimization (1024, 2048, 4096, etc.)
336
- - **Manual override**: Specify exact dimension (e.g., `--to-atlas-sprite-sheet 4096`)
227
+ #### `cyberia chain remove`
337
228
 
338
- **Common Atlas Sizes:**
339
-
340
- - **1024x1024**: ~6-10 frames
341
- - **2048x2048**: ~20-40 frames (typical for character sprites)
342
- - **4096x4096**: ~80-160 frames (complex animations)
343
- - **8192x8192**: Maximum, for extreme cases
344
-
345
- The tool automatically warns if frames exceed the specified dimension and suggests a larger size.
346
-
347
- ### View Atlas Sprite Sheet
348
-
349
- Opens the consolidated atlas sprite sheet PNG for inspection.
229
+ Remove the Besu network from Kubernetes:
350
230
 
351
231
  ```bash
352
- # Show atlas sprite sheet by item-id
353
- cyberia ol anon --show-atlas-sprite-sheet
354
-
232
+ cyberia chain remove [--namespace besu] [--clean-keys] [--clean-manifests]
355
233
  ```
356
234
 
357
- This command:
358
-
359
- - Finds the ObjectLayer by item-id
360
- - Retrieves the associated AtlasSpriteSheet via top-level `atlasSpriteSheetId` or by matching `metadata.itemKey`
361
- - Saves it temporarily to disk
362
- - Opens it with Firefox for visual inspection
363
- - Displays atlas dimensions in the console
364
-
365
- ## Common Workflows
235
+ #### `cyberia chain generate-manifests`
366
236
 
367
- ### Complete Asset Processing Pipeline
368
-
369
- Process assets from source files through to atlas generation:
237
+ Generate Kubernetes manifests without deploying:
370
238
 
371
239
  ```bash
372
- # 1. Import object layers from asset directories
373
- cyberia ol --import-types skin
374
-
375
- # 2. Verify a specific frame was imported correctly
376
- cyberia ol anon --show-frame 08_0
377
-
378
- # 3. Generate optimized atlas sprite sheet
379
- cyberia ol anon --to-atlas-sprite-sheet
380
-
381
- # 4. View the generated atlas
382
- cyberia ol anon --show-atlas-sprite-sheet
240
+ cyberia chain generate-manifests [options] # same options as deploy
383
241
  ```
384
242
 
385
- ### Procedural Generation Pipeline
243
+ ---
386
244
 
387
- Generate an object layer entirely from a semantic descriptor — no source PNGs needed:
245
+ ### Contract Commands
388
246
 
389
- ```bash
390
- # 1. Generate a 3-frame desert floor with explicit seed
391
- cyberia ol floor-desert --generate --seed fx-42 --frame-count 3 --density 0.5
247
+ #### `cyberia chain compile`
392
248
 
393
- # 2. Inspect the generated frame
394
- cyberia ol floor-desert --show-frame 08_0
249
+ Compile the Solidity contracts:
395
250
 
396
- # 3. View the auto-generated atlas
397
- cyberia ol floor-desert --show-atlas-sprite-sheet
251
+ ```bash
252
+ cyberia chain compile
398
253
  ```
399
254
 
400
- ### Batch Procedural Generation
255
+ #### `cyberia chain deploy-contract`
401
256
 
402
- Generate a full tileset family with consistent seeds:
257
+ Deploy `ObjectLayerToken` to a Besu network (mints 10M CKY to the coinbase address):
403
258
 
404
259
  ```bash
405
- cyberia ol floor-desert --generate --seed world-1 --frame-count 3
406
- cyberia ol floor-grass --generate --seed world-1 --frame-count 3
407
- cyberia ol floor-water --generate --seed world-1 --frame-count 4
408
- cyberia ol floor-stone --generate --seed world-1 --frame-count 2
409
- cyberia ol floor-lava --generate --seed world-1 --frame-count 3
260
+ cyberia chain deploy-contract --network besu-k8s
410
261
  ```
411
262
 
412
- ### Exploring Seed Variations
263
+ | Option | Default | Description |
264
+ | ------------------ | ---------- | ------------------------------------------------------------ |
265
+ | `--network <name>` | `besu-k8s` | Hardhat network name (`besu-ibft2`, `besu-qbft`, `besu-k8s`) |
413
266
 
414
- ```bash
415
- # Same item, different seeds — compare visual output
416
- cyberia ol floor-desert --generate --seed alpha --frame-count 1
417
- cyberia ol floor-desert --generate --seed beta --frame-count 1
418
- cyberia ol floor-desert --generate --seed gamma --frame-count 1
267
+ #### `cyberia chain test`
419
268
 
420
- # Inspect each
421
- cyberia ol floor-desert --show-frame 08_0
422
- ```
423
-
424
- ### Debugging Asset Issues
269
+ Run the Hardhat contract test suite:
425
270
 
426
271
  ```bash
427
- # Check if frame data is correct for all directions
428
- cyberia ol anon --show-frame 08_0 # down_idle
429
- cyberia ol anon --show-frame 02_0 # up_idle
430
- cyberia ol anon --show-frame 04_0 # left_idle
431
- cyberia ol anon --show-frame 06_0 # right_idle
432
-
433
- # Verify walking animations
434
- cyberia ol anon --show-frame 18_0 # down_walking
435
- cyberia ol anon --show-frame 12_0 # up_walking
436
- cyberia ol anon --show-frame 14_0 # left_walking
437
- cyberia ol anon --show-frame 16_0 # right_walking
272
+ cyberia chain test
438
273
  ```
439
274
 
440
- ### Working with Multiple Items
275
+ ---
441
276
 
442
- ```bash
443
- # Import multiple types at once
444
- cyberia ol --import-types skin,floor,weapon
445
-
446
- # Process individual items
447
- cyberia ol sword --show-frame 08_0
448
- cyberia ol sword --to-atlas-sprite-sheet
449
- cyberia ol shield --show-frame 08_0
450
- cyberia ol shield --to-atlas-sprite-sheet
451
- ```
277
+ ### Key Management
452
278
 
453
- ### Full Rebuild with Cleanup
279
+ #### `cyberia chain key-gen`
454
280
 
455
- Drop all data, clean static assets, and re-import everything:
281
+ Generate a new secp256k1 Ethereum key pair for the coinbase deployer account:
456
282
 
457
283
  ```bash
458
- # 1. Drop all object layers with IPFS cleanup and static asset removal
459
- cyberia ol --drop --client-public --git-clean
460
-
461
- # 2. Re-import all asset types
462
- cyberia ol --import-types all
463
-
464
- # 3. Verify
465
- cyberia ol anon --show-frame 08_0
284
+ cyberia chain key-gen
285
+ # Output: address + private key + key file written to engine-private/
466
286
  ```
467
287
 
468
- ### Targeted Drop and Re-import
288
+ #### `cyberia chain set-coinbase`
469
289
 
470
- Drop and re-import specific items without affecting others:
290
+ Set the active coinbase key used for contract deployment and minting:
471
291
 
472
292
  ```bash
473
- # 1. Drop specific items and their static folders
474
- cyberia ol anon,skin --drop --client-public
475
-
476
- # 2. Re-import only those items
477
- cyberia ol anon,skin --import
478
-
479
- # 3. Regenerate atlas for each
480
- cyberia ol anon --to-atlas-sprite-sheet
481
- cyberia ol skin --to-atlas-sprite-sheet
293
+ cyberia chain set-coinbase --private-key 0xYOUR_KEY
294
+ cyberia chain set-coinbase --from-file ./engine-private/eth-networks/besu/<address>.key.json
482
295
  ```
483
296
 
484
- ## Blockchain Operations (`chain`)
297
+ ---
485
298
 
486
- The `chain` command group manages Hyperledger Besu IBFT2 network deployment and ERC-1155 token operations for on-chain object layer registration.
299
+ ### Token Commands
487
300
 
488
- ### Deploy Besu IBFT2 Network
301
+ #### `cyberia chain register`
489
302
 
490
- Deploys a private Besu IBFT2 network to Kubernetes.
303
+ Register a single Object Layer item on-chain:
491
304
 
492
305
  ```bash
493
- # Deploy with defaults (4 validators, chain-id 777771)
494
- cyberia chain deploy
495
-
496
- # Custom configuration
497
- cyberia chain deploy --validators 6 --chain-id 888881 --block-period 3
498
-
499
- # Pull container images first
500
- cyberia chain deploy --pull-image
306
+ cyberia chain register <item-id> [options]
501
307
  ```
502
308
 
503
- **`deploy` options:**
504
-
505
- | Option | Default | Description |
506
- | --------------------------- | -------------------------- | -------------------------------------------------- |
507
- | `--validators <count>` | `4` | Number of IBFT2 validators |
508
- | `--chain-id <id>` | `777771` | Chain ID for the network |
509
- | `--block-period <seconds>` | `5` | IBFT2 block period in seconds |
510
- | `--epoch-length <length>` | `30000` | IBFT2 epoch length |
511
- | `--coinbase-address <addr>` | auto-detect | Coinbase deployer address |
512
- | `--besu-image <image>` | `hyperledger/besu:24.12.1` | Besu container image |
513
- | `--curl-image <image>` | `curlimages/curl:8.11.1` | Curl init container image |
514
- | `--node-port-rpc <port>` | `30545` | NodePort for external JSON-RPC access |
515
- | `--node-port-ws <port>` | `30546` | NodePort for external WebSocket access |
516
- | `--namespace <ns>` | `besu` | Kubernetes namespace for Besu resources |
517
- | `--pull-image` | `false` | Pull Besu container images before deployment |
518
- | `--skip-generate` | `false` | Skip manifest generation, use existing manifests |
519
- | `--skip-wait` | `false` | Skip waiting for validators to reach Running state |
520
-
521
- ### Remove Besu Network
309
+ | Option | Default | Description |
310
+ | ---------------------- | ---------- | ----------------------------------------------------- |
311
+ | `--from-db` | | Resolve canonical IPFS CID from MongoDB (recommended) |
312
+ | `--metadata-cid <cid>` | `""` | Manual CID override (ignored when `--from-db` is set) |
313
+ | `--supply <n>` | `1` | Initial token supply (1 = NFT, >1 = semi-fungible) |
314
+ | `--network <name>` | `besu-k8s` | Hardhat network name |
315
+ | `--env-path <path>` | `./.env` | Path to `.env` file |
316
+ | `--mongo-host <host>` | | MongoDB host override |
522
317
 
523
318
  ```bash
524
- # Remove network (keep keys and manifests)
525
- cyberia chain remove
319
+ # Register unique NFT item (non-fungible)
320
+ cyberia chain register legendary-hatchet --from-db --supply 1
526
321
 
527
- # Full cleanup
528
- cyberia chain remove --clean-keys --clean-manifests
322
+ # Register stackable resource (semi-fungible)
323
+ cyberia chain register gold-ore --from-db --supply 1000000
529
324
  ```
530
325
 
531
- | Option | Default | Description |
532
- | ------------------- | ------- | --------------------------------------------------- |
533
- | `--namespace <ns>` | `besu` | Kubernetes namespace for Besu resources |
534
- | `--clean-keys` | `false` | Also remove generated validator keys |
535
- | `--clean-manifests` | `false` | Also remove the generated manifests/besu/ directory |
326
+ #### `cyberia chain batch-register`
536
327
 
537
- ### Generate Manifests Without Deploying
328
+ Register multiple items in a single batch transaction:
538
329
 
539
330
  ```bash
540
- cyberia chain generate-manifests --validators 6 --output-dir ./manifests/besu
331
+ cyberia chain batch-register --from-db --items '[{"itemId":"wood","supply":500000},{"itemId":"stone","supply":500000}]'
541
332
  ```
542
333
 
543
- Accepts the same options as `deploy` plus `--output-dir <dir>` (default: `./manifests/besu`).
334
+ #### `cyberia chain mint`
544
335
 
545
- ### Deploy ERC-1155 Contract
336
+ Mint additional tokens for an existing token ID:
546
337
 
547
338
  ```bash
548
- cyberia chain deploy-contract
549
- cyberia chain deploy-contract --network besu-k8s
339
+ cyberia chain mint --token-id 0 --to 0xABCD...1234 --amount 1000000000000000000000
340
+ cyberia chain mint --token-id <tokenId> --to <address> --amount <uint256>
550
341
  ```
551
342
 
552
- ### Compile and Test Contracts
343
+ #### `cyberia chain balance`
344
+
345
+ Query the token balance of an address:
553
346
 
554
347
  ```bash
555
- cyberia chain compile
556
- cyberia chain test
348
+ cyberia chain balance --address 0xABCD...1234 --token-id 0
557
349
  ```
558
350
 
559
- ### Register Object Layer Item On-Chain
351
+ #### `cyberia chain transfer`
560
352
 
561
- Registers an object layer as an ERC-1155 token with its canonical CID.
353
+ Transfer tokens between addresses:
562
354
 
563
355
  ```bash
564
- # Register with CID resolved from MongoDB (recommended)
565
- cyberia chain register --item-id hatchet --from-db
566
-
567
- # Register with explicit CID
568
- cyberia chain register --item-id hatchet --metadata-cid bafk...
569
-
570
- # Semi-fungible with supply
571
- cyberia chain register --item-id wood --from-db --supply 500000
356
+ cyberia chain transfer --from 0x... --to 0x... --token-id 0 --amount 1000
572
357
  ```
573
358
 
574
- | Option | Default | Required | Description |
575
- | ---------------------- | ---------- | -------- | ------------------------------------------------------- |
576
- | `--item-id <itemId>` | — | yes | Human-readable item identifier |
577
- | `--metadata-cid <cid>` | — | — | IPFS metadata CID (ignored when `--from-db` is set) |
578
- | `--from-db` | `false` | — | Resolve canonical CID from MongoDB ObjectLayer document |
579
- | `--supply <supply>` | `1` | — | Initial token supply (1 = NFT, >1 = semi-fungible) |
580
- | `--network <network>` | `besu-k8s` | — | Hardhat network name |
581
- | `--env-path <path>` | `./.env` | — | Path to .env file |
582
- | `--mongo-host <host>` | — | — | MongoDB host override |
359
+ #### `cyberia chain burn`
583
360
 
584
- ### Batch Register Multiple Items
361
+ Burn tokens from an address:
585
362
 
586
363
  ```bash
587
- # Batch register with CIDs from MongoDB
588
- cyberia chain batch-register --from-db --items '[{"itemId":"wood","supply":500000},{"itemId":"hatchet","supply":1}]'
589
-
590
- # Batch register with explicit CIDs
591
- cyberia chain batch-register --items '[{"itemId":"wood","cid":"bafk...","supply":500000}]'
364
+ cyberia chain burn --token-id 0 --amount 500 --address 0x...
592
365
  ```
593
366
 
594
- ### Mint, Transfer, and Burn Tokens
595
-
596
- ```bash
597
- # Mint additional tokens
598
- cyberia chain mint --token-id 1 --to 0xAddress --amount 100
367
+ #### `cyberia chain status`
599
368
 
600
- # Transfer tokens
601
- cyberia chain transfer --from 0xSender --to 0xRecipient --token-id 1 --amount 50
369
+ Query chain and contract status:
602
370
 
603
- # Burn tokens
604
- cyberia chain burn --address 0xHolder --token-id 1 --amount 10
371
+ ```bash
372
+ cyberia chain status [--network besu-k8s]
373
+ # Outputs: chain ID, block number, CKY total supply, deployer address, pause state
605
374
  ```
606
375
 
607
- ### Query Status and Balances
376
+ #### `cyberia chain pause` / `cyberia chain unpause`
608
377
 
609
- ```bash
610
- # Full network and contract status
611
- cyberia chain status
378
+ Emergency transfer freeze / resume (owner only):
612
379
 
613
- # Query token balance
614
- cyberia chain balance --address 0xAddress --token-id 0
380
+ ```bash
381
+ cyberia chain pause [--network besu-k8s]
382
+ cyberia chain unpause [--network besu-k8s]
615
383
  ```
616
384
 
617
- ### Key Management
618
-
619
- ```bash
620
- # Generate a new Ethereum key pair
621
- cyberia chain key-gen
385
+ ---
622
386
 
623
- # Generate and persist keys
624
- cyberia chain key-gen --save
387
+ ## `cyberia run-workflow` Operational Scripts
625
388
 
626
- # Set coinbase deployer key
627
- cyberia chain set-coinbase --from-file ./engine-private/eth-networks/besu/0xAddr.key.json
628
- cyberia chain set-coinbase --private-key 0xHexKey
629
- ```
389
+ Pre-built operational workflows for seeding and maintenance:
630
390
 
631
- ### Pause / Unpause Token Transfers (Emergency)
391
+ | Subcommand | Description |
392
+ | ---------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
393
+ | `import-default-items` | Import the canonical default item set (`DefaultCyberiaItems`) into MongoDB + IPFS, then seed skill config and dialogues |
394
+ | `seed-skill-config` | Upsert `DefaultSkillConfig` into `CyberiaInstanceConf` for the target instance |
395
+ | `seed-dialogues` | Upsert `DefaultCyberiaDialogues` (NPC dialogue lines) into the `cyberia-dialogue` collection |
396
+ | `generate-semantic-examples` | Generate procedural examples for skin prefixes (`skin-*`); floor and resource generation is available but commented out by default |
397
+ | `build-manifest` | Build Kubernetes Deployment + Service YAML manifests for mmo-client and mmo-server instances (kubeadm + kind variants) |
632
398
 
633
399
  ```bash
634
- cyberia chain pause
635
- cyberia chain unpause
400
+ cyberia run-workflow import-default-items --env-path ./engine-private/conf/dd-cyberia/.env.development
401
+ cyberia run-workflow seed-skill-config --env-path ./engine-private/conf/dd-cyberia/.env.development
402
+ cyberia run-workflow build-manifest
636
403
  ```
637
404
 
638
- ## Workflow Import (`run-workflow`)
639
-
640
- ### Import Default Items
405
+ ---
641
406
 
642
- Imports default Object Layer items from a JSON configuration file into MongoDB.
407
+ ## Environment Variables
643
408
 
644
- ```bash
645
- cyberia run-workflow import-default-items
646
-
647
- # Use development environment
648
- cyberia run-workflow import-default-items --dev
649
- ```
409
+ The CLI respects the following environment variables (typically loaded from an `--env-path` file):
650
410
 
651
- ## Complete `ol` Command Reference
652
-
653
- | Flag | Type | Default | Description |
654
- | ------------------------------- | ------- | ----------- | ---------------------------------------------------------- |
655
- | `--import` | boolean | `false` | Import specific item(s) passed as comma-separated argument |
656
- | `--import-types [type]` | string | — | Batch import by type: `skin`, `floors`, or `all` |
657
- | `--show-frame [dir_frame]` | string | `08_0` | View object layer frame (direction_frameIndex) |
658
- | `--to-atlas-sprite-sheet [dim]` | number | auto | Generate atlas sprite sheet, optionally specify dimension |
659
- | `--show-atlas-sprite-sheet` | boolean | `false` | Display the atlas sprite sheet PNG for an item |
660
- | `--generate` | boolean | `false` | Generate procedural object layers from semantic item-id |
661
- | `--seed <str>` | string | random UUID | Deterministic seed for `--generate` |
662
- | `--count <n>` | number | `3` | Shape element count multiplier for `--generate` |
663
- | `--frame-index <n>` | number | `0` | Starting frame index for `--generate` |
664
- | `--frame-count <n>` | number | `1` | Number of frames for `--generate` |
665
- | `--density <f>` | number | `0.5` | Density factor (0–1) for `--generate` |
666
- | `--drop` | boolean | `false` | Drop existing data (targeted or full) |
667
- | `--client-public` | boolean | `false` | With `--drop`, remove static asset folders |
668
- | `--git-clean` | boolean | `false` | With `--drop`, run underpost clean on cyberia assets |
669
- | `--dev` | boolean | `false` | Force development environment |
670
- | `--env-path <path>` | string | `./.env` | Path to .env file |
671
- | `--mongo-host <host>` | string | — | MongoDB host override |
672
- | `--storage-file-path <path>` | string | — | Storage file path override |
411
+ | Variable | Description |
412
+ | --------------------- | ---------------------------------------------------------------- |
413
+ | `DEFAULT_DEPLOY_ID` | Engine deployment ID — resolves to `engine-private/conf/{id}/` |
414
+ | `DEFAULT_DEPLOY_HOST` | Deploy host (used to index the conf object) |
415
+ | `DEFAULT_DEPLOY_PATH` | Deploy path (used to index the conf object) |
416
+ | `MONGODB_URI` | MongoDB connection string (loaded from conf if not set directly) |
417
+ | `IPFS_API_URL` | IPFS API URL for pinning (e.g. `http://localhost:5001`) |