@alife-sdk/core 0.1.0

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 (367) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +283 -0
  3. package/dist/ai/DangerManager.d.ts +71 -0
  4. package/dist/ai/DangerManager.d.ts.map +1 -0
  5. package/dist/ai/DangerManager.js +176 -0
  6. package/dist/ai/DangerManager.js.map +1 -0
  7. package/dist/ai/GOAPAction.d.ts +45 -0
  8. package/dist/ai/GOAPAction.d.ts.map +1 -0
  9. package/dist/ai/GOAPAction.js +32 -0
  10. package/dist/ai/GOAPAction.js.map +1 -0
  11. package/dist/ai/GOAPPlanner.d.ts +80 -0
  12. package/dist/ai/GOAPPlanner.d.ts.map +1 -0
  13. package/dist/ai/GOAPPlanner.js +259 -0
  14. package/dist/ai/GOAPPlanner.js.map +1 -0
  15. package/dist/ai/IStateHandler.d.ts +8 -0
  16. package/dist/ai/IStateHandler.d.ts.map +1 -0
  17. package/dist/ai/IStateHandler.js +8 -0
  18. package/dist/ai/IStateHandler.js.map +1 -0
  19. package/dist/ai/MemorySystem.d.ts +94 -0
  20. package/dist/ai/MemorySystem.d.ts.map +1 -0
  21. package/dist/ai/MemorySystem.js +207 -0
  22. package/dist/ai/MemorySystem.js.map +1 -0
  23. package/dist/ai/StateMachine.d.ts +49 -0
  24. package/dist/ai/StateMachine.d.ts.map +1 -0
  25. package/dist/ai/StateMachine.js +83 -0
  26. package/dist/ai/StateMachine.js.map +1 -0
  27. package/dist/ai/WorldState.d.ts +48 -0
  28. package/dist/ai/WorldState.d.ts.map +1 -0
  29. package/dist/ai/WorldState.js +93 -0
  30. package/dist/ai/WorldState.js.map +1 -0
  31. package/dist/ai/index.d.ts +10 -0
  32. package/dist/ai/index.d.ts.map +1 -0
  33. package/dist/ai/index.js +8 -0
  34. package/dist/ai/index.js.map +1 -0
  35. package/dist/combat/DamageInstance.d.ts +26 -0
  36. package/dist/combat/DamageInstance.d.ts.map +1 -0
  37. package/dist/combat/DamageInstance.js +25 -0
  38. package/dist/combat/DamageInstance.js.map +1 -0
  39. package/dist/combat/MoraleStateMachine.d.ts +53 -0
  40. package/dist/combat/MoraleStateMachine.d.ts.map +1 -0
  41. package/dist/combat/MoraleStateMachine.js +84 -0
  42. package/dist/combat/MoraleStateMachine.js.map +1 -0
  43. package/dist/combat/index.d.ts +5 -0
  44. package/dist/combat/index.d.ts.map +1 -0
  45. package/dist/combat/index.js +3 -0
  46. package/dist/combat/index.js.map +1 -0
  47. package/dist/config/ALifeConfig.d.ts +131 -0
  48. package/dist/config/ALifeConfig.d.ts.map +1 -0
  49. package/dist/config/ALifeConfig.js +82 -0
  50. package/dist/config/ALifeConfig.js.map +1 -0
  51. package/dist/config/index.d.ts +3 -0
  52. package/dist/config/index.d.ts.map +1 -0
  53. package/dist/config/index.js +2 -0
  54. package/dist/config/index.js.map +1 -0
  55. package/dist/core/ALifeKernel.d.ts +163 -0
  56. package/dist/core/ALifeKernel.d.ts.map +1 -0
  57. package/dist/core/ALifeKernel.js +542 -0
  58. package/dist/core/ALifeKernel.js.map +1 -0
  59. package/dist/core/Clock.d.ts +123 -0
  60. package/dist/core/Clock.d.ts.map +1 -0
  61. package/dist/core/Clock.js +228 -0
  62. package/dist/core/Clock.js.map +1 -0
  63. package/dist/core/DevToolsInspector.d.ts +53 -0
  64. package/dist/core/DevToolsInspector.d.ts.map +1 -0
  65. package/dist/core/DevToolsInspector.js +8 -0
  66. package/dist/core/DevToolsInspector.js.map +1 -0
  67. package/dist/core/Diagnostics.d.ts +64 -0
  68. package/dist/core/Diagnostics.d.ts.map +1 -0
  69. package/dist/core/Diagnostics.js +107 -0
  70. package/dist/core/Diagnostics.js.map +1 -0
  71. package/dist/core/ISerializable.d.ts +12 -0
  72. package/dist/core/ISerializable.d.ts.map +1 -0
  73. package/dist/core/ISerializable.js +2 -0
  74. package/dist/core/ISerializable.js.map +1 -0
  75. package/dist/core/PortRegistry.d.ts +57 -0
  76. package/dist/core/PortRegistry.d.ts.map +1 -0
  77. package/dist/core/PortRegistry.js +72 -0
  78. package/dist/core/PortRegistry.js.map +1 -0
  79. package/dist/core/PortTokens.d.ts +39 -0
  80. package/dist/core/PortTokens.d.ts.map +1 -0
  81. package/dist/core/PortTokens.js +39 -0
  82. package/dist/core/PortTokens.js.map +1 -0
  83. package/dist/core/SpatialGrid.d.ts +114 -0
  84. package/dist/core/SpatialGrid.d.ts.map +1 -0
  85. package/dist/core/SpatialGrid.js +258 -0
  86. package/dist/core/SpatialGrid.js.map +1 -0
  87. package/dist/core/Vec2.d.ts +34 -0
  88. package/dist/core/Vec2.d.ts.map +1 -0
  89. package/dist/core/Vec2.js +52 -0
  90. package/dist/core/Vec2.js.map +1 -0
  91. package/dist/core/math/CatmullRom.d.ts +20 -0
  92. package/dist/core/math/CatmullRom.d.ts.map +1 -0
  93. package/dist/core/math/CatmullRom.js +37 -0
  94. package/dist/core/math/CatmullRom.js.map +1 -0
  95. package/dist/core/math/index.d.ts +6 -0
  96. package/dist/core/math/index.d.ts.map +1 -0
  97. package/dist/core/math/index.js +5 -0
  98. package/dist/core/math/index.js.map +1 -0
  99. package/dist/core/math/intersects.d.ts +32 -0
  100. package/dist/core/math/intersects.d.ts.map +1 -0
  101. package/dist/core/math/intersects.js +92 -0
  102. package/dist/core/math/intersects.js.map +1 -0
  103. package/dist/core/math/utils.d.ts +5 -0
  104. package/dist/core/math/utils.d.ts.map +1 -0
  105. package/dist/core/math/utils.js +13 -0
  106. package/dist/core/math/utils.js.map +1 -0
  107. package/dist/entity/IComponent.d.ts +17 -0
  108. package/dist/entity/IComponent.d.ts.map +1 -0
  109. package/dist/entity/IComponent.js +2 -0
  110. package/dist/entity/IComponent.js.map +1 -0
  111. package/dist/entity/IEntity.d.ts +33 -0
  112. package/dist/entity/IEntity.d.ts.map +1 -0
  113. package/dist/entity/IEntity.js +2 -0
  114. package/dist/entity/IEntity.js.map +1 -0
  115. package/dist/entity/index.d.ts +3 -0
  116. package/dist/entity/index.d.ts.map +1 -0
  117. package/dist/entity/index.js +2 -0
  118. package/dist/entity/index.js.map +1 -0
  119. package/dist/events/ALifeEvents.d.ts +241 -0
  120. package/dist/events/ALifeEvents.d.ts.map +1 -0
  121. package/dist/events/ALifeEvents.js +53 -0
  122. package/dist/events/ALifeEvents.js.map +1 -0
  123. package/dist/events/EventBus.d.ts +52 -0
  124. package/dist/events/EventBus.d.ts.map +1 -0
  125. package/dist/events/EventBus.js +129 -0
  126. package/dist/events/EventBus.js.map +1 -0
  127. package/dist/events/index.d.ts +4 -0
  128. package/dist/events/index.d.ts.map +1 -0
  129. package/dist/events/index.js +4 -0
  130. package/dist/events/index.js.map +1 -0
  131. package/dist/faction/Faction.d.ts +53 -0
  132. package/dist/faction/Faction.d.ts.map +1 -0
  133. package/dist/faction/Faction.js +101 -0
  134. package/dist/faction/Faction.js.map +1 -0
  135. package/dist/faction/FactionBuilder.d.ts +32 -0
  136. package/dist/faction/FactionBuilder.d.ts.map +1 -0
  137. package/dist/faction/FactionBuilder.js +80 -0
  138. package/dist/faction/FactionBuilder.js.map +1 -0
  139. package/dist/faction/ImmunityProfile.d.ts +24 -0
  140. package/dist/faction/ImmunityProfile.d.ts.map +1 -0
  141. package/dist/faction/ImmunityProfile.js +43 -0
  142. package/dist/faction/ImmunityProfile.js.map +1 -0
  143. package/dist/faction/index.d.ts +6 -0
  144. package/dist/faction/index.d.ts.map +1 -0
  145. package/dist/faction/index.js +5 -0
  146. package/dist/faction/index.js.map +1 -0
  147. package/dist/index.d.ts +32 -0
  148. package/dist/index.d.ts.map +1 -0
  149. package/dist/index.js +34 -0
  150. package/dist/index.js.map +1 -0
  151. package/dist/logger/ILogEntry.d.ts +16 -0
  152. package/dist/logger/ILogEntry.d.ts.map +1 -0
  153. package/dist/logger/ILogEntry.js +2 -0
  154. package/dist/logger/ILogEntry.js.map +1 -0
  155. package/dist/logger/LogChannel.d.ts +27 -0
  156. package/dist/logger/LogChannel.d.ts.map +1 -0
  157. package/dist/logger/LogChannel.js +26 -0
  158. package/dist/logger/LogChannel.js.map +1 -0
  159. package/dist/logger/LogLevel.d.ts +10 -0
  160. package/dist/logger/LogLevel.d.ts.map +1 -0
  161. package/dist/logger/LogLevel.js +9 -0
  162. package/dist/logger/LogLevel.js.map +1 -0
  163. package/dist/logger/Logger.d.ts +56 -0
  164. package/dist/logger/Logger.d.ts.map +1 -0
  165. package/dist/logger/Logger.js +106 -0
  166. package/dist/logger/Logger.js.map +1 -0
  167. package/dist/logger/index.d.ts +8 -0
  168. package/dist/logger/index.d.ts.map +1 -0
  169. package/dist/logger/index.js +5 -0
  170. package/dist/logger/index.js.map +1 -0
  171. package/dist/movement/MonsterHome.d.ts +49 -0
  172. package/dist/movement/MonsterHome.d.ts.map +1 -0
  173. package/dist/movement/MonsterHome.js +75 -0
  174. package/dist/movement/MonsterHome.js.map +1 -0
  175. package/dist/movement/PatrolRoute.d.ts +99 -0
  176. package/dist/movement/PatrolRoute.d.ts.map +1 -0
  177. package/dist/movement/PatrolRoute.js +141 -0
  178. package/dist/movement/PatrolRoute.js.map +1 -0
  179. package/dist/movement/index.d.ts +5 -0
  180. package/dist/movement/index.d.ts.map +1 -0
  181. package/dist/movement/index.js +4 -0
  182. package/dist/movement/index.js.map +1 -0
  183. package/dist/navigation/LevelGraph.d.ts +78 -0
  184. package/dist/navigation/LevelGraph.d.ts.map +1 -0
  185. package/dist/navigation/LevelGraph.js +268 -0
  186. package/dist/navigation/LevelGraph.js.map +1 -0
  187. package/dist/navigation/NPCGraphMover.d.ts +87 -0
  188. package/dist/navigation/NPCGraphMover.d.ts.map +1 -0
  189. package/dist/navigation/NPCGraphMover.js +193 -0
  190. package/dist/navigation/NPCGraphMover.js.map +1 -0
  191. package/dist/navigation/index.d.ts +5 -0
  192. package/dist/navigation/index.d.ts.map +1 -0
  193. package/dist/navigation/index.js +4 -0
  194. package/dist/navigation/index.js.map +1 -0
  195. package/dist/plugins/AnomaliesPlugin.d.ts +26 -0
  196. package/dist/plugins/AnomaliesPlugin.d.ts.map +1 -0
  197. package/dist/plugins/AnomaliesPlugin.js +30 -0
  198. package/dist/plugins/AnomaliesPlugin.js.map +1 -0
  199. package/dist/plugins/CombatSchemaPlugin.d.ts +35 -0
  200. package/dist/plugins/CombatSchemaPlugin.d.ts.map +1 -0
  201. package/dist/plugins/CombatSchemaPlugin.js +44 -0
  202. package/dist/plugins/CombatSchemaPlugin.js.map +1 -0
  203. package/dist/plugins/FactionsPlugin.d.ts +26 -0
  204. package/dist/plugins/FactionsPlugin.d.ts.map +1 -0
  205. package/dist/plugins/FactionsPlugin.js +30 -0
  206. package/dist/plugins/FactionsPlugin.js.map +1 -0
  207. package/dist/plugins/IALifePlugin.d.ts +91 -0
  208. package/dist/plugins/IALifePlugin.d.ts.map +1 -0
  209. package/dist/plugins/IALifePlugin.js +2 -0
  210. package/dist/plugins/IALifePlugin.js.map +1 -0
  211. package/dist/plugins/MonstersPlugin.d.ts +26 -0
  212. package/dist/plugins/MonstersPlugin.d.ts.map +1 -0
  213. package/dist/plugins/MonstersPlugin.js +30 -0
  214. package/dist/plugins/MonstersPlugin.js.map +1 -0
  215. package/dist/plugins/NPCTypesPlugin.d.ts +26 -0
  216. package/dist/plugins/NPCTypesPlugin.d.ts.map +1 -0
  217. package/dist/plugins/NPCTypesPlugin.js +30 -0
  218. package/dist/plugins/NPCTypesPlugin.js.map +1 -0
  219. package/dist/plugins/PluginToken.d.ts +26 -0
  220. package/dist/plugins/PluginToken.d.ts.map +1 -0
  221. package/dist/plugins/PluginToken.js +22 -0
  222. package/dist/plugins/PluginToken.js.map +1 -0
  223. package/dist/plugins/SocialPlugin.d.ts +14 -0
  224. package/dist/plugins/SocialPlugin.d.ts.map +1 -0
  225. package/dist/plugins/SocialPlugin.js +16 -0
  226. package/dist/plugins/SocialPlugin.js.map +1 -0
  227. package/dist/plugins/SpawnPlugin.d.ts +15 -0
  228. package/dist/plugins/SpawnPlugin.d.ts.map +1 -0
  229. package/dist/plugins/SpawnPlugin.js +26 -0
  230. package/dist/plugins/SpawnPlugin.js.map +1 -0
  231. package/dist/plugins/SquadPlugin.d.ts +14 -0
  232. package/dist/plugins/SquadPlugin.d.ts.map +1 -0
  233. package/dist/plugins/SquadPlugin.js +16 -0
  234. package/dist/plugins/SquadPlugin.js.map +1 -0
  235. package/dist/plugins/SurgePlugin.d.ts +20 -0
  236. package/dist/plugins/SurgePlugin.d.ts.map +1 -0
  237. package/dist/plugins/SurgePlugin.js +22 -0
  238. package/dist/plugins/SurgePlugin.js.map +1 -0
  239. package/dist/plugins/TradePlugin.d.ts +16 -0
  240. package/dist/plugins/TradePlugin.d.ts.map +1 -0
  241. package/dist/plugins/TradePlugin.js +18 -0
  242. package/dist/plugins/TradePlugin.js.map +1 -0
  243. package/dist/plugins/index.d.ts +11 -0
  244. package/dist/plugins/index.d.ts.map +1 -0
  245. package/dist/plugins/index.js +10 -0
  246. package/dist/plugins/index.js.map +1 -0
  247. package/dist/plugins/pluginNames.d.ts +37 -0
  248. package/dist/plugins/pluginNames.d.ts.map +1 -0
  249. package/dist/plugins/pluginNames.js +28 -0
  250. package/dist/plugins/pluginNames.js.map +1 -0
  251. package/dist/plugins/presets.d.ts +31 -0
  252. package/dist/plugins/presets.d.ts.map +1 -0
  253. package/dist/plugins/presets.js +50 -0
  254. package/dist/plugins/presets.js.map +1 -0
  255. package/dist/ports/IDataLoader.d.ts +38 -0
  256. package/dist/ports/IDataLoader.d.ts.map +1 -0
  257. package/dist/ports/IDataLoader.js +12 -0
  258. package/dist/ports/IDataLoader.js.map +1 -0
  259. package/dist/ports/IEntityAdapter.d.ts +73 -0
  260. package/dist/ports/IEntityAdapter.d.ts.map +1 -0
  261. package/dist/ports/IEntityAdapter.js +36 -0
  262. package/dist/ports/IEntityAdapter.js.map +1 -0
  263. package/dist/ports/IEntityFactory.d.ts +66 -0
  264. package/dist/ports/IEntityFactory.d.ts.map +1 -0
  265. package/dist/ports/IEntityFactory.js +21 -0
  266. package/dist/ports/IEntityFactory.js.map +1 -0
  267. package/dist/ports/ILogger.d.ts +29 -0
  268. package/dist/ports/ILogger.d.ts.map +1 -0
  269. package/dist/ports/ILogger.js +2 -0
  270. package/dist/ports/ILogger.js.map +1 -0
  271. package/dist/ports/IPlayerPositionProvider.d.ts +20 -0
  272. package/dist/ports/IPlayerPositionProvider.d.ts.map +1 -0
  273. package/dist/ports/IPlayerPositionProvider.js +11 -0
  274. package/dist/ports/IPlayerPositionProvider.js.map +1 -0
  275. package/dist/ports/IRandom.d.ts +25 -0
  276. package/dist/ports/IRandom.d.ts.map +1 -0
  277. package/dist/ports/IRandom.js +39 -0
  278. package/dist/ports/IRandom.js.map +1 -0
  279. package/dist/ports/IRuntimeClock.d.ts +18 -0
  280. package/dist/ports/IRuntimeClock.d.ts.map +1 -0
  281. package/dist/ports/IRuntimeClock.js +2 -0
  282. package/dist/ports/IRuntimeClock.js.map +1 -0
  283. package/dist/ports/index.d.ts +12 -0
  284. package/dist/ports/index.d.ts.map +1 -0
  285. package/dist/ports/index.js +5 -0
  286. package/dist/ports/index.js.map +1 -0
  287. package/dist/registry/AIStateRegistry.d.ts +42 -0
  288. package/dist/registry/AIStateRegistry.d.ts.map +1 -0
  289. package/dist/registry/AIStateRegistry.js +27 -0
  290. package/dist/registry/AIStateRegistry.js.map +1 -0
  291. package/dist/registry/AnomalyTypeRegistry.d.ts +21 -0
  292. package/dist/registry/AnomalyTypeRegistry.d.ts.map +1 -0
  293. package/dist/registry/AnomalyTypeRegistry.js +20 -0
  294. package/dist/registry/AnomalyTypeRegistry.js.map +1 -0
  295. package/dist/registry/BehaviorSchemeRegistry.d.ts +21 -0
  296. package/dist/registry/BehaviorSchemeRegistry.d.ts.map +1 -0
  297. package/dist/registry/BehaviorSchemeRegistry.js +24 -0
  298. package/dist/registry/BehaviorSchemeRegistry.js.map +1 -0
  299. package/dist/registry/DamageTypeRegistry.d.ts +17 -0
  300. package/dist/registry/DamageTypeRegistry.d.ts.map +1 -0
  301. package/dist/registry/DamageTypeRegistry.js +24 -0
  302. package/dist/registry/DamageTypeRegistry.js.map +1 -0
  303. package/dist/registry/FactionRegistry.d.ts +41 -0
  304. package/dist/registry/FactionRegistry.d.ts.map +1 -0
  305. package/dist/registry/FactionRegistry.js +29 -0
  306. package/dist/registry/FactionRegistry.js.map +1 -0
  307. package/dist/registry/MonsterRegistry.d.ts +44 -0
  308. package/dist/registry/MonsterRegistry.d.ts.map +1 -0
  309. package/dist/registry/MonsterRegistry.js +43 -0
  310. package/dist/registry/MonsterRegistry.js.map +1 -0
  311. package/dist/registry/NPCTypeRegistry.d.ts +34 -0
  312. package/dist/registry/NPCTypeRegistry.d.ts.map +1 -0
  313. package/dist/registry/NPCTypeRegistry.js +20 -0
  314. package/dist/registry/NPCTypeRegistry.js.map +1 -0
  315. package/dist/registry/Registry.d.ts +44 -0
  316. package/dist/registry/Registry.d.ts.map +1 -0
  317. package/dist/registry/Registry.js +80 -0
  318. package/dist/registry/Registry.js.map +1 -0
  319. package/dist/registry/TaskTypeRegistry.d.ts +17 -0
  320. package/dist/registry/TaskTypeRegistry.d.ts.map +1 -0
  321. package/dist/registry/TaskTypeRegistry.js +16 -0
  322. package/dist/registry/TaskTypeRegistry.js.map +1 -0
  323. package/dist/registry/index.d.ts +19 -0
  324. package/dist/registry/index.d.ts.map +1 -0
  325. package/dist/registry/index.js +11 -0
  326. package/dist/registry/index.js.map +1 -0
  327. package/dist/schema/index.d.ts +3 -0
  328. package/dist/schema/index.d.ts.map +1 -0
  329. package/dist/schema/index.js +3 -0
  330. package/dist/schema/index.js.map +1 -0
  331. package/dist/schema/validators.d.ts +32 -0
  332. package/dist/schema/validators.d.ts.map +1 -0
  333. package/dist/schema/validators.js +249 -0
  334. package/dist/schema/validators.js.map +1 -0
  335. package/dist/spawn/SpawnRegistry.d.ts +48 -0
  336. package/dist/spawn/SpawnRegistry.d.ts.map +1 -0
  337. package/dist/spawn/SpawnRegistry.js +141 -0
  338. package/dist/spawn/SpawnRegistry.js.map +1 -0
  339. package/dist/spawn/index.d.ts +3 -0
  340. package/dist/spawn/index.d.ts.map +1 -0
  341. package/dist/spawn/index.js +3 -0
  342. package/dist/spawn/index.js.map +1 -0
  343. package/dist/terrain/SmartTerrain.d.ts +119 -0
  344. package/dist/terrain/SmartTerrain.d.ts.map +1 -0
  345. package/dist/terrain/SmartTerrain.js +124 -0
  346. package/dist/terrain/SmartTerrain.js.map +1 -0
  347. package/dist/terrain/TerrainBuilder.d.ts +44 -0
  348. package/dist/terrain/TerrainBuilder.d.ts.map +1 -0
  349. package/dist/terrain/TerrainBuilder.js +112 -0
  350. package/dist/terrain/TerrainBuilder.js.map +1 -0
  351. package/dist/terrain/Zone.d.ts +25 -0
  352. package/dist/terrain/Zone.d.ts.map +1 -0
  353. package/dist/terrain/Zone.js +29 -0
  354. package/dist/terrain/Zone.js.map +1 -0
  355. package/dist/terrain/index.d.ts +6 -0
  356. package/dist/terrain/index.d.ts.map +1 -0
  357. package/dist/terrain/index.js +5 -0
  358. package/dist/terrain/index.js.map +1 -0
  359. package/dist/time/TimeManager.d.ts +21 -0
  360. package/dist/time/TimeManager.d.ts.map +1 -0
  361. package/dist/time/TimeManager.js +41 -0
  362. package/dist/time/TimeManager.js.map +1 -0
  363. package/dist/time/index.d.ts +3 -0
  364. package/dist/time/index.d.ts.map +1 -0
  365. package/dist/time/index.js +2 -0
  366. package/dist/time/index.js.map +1 -0
  367. package/package.json +119 -0
@@ -0,0 +1,542 @@
1
+ // core/ALifeKernel.ts
2
+ // Central orchestrator and developer entry point for the A-Life SDK.
3
+ //
4
+ // The kernel owns the event bus, clock, spatial grid, and logger. Domain-specific registries and features (factions, NPC types,
5
+ // monsters, anomalies, surge, squads, etc.) are added via plugins — see `use()`.
6
+ //
7
+ // Lifecycle:
8
+ // 1. Construct with optional config/clock/logger overrides
9
+ // 2. provide() port adapters via token-based registry
10
+ // 3. use() plugins
11
+ // 4. init() — validate, create subsystems, init plugins
12
+ // 5. start() — enable frame-based updates
13
+ // 6. update(deltaMs) each frame OR step(count) for deterministic tests
14
+ // 7. pause() / resume() to freeze/unfreeze time
15
+ // 8. destroy() on shutdown
16
+ import { EventBus } from '../events/EventBus';
17
+ import { Clock } from './Clock';
18
+ import { SpatialGrid } from './SpatialGrid';
19
+ import { Logger } from '../logger/Logger';
20
+ import { createDefaultConfig } from '../config/ALifeConfig';
21
+ import { createNoOpEntityAdapter } from '../ports/IEntityAdapter';
22
+ import { createNoOpPlayerPosition } from '../ports/IPlayerPositionProvider';
23
+ import { createNoOpEntityFactory } from '../ports/IEntityFactory';
24
+ import { PortRegistry } from './PortRegistry';
25
+ import { Ports, REQUIRED_PORTS } from './PortTokens';
26
+ import { DiagnosticsCollector } from './Diagnostics';
27
+ import { DefaultRandom } from '../ports/IRandom';
28
+ import { DEFAULT_DEVTOOLS_CONFIG } from './DevToolsInspector';
29
+ // ---------------------------------------------------------------------------
30
+ // Serialisation
31
+ // ---------------------------------------------------------------------------
32
+ /** Current serialisation format version. */
33
+ export const KERNEL_STATE_VERSION = 1;
34
+ // ---------------------------------------------------------------------------
35
+ // ALifeKernel
36
+ // ---------------------------------------------------------------------------
37
+ export class ALifeKernel {
38
+ // -------------------------------------------------------------------------
39
+ // Constructor
40
+ // -------------------------------------------------------------------------
41
+ /**
42
+ * Create a new A-Life kernel.
43
+ *
44
+ * @example
45
+ * ```ts
46
+ * const kernel = new ALifeKernel();
47
+ * kernel.provide(Ports.EntityAdapter, myAdapter);
48
+ * kernel.use(new SimulationPlugin());
49
+ * kernel.init();
50
+ * kernel.start();
51
+ * ```
52
+ */
53
+ constructor(options = {}) {
54
+ // -- Events ---------------------------------------------------------------
55
+ this.events = new EventBus();
56
+ // -- Ports ----------------------------------------------------------------
57
+ this.portRegistry = new PortRegistry();
58
+ // -- Plugins --------------------------------------------------------------
59
+ this.plugins = new Map();
60
+ this.pluginOrder = [];
61
+ // -- Migrations -----------------------------------------------------------
62
+ this.migrations = new Map();
63
+ // -- State ----------------------------------------------------------------
64
+ this.initialized = false;
65
+ this._running = false;
66
+ this._paused = false;
67
+ this._tick = 0;
68
+ this.config = mergeConfig(createDefaultConfig(), options.config);
69
+ this.loggerConfig = options.logger ?? {};
70
+ this.clockConfig = options.clock ?? {};
71
+ }
72
+ // -------------------------------------------------------------------------
73
+ // Port API
74
+ // -------------------------------------------------------------------------
75
+ /** Register a port adapter by token. Must be called before `init()`. */
76
+ provide(token, impl) {
77
+ if (this.initialized) {
78
+ throw new Error('[ALifeKernel] Cannot provide ports after init()');
79
+ }
80
+ this.portRegistry.provide(token, impl);
81
+ return this;
82
+ }
83
+ // -------------------------------------------------------------------------
84
+ // Plugin API
85
+ // -------------------------------------------------------------------------
86
+ /**
87
+ * Install a plugin. Must be called before `init()`.
88
+ *
89
+ * Plugins extend the kernel with domain-specific registries and logic.
90
+ * Each plugin is identified by its `name` property — duplicates throw.
91
+ */
92
+ use(plugin) {
93
+ if (this.initialized) {
94
+ throw new Error('[ALifeKernel] Cannot install plugins after init()');
95
+ }
96
+ if (this.plugins.has(plugin.name)) {
97
+ throw new Error(`[ALifeKernel] Plugin "${plugin.name}" already installed`);
98
+ }
99
+ this.plugins.set(plugin.name, plugin);
100
+ this.pluginOrder.push(plugin);
101
+ plugin.install(this);
102
+ return this;
103
+ }
104
+ getPlugin(nameOrToken) {
105
+ const name = typeof nameOrToken === 'string' ? nameOrToken : nameOrToken.name;
106
+ const plugin = this.plugins.get(name);
107
+ if (!plugin) {
108
+ throw new Error(`[ALifeKernel] Plugin "${name}" not installed`);
109
+ }
110
+ return plugin;
111
+ }
112
+ /** Check whether a plugin is installed. */
113
+ hasPlugin(name) {
114
+ return this.plugins.has(name);
115
+ }
116
+ // -------------------------------------------------------------------------
117
+ // Migration API
118
+ // -------------------------------------------------------------------------
119
+ /**
120
+ * Register a state migration from one version to the next.
121
+ *
122
+ * When `restoreState()` receives a save with `state.version < KERNEL_STATE_VERSION`,
123
+ * the kernel applies registered migrations in sequence to bring the state up to date.
124
+ *
125
+ * @param fromVersion - The version this migration upgrades FROM (migrates to fromVersion + 1).
126
+ * @param migration - A function that transforms the state.
127
+ */
128
+ registerMigration(fromVersion, migration) {
129
+ if (this.migrations.has(fromVersion)) {
130
+ throw new Error(`[ALifeKernel] Migration from version ${fromVersion} already registered`);
131
+ }
132
+ this.migrations.set(fromVersion, migration);
133
+ return this;
134
+ }
135
+ // -------------------------------------------------------------------------
136
+ // Lifecycle
137
+ // -------------------------------------------------------------------------
138
+ /**
139
+ * Validate configuration, create subsystems, and initialize plugins
140
+ * in dependency order.
141
+ *
142
+ * Returns a {@link DiagnosticsCollector} with all warnings/infos.
143
+ * Throws {@link ALifeValidationError} if any required port is missing
144
+ * or a plugin hard-dependency is unresolved.
145
+ */
146
+ init() {
147
+ if (this.initialized) {
148
+ throw new Error('[ALifeKernel] Already initialized');
149
+ }
150
+ const diag = new DiagnosticsCollector();
151
+ this.validatePorts(diag);
152
+ this.validatePluginDeps(diag);
153
+ this.validateConfig(diag);
154
+ diag.throwIfErrors();
155
+ if (!this.portRegistry.has(Ports.Random)) {
156
+ this.portRegistry.provide(Ports.Random, new DefaultRandom());
157
+ }
158
+ if (!this.portRegistry.has(Ports.EntityAdapter)) {
159
+ this.portRegistry.provide(Ports.EntityAdapter, createNoOpEntityAdapter());
160
+ }
161
+ if (!this.portRegistry.has(Ports.PlayerPosition)) {
162
+ this.portRegistry.provide(Ports.PlayerPosition, createNoOpPlayerPosition());
163
+ }
164
+ if (!this.portRegistry.has(Ports.EntityFactory)) {
165
+ this.portRegistry.provide(Ports.EntityFactory, createNoOpEntityFactory());
166
+ }
167
+ this.pluginOrder = this.topologicalSort();
168
+ this.createSubsystems();
169
+ // Mark as initialized early so plugins can access kernel accessors
170
+ // (e.g. logger, clock) during their init() calls.
171
+ this.initialized = true;
172
+ for (const plugin of this.pluginOrder) {
173
+ plugin.init?.();
174
+ }
175
+ this._logger.info('kernel', 'ALifeKernel initialized', {
176
+ plugins: this.pluginOrder.map((p) => p.name),
177
+ ports: this.portRegistry.registeredIds(),
178
+ });
179
+ return diag;
180
+ }
181
+ /**
182
+ * Start the simulation — enables frame-based `update()`.
183
+ * Must be called after `init()`.
184
+ */
185
+ start() {
186
+ this.ensureInitialized('start');
187
+ if (this._running) {
188
+ throw new Error('[ALifeKernel] Already started');
189
+ }
190
+ this._running = true;
191
+ this._logger.info('kernel', 'Simulation started');
192
+ }
193
+ /**
194
+ * Advance the simulation by `deltaMs` real milliseconds.
195
+ * Requires `init()` + `start()`. No-op when paused.
196
+ */
197
+ update(deltaMs) {
198
+ this.ensureInitialized('update');
199
+ this.ensureRunning('update');
200
+ if (this._paused)
201
+ return;
202
+ this._tick++;
203
+ this._clock.update(deltaMs);
204
+ for (const plugin of this.pluginOrder) {
205
+ plugin.update?.(deltaMs);
206
+ }
207
+ this.events.flush();
208
+ }
209
+ /**
210
+ * Advance the simulation by a fixed number of ticks at the configured
211
+ * interval. Does not require `start()` — ideal for deterministic tests.
212
+ *
213
+ * @param count - Number of ticks to execute (default: 1).
214
+ */
215
+ step(count = 1) {
216
+ this.ensureInitialized('step');
217
+ const intervalMs = this.config.tick.intervalMs;
218
+ for (let i = 0; i < count; i++) {
219
+ this._tick++;
220
+ this._clock.update(intervalMs);
221
+ for (const plugin of this.pluginOrder) {
222
+ plugin.update?.(intervalMs);
223
+ }
224
+ this.events.flush();
225
+ }
226
+ }
227
+ /** Pause the simulation — `update()` becomes a no-op, clock freezes. */
228
+ pause() {
229
+ this.ensureInitialized('pause');
230
+ this._paused = true;
231
+ this._clock.pause();
232
+ }
233
+ /** Resume after a `pause()`. */
234
+ resume() {
235
+ this.ensureInitialized('resume');
236
+ this._paused = false;
237
+ this._clock.resume();
238
+ }
239
+ /** Release all resources and subscriptions. */
240
+ destroy() {
241
+ for (let i = this.pluginOrder.length - 1; i >= 0; i--) {
242
+ this.pluginOrder[i].destroy?.();
243
+ }
244
+ this.plugins.clear();
245
+ this.pluginOrder = [];
246
+ this.events.destroy();
247
+ this._spatialGrid?.clear();
248
+ this._logger?.info('kernel', 'ALifeKernel destroyed');
249
+ this.initialized = false;
250
+ this._running = false;
251
+ this._paused = false;
252
+ this._tick = 0;
253
+ }
254
+ // -------------------------------------------------------------------------
255
+ // Public accessors
256
+ // -------------------------------------------------------------------------
257
+ get clock() {
258
+ this.ensureInitialized('clock');
259
+ return this._clock;
260
+ }
261
+ get logger() {
262
+ this.ensureInitialized('logger');
263
+ return this._logger;
264
+ }
265
+ get spatialGrid() {
266
+ this.ensureInitialized('spatialGrid');
267
+ return this._spatialGrid;
268
+ }
269
+ get entityAdapter() {
270
+ return this.portRegistry.require(Ports.EntityAdapter);
271
+ }
272
+ get playerPosition() {
273
+ return this.portRegistry.require(Ports.PlayerPosition);
274
+ }
275
+ get entityFactory() {
276
+ return this.portRegistry.require(Ports.EntityFactory);
277
+ }
278
+ get currentConfig() {
279
+ return this.config;
280
+ }
281
+ get tick() {
282
+ return this._tick;
283
+ }
284
+ get isInitialized() {
285
+ return this.initialized;
286
+ }
287
+ get isRunning() {
288
+ return this._running;
289
+ }
290
+ get isPaused() {
291
+ return this._paused;
292
+ }
293
+ // -------------------------------------------------------------------------
294
+ // Serialisation
295
+ // -------------------------------------------------------------------------
296
+ serialize() {
297
+ this.ensureInitialized('serialize');
298
+ return {
299
+ version: KERNEL_STATE_VERSION,
300
+ clock: this._clock.serialize(),
301
+ tick: this._tick,
302
+ plugins: this.collectPluginState(),
303
+ };
304
+ }
305
+ restoreState(state) {
306
+ this.ensureInitialized('restoreState');
307
+ let migrated = state;
308
+ if (migrated.version > KERNEL_STATE_VERSION) {
309
+ throw new Error(`[ALifeKernel] Save version ${migrated.version} is newer than current ${KERNEL_STATE_VERSION}`);
310
+ }
311
+ // Run kernel-level migrations in sequence.
312
+ while (migrated.version < KERNEL_STATE_VERSION) {
313
+ const migration = this.migrations.get(migrated.version);
314
+ if (!migration) {
315
+ throw new Error(`[ALifeKernel] No migration registered from version ${migrated.version} to ${migrated.version + 1}`);
316
+ }
317
+ const prevVersion = migrated.version;
318
+ this._logger.info('kernel', `Migrating save from v${prevVersion} to v${prevVersion + 1}`);
319
+ migrated = migration(migrated);
320
+ if (migrated.version <= prevVersion) {
321
+ throw new Error(`[ALifeKernel] Migration from version ${prevVersion} did not increment version (got ${migrated.version}). ` +
322
+ `Ensure the migration function returns a state with version: ${prevVersion + 1}.`);
323
+ }
324
+ }
325
+ this._clock = Clock.fromState(migrated.clock, {
326
+ dayStartHour: this.config.time.dayStartHour,
327
+ dayEndHour: this.config.time.dayEndHour,
328
+ onHourChanged: (h, d) => this.events.emit('time:hour_changed', { hour: h, day: d, isDay: this._clock.isDay }),
329
+ onDayNightChanged: (isDay) => this.events.emit('time:day_night_changed', { isDay }),
330
+ });
331
+ this._tick = migrated.tick;
332
+ if (migrated.plugins) {
333
+ for (const plugin of this.pluginOrder) {
334
+ const capsule = migrated.plugins[plugin.name];
335
+ if (capsule && plugin.restore) {
336
+ // Run plugin-level migration if the capsule has a version tag
337
+ // that is older than the current kernel version.
338
+ let pluginState = capsule.state;
339
+ const capsuleVersion = capsule.version ?? migrated.version;
340
+ if (capsuleVersion < KERNEL_STATE_VERSION && plugin.migrateState) {
341
+ pluginState = plugin.migrateState(pluginState, capsuleVersion);
342
+ }
343
+ plugin.restore(pluginState);
344
+ }
345
+ }
346
+ }
347
+ this._logger.info('kernel', 'State restored', { tick: migrated.tick, version: migrated.version });
348
+ }
349
+ // -------------------------------------------------------------------------
350
+ // DevTools
351
+ // -------------------------------------------------------------------------
352
+ /**
353
+ * Create a runtime snapshot of the kernel state for developer tooling.
354
+ *
355
+ * @param config - Optional configuration to control what data is included.
356
+ * @returns A plain, JSON-serialisable snapshot.
357
+ */
358
+ inspect(config) {
359
+ this.ensureInitialized('inspect');
360
+ const opts = { ...DEFAULT_DEVTOOLS_CONFIG, ...config };
361
+ const pluginNames = this.pluginOrder.map((p) => p.name);
362
+ const snapshot = {
363
+ tick: this._tick,
364
+ running: this._running,
365
+ paused: this._paused,
366
+ clock: {
367
+ gameHour: this._clock.hour,
368
+ isDay: this._clock.isDay,
369
+ elapsedMs: this._clock.totalGameSeconds * 1000,
370
+ },
371
+ pluginNames,
372
+ };
373
+ if (opts.includeSpatialGrid) {
374
+ snapshot.spatialGrid = {
375
+ entityCount: this._spatialGrid.size,
376
+ cellSize: this.config.simulation.spatialGridCellSize,
377
+ };
378
+ }
379
+ if (opts.includePorts) {
380
+ snapshot.ports = this.portRegistry.registeredIds();
381
+ }
382
+ if (opts.includePlugins) {
383
+ const pluginsData = {};
384
+ for (const plugin of this.pluginOrder) {
385
+ if (plugin.inspect) {
386
+ pluginsData[plugin.name] = plugin.inspect();
387
+ }
388
+ }
389
+ snapshot.plugins = pluginsData;
390
+ }
391
+ return snapshot;
392
+ }
393
+ // -------------------------------------------------------------------------
394
+ // Private — validation
395
+ // -------------------------------------------------------------------------
396
+ validatePorts(diag) {
397
+ for (const token of REQUIRED_PORTS) {
398
+ if (!this.portRegistry.has(token)) {
399
+ diag.error('kernel', `ports.${token.id}`, `Required port "${token.id}" not provided`, `Call kernel.provide(Ports.${capitalize(token.id)}, impl) before init()`);
400
+ }
401
+ }
402
+ for (const plugin of this.pluginOrder) {
403
+ if (plugin.requiredPorts) {
404
+ for (const token of plugin.requiredPorts) {
405
+ if (!this.portRegistry.has(token)) {
406
+ diag.error(plugin.name, `ports.${token.id}`, `Plugin "${plugin.name}" requires port "${token.id}" (${token.description})`);
407
+ }
408
+ }
409
+ }
410
+ }
411
+ }
412
+ validatePluginDeps(diag) {
413
+ for (const plugin of this.pluginOrder) {
414
+ if (plugin.dependencies) {
415
+ for (const dep of plugin.dependencies) {
416
+ if (!this.plugins.has(dep)) {
417
+ diag.error(plugin.name, `dependencies.${dep}`, `Missing required dependency "${dep}"`, `Install it with kernel.use(new ${capitalize(dep)}Plugin()) before "${plugin.name}"`);
418
+ }
419
+ }
420
+ }
421
+ if (plugin.optionalDependencies) {
422
+ for (const dep of plugin.optionalDependencies) {
423
+ if (!this.plugins.has(dep)) {
424
+ diag.warning(plugin.name, `optionalDependencies.${dep}`, `Optional dependency "${dep}" not installed — some features may be limited`);
425
+ }
426
+ }
427
+ }
428
+ }
429
+ }
430
+ validateConfig(diag) {
431
+ const c = this.config;
432
+ if (c.tick.intervalMs <= 0) {
433
+ diag.error('kernel', 'config.tick.intervalMs', 'Must be > 0');
434
+ }
435
+ if (c.simulation.spatialGridCellSize <= 0) {
436
+ diag.error('kernel', 'config.simulation.spatialGridCellSize', 'Must be > 0');
437
+ }
438
+ if (c.time.dayStartHour >= c.time.dayEndHour) {
439
+ diag.warning('kernel', 'config.time', 'dayStartHour >= dayEndHour — day/night transitions may behave unexpectedly');
440
+ }
441
+ }
442
+ // -------------------------------------------------------------------------
443
+ // Private — topological sort (Kahn's algorithm)
444
+ // -------------------------------------------------------------------------
445
+ topologicalSort() {
446
+ const pluginMap = this.plugins;
447
+ const inDegree = new Map();
448
+ const adjacency = new Map();
449
+ for (const [name] of pluginMap) {
450
+ inDegree.set(name, 0);
451
+ adjacency.set(name, []);
452
+ }
453
+ for (const plugin of this.pluginOrder) {
454
+ const deps = plugin.dependencies ?? [];
455
+ for (const dep of deps) {
456
+ if (pluginMap.has(dep)) {
457
+ adjacency.get(dep).push(plugin.name);
458
+ inDegree.set(plugin.name, (inDegree.get(plugin.name) ?? 0) + 1);
459
+ }
460
+ }
461
+ }
462
+ const queue = [];
463
+ for (const [name, degree] of inDegree) {
464
+ if (degree === 0)
465
+ queue.push(name);
466
+ }
467
+ const sorted = [];
468
+ while (queue.length > 0) {
469
+ const name = queue.shift();
470
+ sorted.push(pluginMap.get(name));
471
+ for (const neighbor of adjacency.get(name)) {
472
+ const newDegree = inDegree.get(neighbor) - 1;
473
+ inDegree.set(neighbor, newDegree);
474
+ if (newDegree === 0)
475
+ queue.push(neighbor);
476
+ }
477
+ }
478
+ if (sorted.length !== pluginMap.size) {
479
+ const remaining = [...pluginMap.keys()].filter((n) => !sorted.some((p) => p.name === n));
480
+ throw new Error(`[ALifeKernel] Circular plugin dependency detected among: ${remaining.join(', ')}`);
481
+ }
482
+ return sorted;
483
+ }
484
+ // -------------------------------------------------------------------------
485
+ // Private — lifecycle helpers
486
+ // -------------------------------------------------------------------------
487
+ collectPluginState() {
488
+ const state = {};
489
+ for (const plugin of this.pluginOrder) {
490
+ if (plugin.serialize) {
491
+ state[plugin.name] = { version: KERNEL_STATE_VERSION, state: plugin.serialize() };
492
+ }
493
+ }
494
+ return state;
495
+ }
496
+ createSubsystems() {
497
+ this._logger = new Logger(this.loggerConfig);
498
+ this._clock = new Clock({
499
+ ...this.clockConfig,
500
+ timeFactor: this.clockConfig.timeFactor ?? this.config.time.timeFactor,
501
+ startHour: this.clockConfig.startHour ?? this.config.time.startHour,
502
+ dayStartHour: this.config.time.dayStartHour,
503
+ dayEndHour: this.config.time.dayEndHour,
504
+ onHourChanged: (h, d) => this.events.emit('time:hour_changed', { hour: h, day: d, isDay: this._clock.isDay }),
505
+ onDayNightChanged: (isDay) => this.events.emit('time:day_night_changed', { isDay }),
506
+ });
507
+ this._spatialGrid = new SpatialGrid(this.config.simulation.spatialGridCellSize, (item) => item.position);
508
+ }
509
+ ensureInitialized(operation) {
510
+ if (!this.initialized) {
511
+ throw new Error(`[ALifeKernel] Not initialized — call init() before ${operation}`);
512
+ }
513
+ }
514
+ ensureRunning(operation) {
515
+ if (!this._running) {
516
+ throw new Error(`[ALifeKernel] Not running — call start() before ${operation}`);
517
+ }
518
+ }
519
+ }
520
+ // ---------------------------------------------------------------------------
521
+ // Helpers
522
+ // ---------------------------------------------------------------------------
523
+ function capitalize(s) {
524
+ return s.charAt(0).toUpperCase() + s.slice(1);
525
+ }
526
+ function mergeConfig(base, overrides) {
527
+ if (!overrides)
528
+ return base;
529
+ return {
530
+ tick: { ...base.tick, ...overrides.tick },
531
+ simulation: { ...base.simulation, ...overrides.simulation },
532
+ time: { ...base.time, ...overrides.time },
533
+ combat: { ...base.combat, ...overrides.combat },
534
+ morale: { ...base.morale, ...overrides.morale },
535
+ spawn: { ...base.spawn, ...overrides.spawn },
536
+ memory: { ...base.memory, ...overrides.memory },
537
+ surge: { ...base.surge, ...overrides.surge },
538
+ monster: { ...base.monster, ...overrides.monster },
539
+ trade: { ...base.trade, ...overrides.trade },
540
+ };
541
+ }
542
+ //# sourceMappingURL=ALifeKernel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ALifeKernel.js","sourceRoot":"","sources":["../../src/core/ALifeKernel.ts"],"names":[],"mappings":"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"}