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
@@ -4,35 +4,30 @@
4
4
  * @module src/server/process.js
5
5
  * @namespace Process
6
6
  */
7
-
8
7
  // https://nodejs.org/api/process
9
-
10
8
  import shell from 'shelljs';
11
9
  import { loggerFactory } from './logger.js';
12
10
  import clipboard from 'clipboardy';
13
11
  import Underpost from '../index.js';
14
12
  import { getNpmRootPath } from './conf.js';
15
-
16
13
  const logger = loggerFactory(import.meta);
17
-
18
14
  /**
19
15
  * Gets the current working directory, replacing backslashes with forward slashes for consistency.
20
16
  * @memberof Process
21
17
  * @returns {string} The root directory path.
22
18
  */
23
19
  const getRootDirectory = () => process.cwd().replace(/\\/g, '/');
24
-
25
20
  /**
26
21
  * Controls and manages process-level events and signals.
27
22
  * @namespace ProcessController
28
23
  */
29
- const ProcessController = {
24
+ class ProcessController {
30
25
  /**
31
26
  * List of signals to listen for for graceful shutdown/handling.
32
27
  * @memberof ProcessController
33
28
  * @type {string[]}
34
29
  */
35
- SIG: [
30
+ static SIG = [
36
31
  'SIGPIPE',
37
32
  'SIGHUP',
38
33
  'SIGTERM',
@@ -45,29 +40,26 @@ const ProcessController = {
45
40
  'SIGFPE',
46
41
  'SIGSEGV',
47
42
  'SIGILL',
48
- ],
49
-
43
+ ];
50
44
  /**
51
45
  * Sets up listeners for various process signals defined in {@link ProcessController.SIG}.
52
46
  * Handles graceful exit on 'SIGINT' (Ctrl+C).
53
47
  * @memberof ProcessController
54
48
  * @returns {Array<process.Process>} An array of process listener handles.
55
49
  */
56
- onSigListen: function () {
57
- return this.SIG.map((sig) =>
50
+ static onSigListen() {
51
+ return ProcessController.SIG.map((sig) =>
58
52
  process.on(sig, (...args) => {
59
- this.logger.info(`process on ${sig}`, args);
53
+ ProcessController.logger.info(`process on ${sig}`, args);
60
54
  switch (sig) {
61
55
  case 'SIGINT':
62
56
  return process.exit();
63
-
64
57
  default:
65
58
  break;
66
59
  }
67
60
  }),
68
61
  );
69
- },
70
-
62
+ }
71
63
  /**
72
64
  * Initializes the ProcessController.
73
65
  * Sets up signal listeners, registers a listener for the 'exit' event, and cleans up temporary deployment environment variables.
@@ -75,16 +67,15 @@ const ProcessController = {
75
67
  * @param {Object} logger - The logger instance to use for internal logging.
76
68
  * @returns {void}
77
69
  */
78
- init: function (logger) {
79
- this.logger = logger;
70
+ static init(logger) {
71
+ ProcessController.logger = logger;
80
72
  process.on('exit', (...args) => {
81
- this.logger.info(`process on exit`, args);
73
+ ProcessController.logger.info(`process on exit`, args);
82
74
  });
83
- this.onSigListen();
75
+ ProcessController.onSigListen();
84
76
  Underpost.env.delete('await-deploy');
85
- },
86
- };
87
-
77
+ }
78
+ }
88
79
  /**
89
80
  * Executes a shell command using shelljs.
90
81
  * @memberof Process
@@ -105,7 +96,6 @@ const shellExec = (
105
96
  if (options.callback) return shell.exec(cmd, options, options.callback);
106
97
  return options.stdout ? shell.exec(cmd, options).stdout : shell.exec(cmd, options);
107
98
  };
108
-
109
99
  /**
110
100
  * Changes the current working directory using shelljs.
111
101
  * @memberof Process
@@ -118,7 +108,6 @@ const shellCd = (cd, options = { disableLog: false }) => {
118
108
  if (!options.disableLog) logger.info(`cd`, cd);
119
109
  return shell.cd(cd);
120
110
  };
121
-
122
111
  /**
123
112
  * Wraps a command to run it as a daemon process in a shell (keeping the process alive/terminal open).
124
113
  * @memberof Process
@@ -126,7 +115,6 @@ const shellCd = (cd, options = { disableLog: false }) => {
126
115
  * @returns {string} The shell command string for the daemon process.
127
116
  */
128
117
  const daemonProcess = (cmd) => `exec bash -c '${cmd}; exec tail -f /dev/null'`;
129
-
130
118
  /**
131
119
  * Retrieves the process ID (PID) of the most recently created gnome-terminal instance.
132
120
  * Note: This function is environment-specific (GNOME/Linux) and uses `pgrep -n`.
@@ -136,7 +124,6 @@ const daemonProcess = (cmd) => `exec bash -c '${cmd}; exec tail -f /dev/null'`;
136
124
  // list all terminals: pgrep gnome-terminal
137
125
  // list last terminal: pgrep -n gnome-terminal
138
126
  const getTerminalPid = () => JSON.parse(shellExec(`pgrep -n gnome-terminal`, { stdout: true, silent: true }));
139
-
140
127
  /**
141
128
  * Copies text content to the system clipboard using clipboardy.
142
129
  * Logs the copied content for confirmation.
@@ -148,5 +135,4 @@ function pbcopy(data) {
148
135
  clipboard.writeSync(data || '🦄');
149
136
  logger.info(`copied to clipboard`, clipboard.readSync());
150
137
  }
151
-
152
138
  export { ProcessController, getRootDirectory, shellExec, shellCd, pbcopy, getTerminalPid, daemonProcess };
@@ -5,10 +5,16 @@
5
5
  * desert, grass, water, stone, and lava. Imported by the main
6
6
  * semantic-layer-generator.js which registers them at startup.
7
7
  *
8
+ * Biome palettes are imported from the centralized BIOME_PALETTES in the
9
+ * parent module (circular import is safe because the function body is only
10
+ * executed after module initialisation completes).
11
+ *
8
12
  * @module src/server/semantic-layer-generator-floor.js
9
13
  * @namespace SemanticLayerGeneratorFloor
10
14
  */
11
15
 
16
+ import { BIOME_PALETTES } from './semantic-layer-generator.js';
17
+
12
18
  /* ═══════════════════════════════════════════════════════════════════════════
13
19
  * FLOOR SEMANTIC REGISTRY
14
20
  * Call registerFloorSemantics(registerFn) once to add all floor descriptors.
@@ -16,7 +22,6 @@
16
22
 
17
23
  /**
18
24
  * Registers all built-in floor semantic descriptors.
19
- * Uses dependency injection — no import from the parent module.
20
25
  *
21
26
  * @param {function(string, import('./semantic-layer-generator.js').SemanticDescriptor): void} registerFn
22
27
  * @memberof SemanticLayerGeneratorFloor
@@ -25,16 +30,7 @@ export function registerFloorSemantics(registerFn) {
25
30
  /* ── Desert ───────────────────────────────────────────────────────────── */
26
31
  registerFn('floor-desert', {
27
32
  semanticTags: ['sand', 'dune', 'arid', 'dry'],
28
- paletteHints: [
29
- [210, 180, 120, 255],
30
- [194, 160, 100, 255],
31
- [230, 205, 150, 255],
32
- [180, 140, 80, 255],
33
- [160, 120, 70, 255],
34
- [120, 90, 55, 255],
35
- [100, 80, 50, 255],
36
- [240, 220, 175, 255],
37
- ],
33
+ paletteHints: BIOME_PALETTES.desert,
38
34
  preferredShapes: { ellipse: 3, circle: 2, cactus: 1, star: 0.5 },
39
35
  itemType: 'floor',
40
36
  layers: {
@@ -104,16 +100,7 @@ export function registerFloorSemantics(registerFn) {
104
100
  /* ── Grass ────────────────────────────────────────────────────────────── */
105
101
  registerFn('floor-grass', {
106
102
  semanticTags: ['grass', 'meadow', 'green', 'earth'],
107
- paletteHints: [
108
- [80, 140, 60, 255],
109
- [60, 120, 45, 255],
110
- [110, 170, 80, 255],
111
- [90, 130, 55, 255],
112
- [130, 100, 65, 255],
113
- [70, 110, 40, 255],
114
- [150, 190, 100, 255],
115
- [100, 85, 50, 255],
116
- ],
103
+ paletteHints: BIOME_PALETTES.grass,
117
104
  preferredShapes: { ellipse: 3, circle: 2, heart: 0.5 },
118
105
  itemType: 'floor',
119
106
  layers: {
@@ -168,16 +155,7 @@ export function registerFloorSemantics(registerFn) {
168
155
  /* ── Water ────────────────────────────────────────────────────────────── */
169
156
  registerFn('floor-water', {
170
157
  semanticTags: ['water', 'ocean', 'wave', 'liquid'],
171
- paletteHints: [
172
- [40, 100, 180, 255],
173
- [60, 130, 200, 255],
174
- [90, 160, 220, 255],
175
- [120, 190, 230, 255],
176
- [30, 80, 150, 255],
177
- [70, 140, 210, 255],
178
- [150, 210, 240, 255],
179
- [20, 60, 120, 255],
180
- ],
158
+ paletteHints: BIOME_PALETTES.water,
181
159
  preferredShapes: { ellipse: 3, circle: 2 },
182
160
  itemType: 'floor',
183
161
  layers: {
@@ -232,16 +210,7 @@ export function registerFloorSemantics(registerFn) {
232
210
  /* ── Stone ────────────────────────────────────────────────────────────── */
233
211
  registerFn('floor-stone', {
234
212
  semanticTags: ['stone', 'rock', 'cobble', 'grey'],
235
- paletteHints: [
236
- [140, 140, 145, 255],
237
- [120, 118, 125, 255],
238
- [165, 165, 170, 255],
239
- [100, 98, 105, 255],
240
- [180, 180, 185, 255],
241
- [90, 85, 80, 255],
242
- [155, 150, 148, 255],
243
- [110, 108, 115, 255],
244
- ],
213
+ paletteHints: BIOME_PALETTES.stone,
245
214
  preferredShapes: { circle: 3, ellipse: 2, star: 1, 'pixel-art': 0.5 },
246
215
  itemType: 'floor',
247
216
  layers: {
@@ -296,16 +265,7 @@ export function registerFloorSemantics(registerFn) {
296
265
  /* ── Lava ─────────────────────────────────────────────────────────────── */
297
266
  registerFn('floor-lava', {
298
267
  semanticTags: ['lava', 'magma', 'fire', 'hot'],
299
- paletteHints: [
300
- [200, 50, 20, 255],
301
- [230, 100, 30, 255],
302
- [255, 180, 50, 255],
303
- [160, 30, 10, 255],
304
- [80, 20, 10, 255],
305
- [50, 15, 8, 255],
306
- [240, 140, 40, 255],
307
- [120, 25, 12, 255],
308
- ],
268
+ paletteHints: BIOME_PALETTES.lava,
309
269
  preferredShapes: { circle: 3, ellipse: 2, cactus: 1 },
310
270
  itemType: 'floor',
311
271
  layers: {
@@ -0,0 +1,259 @@
1
+ /**
2
+ * Resource semantic descriptors for the Semantic Layer Generator.
3
+ *
4
+ * Provides procedural generation recipes for generic collectible resource
5
+ * object layers. Each colour palette is imported from the centralized
6
+ * BIOME_PALETTES (shared with floor descriptors).
7
+ *
8
+ * Each biome is paired with four distinct shape families:
9
+ *
10
+ * • **petal** — several parabolic arcs facing the same general direction,
11
+ * reminiscent of a semi-ring of Saturn. Open curves are
12
+ * scanline-filled so each arc reads as a coloured petal.
13
+ * • **stone** — hard, angular mineral shapes (circle, pixel-art); filled.
14
+ * • **polygon** — perfect regular geometric figures (triangles, squares,
15
+ * pentagons, hexagons); filled with near-zero noise.
16
+ * • **thread** — thin, wispy lines composed of Bézier curves and
17
+ * parabolas; NOT filled — rendered as outlines only.
18
+ *
19
+ * Naming convention: `resource-{biome}-{shape}`
20
+ * e.g. `resource-desert-petal`, `resource-grass-stone`, `resource-lava-thread`
21
+ *
22
+ * All descriptors use `itemType: 'floor'` so the default single-direction
23
+ * frame pipeline (`down_idle` / `default_idle`) is used — matching the
24
+ * stateless, non-directional nature of world-placed resource pickups.
25
+ *
26
+ * @module src/server/semantic-layer-generator-resource.js
27
+ * @namespace SemanticLayerGeneratorResource
28
+ */
29
+
30
+ import { BIOME_PALETTES } from './semantic-layer-generator.js';
31
+
32
+ /* ═══════════════════════════════════════════════════════════════════════════
33
+ * SHAPE FAMILY RECIPES
34
+ *
35
+ * Each recipe defines:
36
+ * tags — semantic tags appended to the biome tags
37
+ * preferredShapes — shape → weight map for the shape picker
38
+ * layers — ordered LayerSpec dict (rendered bottom→top)
39
+ * ═══════════════════════════════════════════════════════════════════════════ */
40
+
41
+ const SHAPE_FAMILIES = {
42
+ /* ── Petal — thick parabolic arcs all facing roughly the same direction ─
43
+ * Uses `thick-parabola` — a closed band shape that traces the outer
44
+ * parabola forward and the inner parabola backward, producing a thick
45
+ * filled crescent. Two layers with slightly different curvature &
46
+ * thickness overlap to build a bold Saturn-ring effect.
47
+ * ───────────────────────────────────────────────────────────────────── */
48
+ petal: {
49
+ tags: ['petal', 'arc', 'crescent', 'organic'],
50
+ preferredShapes: { 'thick-parabola': 5 },
51
+ layers: {
52
+ arcs: {
53
+ generator: 'shape',
54
+ shapes: ['thick-parabola'],
55
+ count: 2,
56
+ scaleBase: 0.45,
57
+ scaleRange: 0.15,
58
+ scaleVariance: 0.1,
59
+ rotationBase: 90, // vertical parabolas
60
+ rotationVariance: 10,
61
+ colorShift: 18,
62
+ jitter: 0.04,
63
+ noiseLevel: 0.04,
64
+ detailLevel: 1.2,
65
+ sparsity: 0.05,
66
+ centerBias: 0.6, // cluster near tile centre
67
+ frameJitter: 0.008,
68
+ frameRotation: 1.5,
69
+ frameScale: 0.004,
70
+ fill: true,
71
+ shapeParams: { a: 0.5, rangeX: 1.3, thickness: 0.35 },
72
+ },
73
+ inner: {
74
+ generator: 'shape',
75
+ shapes: ['thick-parabola'],
76
+ count: 1,
77
+ scaleBase: 0.35,
78
+ scaleRange: 0.15,
79
+ scaleVariance: 0.1,
80
+ rotationBase: 90,
81
+ rotationVariance: 6,
82
+ colorShift: 24,
83
+ jitter: 0.03,
84
+ noiseLevel: 0.03,
85
+ detailLevel: 1.0,
86
+ sparsity: 0.05,
87
+ centerBias: 0.6,
88
+ frameJitter: 0.006,
89
+ frameRotation: 1.0,
90
+ frameScale: 0.003,
91
+ fill: true,
92
+ shapeParams: { a: 0.6, rangeX: 1.2, thickness: 0.4 },
93
+ },
94
+ },
95
+ },
96
+
97
+ /* ── Stone — hard, angular mineral shapes (filled) ────────────────────── */
98
+ stone: {
99
+ tags: ['stone', 'mineral', 'rock', 'hard'],
100
+ preferredShapes: { circle: 3, 'pixel-art': 3, star: 1, ellipse: 1 },
101
+ layers: {
102
+ body: {
103
+ generator: 'shape',
104
+ shapes: ['circle', 'pixel-art'],
105
+ count: 3,
106
+ scaleVariance: 0.35,
107
+ rotationVariance: 90,
108
+ colorShift: 10,
109
+ jitter: 0.06,
110
+ noiseLevel: 0.18,
111
+ detailLevel: 1.2,
112
+ sparsity: 0.1,
113
+ frameJitter: 0.002,
114
+ frameRotation: 0.3,
115
+ frameScale: 0.002,
116
+ fill: true,
117
+ },
118
+ chips: {
119
+ generator: 'shape',
120
+ shapes: ['star', 'pixel-art'],
121
+ count: 4,
122
+ scaleVariance: 0.4,
123
+ rotationVariance: 180,
124
+ colorShift: 16,
125
+ jitter: 0.1,
126
+ noiseLevel: 0.2,
127
+ detailLevel: 0.9,
128
+ sparsity: 0.3,
129
+ frameJitter: 0.001,
130
+ frameRotation: 0.2,
131
+ frameScale: 0.001,
132
+ fill: true,
133
+ },
134
+ },
135
+ },
136
+
137
+ /* ── Polygon — one geometric shape repeated with variations ───────────
138
+ * A single regular polygon (square) repeated several times with
139
+ * varying scale, rotation, and colour — clearly geometric,
140
+ * possibly overlapping. Zero noise keeps edges ruler-straight.
141
+ * ───────────────────────────────────────────────────────────────────── */
142
+ polygon: {
143
+ tags: ['polygon', 'crystal', 'geometric', 'facet'],
144
+ preferredShapes: { 'regular-polygon': 6 },
145
+ layers: {
146
+ figures: {
147
+ generator: 'shape',
148
+ shapes: ['regular-polygon'],
149
+ count: 3,
150
+ scaleBase: 0.25,
151
+ scaleRange: 0.25,
152
+ scaleVariance: 0.15,
153
+ rotationVariance: 25,
154
+ colorShift: 20,
155
+ jitter: 0.02,
156
+ noiseLevel: 0.0,
157
+ detailLevel: 1.3,
158
+ sparsity: 0.0,
159
+ centerBias: 0.75, // stack near tile centre
160
+ frameJitter: 0.003,
161
+ frameRotation: 0.8,
162
+ frameScale: 0.002,
163
+ fill: true,
164
+ shapeParams: { sides: 4 },
165
+ },
166
+ },
167
+ },
168
+
169
+ /* ── Thread — thin, wispy wavy lines (outlines only, NOT filled) ──────
170
+ * Bézier curves and parabolas rendered as open contours. High count
171
+ * gives a tangle-of-threads appearance.
172
+ * ───────────────────────────────────────────────────────────────────── */
173
+ thread: {
174
+ tags: ['thread', 'fiber', 'sewing', 'wisp'],
175
+ preferredShapes: { 'bezier-path': 4, parabola: 3 },
176
+ layers: {
177
+ strands: {
178
+ generator: 'shape',
179
+ shapes: ['bezier-path', 'parabola'],
180
+ count: 7,
181
+ scaleVariance: 0.35,
182
+ rotationVariance: 180,
183
+ colorShift: 14,
184
+ jitter: 0.12,
185
+ noiseLevel: 0.15,
186
+ detailLevel: 1.0,
187
+ sparsity: 0.15,
188
+ frameJitter: 0.015,
189
+ frameRotation: 3.0,
190
+ frameScale: 0.006,
191
+ fill: false, // outlines only — wavy lines
192
+ shapeParams: { closed: false },
193
+ },
194
+ wisps: {
195
+ generator: 'shape',
196
+ shapes: ['bezier-path'],
197
+ count: 4,
198
+ scaleVariance: 0.3,
199
+ rotationVariance: 120,
200
+ colorShift: 10,
201
+ jitter: 0.1,
202
+ noiseLevel: 0.1,
203
+ detailLevel: 0.9,
204
+ sparsity: 0.3,
205
+ frameJitter: 0.01,
206
+ frameRotation: 2.0,
207
+ frameScale: 0.004,
208
+ fill: false,
209
+ shapeParams: { closed: false },
210
+ },
211
+ },
212
+ },
213
+ };
214
+
215
+ /* ═══════════════════════════════════════════════════════════════════════════
216
+ * BIOME SEMANTIC TAGS
217
+ * ═══════════════════════════════════════════════════════════════════════════ */
218
+
219
+ const BIOME_TAGS = {
220
+ desert: ['sand', 'arid', 'dry'],
221
+ grass: ['grass', 'meadow', 'earth'],
222
+ water: ['water', 'ocean', 'liquid'],
223
+ stone: ['rock', 'cobble', 'grey'],
224
+ lava: ['lava', 'magma', 'fire'],
225
+ };
226
+
227
+ /* ═══════════════════════════════════════════════════════════════════════════
228
+ * REGISTRATION
229
+ * ═══════════════════════════════════════════════════════════════════════════ */
230
+
231
+ /**
232
+ * Registers all built-in resource semantic descriptors.
233
+ *
234
+ * Generates 5 biomes × 4 shape families = 20 descriptors, each registered
235
+ * under the prefix `resource-{biome}-{shape}`.
236
+ *
237
+ * @param {function(string, import('./semantic-layer-generator.js').SemanticDescriptor): void} registerFn
238
+ * @memberof SemanticLayerGeneratorResource
239
+ */
240
+ export function registerResourceSemantics(registerFn) {
241
+ const biomes = Object.keys(BIOME_PALETTES);
242
+ const families = Object.keys(SHAPE_FAMILIES);
243
+
244
+ for (const biome of biomes) {
245
+ for (const family of families) {
246
+ const prefix = `resource-${biome}-${family}`;
247
+ const palette = BIOME_PALETTES[biome];
248
+ const recipe = SHAPE_FAMILIES[family];
249
+
250
+ registerFn(prefix, {
251
+ semanticTags: [...BIOME_TAGS[biome], ...recipe.tags, 'resource'],
252
+ paletteHints: palette,
253
+ preferredShapes: recipe.preferredShapes,
254
+ itemType: 'floor',
255
+ layers: recipe.layers,
256
+ });
257
+ }
258
+ }
259
+ }