aegis-game 2.0.0__tar.gz

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 (366) hide show
  1. aegis_game-2.0.0/.github/pull_request_template.md +20 -0
  2. aegis_game-2.0.0/.github/workflows/old-release.yml +156 -0
  3. aegis_game-2.0.0/.github/workflows/python-ci.yml +52 -0
  4. aegis_game-2.0.0/.github/workflows/release-aegis.yml +96 -0
  5. aegis_game-2.0.0/.github/workflows/release-client.yml +135 -0
  6. aegis_game-2.0.0/.github/workflows/typescript-ci.yml +57 -0
  7. aegis_game-2.0.0/.gitignore +41 -0
  8. aegis_game-2.0.0/.python-version +1 -0
  9. aegis_game-2.0.0/PKG-INFO +192 -0
  10. aegis_game-2.0.0/README.md +180 -0
  11. aegis_game-2.0.0/agents/agent_mas/main.py +33 -0
  12. aegis_game-2.0.0/agents/agent_path/main.py +27 -0
  13. aegis_game-2.0.0/agents/agent_prediction/main.py +71 -0
  14. aegis_game-2.0.0/agents/agent_prediction/train_model.py +68 -0
  15. aegis_game-2.0.0/agents/agent_prediction/trained_net.keras +0 -0
  16. aegis_game-2.0.0/client/.eslintrc.cjs +20 -0
  17. aegis_game-2.0.0/client/.prettierignore +7 -0
  18. aegis_game-2.0.0/client/.prettierrc.yaml +8 -0
  19. aegis_game-2.0.0/client/README.md +27 -0
  20. aegis_game-2.0.0/client/components.json +21 -0
  21. aegis_game-2.0.0/client/electron.vite.config.ts +66 -0
  22. aegis_game-2.0.0/client/index.html +16 -0
  23. aegis_game-2.0.0/client/package-lock.json +11959 -0
  24. aegis_game-2.0.0/client/package.json +140 -0
  25. aegis_game-2.0.0/client/postcss.config.js +6 -0
  26. aegis_game-2.0.0/client/src/App.tsx +17 -0
  27. aegis_game-2.0.0/client/src/assets/drone-scan-eye.png +0 -0
  28. aegis_game-2.0.0/client/src/assets/goob-team-a.png +0 -0
  29. aegis_game-2.0.0/client/src/assets/goob-team-b.png +0 -0
  30. aegis_game-2.0.0/client/src/assets/goob.png +0 -0
  31. aegis_game-2.0.0/client/src/assets/move-cost-tiles.png +0 -0
  32. aegis_game-2.0.0/client/src/assets/rubble.png +0 -0
  33. aegis_game-2.0.0/client/src/assets/survivor-dark.png +0 -0
  34. aegis_game-2.0.0/client/src/assets/survivor-light.png +0 -0
  35. aegis_game-2.0.0/client/src/assets/survivor.png +0 -0
  36. aegis_game-2.0.0/client/src/components/ConfirmClearDialog.tsx +58 -0
  37. aegis_game-2.0.0/client/src/components/Console.tsx +122 -0
  38. aegis_game-2.0.0/client/src/components/ExportDialog.tsx +85 -0
  39. aegis_game-2.0.0/client/src/components/Game-area.tsx +33 -0
  40. aegis_game-2.0.0/client/src/components/GameCycler.tsx +46 -0
  41. aegis_game-2.0.0/client/src/components/NumberInput.tsx +58 -0
  42. aegis_game-2.0.0/client/src/components/controls-bar/Controls-bar.tsx +150 -0
  43. aegis_game-2.0.0/client/src/components/controls-bar/Timeline.tsx +66 -0
  44. aegis_game-2.0.0/client/src/components/dnd/Layer.tsx +160 -0
  45. aegis_game-2.0.0/client/src/components/dnd/LayerEditor.tsx +133 -0
  46. aegis_game-2.0.0/client/src/components/dnd/LayerItem.tsx +184 -0
  47. aegis_game-2.0.0/client/src/components/dnd/LayerList.tsx +113 -0
  48. aegis_game-2.0.0/client/src/components/dnd/dnd-utils.tsx +33 -0
  49. aegis_game-2.0.0/client/src/components/editor/Brush.tsx +52 -0
  50. aegis_game-2.0.0/client/src/components/editor/Editor.tsx +342 -0
  51. aegis_game-2.0.0/client/src/components/editor/Field.tsx +65 -0
  52. aegis_game-2.0.0/client/src/components/editor/MapGenerator.ts +94 -0
  53. aegis_game-2.0.0/client/src/components/info-panel/Info-panel.tsx +115 -0
  54. aegis_game-2.0.0/client/src/components/sidebar/Aegis.tsx +205 -0
  55. aegis_game-2.0.0/client/src/components/sidebar/Game.tsx +83 -0
  56. aegis_game-2.0.0/client/src/components/sidebar/Settings.tsx +152 -0
  57. aegis_game-2.0.0/client/src/components/sidebar/Sidebar.tsx +127 -0
  58. aegis_game-2.0.0/client/src/components/ui/alert.tsx +59 -0
  59. aegis_game-2.0.0/client/src/components/ui/badge.tsx +34 -0
  60. aegis_game-2.0.0/client/src/components/ui/button.tsx +56 -0
  61. aegis_game-2.0.0/client/src/components/ui/card.tsx +68 -0
  62. aegis_game-2.0.0/client/src/components/ui/command.tsx +144 -0
  63. aegis_game-2.0.0/client/src/components/ui/dialog.tsx +114 -0
  64. aegis_game-2.0.0/client/src/components/ui/input.tsx +22 -0
  65. aegis_game-2.0.0/client/src/components/ui/label.tsx +24 -0
  66. aegis_game-2.0.0/client/src/components/ui/multiselect.tsx +141 -0
  67. aegis_game-2.0.0/client/src/components/ui/popover.tsx +31 -0
  68. aegis_game-2.0.0/client/src/components/ui/progress.tsx +26 -0
  69. aegis_game-2.0.0/client/src/components/ui/select.tsx +150 -0
  70. aegis_game-2.0.0/client/src/components/ui/separator.tsx +24 -0
  71. aegis_game-2.0.0/client/src/components/ui/stepper.tsx +279 -0
  72. aegis_game-2.0.0/client/src/components/ui/switch.tsx +27 -0
  73. aegis_game-2.0.0/client/src/components/ui/tabs.tsx +53 -0
  74. aegis_game-2.0.0/client/src/components/ui/tooltip.tsx +30 -0
  75. aegis_game-2.0.0/client/src/core/Agents.ts +153 -0
  76. aegis_game-2.0.0/client/src/core/Brushes.ts +247 -0
  77. aegis_game-2.0.0/client/src/core/Game.ts +119 -0
  78. aegis_game-2.0.0/client/src/core/Games.ts +48 -0
  79. aegis_game-2.0.0/client/src/core/Listeners.ts +34 -0
  80. aegis_game-2.0.0/client/src/core/Renderer.ts +211 -0
  81. aegis_game-2.0.0/client/src/core/Round.ts +96 -0
  82. aegis_game-2.0.0/client/src/core/Runner.ts +125 -0
  83. aegis_game-2.0.0/client/src/core/Stats.ts +64 -0
  84. aegis_game-2.0.0/client/src/core/World.ts +372 -0
  85. aegis_game-2.0.0/client/src/hooks/useCanvas.ts +28 -0
  86. aegis_game-2.0.0/client/src/hooks/useControl.ts +17 -0
  87. aegis_game-2.0.0/client/src/hooks/useGame.ts +20 -0
  88. aegis_game-2.0.0/client/src/hooks/useGames.ts +15 -0
  89. aegis_game-2.0.0/client/src/hooks/useHover.ts +18 -0
  90. aegis_game-2.0.0/client/src/hooks/useLocalStorage.tsx +25 -0
  91. aegis_game-2.0.0/client/src/hooks/useRound.ts +21 -0
  92. aegis_game-2.0.0/client/src/index.css +79 -0
  93. aegis_game-2.0.0/client/src/lib/utils.ts +6 -0
  94. aegis_game-2.0.0/client/src/main.tsx +10 -0
  95. aegis_game-2.0.0/client/src/services/aegis-api.ts +34 -0
  96. aegis_game-2.0.0/client/src/services/config.ts +52 -0
  97. aegis_game-2.0.0/client/src/services/index.ts +4 -0
  98. aegis_game-2.0.0/client/src/services/scaffold.ts +280 -0
  99. aegis_game-2.0.0/client/src/services/websocket.ts +80 -0
  100. aegis_game-2.0.0/client/src/store/useAppStore.ts +24 -0
  101. aegis_game-2.0.0/client/src/types/core.types.ts +42 -0
  102. aegis_game-2.0.0/client/src/types/extra.types.ts +65 -0
  103. aegis_game-2.0.0/client/src/types/index.ts +3 -0
  104. aegis_game-2.0.0/client/src/types/map-editor.types.ts +8 -0
  105. aegis_game-2.0.0/client/src/utils/constants.ts +6 -0
  106. aegis_game-2.0.0/client/src/utils/ringBuffer.ts +80 -0
  107. aegis_game-2.0.0/client/src/utils/util.ts +65 -0
  108. aegis_game-2.0.0/client/src/vite-env.d.ts +1 -0
  109. aegis_game-2.0.0/client/src-electron/main.ts +292 -0
  110. aegis_game-2.0.0/client/src-electron/preload.ts +58 -0
  111. aegis_game-2.0.0/client/tailwind.config.js +52 -0
  112. aegis_game-2.0.0/client/tsconfig.json +17 -0
  113. aegis_game-2.0.0/config/config.yaml +20 -0
  114. aegis_game-2.0.0/config/presets/README.md +30 -0
  115. aegis_game-2.0.0/config/presets/competition-single.yaml +16 -0
  116. aegis_game-2.0.0/config/presets/competiton-versus.yaml +16 -0
  117. aegis_game-2.0.0/config/presets/multi-agent-assignment.yaml +16 -0
  118. aegis_game-2.0.0/config/presets/pathfinding-assignment.yaml +16 -0
  119. aegis_game-2.0.0/docs/.eslintrc.json +3 -0
  120. aegis_game-2.0.0/docs/.gitignore +28 -0
  121. aegis_game-2.0.0/docs/README.md +48 -0
  122. aegis_game-2.0.0/docs/app/(home)/errors/[...slug]/page.tsx +59 -0
  123. aegis_game-2.0.0/docs/app/(home)/errors/page.tsx +38 -0
  124. aegis_game-2.0.0/docs/app/(home)/guides/[slug]/page.tsx +59 -0
  125. aegis_game-2.0.0/docs/app/(home)/guides/page.tsx +24 -0
  126. aegis_game-2.0.0/docs/app/(home)/layout.tsx +7 -0
  127. aegis_game-2.0.0/docs/app/(home)/page.tsx +19 -0
  128. aegis_game-2.0.0/docs/app/api/search/route.ts +6 -0
  129. aegis_game-2.0.0/docs/app/docs/[[...slug]]/page.tsx +52 -0
  130. aegis_game-2.0.0/docs/app/docs/layout.tsx +12 -0
  131. aegis_game-2.0.0/docs/app/favicon.ico +0 -0
  132. aegis_game-2.0.0/docs/app/global.css +3 -0
  133. aegis_game-2.0.0/docs/app/layout.config.tsx +42 -0
  134. aegis_game-2.0.0/docs/app/layout.tsx +24 -0
  135. aegis_game-2.0.0/docs/app/provider.tsx +16 -0
  136. aegis_game-2.0.0/docs/components/search.tsx +51 -0
  137. aegis_game-2.0.0/docs/content/docs/api/agent/get_agent_id.mdx +22 -0
  138. aegis_game-2.0.0/docs/content/docs/api/agent/get_cell_at.mdx +35 -0
  139. aegis_game-2.0.0/docs/content/docs/api/agent/get_charging_cells.mdx +32 -0
  140. aegis_game-2.0.0/docs/content/docs/api/agent/get_energy_level.mdx +25 -0
  141. aegis_game-2.0.0/docs/content/docs/api/agent/get_location.mdx +24 -0
  142. aegis_game-2.0.0/docs/content/docs/api/agent/get_round_number.mdx +24 -0
  143. aegis_game-2.0.0/docs/content/docs/api/agent/get_survs.mdx +31 -0
  144. aegis_game-2.0.0/docs/content/docs/api/agent/log.mdx +29 -0
  145. aegis_game-2.0.0/docs/content/docs/api/agent/on_map.mdx +33 -0
  146. aegis_game-2.0.0/docs/content/docs/api/agent/send.mdx +30 -0
  147. aegis_game-2.0.0/docs/content/docs/api/agent_commands/dig.mdx +23 -0
  148. aegis_game-2.0.0/docs/content/docs/api/agent_commands/move.mdx +24 -0
  149. aegis_game-2.0.0/docs/content/docs/api/agent_commands/observe.mdx +23 -0
  150. aegis_game-2.0.0/docs/content/docs/api/agent_commands/recharge.mdx +23 -0
  151. aegis_game-2.0.0/docs/content/docs/api/agent_commands/save.mdx +23 -0
  152. aegis_game-2.0.0/docs/content/docs/api/agent_commands/send_message.mdx +31 -0
  153. aegis_game-2.0.0/docs/content/docs/api/common/agentid.mdx +26 -0
  154. aegis_game-2.0.0/docs/content/docs/api/common/direction/get_opposite.mdx +23 -0
  155. aegis_game-2.0.0/docs/content/docs/api/common/direction/index.mdx +47 -0
  156. aegis_game-2.0.0/docs/content/docs/api/common/direction/rotate_left.mdx +23 -0
  157. aegis_game-2.0.0/docs/content/docs/api/common/direction/rotate_right.mdx +23 -0
  158. aegis_game-2.0.0/docs/content/docs/api/common/location/add.mdx +24 -0
  159. aegis_game-2.0.0/docs/content/docs/api/common/location/direction_to.mdx +25 -0
  160. aegis_game-2.0.0/docs/content/docs/api/common/location/distance_to.mdx +29 -0
  161. aegis_game-2.0.0/docs/content/docs/api/common/location/index.mdx +63 -0
  162. aegis_game-2.0.0/docs/content/docs/api/index.mdx +4 -0
  163. aegis_game-2.0.0/docs/content/docs/api/meta.json +18 -0
  164. aegis_game-2.0.0/docs/content/docs/api/world/cell/get_top_layer.mdx +29 -0
  165. aegis_game-2.0.0/docs/content/docs/api/world/cell/index.mdx +13 -0
  166. aegis_game-2.0.0/docs/content/docs/api/world/cell/is_charging_cell.mdx +27 -0
  167. aegis_game-2.0.0/docs/content/docs/api/world/cell/is_killer_cell.mdx +27 -0
  168. aegis_game-2.0.0/docs/content/docs/api/world/cell/is_normal_cell.mdx +27 -0
  169. aegis_game-2.0.0/docs/content/docs/api/world_objects/rubble.mdx +17 -0
  170. aegis_game-2.0.0/docs/content/docs/api/world_objects/survivor.mdx +10 -0
  171. aegis_game-2.0.0/docs/content/docs/getting-started/(getting-started)/installation.mdx +75 -0
  172. aegis_game-2.0.0/docs/content/docs/getting-started/(getting-started)/running.mdx +155 -0
  173. aegis_game-2.0.0/docs/content/docs/getting-started/aegis/file-structure.mdx +4 -0
  174. aegis_game-2.0.0/docs/content/docs/getting-started/aegis/lore.mdx +50 -0
  175. aegis_game-2.0.0/docs/content/docs/getting-started/meta.json +12 -0
  176. aegis_game-2.0.0/docs/content/docs/index.mdx +6 -0
  177. aegis_game-2.0.0/docs/content/docs/meta.json +3 -0
  178. aegis_game-2.0.0/docs/content/errors/general/override.mdx +5 -0
  179. aegis_game-2.0.0/docs/content/errors/mac/security.mdx +5 -0
  180. aegis_game-2.0.0/docs/content/errors/windows/scripts.mdx +5 -0
  181. aegis_game-2.0.0/docs/content/guides/git.mdx +7 -0
  182. aegis_game-2.0.0/docs/content/guides/python.mdx +6 -0
  183. aegis_game-2.0.0/docs/lib/source.ts +24 -0
  184. aegis_game-2.0.0/docs/mdx-components.tsx +16 -0
  185. aegis_game-2.0.0/docs/next.config.mjs +17 -0
  186. aegis_game-2.0.0/docs/package-lock.json +10437 -0
  187. aegis_game-2.0.0/docs/package.json +38 -0
  188. aegis_game-2.0.0/docs/postcss.config.mjs +5 -0
  189. aegis_game-2.0.0/docs/public/mac_error.png +0 -0
  190. aegis_game-2.0.0/docs/source.config.ts +44 -0
  191. aegis_game-2.0.0/docs/tsconfig.json +30 -0
  192. aegis_game-2.0.0/prediction_data/README.md +32 -0
  193. aegis_game-2.0.0/prediction_data/testing/x_test_symbols.npy +0 -0
  194. aegis_game-2.0.0/prediction_data/testing/y_test_symbols.npy +0 -0
  195. aegis_game-2.0.0/prediction_data/training/x_train_symbols.npy +0 -0
  196. aegis_game-2.0.0/prediction_data/training/y_train_symbols.npy +0 -0
  197. aegis_game-2.0.0/pyproject.toml +60 -0
  198. aegis_game-2.0.0/schema/README.md +27 -0
  199. aegis_game-2.0.0/schema/package-lock.json +709 -0
  200. aegis_game-2.0.0/schema/package.json +28 -0
  201. aegis_game-2.0.0/schema/protos/cell.proto +21 -0
  202. aegis_game-2.0.0/schema/protos/event.proto +16 -0
  203. aegis_game-2.0.0/schema/protos/game.proto +43 -0
  204. aegis_game-2.0.0/schema/protos/location.proto +8 -0
  205. aegis_game-2.0.0/schema/protos/spawn.proto +12 -0
  206. aegis_game-2.0.0/schema/protos/team.proto +21 -0
  207. aegis_game-2.0.0/schema/protos/turn.proto +15 -0
  208. aegis_game-2.0.0/schema/protos/world.proto +14 -0
  209. aegis_game-2.0.0/schema/protos/world_object.proto +27 -0
  210. aegis_game-2.0.0/schema/python/cell_pb2.py +40 -0
  211. aegis_game-2.0.0/schema/python/cell_pb2.pyi +34 -0
  212. aegis_game-2.0.0/schema/python/event_pb2.py +37 -0
  213. aegis_game-2.0.0/schema/python/event_pb2.pyi +22 -0
  214. aegis_game-2.0.0/schema/python/game_pb2.py +53 -0
  215. aegis_game-2.0.0/schema/python/game_pb2.pyi +65 -0
  216. aegis_game-2.0.0/schema/python/location_pb2.py +36 -0
  217. aegis_game-2.0.0/schema/python/location_pb2.pyi +13 -0
  218. aegis_game-2.0.0/schema/python/spawn_pb2.py +38 -0
  219. aegis_game-2.0.0/schema/python/spawn_pb2.pyi +17 -0
  220. aegis_game-2.0.0/schema/python/team_pb2.py +38 -0
  221. aegis_game-2.0.0/schema/python/team_pb2.pyi +35 -0
  222. aegis_game-2.0.0/schema/python/turn_pb2.py +38 -0
  223. aegis_game-2.0.0/schema/python/turn_pb2.pyi +24 -0
  224. aegis_game-2.0.0/schema/python/world_object_pb2.py +42 -0
  225. aegis_game-2.0.0/schema/python/world_object_pb2.pyi +41 -0
  226. aegis_game-2.0.0/schema/python/world_pb2.py +37 -0
  227. aegis_game-2.0.0/schema/python/world_pb2.pyi +23 -0
  228. aegis_game-2.0.0/schema/scripts/fix_imports.py +34 -0
  229. aegis_game-2.0.0/schema/scripts/make_index.py +37 -0
  230. aegis_game-2.0.0/schema/ts/cell.ts +146 -0
  231. aegis_game-2.0.0/schema/ts/event.ts +165 -0
  232. aegis_game-2.0.0/schema/ts/game.ts +485 -0
  233. aegis_game-2.0.0/schema/ts/index.aegis.ts +9 -0
  234. aegis_game-2.0.0/schema/ts/index.ts +1 -0
  235. aegis_game-2.0.0/schema/ts/location.ts +80 -0
  236. aegis_game-2.0.0/schema/ts/spawn.ts +93 -0
  237. aegis_game-2.0.0/schema/ts/team.ts +177 -0
  238. aegis_game-2.0.0/schema/ts/turn.ts +129 -0
  239. aegis_game-2.0.0/schema/ts/world.ts +129 -0
  240. aegis_game-2.0.0/schema/ts/world_object.ts +268 -0
  241. aegis_game-2.0.0/scripts/create_datasets_for_a3.py +38 -0
  242. aegis_game-2.0.0/scripts/model_script.py +58 -0
  243. aegis_game-2.0.0/setup.py +222 -0
  244. aegis_game-2.0.0/src/_aegis/__init__.py +0 -0
  245. aegis_game-2.0.0/src/_aegis/aegis_config.py +38 -0
  246. aegis_game-2.0.0/src/_aegis/agent.py +92 -0
  247. aegis_game-2.0.0/src/_aegis/agent_controller.py +187 -0
  248. aegis_game-2.0.0/src/_aegis/agent_predictions/__init__.py +0 -0
  249. aegis_game-2.0.0/src/_aegis/agent_predictions/data_loader.py +50 -0
  250. aegis_game-2.0.0/src/_aegis/agent_predictions/prediction_handler.py +104 -0
  251. aegis_game-2.0.0/src/_aegis/args_parser.py +127 -0
  252. aegis_game-2.0.0/src/_aegis/cli.py +33 -0
  253. aegis_game-2.0.0/src/_aegis/common/__init__.py +11 -0
  254. aegis_game-2.0.0/src/_aegis/common/cell.py +111 -0
  255. aegis_game-2.0.0/src/_aegis/common/cell_info.py +46 -0
  256. aegis_game-2.0.0/src/_aegis/common/direction.py +64 -0
  257. aegis_game-2.0.0/src/_aegis/common/location.py +96 -0
  258. aegis_game-2.0.0/src/_aegis/common/objects/__init__.py +5 -0
  259. aegis_game-2.0.0/src/_aegis/common/objects/rubble.py +40 -0
  260. aegis_game-2.0.0/src/_aegis/common/objects/survivor.py +68 -0
  261. aegis_game-2.0.0/src/_aegis/common/objects/world_object.py +21 -0
  262. aegis_game-2.0.0/src/_aegis/constants.py +36 -0
  263. aegis_game-2.0.0/src/_aegis/full_stub.py +178 -0
  264. aegis_game-2.0.0/src/_aegis/game.py +447 -0
  265. aegis_game-2.0.0/src/_aegis/game_pb.py +212 -0
  266. aegis_game-2.0.0/src/_aegis/id_gen.py +13 -0
  267. aegis_game-2.0.0/src/_aegis/logger.py +88 -0
  268. aegis_game-2.0.0/src/_aegis/message.py +16 -0
  269. aegis_game-2.0.0/src/_aegis/message_buffer.py +86 -0
  270. aegis_game-2.0.0/src/_aegis/play.py +112 -0
  271. aegis_game-2.0.0/src/_aegis/py.typed +0 -0
  272. aegis_game-2.0.0/src/_aegis/sandbox/__init__.py +0 -0
  273. aegis_game-2.0.0/src/_aegis/sandbox/core.py +251 -0
  274. aegis_game-2.0.0/src/_aegis/sandbox/sandbox.py +149 -0
  275. aegis_game-2.0.0/src/_aegis/sandbox/typed_ast.py +70 -0
  276. aegis_game-2.0.0/src/_aegis/schemas/cell_pb2.py +40 -0
  277. aegis_game-2.0.0/src/_aegis/schemas/cell_pb2.pyi +34 -0
  278. aegis_game-2.0.0/src/_aegis/schemas/event_pb2.py +37 -0
  279. aegis_game-2.0.0/src/_aegis/schemas/event_pb2.pyi +22 -0
  280. aegis_game-2.0.0/src/_aegis/schemas/game_pb2.py +53 -0
  281. aegis_game-2.0.0/src/_aegis/schemas/game_pb2.pyi +65 -0
  282. aegis_game-2.0.0/src/_aegis/schemas/location_pb2.py +36 -0
  283. aegis_game-2.0.0/src/_aegis/schemas/location_pb2.pyi +13 -0
  284. aegis_game-2.0.0/src/_aegis/schemas/spawn_pb2.py +38 -0
  285. aegis_game-2.0.0/src/_aegis/schemas/spawn_pb2.pyi +17 -0
  286. aegis_game-2.0.0/src/_aegis/schemas/team_pb2.py +38 -0
  287. aegis_game-2.0.0/src/_aegis/schemas/team_pb2.pyi +35 -0
  288. aegis_game-2.0.0/src/_aegis/schemas/turn_pb2.py +38 -0
  289. aegis_game-2.0.0/src/_aegis/schemas/turn_pb2.pyi +24 -0
  290. aegis_game-2.0.0/src/_aegis/schemas/world_object_pb2.py +42 -0
  291. aegis_game-2.0.0/src/_aegis/schemas/world_object_pb2.pyi +41 -0
  292. aegis_game-2.0.0/src/_aegis/schemas/world_pb2.py +37 -0
  293. aegis_game-2.0.0/src/_aegis/schemas/world_pb2.pyi +23 -0
  294. aegis_game-2.0.0/src/_aegis/server_websocket.py +105 -0
  295. aegis_game-2.0.0/src/_aegis/stub_generator.py +220 -0
  296. aegis_game-2.0.0/src/_aegis/team.py +11 -0
  297. aegis_game-2.0.0/src/_aegis/team_info.py +60 -0
  298. aegis_game-2.0.0/src/_aegis/types/__init__.py +3 -0
  299. aegis_game-2.0.0/src/_aegis/types/others.py +72 -0
  300. aegis_game-2.0.0/src/_aegis/types/prediction.py +19 -0
  301. aegis_game-2.0.0/src/_aegis/types/world.py +41 -0
  302. aegis_game-2.0.0/src/_aegis/world.py +42 -0
  303. aegis_game-2.0.0/src/_aegis/world_pb.py +115 -0
  304. aegis_game-2.0.0/src/aegis/__init__.py +18 -0
  305. aegis_game-2.0.0/src/aegis/py.typed +0 -0
  306. aegis_game-2.0.0/src/aegis/stub.py +116 -0
  307. aegis_game-2.0.0/uv.lock +777 -0
  308. aegis_game-2.0.0/worlds/3-survs-line.world +0 -0
  309. aegis_game-2.0.0/worlds/ExampleWorld.world +0 -0
  310. aegis_game-2.0.0/worlds/a1-assignment-worlds/ExampleWorld.world +232 -0
  311. aegis_game-2.0.0/worlds/a1-assignment-worlds/ver1_1.world +257 -0
  312. aegis_game-2.0.0/worlds/a1-assignment-worlds/ver1_2.world +281 -0
  313. aegis_game-2.0.0/worlds/a1-assignment-worlds/ver2_1.world +281 -0
  314. aegis_game-2.0.0/worlds/a1-assignment-worlds/ver2_2.world +232 -0
  315. aegis_game-2.0.0/worlds/a1-assignment-worlds/ver3_1.world +245 -0
  316. aegis_game-2.0.0/worlds/a1-assignment-worlds/ver3_2.world +245 -0
  317. aegis_game-2.0.0/worlds/a1-test-worlds/AStarGiant.world +7232 -0
  318. aegis_game-2.0.0/worlds/a1-test-worlds/bonus.world +485 -0
  319. aegis_game-2.0.0/worlds/a1-test-worlds/test11.world +265 -0
  320. aegis_game-2.0.0/worlds/a1-test-worlds/test12.world +269 -0
  321. aegis_game-2.0.0/worlds/a1-test-worlds/test13.world +257 -0
  322. aegis_game-2.0.0/worlds/a1-test-worlds/test14.world +2229 -0
  323. aegis_game-2.0.0/worlds/a1-test-worlds/test15.world +8933 -0
  324. aegis_game-2.0.0/worlds/a1-test-worlds/test21.world +232 -0
  325. aegis_game-2.0.0/worlds/a1-test-worlds/test22.world +232 -0
  326. aegis_game-2.0.0/worlds/a1-test-worlds/test23.world +232 -0
  327. aegis_game-2.0.0/worlds/a1-test-worlds/test24.world +1832 -0
  328. aegis_game-2.0.0/worlds/a1-test-worlds/test25.world +7232 -0
  329. aegis_game-2.0.0/worlds/a1-test-worlds/test31.world +281 -0
  330. aegis_game-2.0.0/worlds/a1-test-worlds/test32.world +432 -0
  331. aegis_game-2.0.0/worlds/a1-test-worlds/test33.world +432 -0
  332. aegis_game-2.0.0/worlds/a1-test-worlds/test34.world +1832 -0
  333. aegis_game-2.0.0/worlds/a1-test-worlds/test35.world +7232 -0
  334. aegis_game-2.0.0/worlds/a3-assignment-worlds/ExampleWorld.world +1860 -0
  335. aegis_game-2.0.0/worlds/a3-bonus-worlds/ForFunRandomSplit.world +2294 -0
  336. aegis_game-2.0.0/worlds/a3-student-made-worlds-fall2024/challenge1-1.world +1886 -0
  337. aegis_game-2.0.0/worlds/a3-student-made-worlds-fall2024/challenge1-2.world +2135 -0
  338. aegis_game-2.0.0/worlds/a3-student-made-worlds-fall2024/challenge1-3.world +613 -0
  339. aegis_game-2.0.0/worlds/a3-student-made-worlds-fall2024/challenge1-4.world +1965 -0
  340. aegis_game-2.0.0/worlds/a3-student-made-worlds-fall2024/challenge1-5.world +1985 -0
  341. aegis_game-2.0.0/worlds/a3-student-made-worlds-fall2024/challenge1-6.world +2242 -0
  342. aegis_game-2.0.0/worlds/a3-student-made-worlds-fall2024/challenge1-7.world +1905 -0
  343. aegis_game-2.0.0/worlds/a3-student-made-worlds-fall2024/challenge1-8.world +2009 -0
  344. aegis_game-2.0.0/worlds/a3-student-made-worlds-fall2024/challenge2-1.world +1050 -0
  345. aegis_game-2.0.0/worlds/a3-student-made-worlds-fall2024/challenge2-2.world +2174 -0
  346. aegis_game-2.0.0/worlds/a3-student-made-worlds-fall2024/challenge2-3.world +1853 -0
  347. aegis_game-2.0.0/worlds/a3-student-made-worlds-fall2024/challenge2-4.world +1856 -0
  348. aegis_game-2.0.0/worlds/a3-student-made-worlds-fall2024/challenge2-5.world +1867 -0
  349. aegis_game-2.0.0/worlds/a3-student-made-worlds-fall2024/challenge2-6.world +1867 -0
  350. aegis_game-2.0.0/worlds/a3-student-made-worlds-fall2024/challenge3-1.world +1841 -0
  351. aegis_game-2.0.0/worlds/a3-student-made-worlds-fall2024/challenge3-2.world +1870 -0
  352. aegis_game-2.0.0/worlds/a3-student-made-worlds-fall2024/challenge3-3.world +1841 -0
  353. aegis_game-2.0.0/worlds/a3-student-made-worlds-fall2024/challenge3-4.world +1907 -0
  354. aegis_game-2.0.0/worlds/a3-student-made-worlds-fall2024/challenge3-5.world +1837 -0
  355. aegis_game-2.0.0/worlds/a3-student-made-worlds-fall2024/challenge4-1.world +1878 -0
  356. aegis_game-2.0.0/worlds/a3-student-made-worlds-fall2024/challenge4-2.world +1881 -0
  357. aegis_game-2.0.0/worlds/a3-student-made-worlds-fall2024/challenge4-3.world +1896 -0
  358. aegis_game-2.0.0/worlds/a3-student-made-worlds-fall2024/challenge4-4.world +1863 -0
  359. aegis_game-2.0.0/worlds/a3-student-made-worlds-fall2024/challenge5-1.world +2009 -0
  360. aegis_game-2.0.0/worlds/a3-student-made-worlds-fall2024/challenge5-2.world +1872 -0
  361. aegis_game-2.0.0/worlds/a3-student-made-worlds-fall2024/challenge5-3.world +1881 -0
  362. aegis_game-2.0.0/worlds/a3-student-made-worlds-fall2024/challenge5-4.world +1858 -0
  363. aegis_game-2.0.0/worlds/a3-student-made-worlds-fall2024/maps_v3.zip +0 -0
  364. aegis_game-2.0.0/worlds/dead.world +0 -0
  365. aegis_game-2.0.0/worlds/move_cost.world +0 -0
  366. aegis_game-2.0.0/worlds/test.world +0 -0
@@ -0,0 +1,20 @@
1
+ ## Description
2
+
3
+ Please include a summary of the change and which issue is fixed.
4
+
5
+ Resolves #[issue number]
6
+
7
+ ## Type of change
8
+
9
+ - [ ] Bug fix
10
+ - [ ] New feature
11
+ - [ ] Breaking change
12
+ - [ ] Documentation update
13
+ - [ ] Other (please explain):
14
+
15
+ ## Checklist
16
+
17
+ - [ ] I have tested this code
18
+ - [ ] I have added comments / documentation
19
+ - [ ] My code follows the code style of the project
20
+ - [ ] I have linked related issues and discussions
@@ -0,0 +1,156 @@
1
+ name: Legacy Combined Release (disabled)
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ inputs:
6
+ note:
7
+ description: "This legacy workflow is disabled; use Release Client or Release PyPI instead."
8
+ required: false
9
+ default: ""
10
+
11
+ jobs:
12
+ build-electron:
13
+ strategy:
14
+ matrix:
15
+ include:
16
+ - os: macos-latest
17
+ platform: mac
18
+ path: "mac-universal/*.app"
19
+ - os: "ubuntu-22.04"
20
+ platform: linux
21
+ path: "*.AppImage"
22
+ - os: windows-latest
23
+ platform: win
24
+ path: "*.exe"
25
+ env:
26
+ NODE_VERSION: "20"
27
+ WORKING_DIR: ./client
28
+ ARTIFACT_PATH: "./packed-client/${{ matrix.path }}"
29
+
30
+ runs-on: ${{ matrix.os }}
31
+
32
+ steps:
33
+ - name: Checkout code
34
+ uses: actions/checkout@v4
35
+
36
+ - name: Set up Node.js
37
+ uses: actions/setup-node@v4
38
+ with:
39
+ node-version: ${{ env.NODE_VERSION }}
40
+
41
+ - name: Install dependencies
42
+ working-directory: ${{ env.WORKING_DIR }}
43
+ run: npm install
44
+
45
+ - name: Build app
46
+ working-directory: ${{ env.WORKING_DIR }}
47
+ run: |
48
+ if [[ "${{ github.ref_name }}" == *"-a1" ]]; then
49
+ npm run build:pack:a1
50
+ else
51
+ npm run build:pack
52
+ fi
53
+ shell: bash
54
+
55
+ - name: Create ZIP archive
56
+ working-directory: ${{ env.WORKING_DIR }}
57
+ run: 7z a packed-client/${{ matrix.platform }}-electron.zip ${{ env.ARTIFACT_PATH }}
58
+
59
+ - name: Upload Artifact
60
+ uses: actions/upload-artifact@v4
61
+ with:
62
+ name: ${{ matrix.platform }}-electron
63
+ path: ${{ env.WORKING_DIR }}/packed-client/*.zip
64
+
65
+ release:
66
+ needs: [build-electron]
67
+ runs-on: ubuntu-latest
68
+ permissions:
69
+ contents: write
70
+
71
+ steps:
72
+ - name: Checkout code
73
+ uses: actions/checkout@v4
74
+
75
+ - name: Clean client directory
76
+ run: |
77
+ rm -rf client
78
+ mkdir client
79
+
80
+ - name: Download artifacts
81
+ uses: actions/download-artifact@v4
82
+ with:
83
+ path: ./artifacts/
84
+
85
+ - name: Setup version-specific files
86
+ run: |
87
+ # Select correct requirements file
88
+ if [[ "${{ github.ref_name }}" == *"-a1" ]]; then
89
+ cp requirements-a1.txt requirements.txt
90
+ else
91
+ cp requirements-mas.txt requirements.txt
92
+ fi
93
+ rm requirements-a1.txt requirements-mas.txt
94
+
95
+ # Update imports for A1 if needed
96
+ if [[ "${{ github.ref_name }}" == *"-a1" ]]; then
97
+ find ./src/aegis -type f \
98
+ -not -path "*/__pycache__/*" \
99
+ -not -path "*/agent_predictions/*" \
100
+ -exec grep -l "mas" {} + | xargs sed -i 's/mas/a1/g'
101
+ grep -lrw "PREDICT" ./src/aegis --include="__init__.py" | xargs sed -i '/PREDICT/d'
102
+ fi
103
+
104
+ - name: Update world files
105
+ run: |
106
+ VERSION=$(if [[ "${{ github.ref_name }}" == *"-a1" ]]; then echo "a1"; else echo "a3"; fi)
107
+ find ./worlds -mindepth 1 \
108
+ -not -path "*/${VERSION}-assignment-worlds/*" \
109
+ -not -path "*/${VERSION}-assignment-worlds" \
110
+ -delete
111
+ mv ./worlds/${VERSION}-assignment-worlds/* ./worlds/
112
+ rm -rf ./worlds/${VERSION}-assignment-worlds
113
+
114
+ - name: Update agent files
115
+ run: |
116
+ VERSION=$(if [[ "${{ github.ref_name }}" == *"-a1" ]]; then echo "a1"; else echo "mas"; fi)
117
+ find ./src/agents -mindepth 1 \
118
+ -not -path "*/example_agent_${VERSION}/*" \
119
+ -not -path "*/example_agent_${VERSION}" \
120
+ -delete
121
+
122
+ - name: Cleanup extra files
123
+ run: |
124
+ # Remove version-specific directories
125
+ if [[ "${{ github.ref_name }}" == *"-a1" ]]; then
126
+ rm -rf ./src/mas
127
+ rm sys_files/*.npy
128
+ else
129
+ rm -rf ./src/a1
130
+ rm sys_files/*.npy # added line above for temp spring sem not needing it
131
+ fi
132
+
133
+ # Remove development files
134
+ rm -rf .git .github ./docs scripts .gitignore README.md
135
+
136
+ - name: Create Electron zip
137
+ run: |
138
+ mkdir -p temp_electron/aegis/client
139
+
140
+ for platform in mac linux win; do
141
+ mkdir -p "temp_electron/aegis/client/${platform}-client"
142
+ cp "artifacts/${platform}-electron/"* "temp_electron/aegis/client/${platform}-client/${platform}-client.zip"
143
+ done
144
+
145
+ cp -r src worlds sys_files run.py setup.py requirements.txt temp_electron/aegis/
146
+ cd temp_electron
147
+ zip -r ../aegis-electron.zip aegis
148
+
149
+ - name: Create Release
150
+ uses: svenstaro/upload-release-action@v2
151
+ with:
152
+ repo_token: ${{ secrets.GITHUB_TOKEN }}
153
+ file_glob: true
154
+ file: aegis-*.zip
155
+ tag: ${{ github.ref_name }}
156
+ release_name: "Aegis clients for version ${{ github.ref_name }}"
@@ -0,0 +1,52 @@
1
+ name: Python CI Pipeline
2
+
3
+ on:
4
+ pull_request:
5
+ branches: [main, dev]
6
+
7
+ permissions:
8
+ contents: write
9
+
10
+ jobs:
11
+ lint:
12
+ runs-on: ubuntu-latest
13
+ steps:
14
+ - name: Checkout Repository
15
+ uses: actions/checkout@v4
16
+
17
+ - name: Setup Python
18
+ uses: actions/setup-python@v5
19
+ with:
20
+ python-version: '3.12'
21
+
22
+ - name: Install ruff
23
+ run: pip install ruff
24
+
25
+ - name: Run ruff lint
26
+ run: ruff check src
27
+
28
+ format:
29
+ runs-on: ubuntu-latest
30
+ needs: lint
31
+ permissions:
32
+ contents: write
33
+ steps:
34
+ - name: Checkout Repository
35
+ uses: actions/checkout@v4
36
+
37
+ - name: Set up Python
38
+ uses: actions/setup-python@v5
39
+ with:
40
+ python-version: '3.12'
41
+
42
+ - name: Install ruff
43
+ run: pip install ruff
44
+
45
+ - name: Run ruff format
46
+ run: ruff format src
47
+
48
+ - name: Commit formatted changes
49
+ uses: stefanzweifel/git-auto-commit-action@v4
50
+ with:
51
+ commit_message: Auto format by Ruff
52
+ branch: ${{ github.head_ref }}
@@ -0,0 +1,96 @@
1
+ name: Release Aegis
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - "aegis-v*.*.*"
7
+ - "aegis-v*.*.*-*"
8
+ workflow_dispatch:
9
+ inputs:
10
+ tag:
11
+ description: "Tag to release (e.g., aegis-v1.2.3 or aegis-v1.2.3-rc1). If empty, uses current ref name when it's a tag."
12
+ required: false
13
+ default: ""
14
+
15
+ permissions:
16
+ id-token: write
17
+ contents: write
18
+
19
+ jobs:
20
+ build:
21
+ runs-on: ubuntu-latest
22
+ steps:
23
+ - name: Checkout
24
+ uses: actions/checkout@v4
25
+
26
+ - name: Set up Python
27
+ uses: actions/setup-python@v5
28
+ with:
29
+ python-version: "3.12"
30
+
31
+ - name: Install uv
32
+ uses: astral-sh/setup-uv@v6
33
+
34
+ - name: Build distributions
35
+ run: uv build
36
+
37
+ - name: Upload dist as artifact
38
+ uses: actions/upload-artifact@v4
39
+ with:
40
+ name: pypi-dist
41
+ path: dist/**
42
+ if-no-files-found: error
43
+
44
+ publish:
45
+ runs-on: ubuntu-latest
46
+ needs: [build]
47
+ steps:
48
+ - name: Resolve release tag
49
+ id: resolve
50
+ run: |
51
+ if [ "${{ github.ref_type }}" = "tag" ]; then
52
+ RAW_TAG="${{ github.ref_name }}"
53
+ else
54
+ RAW_TAG="${{ inputs.tag }}"
55
+ fi
56
+ if [ -z "${RAW_TAG}" ]; then
57
+ echo "No tag provided" >&2
58
+ exit 1
59
+ fi
60
+ echo "tag=${RAW_TAG}" >> $GITHUB_OUTPUT
61
+
62
+ - name: Detect prerelease
63
+ id: pre
64
+ run: |
65
+ TAG='${{ steps.resolve.outputs.tag }}'
66
+ if echo "$TAG" | grep -Ei -- '-(rc|alpha|beta|pre|preview|dev)' >/dev/null; then
67
+ echo "prerelease=true" >> $GITHUB_OUTPUT
68
+ else
69
+ echo "prerelease=false" >> $GITHUB_OUTPUT
70
+ fi
71
+
72
+ - name: Download dist
73
+ uses: actions/download-artifact@v4
74
+ with:
75
+ name: pypi-dist
76
+ path: ./dist
77
+ # repository-url: https://test.pypi.org/legacy/
78
+
79
+ - name: Upload distributions to GitHub Release
80
+ uses: svenstaro/upload-release-action@v2
81
+ with:
82
+ repo_token: ${{ secrets.GITHUB_TOKEN }}
83
+ file: dist/*
84
+ file_glob: true
85
+ tag: ${{ steps.resolve.outputs.tag }}
86
+ release_name: "Aegis Release ${{ steps.resolve.outputs.tag }}"
87
+ overwrite: true
88
+ make_latest: true
89
+ prerelease: ${{ steps.pre.outputs.prerelease }}
90
+
91
+ - name: Publish to PyPI
92
+ uses: pypa/gh-action-pypi-publish@release/v1
93
+ with:
94
+ packages-dir: dist/
95
+ # repository-url: https://test.pypi.org/legacy/
96
+ # comment line above to publish to normal pypi
@@ -0,0 +1,135 @@
1
+ name: Release Client
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - "client-v*.*.*"
7
+ - "client-v*.*.*-*"
8
+ workflow_dispatch:
9
+ inputs:
10
+ tag:
11
+ description: "Tag to release (e.g., client-v1.2.3 or client-v1.2.3-rc1). If empty, uses current ref name when it's a tag."
12
+ required: false
13
+ default: ""
14
+
15
+ permissions:
16
+ contents: write
17
+
18
+ env:
19
+ NODE_VERSION: "20"
20
+ WORKING_DIR: ./client
21
+
22
+ jobs:
23
+ build-electron:
24
+ name: Build Electron Clients
25
+ strategy:
26
+ matrix:
27
+ include:
28
+ - os: macos-latest
29
+ platform: mac
30
+ - os: ubuntu-22.04
31
+ platform: linux
32
+ - os: windows-latest
33
+ platform: win
34
+ runs-on: ${{ matrix.os }}
35
+ steps:
36
+ - name: Checkout
37
+ uses: actions/checkout@v4
38
+
39
+ - name: Setup Node.js
40
+ uses: actions/setup-node@v4
41
+ with:
42
+ node-version: ${{ env.NODE_VERSION }}
43
+ cache: npm
44
+ cache-dependency-path: ${{ env.WORKING_DIR }}/package-lock.json
45
+
46
+ - name: Install dependencies
47
+ working-directory: ${{ env.WORKING_DIR }}
48
+ run: npm ci
49
+
50
+ - name: Build app
51
+ working-directory: ${{ env.WORKING_DIR }}
52
+ shell: bash
53
+ run: |
54
+ case "${{ matrix.platform }}" in
55
+ mac)
56
+ npm run build:pack:mac
57
+ ;;
58
+ linux)
59
+ npm run build:pack:linux
60
+ ;;
61
+ win)
62
+ npm run build:pack:win
63
+ ;;
64
+ esac
65
+
66
+ - name: Upload built client as artifact
67
+ uses: actions/upload-artifact@v4
68
+ with:
69
+ name: ${{ matrix.platform }}-electron
70
+ path: |
71
+ ${{ env.WORKING_DIR }}/packed-client/**
72
+ if-no-files-found: error
73
+
74
+ release:
75
+ name: Create/Update GitHub Release
76
+ needs: [build-electron]
77
+ runs-on: ubuntu-latest
78
+ steps:
79
+ - name: Resolve release tag
80
+ id: resolve
81
+ run: |
82
+ if [ "${{ github.ref_type }}" = "tag" ]; then
83
+ RAW_TAG="${{ github.ref_name }}"
84
+ else
85
+ RAW_TAG="${{ inputs.tag }}"
86
+ fi
87
+ if [ -z "${RAW_TAG}" ]; then
88
+ echo "No tag provided" >&2
89
+ exit 1
90
+ fi
91
+ echo "Using tag '${RAW_TAG}' for GitHub Release"
92
+ echo "tag=${RAW_TAG}" >> $GITHUB_OUTPUT
93
+
94
+ - name: Detect prerelease
95
+ id: pre
96
+ run: |
97
+ TAG='${{ steps.resolve.outputs.tag }}'
98
+ if echo "$TAG" | grep -Ei -- '-(rc|alpha|beta|pre|preview|dev)' >/dev/null; then
99
+ echo "prerelease=true" >> $GITHUB_OUTPUT
100
+ else
101
+ echo "prerelease=false" >> $GITHUB_OUTPUT
102
+ fi
103
+
104
+ - name: Download artifacts
105
+ uses: actions/download-artifact@v4
106
+ with:
107
+ path: ./artifacts/
108
+
109
+ - name: Prepare zips
110
+ run: |
111
+ mkdir -p release
112
+ # mac: keep .app bundle structure under packed-client/mac-universal/*.app
113
+ if compgen -G "artifacts/mac-electron/packed-client/mac-universal/*.app" > /dev/null; then
114
+ zip -r release/mac-client.zip artifacts/mac-electron/packed-client/mac-universal/*.app
115
+ fi
116
+ # linux: include just the AppImage under packed-client/*.AppImage
117
+ if compgen -G "artifacts/linux-electron/packed-client/*.AppImage" > /dev/null; then
118
+ zip -j release/linux-client.zip artifacts/linux-electron/packed-client/*.AppImage
119
+ fi
120
+ # windows: include just the exe under packed-client/*.exe
121
+ if compgen -G "artifacts/win-electron/packed-client/*.exe" > /dev/null; then
122
+ zip -j release/win-client.zip artifacts/win-electron/packed-client/*.exe
123
+ fi
124
+
125
+ - name: Upload assets to GitHub Release
126
+ uses: svenstaro/upload-release-action@v2
127
+ with:
128
+ repo_token: ${{ secrets.GITHUB_TOKEN }}
129
+ file: release/*.zip
130
+ file_glob: true
131
+ tag: ${{ steps.resolve.outputs.tag }}
132
+ release_name: "Client Release ${{ steps.resolve.outputs.tag }}"
133
+ overwrite: true
134
+ make_latest: true
135
+ prerelease: ${{ steps.pre.outputs.prerelease }}
@@ -0,0 +1,57 @@
1
+ name: TypeScript CI Pipeline
2
+
3
+ on:
4
+ pull_request:
5
+ branches: [main, dev]
6
+
7
+ jobs:
8
+ lint:
9
+ runs-on: ubuntu-latest
10
+ steps:
11
+ - name: Checkout Repository
12
+ uses: actions/checkout@v4
13
+
14
+ - name: Setup Node
15
+ uses: actions/setup-node@v3
16
+ with:
17
+ node-version: 18
18
+ cache: 'npm'
19
+ cache-dependency-path: client/package-lock.json
20
+
21
+ - name: Install dependencies
22
+ working-directory: ./client
23
+ run: npm ci
24
+
25
+ - name: Run ESLint
26
+ working-directory: ./client
27
+ run: npx eslint src src-electron
28
+
29
+ format:
30
+ runs-on: ubuntu-latest
31
+ needs: lint
32
+ permissions:
33
+ contents: write
34
+ steps:
35
+ - name: Checkout Repository
36
+ uses: actions/checkout@v4
37
+
38
+ - name: Setup Node
39
+ uses: actions/setup-node@v3
40
+ with:
41
+ node-version: 18
42
+ cache: 'npm'
43
+ cache-dependency-path: client/package-lock.json
44
+
45
+ - name: Install dependencies
46
+ working-directory: ./client
47
+ run: npm ci
48
+
49
+ - name: Run Prettier format
50
+ working-directory: ./client
51
+ run: npm run format
52
+
53
+ - name: Commit formatted changes
54
+ uses: stefanzweifel/git-auto-commit-action@v6
55
+ with:
56
+ commit_message: Auto format by Prettier
57
+ branch: ${{ github.head_ref }}
@@ -0,0 +1,41 @@
1
+ # Python venv
2
+ .venv
3
+
4
+ # Python-generated files
5
+ __pycache__/
6
+ *.py[oc]
7
+ build/
8
+ dist/
9
+ wheels/
10
+ *.egg-info
11
+
12
+
13
+ # Client Stuff
14
+ # Logs
15
+ logs
16
+ *.log
17
+ npm-debug.log*
18
+ yarn-debug.log*
19
+ yarn-error.log*
20
+ pnpm-debug.log*
21
+ lerna-debug.log*
22
+
23
+ node_modules
24
+ out
25
+ dist
26
+ dist-ssr
27
+ *.local
28
+
29
+ # Editor directories and files
30
+ .vscode/*
31
+ !.vscode/extensions.json
32
+ .idea
33
+ .DS_Store
34
+ *.suo
35
+ *.ntvs*
36
+ *.njsproj
37
+ *.sln
38
+ *.sw?
39
+ packed-client
40
+ .prettierrc
41
+ replay.txt
@@ -0,0 +1 @@
1
+ 3.12