@underpostnet/cyberia 3.3.0 → 3.3.73

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 (471) hide show
  1. package/.dockerignore +1 -0
  2. package/.github/workflows/coverall.cyberia.ci.yml +34 -14
  3. package/.github/workflows/cyberia-client.cd.yml +5 -0
  4. package/.github/workflows/cyberia-server.cd.yml +5 -0
  5. package/.github/workflows/docker-image.cyberia-client.ci.yml +8 -5
  6. package/.github/workflows/docker-image.cyberia-client.dev.ci.yml +8 -3
  7. package/.github/workflows/docker-image.cyberia-server.ci.yml +8 -5
  8. package/.github/workflows/docker-image.cyberia-server.dev.ci.yml +8 -5
  9. package/.github/workflows/docker-image.engine-cyberia.ci.yml +15 -1
  10. package/.github/workflows/docker-image.engine-cyberia.dev.ci.yml +15 -1
  11. package/.github/workflows/engine-cyberia.cd.yml +3 -0
  12. package/.github/workflows/engine-cyberia.ci.yml +4 -5
  13. package/.github/workflows/ghpkg.ci.yml +35 -20
  14. package/.github/workflows/hardhat.ci.yml +12 -11
  15. package/.github/workflows/npmpkg.ci.yml +17 -15
  16. package/.github/workflows/pwa-microservices-template-test.ci.yml +2 -2
  17. package/.github/workflows/release.cd.yml +1 -0
  18. package/.prettierignore +1 -0
  19. package/AGENTS.md +47 -0
  20. package/CHANGELOG.md +565 -2510
  21. package/CLI-HELP.md +306 -147
  22. package/Dockerfile +25 -9
  23. package/Dockerfile.dev +25 -9
  24. package/Dockerfile.test +4 -4
  25. package/README.md +21 -1
  26. package/bin/build.js +66 -41
  27. package/bin/build.template.js +8 -3
  28. package/bin/cyberia.js +308 -91
  29. package/bin/deploy.js +18 -104
  30. package/bin/index.js +308 -91
  31. package/conf.js +91 -4
  32. package/deploy/cyberia-client/deploy.sh +47 -0
  33. package/deploy/cyberia-client/package.sh +18 -0
  34. package/deploy/cyberia-client/state.sh +14 -0
  35. package/deploy/cyberia-server/deploy.sh +47 -0
  36. package/deploy/cyberia-server/package.sh +18 -0
  37. package/deploy/cyberia-server/state.sh +14 -0
  38. package/deploy/dd-cyberia/deploy.sh +6 -26
  39. package/deploy/dd-cyberia/init.sh +35 -43
  40. package/deploy/dd-cyberia/package.sh +17 -0
  41. package/deploy/dd-cyberia/state.sh +14 -0
  42. package/deploy/dd-cyberia/sync-deploy.sh +92 -170
  43. package/deploy/lib/github-actions-logging.sh +594 -0
  44. package/deploy/lib/host.sh +185 -0
  45. package/deploy/lib/state.sh +62 -0
  46. package/deploy/pwa-microservices-template/deploy.sh +12 -39
  47. package/deploy/release/deploy.sh +9 -39
  48. package/deployment.yaml +7 -2
  49. package/docker-compose.yml +7 -7
  50. package/examples/static-page/README.md +19 -19
  51. package/examples/static-page/ssr-components/CustomPage.js +2 -2
  52. package/hardhat/hardhat.config.js +1 -6
  53. package/hardhat/package-lock.json +101 -40
  54. package/hardhat/package.json +2 -2
  55. package/manifests/alertmanager/deployment.yaml +81 -0
  56. package/manifests/blackbox-exporter/deployment.yaml +75 -0
  57. package/manifests/cronjobs/dd-cron/dd-cron-backup.yaml +32 -7
  58. package/manifests/cronjobs/dd-cron/dd-cron-vultr.yaml +32 -7
  59. package/manifests/deployment/dd-cyberia-development/deployment.yaml +7 -2
  60. package/manifests/deployment/dd-default-development/deployment.yaml +2 -2
  61. package/manifests/grafana/deployment.yaml +26 -7
  62. package/manifests/grafana/kustomization.yaml +1 -0
  63. package/manifests/grafana/service.yaml +6 -1
  64. package/manifests/mariadb/pv.yaml +1 -0
  65. package/manifests/mongodb/statefulset.yaml +9 -2
  66. package/manifests/mysql/pv-pvc.yaml +14 -1
  67. package/manifests/postgresql/pv.yaml +12 -1
  68. package/manifests/postgresql/pvc.yaml +1 -0
  69. package/manifests/prometheus/deployment.yaml +18 -22
  70. package/package.json +83 -10
  71. package/scripts/event-monitor.sh +56 -0
  72. package/scripts/k3s-node-setup.sh +27 -14
  73. package/scripts/kubeadm-node-setup.sh +31 -11
  74. package/scripts/maas-setup.sh +8 -8
  75. package/scripts/selinux-normalize.sh +907 -0
  76. package/scripts/shutdown-machine.sh +843 -0
  77. package/scripts/test-monitor.sh +3 -3
  78. package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.controller.js +1 -1
  79. package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.router.js +2 -2
  80. package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.service.js +2 -2
  81. package/src/api/core/core.controller.js +1 -1
  82. package/src/api/core/core.router.js +2 -2
  83. package/src/api/core/core.service.js +2 -2
  84. package/src/api/crypto/crypto.controller.js +1 -1
  85. package/src/api/crypto/crypto.service.js +1 -1
  86. package/src/api/cyberia-action/cyberia-action.controller.js +1 -1
  87. package/src/api/cyberia-action/cyberia-action.router.js +1 -1
  88. package/src/api/cyberia-action/cyberia-action.service.js +2 -2
  89. package/src/api/cyberia-client-hints/cyberia-client-hints.controller.js +1 -1
  90. package/src/api/cyberia-client-hints/cyberia-client-hints.router.js +1 -1
  91. package/src/api/cyberia-client-hints/cyberia-client-hints.service.js +2 -2
  92. package/src/api/cyberia-dialogue/cyberia-dialogue.controller.js +1 -1
  93. package/src/api/cyberia-dialogue/cyberia-dialogue.router.js +1 -1
  94. package/src/api/cyberia-dialogue/cyberia-dialogue.service.js +2 -2
  95. package/src/api/cyberia-entity/cyberia-entity.controller.js +1 -1
  96. package/src/api/cyberia-entity/cyberia-entity.router.js +1 -1
  97. package/src/api/cyberia-entity/cyberia-entity.service.js +2 -2
  98. package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.controller.js +1 -1
  99. package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.router.js +1 -1
  100. package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.service.js +2 -2
  101. package/src/api/cyberia-instance/cyberia-fallback-capture.js +466 -0
  102. package/src/api/cyberia-instance/cyberia-fallback-world.js +8 -0
  103. package/src/api/cyberia-instance/cyberia-instance-map.service.js +1 -1
  104. package/src/api/cyberia-instance/cyberia-instance.controller.js +1 -1
  105. package/src/api/cyberia-instance/cyberia-instance.router.js +2 -2
  106. package/src/api/cyberia-instance/cyberia-instance.service.js +2 -2
  107. package/src/api/cyberia-instance-conf/cyberia-instance-conf.controller.js +1 -1
  108. package/src/api/cyberia-instance-conf/cyberia-instance-conf.router.js +1 -1
  109. package/src/api/cyberia-instance-conf/cyberia-instance-conf.service.js +2 -2
  110. package/src/api/cyberia-map/cyberia-map.controller.js +1 -1
  111. package/src/api/cyberia-map/cyberia-map.router.js +1 -1
  112. package/src/api/cyberia-map/cyberia-map.service.js +2 -2
  113. package/src/api/cyberia-quest/cyberia-quest.controller.js +1 -1
  114. package/src/api/cyberia-quest/cyberia-quest.router.js +1 -1
  115. package/src/api/cyberia-quest/cyberia-quest.service.js +2 -2
  116. package/src/api/cyberia-quest-progress/cyberia-quest-progress.controller.js +1 -1
  117. package/src/api/cyberia-quest-progress/cyberia-quest-progress.router.js +1 -1
  118. package/src/api/cyberia-quest-progress/cyberia-quest-progress.service.js +2 -2
  119. package/src/api/cyberia-saga/cyberia-saga.controller.js +1 -1
  120. package/src/api/cyberia-saga/cyberia-saga.router.js +1 -1
  121. package/src/api/cyberia-saga/cyberia-saga.service.js +2 -2
  122. package/src/api/cyberia-server-defaults/cyberia-server-defaults.js +0 -26
  123. package/src/api/cyberia-skill/cyberia-skill.controller.js +1 -1
  124. package/src/api/cyberia-skill/cyberia-skill.router.js +1 -1
  125. package/src/api/cyberia-skill/cyberia-skill.service.js +2 -2
  126. package/src/api/default/default.controller.js +1 -1
  127. package/src/api/default/default.router.js +1 -1
  128. package/src/api/default/default.service.js +2 -2
  129. package/src/api/document/document.controller.js +1 -1
  130. package/src/api/document/document.router.js +1 -1
  131. package/src/api/document/document.service.js +2 -2
  132. package/src/api/file/file.controller.js +1 -1
  133. package/src/api/file/file.router.js +1 -1
  134. package/src/api/file/file.service.js +2 -2
  135. package/src/api/instance/instance.controller.js +1 -1
  136. package/src/api/instance/instance.router.js +1 -1
  137. package/src/api/instance/instance.service.js +2 -2
  138. package/src/api/ipfs/ipfs.controller.js +1 -1
  139. package/src/api/ipfs/ipfs.router.js +2 -2
  140. package/src/api/ipfs/ipfs.service.js +2 -2
  141. package/src/api/object-layer/object-layer.controller.js +1 -1
  142. package/src/api/object-layer/object-layer.router.js +2 -2
  143. package/src/api/object-layer/object-layer.service.js +3 -3
  144. package/src/api/object-layer-render-frames/object-layer-render-frames.controller.js +1 -1
  145. package/src/api/object-layer-render-frames/object-layer-render-frames.router.js +1 -1
  146. package/src/api/object-layer-render-frames/object-layer-render-frames.service.js +2 -2
  147. package/src/api/test/test.controller.js +1 -1
  148. package/src/api/test/test.service.js +1 -1
  149. package/src/api/user/guest.service.js +3 -3
  150. package/src/api/user/user.controller.js +1 -1
  151. package/src/api/user/user.router.js +2 -2
  152. package/src/api/user/user.service.js +4 -4
  153. package/src/api.js +5 -9
  154. package/src/cli/app.js +391 -0
  155. package/src/cli/baremetal.js +30 -35
  156. package/src/cli/client.js +306 -0
  157. package/src/cli/cloud-init.js +3 -3
  158. package/src/cli/cluster.js +184 -82
  159. package/src/cli/db.js +120 -68
  160. package/src/cli/deploy.js +153 -71
  161. package/src/cli/docker-compose.js +5 -5
  162. package/src/cli/domains.js +184 -0
  163. package/src/cli/dotenv-store.js +143 -0
  164. package/src/cli/event.js +2281 -0
  165. package/src/cli/fs.js +3 -3
  166. package/src/cli/host.js +672 -0
  167. package/src/cli/image.js +4 -6
  168. package/src/cli/index.js +322 -142
  169. package/src/cli/ipfs.js +34 -30
  170. package/src/cli/kickstart.js +1 -1
  171. package/src/cli/kubectl.js +218 -41
  172. package/src/cli/lxd.js +3 -3
  173. package/src/cli/monitor.js +1359 -26
  174. package/src/cli/package.js +90 -0
  175. package/src/cli/release.js +16 -12
  176. package/src/cli/repository.js +558 -363
  177. package/src/cli/run.js +331 -650
  178. package/src/cli/secrets.js +2158 -964
  179. package/src/cli/ssh.js +478 -279
  180. package/src/cli/state.js +394 -0
  181. package/src/cli/static.js +2 -2
  182. package/src/cli/system.js +1 -1
  183. package/src/cli/test.js +199 -125
  184. package/src/cli/vultr.js +61 -21
  185. package/src/cli/wireguard.js +1111 -306
  186. package/src/client/components/core/CalendarCore.js +53 -96
  187. package/src/client/components/core/Docs.js +258 -211
  188. package/src/client/components/core/FileExplorer.js +0 -21
  189. package/src/client/components/core/PanelForm.js +4 -4
  190. package/src/client/components/core/Repository.js +56 -0
  191. package/src/client/components/core/Translate.js +7 -0
  192. package/src/client/components/core/{FullScreen.js → ViewModeController.js} +42 -39
  193. package/src/client/components/core/Wallet.js +0 -11
  194. package/src/client/components/core/Worker.js +7 -1
  195. package/src/client/components/cryptokoyn/SettingsCryptokoyn.js +2 -2
  196. package/src/client/components/cyberia-portal/AppShellCyberiaPortal.js +2 -1
  197. package/src/client/components/cyberia-portal/SettingsCyberiaPortal.js +2 -2
  198. package/src/client/components/default/AppShellDefault.js +1 -1
  199. package/src/client/components/default/SettingsDefault.js +2 -2
  200. package/src/client/components/itemledger/SettingsItemledger.js +2 -2
  201. package/src/client/components/underpost/AppShellUnderpost.js +3 -2
  202. package/src/client/components/underpost/SettingsUnderpost.js +2 -2
  203. package/src/client/public/cyberia-docs/CYBERIA-CLI.md +32 -5
  204. package/src/client/public/cyberia-docs/CYBERIA.md +21 -1
  205. package/src/client/public/cyberia-docs/HARDHAT-MODULE.md +23 -6
  206. package/src/client/public/cyberia-docs/ROADMAP.md +1 -1
  207. package/src/client/public/cyberia-docs/WHITE-PAPER.md +1 -1
  208. package/src/client/public/default/android-chrome-144x144.png +0 -0
  209. package/src/client/public/default/android-chrome-192x192.png +0 -0
  210. package/src/client/public/default/android-chrome-256x256.png +0 -0
  211. package/src/client/public/default/android-chrome-36x36.png +0 -0
  212. package/src/client/public/default/android-chrome-384x384.png +0 -0
  213. package/src/client/public/default/android-chrome-48x48.png +0 -0
  214. package/src/client/public/default/android-chrome-512x512.png +0 -0
  215. package/src/client/public/default/android-chrome-72x72.png +0 -0
  216. package/src/client/public/default/android-chrome-96x96.png +0 -0
  217. package/src/client/public/default/apple-touch-icon-1024x1024.png +0 -0
  218. package/src/client/public/default/apple-touch-icon-114x114.png +0 -0
  219. package/src/client/public/default/apple-touch-icon-120x120.png +0 -0
  220. package/src/client/public/default/apple-touch-icon-144x144.png +0 -0
  221. package/src/client/public/default/apple-touch-icon-152x152.png +0 -0
  222. package/src/client/public/default/apple-touch-icon-167x167.png +0 -0
  223. package/src/client/public/default/apple-touch-icon-180x180.png +0 -0
  224. package/src/client/public/default/apple-touch-icon-57x57.png +0 -0
  225. package/src/client/public/default/apple-touch-icon-60x60.png +0 -0
  226. package/src/client/public/default/apple-touch-icon-72x72.png +0 -0
  227. package/src/client/public/default/apple-touch-icon-76x76.png +0 -0
  228. package/src/client/public/default/apple-touch-icon-precomposed.png +0 -0
  229. package/src/client/public/default/apple-touch-icon.png +0 -0
  230. package/src/client/public/default/apple-touch-startup-image-1125x2436.png +0 -0
  231. package/src/client/public/default/apple-touch-startup-image-1136x640.png +0 -0
  232. package/src/client/public/default/apple-touch-startup-image-1170x2532.png +0 -0
  233. package/src/client/public/default/apple-touch-startup-image-1179x2556.png +0 -0
  234. package/src/client/public/default/apple-touch-startup-image-1242x2208.png +0 -0
  235. package/src/client/public/default/apple-touch-startup-image-1242x2688.png +0 -0
  236. package/src/client/public/default/apple-touch-startup-image-1284x2778.png +0 -0
  237. package/src/client/public/default/apple-touch-startup-image-1290x2796.png +0 -0
  238. package/src/client/public/default/apple-touch-startup-image-1334x750.png +0 -0
  239. package/src/client/public/default/apple-touch-startup-image-1488x2266.png +0 -0
  240. package/src/client/public/default/apple-touch-startup-image-1536x2048.png +0 -0
  241. package/src/client/public/default/apple-touch-startup-image-1620x2160.png +0 -0
  242. package/src/client/public/default/apple-touch-startup-image-1640x2160.png +0 -0
  243. package/src/client/public/default/apple-touch-startup-image-1668x2224.png +0 -0
  244. package/src/client/public/default/apple-touch-startup-image-1668x2388.png +0 -0
  245. package/src/client/public/default/apple-touch-startup-image-1792x828.png +0 -0
  246. package/src/client/public/default/apple-touch-startup-image-2048x1536.png +0 -0
  247. package/src/client/public/default/apple-touch-startup-image-2048x2732.png +0 -0
  248. package/src/client/public/default/apple-touch-startup-image-2160x1620.png +0 -0
  249. package/src/client/public/default/apple-touch-startup-image-2160x1640.png +0 -0
  250. package/src/client/public/default/apple-touch-startup-image-2208x1242.png +0 -0
  251. package/src/client/public/default/apple-touch-startup-image-2224x1668.png +0 -0
  252. package/src/client/public/default/apple-touch-startup-image-2266x1488.png +0 -0
  253. package/src/client/public/default/apple-touch-startup-image-2388x1668.png +0 -0
  254. package/src/client/public/default/apple-touch-startup-image-2436x1125.png +0 -0
  255. package/src/client/public/default/apple-touch-startup-image-2532x1170.png +0 -0
  256. package/src/client/public/default/apple-touch-startup-image-2556x1179.png +0 -0
  257. package/src/client/public/default/apple-touch-startup-image-2688x1242.png +0 -0
  258. package/src/client/public/default/apple-touch-startup-image-2732x2048.png +0 -0
  259. package/src/client/public/default/apple-touch-startup-image-2778x1284.png +0 -0
  260. package/src/client/public/default/apple-touch-startup-image-2796x1290.png +0 -0
  261. package/src/client/public/default/apple-touch-startup-image-640x1136.png +0 -0
  262. package/src/client/public/default/apple-touch-startup-image-750x1334.png +0 -0
  263. package/src/client/public/default/apple-touch-startup-image-828x1792.png +0 -0
  264. package/src/client/public/default/assets/background/white.jpg +0 -0
  265. package/src/client/public/default/browserconfig.xml +1 -1
  266. package/src/client/public/default/favicon-16x16.png +0 -0
  267. package/src/client/public/default/favicon-32x32.png +0 -0
  268. package/src/client/public/default/favicon-48x48.png +0 -0
  269. package/src/client/public/default/favicon.ico +0 -0
  270. package/src/client/public/default/manifest.webmanifest +5 -5
  271. package/src/client/public/default/mstile-144x144.png +0 -0
  272. package/src/client/public/default/mstile-150x150.png +0 -0
  273. package/src/client/public/default/mstile-310x150.png +0 -0
  274. package/src/client/public/default/mstile-310x310.png +0 -0
  275. package/src/client/public/default/mstile-70x70.png +0 -0
  276. package/src/client/public/default/yandex-browser-50x50.png +0 -0
  277. package/src/client/public/default/yandex-browser-manifest.json +1 -1
  278. package/src/client/ssr/RootDocument.js +1 -1
  279. package/src/client/ssr/body/404.js +1 -1
  280. package/src/client/ssr/body/500.js +1 -1
  281. package/src/client/ssr/body/CacheControl.js +1 -1
  282. package/src/client/ssr/body/CyberiaDefaultSplashScreen.js +1 -1
  283. package/src/client/ssr/body/DefaultSplashScreen.js +1 -1
  284. package/src/client/ssr/body/SwaggerDarkMode.js +1 -1
  285. package/src/client/ssr/body/UnderpostDefaultSplashScreen.js +1 -1
  286. package/src/client/ssr/head/CryptokoynScripts.js +1 -1
  287. package/src/client/ssr/head/Css.js +1 -1
  288. package/src/client/ssr/head/CyberiaPortalScripts.js +1 -1
  289. package/src/client/ssr/head/DefaultScripts.js +1 -1
  290. package/src/client/ssr/head/ItemledgerScripts.js +1 -1
  291. package/src/client/ssr/head/Microdata.js +1 -1
  292. package/src/client/ssr/head/Production.js +1 -1
  293. package/src/client/ssr/head/Pwa.js +1 -1
  294. package/src/client/ssr/head/PwaItemledger.js +1 -1
  295. package/src/client/ssr/head/Seo.js +1 -1
  296. package/src/client/ssr/head/UnderpostScripts.js +1 -1
  297. package/src/client/ssr/mailer/DefaultRecoverEmail.js +1 -1
  298. package/src/client/ssr/mailer/DefaultVerifyEmail.js +1 -1
  299. package/src/client/ssr/views/Cyberia404.js +7 -5
  300. package/src/client/ssr/views/CyberiaServerMetrics.js +1 -1
  301. package/src/client/ssr/views/Maintenance.js +1 -1
  302. package/src/client/ssr/views/NoNetworkConnection.js +1 -1
  303. package/src/client/ssr/views/Test.js +1 -1
  304. package/src/client/sw/core.sw.js +20 -14
  305. package/src/client-builder/client-build-docs.js +61 -46
  306. package/src/client-builder/client-build-live.js +2 -2
  307. package/src/client-builder/client-build.js +38 -30
  308. package/src/client-builder/client-dev-server.js +3 -3
  309. package/src/client-builder/client-icons.js +2 -2
  310. package/src/client-builder/ssr.js +3 -3
  311. package/src/client.build.js +3 -6
  312. package/src/client.dev.js +3 -6
  313. package/src/db/DataBaseProvider.js +186 -3
  314. package/src/db/mariadb/MariaDB.js +3 -2
  315. package/src/db/mongo/MongoBootstrap.js +273 -101
  316. package/src/db/mongo/MongooseDB.js +7 -8
  317. package/src/{server/valkey.js → db/valkey/Valkey.js} +5 -4
  318. package/src/grpc/cyberia/grpc-server.js +1 -1
  319. package/src/index.js +79 -23
  320. package/src/mailer/EmailRender.js +2 -2
  321. package/src/mailer/MailerInterceptor.js +87 -0
  322. package/src/mailer/MailerProvider.js +50 -6
  323. package/src/projects/cyberia/atlas-sprite-sheet-generator.js +1 -1
  324. package/src/projects/cyberia/besu-genesis-generator.js +3 -3
  325. package/src/projects/cyberia/catalog-cyberia.js +53 -10
  326. package/src/projects/cyberia/gemini-client.js +1 -1
  327. package/src/projects/cyberia/generate-saga.js +1 -1
  328. package/src/projects/cyberia/hot-reload-trigger.js +1 -1
  329. package/src/projects/cyberia/instance-data.js +1 -1
  330. package/src/projects/cyberia/ipfs-client.js +4 -4
  331. package/src/projects/cyberia/map-preview-generator.js +1 -1
  332. package/src/projects/cyberia/object-layer.js +1 -1
  333. package/src/projects/cyberia/semantic-layer-generator.js +1 -1
  334. package/src/projects/underpost/catalog-underpost.js +9 -1
  335. package/src/proxy.js +4 -7
  336. package/src/runtime/cyberia-client/Dockerfile +9 -4
  337. package/src/runtime/cyberia-client/Dockerfile.dev +8 -2
  338. package/src/runtime/cyberia-server/Dockerfile +9 -4
  339. package/src/runtime/cyberia-server/Dockerfile.dev +8 -2
  340. package/src/runtime/engine-cyberia/Dockerfile +25 -9
  341. package/src/runtime/engine-cyberia/Dockerfile.dev +25 -9
  342. package/src/runtime/engine-cyberia/Dockerfile.test +4 -4
  343. package/src/runtime/engine-cyberia/docker-compose.yml +7 -7
  344. package/src/runtime/express/Express.js +32 -27
  345. package/src/runtime/lampp/Lampp.js +22 -70
  346. package/src/runtime/nginx/Nginx.js +1 -1
  347. package/src/runtime/wp/Wp.js +16 -48
  348. package/src/server/{catalog.js → build/catalog.js} +15 -5
  349. package/src/server/build/coverage.js +117 -0
  350. package/src/server/build/execution.js +402 -0
  351. package/src/server/build/package.js +465 -0
  352. package/src/server/build/testing.js +528 -0
  353. package/src/server/{dns.js → network/dns.js} +144 -11
  354. package/src/server/{forward-proxy.js → network/forward-proxy.js} +10 -18
  355. package/src/server/{middlewares.js → network/middlewares.js} +3 -3
  356. package/src/server/network/node-capability.js +98 -0
  357. package/src/server/{peer.js → network/peer.js} +3 -3
  358. package/src/server/{proxy.js → network/proxy.js} +7 -13
  359. package/src/server/network/router.js +356 -0
  360. package/src/server/{tls.js → network/tls.js} +2 -2
  361. package/src/server/{underpost-compression.js → network/underpost-compression.js} +1 -1
  362. package/src/server/{underpost-gateway.js → network/underpost-gateway.js} +7 -7
  363. package/src/server/{underpost-ingress.js → network/underpost-ingress.js} +2 -2
  364. package/src/server/{cri.js → ops/cri.js} +2 -2
  365. package/src/server/{cron.js → ops/cron.js} +349 -74
  366. package/src/server/ops/event-notification.js +284 -0
  367. package/src/server/{logger.js → ops/logger.js} +108 -23
  368. package/src/server/ops/monitoring.js +1724 -0
  369. package/src/server/{systemd.js → ops/systemd.js} +55 -1
  370. package/src/server/{conf.js → runtime/conf.js} +513 -422
  371. package/src/server/runtime/config-scope.js +215 -0
  372. package/src/server/runtime/environment.js +149 -0
  373. package/src/server/{process.js → runtime/process.js} +153 -12
  374. package/src/server/{runtime-status.js → runtime/runtime-status.js} +155 -16
  375. package/src/server/{runtime.js → runtime/runtime.js} +12 -8
  376. package/src/server/{start.js → runtime/start.js} +128 -39
  377. package/src/server/{auth.js → security/auth.js} +7 -8
  378. package/src/server/security/container-storage.js +382 -0
  379. package/src/server/{crypto.js → security/crypto.js} +1 -1
  380. package/src/server/{selinux.js → security/selinux.js} +1 -1
  381. package/src/server/{backup.js → storage/backup.js} +17 -8
  382. package/src/server/{data-query.js → storage/data-query.js} +1 -1
  383. package/src/server/{downloader.js → storage/downloader.js} +2 -2
  384. package/src/server/storage/repository.js +68 -0
  385. package/src/server.js +4 -7
  386. package/src/ws/IoInterface.js +1 -1
  387. package/src/ws/IoServer.js +1 -1
  388. package/src/ws/core/core.ws.connection.js +1 -1
  389. package/src/ws/core/core.ws.emit.js +1 -1
  390. package/src/ws/core/core.ws.server.js +1 -1
  391. package/src/ws/default/default.ws.connection.js +1 -1
  392. package/src/ws/default/default.ws.emit.js +1 -1
  393. package/src/ws/default/default.ws.server.js +1 -1
  394. package/test/e2e/event-e2e-public-ingress-down.js +45 -0
  395. package/test/e2e/event-e2e-wireguard-server-down.js +38 -0
  396. package/test/e2e/event-e2e-wireguard-spoke-down.js +40 -0
  397. package/test/{api.test.js → integration/app/api.test.js} +33 -14
  398. package/test/integration/app/cyberia/cyberia-cli-plain-reads.test.js +30 -0
  399. package/test/{cyberia-instance-conf-defaults.test.js → integration/app/cyberia/cyberia-instance-conf-defaults.test.js} +1 -1
  400. package/test/integration/app/cyberia/cyberia-load.test.js +467 -0
  401. package/test/integration/app/cyberia/fallback-world-capture.test.js +253 -0
  402. package/test/integration/app/cyberia/object-layer-item-id.test.js +327 -0
  403. package/test/{shape-generator.test.js → integration/app/cyberia/shape-generator.test.js} +1 -1
  404. package/test/integration/infra/1-security/config-scope.test.js +305 -0
  405. package/test/integration/infra/1-security/container-storage.test.js +356 -0
  406. package/test/integration/infra/1-security/in-pod-cli-surface.test.js +86 -0
  407. package/test/integration/infra/1-security/secret-onboarding.test.js +930 -0
  408. package/test/{selinux.test.js → integration/infra/1-security/selinux.test.js} +2 -4
  409. package/test/{sops-secret-store.test.js → integration/infra/1-security/sops-secret-store.test.js} +415 -61
  410. package/test/integration/infra/1-security/systemd-service.test.js +70 -0
  411. package/test/integration/infra/1-security/underpost-config-secret.test.js +367 -0
  412. package/test/integration/infra/2-network/dns-firewall.test.js +566 -0
  413. package/test/integration/infra/2-network/node-capability.test.js +182 -0
  414. package/test/integration/infra/2-network/wireguard-cli.test.js +1163 -0
  415. package/test/{wireguard-edge.test.js → integration/infra/2-network/wireguard-edge.test.js} +609 -55
  416. package/test/{cluster-instances.test.js → integration/infra/3-cluster/cluster-instances.test.js} +11 -15
  417. package/test/{deploy-node-placement.test.js → integration/infra/3-cluster/deploy-node-placement.test.js} +3 -3
  418. package/test/integration/infra/3-cluster/docker-compose-stack.test.js +313 -0
  419. package/test/integration/infra/4-ingress/deploy-routes.test.js +379 -0
  420. package/test/integration/infra/4-ingress/gateway-static-assets.test.js +453 -0
  421. package/test/{instance-traffic-plan.test.js → integration/infra/4-ingress/instance-traffic-plan.test.js} +10 -6
  422. package/test/{underpost-gateway.test.js → integration/infra/4-ingress/underpost-gateway.test.js} +6 -6
  423. package/test/{underpost-ingress.test.js → integration/infra/4-ingress/underpost-ingress.test.js} +4 -4
  424. package/test/integration/infra/5-observability/cron-jobs.test.js +652 -0
  425. package/test/{deploy-monitor.test.js → integration/infra/5-observability/deploy-monitor.test.js} +29 -31
  426. package/test/integration/infra/5-observability/event-notification.test.js +197 -0
  427. package/test/integration/infra/5-observability/event-remediation.test.js +502 -0
  428. package/test/integration/infra/5-observability/event-targets.test.js +1174 -0
  429. package/test/integration/infra/5-observability/monitoring-stack.test.js +902 -0
  430. package/test/support/shell-harness.js +73 -0
  431. package/test/unit/build-template.test.js +97 -0
  432. package/test/unit/build-workflow-offline.test.js +132 -0
  433. package/test/unit/catalog.test.js +71 -0
  434. package/test/unit/client-build-docs.test.js +334 -0
  435. package/test/unit/conf-loading.test.js +303 -0
  436. package/test/unit/conf-resolution.test.js +979 -0
  437. package/test/unit/coverage-artifact.test.js +130 -0
  438. package/test/{crypto.test.js → unit/crypto.test.js} +1 -1
  439. package/test/unit/deploy-env-resolution.test.js +38 -0
  440. package/test/unit/deploy-log-table.test.js +447 -0
  441. package/test/unit/execution-profiles.test.js +219 -0
  442. package/test/unit/fleet-sync-source.test.js +149 -0
  443. package/test/unit/logger-redaction.test.js +112 -0
  444. package/test/unit/package.test.js +403 -0
  445. package/test/unit/prepare-host.test.js +299 -0
  446. package/test/unit/process-environment.test.js +18 -0
  447. package/test/unit/propagation-message.test.js +78 -0
  448. package/test/unit/redeploy-plan.test.js +24 -0
  449. package/test/unit/release-bump.test.js +474 -0
  450. package/test/unit/ssh-output-redaction.test.js +28 -0
  451. package/test/unit/start-options.test.js +46 -0
  452. package/test/unit/test-tiers.test.js +193 -0
  453. package/vitest.config.js +58 -0
  454. package/.nycrc +0 -9
  455. package/deploy/lib/logging.sh +0 -96
  456. package/manifests/cronjobs/dd-cron/dd-cron-dns.yaml +0 -48
  457. package/manifests/mongodb/pv-pvc.yaml +0 -59
  458. package/scripts/coverall-test-cyberia.sh +0 -24
  459. package/scripts/coverall-test.sh +0 -24
  460. package/scripts/link-local-underpost-cli.sh +0 -6
  461. package/src/api/user/user.build.js +0 -16
  462. package/src/cli/env.js +0 -177
  463. package/src/client/components/core/Blockchain.js +0 -41
  464. package/src/client/components/core/Blog.js +0 -9
  465. package/src/client/components/core/KeyboardAvoidance.js +0 -145
  466. package/src/client/public/default/assets/background/dark.jpg +0 -0
  467. package/src/client/public/default/assets/background/white0-min.jpg +0 -0
  468. package/src/client/public/default/assets/background/white0.jpg +0 -0
  469. package/src/client/public/doc/favicon.ico +0 -0
  470. package/src/client/public/doc/sitemap +0 -148
  471. package/src/server/environment.js +0 -98
package/.dockerignore CHANGED
@@ -6,6 +6,7 @@
6
6
  /logs
7
7
  /build
8
8
  /.env
9
+ /.underpost
9
10
  /coverage
10
11
  /prometheus_data
11
12
  /grafana_data
@@ -9,11 +9,14 @@ on:
9
9
  jobs:
10
10
  test:
11
11
  name: Coverall Cyberia Test
12
+ # Deliberately not the engine repository: two coverage workflows on one commit
13
+ # are two Coveralls builds, and the badge then shows whichever landed last
14
+ # rather than the tree's coverage. The engine is served by coverall.ci.yml.
12
15
  if: |
13
16
  github.actor != 'dependabot[bot]' &&
14
- (github.repository == 'underpostnet/engine' ||
15
- github.repository == 'underpostnet/engine-cyberia' ||
16
- github.repository == 'underpostnet/engine-ghpkg-cyberia')
17
+ (github.repository == 'underpostnet/engine-cyberia' ||
18
+ github.repository == 'underpostnet/engine-ghpkg-cyberia' ||
19
+ github.repository == 'underpostnet/engine-test-cyberia')
17
20
  runs-on: ubuntu-latest
18
21
  container:
19
22
  image: quay.io/rockylinux/rockylinux:9
@@ -34,11 +37,18 @@ jobs:
34
37
  - name: Install project dependencies
35
38
  run: npm install
36
39
 
37
- - name: Run tests and generate coverage
38
- run: scripts/coverall-test-cyberia.sh
40
+ # Set the COVERAGE_MIN repository variable to gate below the shipped
41
+ # default while the suite is catching up to it.
42
+ - name: Run tests and enforce coverage threshold
43
+ run: COVERAGE_ENFORCE=1 node bin test unit,infra,app,cyberia
44
+ env:
45
+ COVERAGE_MIN: ${{ vars.COVERAGE_MIN }}
39
46
 
47
+ # Stored even when the threshold step failed — that step still fails the
48
+ # job, but without the report the badge freezes at the last passing build.
40
49
  - name: Store coverage report
41
- uses: actions/upload-artifact@v4
50
+ if: '!cancelled()'
51
+ uses: actions/upload-artifact@v7
42
52
  with:
43
53
  name: coverall-cyberia-lcov
44
54
  path: ./coverage/lcov.info
@@ -47,18 +57,23 @@ jobs:
47
57
  upload:
48
58
  name: Upload Cyberia Coverage to Coveralls
49
59
  needs: test
60
+ # Host runner, not the Rocky container the suite runs in: every step of the
61
+ # Coveralls action declares `shell: bash`, which the runner execs inside the
62
+ # job container and cannot resolve there.
50
63
  if: |
64
+ !cancelled() &&
51
65
  github.actor != 'dependabot[bot]' &&
52
- (github.repository == 'underpostnet/engine' ||
53
- github.repository == 'underpostnet/engine-cyberia' ||
54
- github.repository == 'underpostnet/engine-ghpkg-cyberia')
66
+ (github.repository == 'underpostnet/engine-cyberia' ||
67
+ github.repository == 'underpostnet/engine-ghpkg-cyberia' ||
68
+ github.repository == 'underpostnet/engine-test-cyberia')
55
69
  runs-on: ubuntu-latest
56
70
  steps:
71
+ # Coveralls reads the commit and branch metadata from the checkout.
57
72
  - name: Clone repository
58
73
  uses: actions/checkout@v7
59
74
 
60
75
  - name: Restore coverage report
61
- uses: actions/download-artifact@v4
76
+ uses: actions/download-artifact@v8
62
77
  with:
63
78
  name: coverall-cyberia-lcov
64
79
  path: ./coverage
@@ -68,16 +83,21 @@ jobs:
68
83
  with:
69
84
  github-token: ${{ secrets.GITHUB_TOKEN }}
70
85
  file: ./coverage/lcov.info
71
- flag-name: cyberia
86
+ format: lcov
72
87
  parallel: true
88
+ fail-on-error: true
73
89
 
74
90
  finish:
91
+ name: Finish Cyberia Coveralls build
75
92
  needs: upload
93
+ # The build stays open until this webhook lands, so it runs on any upload
94
+ # outcome rather than leaving a half-reported build behind.
76
95
  if: |
96
+ !cancelled() &&
77
97
  github.actor != 'dependabot[bot]' &&
78
- (github.repository == 'underpostnet/engine' ||
79
- github.repository == 'underpostnet/engine-cyberia' ||
80
- github.repository == 'underpostnet/engine-ghpkg-cyberia')
98
+ (github.repository == 'underpostnet/engine-cyberia' ||
99
+ github.repository == 'underpostnet/engine-ghpkg-cyberia' ||
100
+ github.repository == 'underpostnet/engine-test-cyberia')
81
101
  runs-on: ubuntu-latest
82
102
  steps:
83
103
  - name: Notify Coveralls Finished
@@ -32,4 +32,9 @@ jobs:
32
32
  script: |
33
33
  set -e
34
34
  set -o pipefail
35
+ # Carried across the SSH hop so the far side reports in GitHub Actions form:
36
+ # deploy/lib/github-actions-logging.sh folds its monitor frames into collapsed groups, and the
37
+ # state domain's telemetry export emits ::notice::/::error:: annotations this job
38
+ # surfaces. GITHUB_ACTIONS itself is a runner-local variable and does not travel.
39
+ export RUN_QUIET_CI=github
35
40
  bash /home/dd/engine/deploy/cyberia-client/deploy.sh
@@ -32,4 +32,9 @@ jobs:
32
32
  script: |
33
33
  set -e
34
34
  set -o pipefail
35
+ # Carried across the SSH hop so the far side reports in GitHub Actions form:
36
+ # deploy/lib/github-actions-logging.sh folds its monitor frames into collapsed groups, and the
37
+ # state domain's telemetry export emits ::notice::/::error:: annotations this job
38
+ # surfaces. GITHUB_ACTIONS itself is a runner-local variable and does not travel.
39
+ export RUN_QUIET_CI=github
35
40
  bash /home/dd/engine/deploy/cyberia-server/deploy.sh
@@ -4,7 +4,7 @@ on:
4
4
  workflow_dispatch:
5
5
 
6
6
  env:
7
- UNDERPOST_VERSION: '3.3.0'
7
+ UNDERPOST_VERSION: '3.3.73'
8
8
 
9
9
  jobs:
10
10
  build-and-push:
@@ -34,9 +34,15 @@ jobs:
34
34
  - name: Build cyberia-server SSR dashboard
35
35
  working-directory: engine
36
36
  run: |
37
- node bin/deploy cyberia
37
+ node bin package dd-cyberia --install
38
38
  node bin/cyberia run-workflow build-cyberia-404 --output-path ../assets/404/index.html
39
39
 
40
+ - name: Stage underpost CLI package
41
+ working-directory: engine
42
+ # Bakes the CLI into the runtime image from this checkout instead of the registry, so a
43
+ # starting pod never fetches it. The Dockerfiles COPY ../underpost-cli.tgz.
44
+ run: node bin/cyberia run-workflow stage-cli --output-path ..
45
+
40
46
  - name: Set up Docker Buildx
41
47
  uses: docker/setup-buildx-action@v4
42
48
 
@@ -65,7 +71,4 @@ jobs:
65
71
  push: true
66
72
  tags: ${{ steps.meta.outputs.tags }}
67
73
  labels: ${{ steps.meta.outputs.labels }}
68
-
69
- build-args: |
70
- UNDERPOST_VERSION=${{ env.UNDERPOST_VERSION }}
71
74
  BUILD_MODE=RELEASE
@@ -4,7 +4,7 @@ on:
4
4
  workflow_dispatch:
5
5
 
6
6
  env:
7
- UNDERPOST_VERSION: '3.3.0'
7
+ UNDERPOST_VERSION: '3.3.73'
8
8
 
9
9
  jobs:
10
10
  build-and-push:
@@ -34,9 +34,15 @@ jobs:
34
34
  - name: Build cyberia-server SSR dashboard
35
35
  working-directory: engine
36
36
  run: |
37
- node bin/deploy cyberia
37
+ node bin package dd-cyberia --install
38
38
  node bin/cyberia run-workflow build-cyberia-404 --output-path ../assets/404/index.html
39
39
 
40
+ - name: Stage underpost CLI package
41
+ working-directory: engine
42
+ # Bakes the CLI into the runtime image from this checkout instead of the registry, so a
43
+ # starting pod never fetches it. The Dockerfiles COPY ../underpost-cli.tgz.
44
+ run: node bin/cyberia run-workflow stage-cli --output-path ..
45
+
40
46
  - name: Set up Docker Buildx
41
47
  uses: docker/setup-buildx-action@v4
42
48
 
@@ -66,5 +72,4 @@ jobs:
66
72
  tags: ${{ steps.meta.outputs.tags }}
67
73
  labels: ${{ steps.meta.outputs.labels }}
68
74
  build-args: |
69
- UNDERPOST_VERSION=${{ env.UNDERPOST_VERSION }}
70
75
  BUILD_MODE=DEBUG
@@ -4,7 +4,7 @@ on:
4
4
  workflow_dispatch:
5
5
 
6
6
  env:
7
- UNDERPOST_VERSION: '3.3.0'
7
+ UNDERPOST_VERSION: '3.3.73'
8
8
 
9
9
  jobs:
10
10
  build-and-push:
@@ -34,10 +34,16 @@ jobs:
34
34
  - name: Build cyberia-server SSR dashboard
35
35
  working-directory: engine
36
36
  run: |
37
- node bin/deploy cyberia
37
+ node bin package dd-cyberia --install
38
38
  node bin/cyberia run-workflow build-server-dashboard --output-path ../public/index.html
39
39
  node bin/cyberia run-workflow build-cyberia-404 --output-path ../public/404/index.html
40
40
 
41
+ - name: Stage underpost CLI package
42
+ working-directory: engine
43
+ # Bakes the CLI into the runtime image from this checkout instead of the registry, so a
44
+ # starting pod never fetches it. The Dockerfiles COPY ../underpost-cli.tgz.
45
+ run: node bin/cyberia run-workflow stage-cli --output-path ..
46
+
41
47
  - name: Set up Docker Buildx
42
48
  uses: docker/setup-buildx-action@v4
43
49
 
@@ -66,6 +72,3 @@ jobs:
66
72
  push: true
67
73
  tags: ${{ steps.meta.outputs.tags }}
68
74
  labels: ${{ steps.meta.outputs.labels }}
69
-
70
- build-args: |
71
- UNDERPOST_VERSION=${{ env.UNDERPOST_VERSION }}
@@ -4,7 +4,7 @@ on:
4
4
  workflow_dispatch:
5
5
 
6
6
  env:
7
- UNDERPOST_VERSION: '3.3.0'
7
+ UNDERPOST_VERSION: '3.3.73'
8
8
 
9
9
  jobs:
10
10
  build-and-push:
@@ -34,10 +34,16 @@ jobs:
34
34
  - name: Build cyberia-server SSR dashboard (dev)
35
35
  working-directory: engine
36
36
  run: |
37
- node bin/deploy cyberia
37
+ node bin package dd-cyberia --install
38
38
  node bin/cyberia run-workflow build-server-dashboard --dev --output-path ../public/index.html
39
39
  node bin/cyberia run-workflow build-cyberia-404 --output-path ../public/404/index.html
40
40
 
41
+ - name: Stage underpost CLI package
42
+ working-directory: engine
43
+ # Bakes the CLI into the runtime image from this checkout instead of the registry, so a
44
+ # starting pod never fetches it. The Dockerfiles COPY ../underpost-cli.tgz.
45
+ run: node bin/cyberia run-workflow stage-cli --output-path ..
46
+
41
47
  - name: Set up Docker Buildx
42
48
  uses: docker/setup-buildx-action@v4
43
49
 
@@ -66,6 +72,3 @@ jobs:
66
72
  push: true
67
73
  tags: ${{ steps.meta.outputs.tags }}
68
74
  labels: ${{ steps.meta.outputs.labels }}
69
-
70
- build-args: |
71
- UNDERPOST_VERSION=${{ env.UNDERPOST_VERSION }}
@@ -4,7 +4,7 @@ on:
4
4
  workflow_dispatch:
5
5
 
6
6
  env:
7
- UNDERPOST_VERSION: '3.3.0'
7
+ UNDERPOST_VERSION: '3.3.73'
8
8
 
9
9
  jobs:
10
10
  build-and-push:
@@ -16,6 +16,20 @@ jobs:
16
16
  steps:
17
17
  - uses: actions/checkout@v7
18
18
 
19
+ - name: Setup Node.js
20
+ uses: actions/setup-node@v7
21
+ with:
22
+ node-version: '24.x'
23
+
24
+ - name: Install engine dependencies
25
+ run: npm ci --ignore-scripts
26
+
27
+ - name: Stage underpost CLI package
28
+ # Bakes the CLI into the image from this checkout instead of the registry, so a starting
29
+ # pod never fetches it. The Dockerfiles COPY underpost-cli.tgz from the build context,
30
+ # which for this workflow is the repository root.
31
+ run: node bin/cyberia run-workflow stage-cli --output-path .
32
+
19
33
  - name: Set up Docker Buildx
20
34
  uses: docker/setup-buildx-action@v4
21
35
 
@@ -4,7 +4,7 @@ on:
4
4
  workflow_dispatch:
5
5
 
6
6
  env:
7
- UNDERPOST_VERSION: '3.3.0'
7
+ UNDERPOST_VERSION: '3.3.73'
8
8
 
9
9
  jobs:
10
10
  build-and-push:
@@ -16,6 +16,20 @@ jobs:
16
16
  steps:
17
17
  - uses: actions/checkout@v7
18
18
 
19
+ - name: Setup Node.js
20
+ uses: actions/setup-node@v7
21
+ with:
22
+ node-version: '24.x'
23
+
24
+ - name: Install engine dependencies
25
+ run: npm ci --ignore-scripts
26
+
27
+ - name: Stage underpost CLI package
28
+ # Bakes the CLI into the image from this checkout instead of the registry, so a starting
29
+ # pod never fetches it. The Dockerfiles COPY underpost-cli.tgz from the build context,
30
+ # which for this workflow is the repository root.
31
+ run: node bin/cyberia run-workflow stage-cli --output-path .
32
+
19
33
  - name: Set up Docker Buildx
20
34
  uses: docker/setup-buildx-action@v4
21
35
 
@@ -40,6 +40,7 @@ jobs:
40
40
  script: |
41
41
  set -e
42
42
  set -o pipefail
43
+ export RUN_QUIET_CI=github
43
44
  bash /home/dd/engine/deploy/dd-cyberia/deploy.sh
44
45
  sync-and-deploy:
45
46
  if: github.event.inputs.job == 'sync-and-deploy'
@@ -65,6 +66,7 @@ jobs:
65
66
  script: |
66
67
  set -e
67
68
  set -o pipefail
69
+ export RUN_QUIET_CI=github
68
70
  bash /home/dd/engine/deploy/dd-cyberia/sync-deploy.sh
69
71
  init:
70
72
  if: github.event.inputs.job == 'init'
@@ -90,4 +92,5 @@ jobs:
90
92
  script: |
91
93
  set -e
92
94
  set -o pipefail
95
+ export RUN_QUIET_CI=github
93
96
  bash /home/dd/engine/deploy/dd-cyberia/init.sh
@@ -62,13 +62,12 @@ jobs:
62
62
  env:
63
63
  GITHUB_TOKEN: ${{ secrets.GIT_AUTH_TOKEN }}
64
64
  GITHUB_USERNAME: ${{ github.repository_owner }}
65
+ # Never interpolated into the script: the propagated payload is multi-line and a shell
66
+ # expansion would corrupt entries holding `$` and execute anything in `$(...)`.
67
+ PROPAGATED_MESSAGE: ${{ github.event.inputs.message }}
65
68
  run: |
66
69
  cd .. && node engine/bin clone underpostnet/pwa-microservices-template
67
- if [ -n "${{ github.event.inputs.message }}" ]; then
68
- LAST_COMMIT_MESSAGE="${{ github.event.inputs.message }}"
69
- else
70
- LAST_COMMIT_MESSAGE=$(cd engine && node bin cmt --changelog-msg --from-n-commit 1 --changelog-no-hash 2>/dev/null || echo "")
71
- fi
70
+ LAST_COMMIT_MESSAGE=$(cd engine && node bin cmt --propagate-msg 2>/dev/null || echo "")
72
71
  SHOULD_CD="${{ github.event.inputs.sync }}"
73
72
  DEPLOY_TYPE="${{ github.event.inputs.deploy_type }}"
74
73
  if [ -z "$LAST_COMMIT_MESSAGE" ]; then
@@ -48,20 +48,30 @@ jobs:
48
48
  curl -fsSL https://rpm.nodesource.com/setup_24.x | bash -
49
49
  dnf install nodejs -y
50
50
 
51
- - name: Capture commit message
52
- run: |
53
- FULL_MSG="${{ github.event.head_commit.message }}"
54
- LAST_COMMIT_MESSAGE="${FULL_MSG:-update package}"
55
- echo "LAST_COMMIT_MESSAGE<<EOF" >> $GITHUB_ENV
56
- echo "$LAST_COMMIT_MESSAGE" >> $GITHUB_ENV
57
- echo "EOF" >> $GITHUB_ENV
58
- echo "[INFO] Commit message: $LAST_COMMIT_MESSAGE"
59
-
60
51
  - name: Install dependencies and set repo configuration
61
52
  run: |
62
53
  npm install
63
- node ./bin/deploy rename-package @underpostnet/underpost
64
- node ./bin/deploy set-repo underpostnet/pwa-microservices-template-ghpkg
54
+ node ./bin package --rename @underpostnet/underpost
55
+ node ./bin package --set-repo underpostnet/pwa-microservices-template-ghpkg
56
+
57
+ # Placed after the install because it resolves the payload through the CLI, which needs the
58
+ # dependencies. The push that triggers this job carries the payload the engine propagated.
59
+ - name: Capture commit message
60
+ env:
61
+ # Never interpolated into the script: the propagated payload is multi-line and a shell
62
+ # expansion would corrupt entries holding `$` and execute anything in `$(...)`.
63
+ PROPAGATED_MESSAGE: ${{ github.event.head_commit.message }}
64
+ run: |
65
+ LAST_COMMIT_MESSAGE=$(node ./bin cmt --propagate-msg 2>/dev/null || echo "")
66
+ if [ -z "$LAST_COMMIT_MESSAGE" ]; then
67
+ LAST_COMMIT_MESSAGE="update package"
68
+ fi
69
+ {
70
+ echo "LAST_COMMIT_MESSAGE<<PROPAGATION_EOF"
71
+ echo "$LAST_COMMIT_MESSAGE"
72
+ echo "PROPAGATION_EOF"
73
+ } >> $GITHUB_ENV
74
+ echo "[INFO] Commit message: $LAST_COMMIT_MESSAGE"
65
75
 
66
76
  - name: Set git global credentials
67
77
  run: |
@@ -124,15 +134,20 @@ jobs:
124
134
  echo "[INFO] Canonical github package repo: underpostnet/engine-ghpkg-$CONF_ID"
125
135
 
126
136
  - name: Capture commit message
137
+ env:
138
+ # Never interpolated into the script: the propagated payload is multi-line and a shell
139
+ # expansion would corrupt entries holding `$` and execute anything in `$(...)`.
140
+ PROPAGATED_MESSAGE: ${{ github.event.inputs.message }}
127
141
  run: |
128
- FULL_MSG="${{ github.event.inputs.message }}"
129
- if [ -z "$FULL_MSG" ]; then
130
- FULL_MSG=$(node bin cmt --changelog-msg --from-n-commit 1 --changelog-no-hash 2>/dev/null || echo "")
142
+ LAST_COMMIT_MESSAGE=$(node bin cmt --propagate-msg 2>/dev/null || echo "")
143
+ if [ -z "$LAST_COMMIT_MESSAGE" ]; then
144
+ LAST_COMMIT_MESSAGE="Update canonical github package repo"
131
145
  fi
132
- LAST_COMMIT_MESSAGE="${FULL_MSG:-Update canonical github package repo}"
133
- echo "LAST_COMMIT_MESSAGE<<EOF" >> $GITHUB_ENV
134
- echo "$LAST_COMMIT_MESSAGE" >> $GITHUB_ENV
135
- echo "EOF" >> $GITHUB_ENV
146
+ {
147
+ echo "LAST_COMMIT_MESSAGE<<PROPAGATION_EOF"
148
+ echo "$LAST_COMMIT_MESSAGE"
149
+ echo "PROPAGATION_EOF"
150
+ } >> $GITHUB_ENV
136
151
  echo "[INFO] Commit message: $LAST_COMMIT_MESSAGE"
137
152
 
138
153
  - name: Set git global credentials
@@ -152,8 +167,8 @@ jobs:
152
167
  cd engine-$CONF_ID
153
168
  rm -rf ./.git
154
169
  mv ../$GHPKG_REPO.git ./.git
155
- node ../engine/bin/deploy rename-package "$PACKAGE_NAME"
156
- node ../engine/bin/deploy set-repo underpostnet/$GHPKG_REPO
170
+ node ../engine/bin package --rename "$PACKAGE_NAME"
171
+ node ../engine/bin package --set-repo underpostnet/$GHPKG_REPO
157
172
  git init
158
173
  git config user.name 'underpostnet'
159
174
  git config user.email 'development@underpost.net'
@@ -5,13 +5,10 @@ name: CI | Hardhat
5
5
 
6
6
  on:
7
7
  push:
8
- paths:
9
- - 'hardhat/**'
10
- - '.github/workflows/hardhat.ci.yml'
8
+ branches: ['master', 'main']
11
9
  pull_request:
12
- paths:
13
- - 'hardhat/**'
14
- - '.github/workflows/hardhat.ci.yml'
10
+ branches: ['master', 'main']
11
+
15
12
  workflow_dispatch:
16
13
 
17
14
  permissions:
@@ -20,6 +17,11 @@ permissions:
20
17
  jobs:
21
18
  build-and-test:
22
19
  name: Compile, Test & Audit
20
+ if: |
21
+ github.actor != 'dependabot[bot]' &&
22
+ (github.repository == 'underpostnet/engine-cyberia' ||
23
+ github.repository == 'underpostnet/engine-ghpkg-cyberia' ||
24
+ github.repository == 'underpostnet/engine-test-cyberia')
23
25
  runs-on: ubuntu-latest
24
26
  defaults:
25
27
  run:
@@ -59,18 +61,17 @@ jobs:
59
61
 
60
62
  # ── Compile ──────────────────────────────────────────────────────────
61
63
  - name: Compile Solidity contracts
62
- run: npx hardhat compile
64
+ run: npm run compile
63
65
 
64
66
  # ── Test ─────────────────────────────────────────────────────────────
65
67
  - name: Run tests
66
- run: npx hardhat test
68
+ run: npm test
67
69
  env:
68
70
  REPORT_GAS: 'true'
69
71
 
70
- # ── Coverage (optional, only on primary Node version) ────────────────
72
+ # ── Coverage ─────────────────────────────────────────────────────────
71
73
  - name: Solidity coverage
72
- if: matrix.node-version == '20'
73
- run: npx hardhat coverage
74
+ run: npm run coverage
74
75
 
75
76
  # ── Lockfile integrity check ─────────────────────────────────────────
76
77
  # Fail if package-lock.json is out of sync with package.json
@@ -51,26 +51,28 @@ jobs:
51
51
  curl -fsSL https://rpm.nodesource.com/setup_24.x | bash -
52
52
  dnf install nodejs -y
53
53
 
54
+ - name: Install dependencies
55
+ run: npm install
56
+
57
+ # Placed after the install because it resolves the payload through the CLI, which needs the
58
+ # dependencies. The dispatch input wins; a push carries its own commit message instead.
54
59
  - name: Capture commit message
60
+ env:
61
+ # Never interpolated into the script: the propagated payload is multi-line and a shell
62
+ # expansion would corrupt entries holding `$` and execute anything in `$(...)`.
63
+ PROPAGATED_MESSAGE: ${{ github.event.inputs.message || github.event.head_commit.message }}
55
64
  run: |
56
- if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
57
- LAST_COMMIT_MESSAGE="${{ github.event.inputs.message }}"
58
- if [ -z "$LAST_COMMIT_MESSAGE" ]; then
59
- LAST_COMMIT_MESSAGE="Update repository"
60
- fi
61
- else
62
- FULL_MSG="${{ github.event.head_commit.message }}"
63
- REST="$(echo "$FULL_MSG" | tail -n +2 | awk 'NR==1{first=$0; has_first=1; next} NR==2{print first " " $0; has_first=0; next} {print} END{if(has_first) print first}')"
64
- LAST_COMMIT_MESSAGE="${REST:-$FULL_MSG}"
65
+ LAST_COMMIT_MESSAGE=$(node bin cmt --propagate-msg 2>/dev/null || echo "")
66
+ if [ -z "$LAST_COMMIT_MESSAGE" ]; then
67
+ LAST_COMMIT_MESSAGE="Update repository"
65
68
  fi
66
- echo "LAST_COMMIT_MESSAGE<<EOF" >> $GITHUB_ENV
67
- echo "$LAST_COMMIT_MESSAGE" >> $GITHUB_ENV
68
- echo "EOF" >> $GITHUB_ENV
69
+ {
70
+ echo "LAST_COMMIT_MESSAGE<<PROPAGATION_EOF"
71
+ echo "$LAST_COMMIT_MESSAGE"
72
+ echo "PROPAGATION_EOF"
73
+ } >> $GITHUB_ENV
69
74
  echo "[INFO] Extracted payload: $LAST_COMMIT_MESSAGE"
70
75
 
71
- - name: Install dependencies
72
- run: npm install
73
-
74
76
  - name: Set git global credentials
75
77
  run: |
76
78
  git config --global --add safe.directory '*'
@@ -1,4 +1,4 @@
1
- name: CI | Gihub page | PWA Microservices Template Test
1
+ name: CI | PWA Microservices | Unit & Infra Tests
2
2
 
3
3
  on: [push]
4
4
 
@@ -30,4 +30,4 @@ jobs:
30
30
  run: npm install
31
31
 
32
32
  - name: Run test
33
- run: scripts/coverall-test.sh
33
+ run: node bin test unit,infra
@@ -35,4 +35,5 @@ jobs:
35
35
  script: |
36
36
  set -e
37
37
  set -o pipefail
38
+ export RUN_QUIET_CI=github
38
39
  bash /home/dd/engine/deploy/release/deploy.sh
package/.prettierignore CHANGED
@@ -6,6 +6,7 @@
6
6
  /build
7
7
  /.env
8
8
  /coverage
9
+ /allure-results
9
10
  /prometheus_data
10
11
  /grafana_data
11
12
  .nyc_output
package/AGENTS.md ADDED
@@ -0,0 +1,47 @@
1
+ ## Commenting policy
2
+
3
+ - Keep code comments minimal, no redundant or lengthy comment.
4
+ - Prefer clear names, small functions, and extracted helpers over explanatory comments.
5
+ - Comment only non-obvious intent: invariants, protocol boundaries, security constraints, cross-process contracts, or temporary workarounds.
6
+ - Remove stale, redundant, or narrative comments during refactors.
7
+ - Use `TODO:` only for concrete, actionable follow-ups.
8
+
9
+ ## Consistency guardrails
10
+
11
+ - Keep one source of truth for config, deploy IDs, runtime selection, startup order, and generated assets.
12
+ - Reuse existing helpers, conventions, and resolution logic instead of introducing parallel implementations.
13
+ - Do not duplicate parsing, environment resolution, or path normalization.
14
+ - Keep generated artifacts read-only outputs; never hand-edit them.
15
+ - No dead code, no legacy code, and no legacy concepts.
16
+ - Keep responsibilities explicit and avoid introducing abstractions without a concrete ownership boundary.
17
+
18
+ ## Host, LXD, and orchestration safety
19
+
20
+ - Treat every host-level change as idempotent, reversible, and explicit.
21
+ - Validate target paths, permissions, ownership, mounts, users, groups, namespaces, and volumes before mutating.
22
+ - Never assume host resources already exist.
23
+ - Prefer dry-run, guarded cleanup, and rollback paths over destructive operations.
24
+ - Protect host-mounted volumes and VM bootstrap flows from partial configuration.
25
+ - Make orchestration safe to interrupt and safe to rerun.
26
+
27
+ ## Testing and verification
28
+
29
+ - When changing orchestration, bootstrap, config loading, or runtime startup order, add or update focused tests for parsing, validation, and selection logic.
30
+ - For live-service tests, document the required runtime environment and keep execution deterministic.
31
+ - Prefer small, targeted verification over broad manual validation.
32
+ - Verify changed behavior at the closest layer that owns it.
33
+
34
+ ## Cyberia architecture boundaries
35
+
36
+ - `engine-cyberia` owns content, validation, persistence, gRPC/REST data services, and asset metadata.
37
+ - `cyberia-server` owns authoritative real-time simulation and tick processing.
38
+ - `cyberia-client` owns rendering, input, prediction, reconciliation, and presentation.
39
+ - Keep authoritative simulation out of the client.
40
+ - Keep content-authority and persistence concerns out of the Go runtime.
41
+ - Preserve these boundaries when introducing new flows, APIs, or shared helpers.
42
+
43
+ ## Documentation hot paths
44
+
45
+ - `src/client/public/nexodev/docs/references/` — Underpost CLI, cluster, baremetal, DB, cron, image, LXD, SSH, and static-generator references.
46
+ - `src/client/public/cyberia-docs/` — Cyberia architecture, server, client, CLI, action, quest, economy, whitepaper, and roadmap documentation.
47
+ - `engine-private/` is private. Do not assume it exists locally; treat references to it as external/private context.