@jgengine/core 0.10.0 → 0.12.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 (727) hide show
  1. package/CHANGELOG.md +39 -2
  2. package/LICENSE +203 -661
  3. package/README.md +1 -1
  4. package/dist/ai/crowd.d.ts +55 -0
  5. package/dist/ai/crowd.js +114 -0
  6. package/dist/ai/flock.d.ts +5 -2
  7. package/dist/ai/flock.js +5 -2
  8. package/dist/ai/groupAssist.d.ts +1 -0
  9. package/dist/ai/groupAssist.js +1 -0
  10. package/dist/ai/heatSystem.d.ts +76 -0
  11. package/dist/ai/heatSystem.js +97 -0
  12. package/dist/ai/interestScheduler.d.ts +107 -0
  13. package/dist/ai/interestScheduler.js +118 -0
  14. package/dist/ai/jobBoard.d.ts +1 -0
  15. package/dist/ai/jobBoard.js +1 -0
  16. package/dist/ai/laneSelect.d.ts +5 -2
  17. package/dist/ai/laneSelect.js +5 -2
  18. package/dist/ai/mobBrain.d.ts +1 -0
  19. package/dist/ai/mobBrain.js +1 -0
  20. package/dist/ai/populationDirector.d.ts +103 -0
  21. package/dist/ai/populationDirector.js +190 -0
  22. package/dist/ai/pursuit.d.ts +56 -0
  23. package/dist/ai/pursuit.js +53 -0
  24. package/dist/ai/spawnDirector.d.ts +7 -2
  25. package/dist/ai/spawnDirector.js +18 -15
  26. package/dist/ai/spawnPoint.d.ts +3 -1
  27. package/dist/ai/spawnPoint.js +3 -1
  28. package/dist/ai/targetAcquisition.d.ts +84 -0
  29. package/dist/ai/targetAcquisition.js +92 -0
  30. package/dist/anim/easing.d.ts +19 -0
  31. package/dist/anim/easing.js +19 -0
  32. package/dist/anim/oscillator.d.ts +12 -0
  33. package/dist/anim/oscillator.js +25 -0
  34. package/dist/area/areaEffectField.d.ts +127 -0
  35. package/dist/area/areaEffectField.js +175 -0
  36. package/dist/area/stackPolicy.d.ts +47 -0
  37. package/dist/area/stackPolicy.js +99 -0
  38. package/dist/authoring.d.ts +2 -1
  39. package/dist/authoring.js +2 -1
  40. package/dist/board/laneBoard.d.ts +13 -0
  41. package/dist/board/laneBoard.js +13 -0
  42. package/dist/board/timelineBoard.d.ts +10 -0
  43. package/dist/board/timelineBoard.js +10 -0
  44. package/dist/combat/abilityKit.d.ts +18 -0
  45. package/dist/combat/abilityKit.js +24 -9
  46. package/dist/combat/animationState.d.ts +5 -0
  47. package/dist/combat/animationState.js +5 -0
  48. package/dist/combat/breakMeters.d.ts +10 -0
  49. package/dist/combat/breakMeters.js +10 -0
  50. package/dist/combat/castRunner.d.ts +5 -0
  51. package/dist/combat/castRunner.js +5 -0
  52. package/dist/combat/comboPoints.d.ts +5 -0
  53. package/dist/combat/comboPoints.js +5 -0
  54. package/dist/combat/comboString.d.ts +5 -0
  55. package/dist/combat/comboString.js +5 -0
  56. package/dist/combat/damageInterceptors.d.ts +192 -0
  57. package/dist/combat/damageInterceptors.js +251 -0
  58. package/dist/combat/damageMatchup.d.ts +68 -0
  59. package/dist/combat/damageMatchup.js +42 -0
  60. package/dist/combat/damageResolution.d.ts +63 -0
  61. package/dist/combat/damageResolution.js +50 -0
  62. package/dist/combat/death.d.ts +7 -1
  63. package/dist/combat/death.js +5 -0
  64. package/dist/combat/deathReason.d.ts +14 -0
  65. package/dist/combat/deathReason.js +1 -0
  66. package/dist/combat/defensiveWindow.d.ts +5 -0
  67. package/dist/combat/defensiveWindow.js +5 -0
  68. package/dist/combat/dotField.d.ts +5 -1
  69. package/dist/combat/dotField.js +5 -1
  70. package/dist/combat/downed.d.ts +5 -0
  71. package/dist/combat/downed.js +5 -0
  72. package/dist/combat/effects.d.ts +5 -0
  73. package/dist/combat/effects.js +5 -0
  74. package/dist/combat/encounterSequence.d.ts +258 -0
  75. package/dist/combat/encounterSequence.js +426 -0
  76. package/dist/combat/hitReaction.d.ts +57 -1
  77. package/dist/combat/hitReaction.js +45 -5
  78. package/dist/combat/magazine.d.ts +54 -0
  79. package/dist/combat/magazine.js +96 -0
  80. package/dist/combat/projectiles.d.ts +5 -0
  81. package/dist/combat/projectiles.js +32 -14
  82. package/dist/combat/receivedDamage.d.ts +117 -0
  83. package/dist/combat/receivedDamage.js +92 -0
  84. package/dist/combat/regenShield.d.ts +5 -1
  85. package/dist/combat/regenShield.js +5 -1
  86. package/dist/combat/renderCues.d.ts +51 -0
  87. package/dist/combat/renderCues.js +44 -0
  88. package/dist/combat/resourcePool.d.ts +5 -0
  89. package/dist/combat/resourcePool.js +5 -0
  90. package/dist/combat/rewardAllocation.d.ts +121 -0
  91. package/dist/combat/rewardAllocation.js +251 -0
  92. package/dist/combat/shotOrigin.d.ts +18 -1
  93. package/dist/combat/shotOrigin.js +39 -0
  94. package/dist/combat/statusApplication.d.ts +96 -0
  95. package/dist/combat/statusApplication.js +81 -0
  96. package/dist/combat/telegraph.d.ts +11 -2
  97. package/dist/combat/telegraph.js +11 -2
  98. package/dist/combat/thresholdCrossings.d.ts +85 -0
  99. package/dist/combat/thresholdCrossings.js +116 -0
  100. package/dist/combat.d.ts +35 -0
  101. package/dist/combat.js +35 -0
  102. package/dist/commands/commandRegistry.d.ts +11 -0
  103. package/dist/commands/commandRegistry.js +9 -2
  104. package/dist/crafting/crop.d.ts +18 -0
  105. package/dist/crafting/crop.js +18 -0
  106. package/dist/crafting/production.d.ts +5 -0
  107. package/dist/crafting/production.js +5 -0
  108. package/dist/devtools/controls.d.ts +38 -0
  109. package/dist/devtools/controls.js +181 -0
  110. package/dist/devtools/devtools.d.ts +5 -197
  111. package/dist/devtools/devtools.js +38 -774
  112. package/dist/devtools/discover.d.ts +32 -0
  113. package/dist/devtools/discover.js +240 -0
  114. package/dist/devtools/fallbackSeams.d.ts +50 -0
  115. package/dist/devtools/fallbackSeams.js +111 -0
  116. package/dist/devtools/frame.d.ts +15 -0
  117. package/dist/devtools/frame.js +247 -0
  118. package/dist/devtools/logs.d.ts +15 -0
  119. package/dist/devtools/logs.js +86 -0
  120. package/dist/devtools/overrides.d.ts +16 -0
  121. package/dist/devtools/overrides.js +66 -0
  122. package/dist/devtools/rewriteTunables.d.ts +17 -0
  123. package/dist/devtools/rewriteTunables.js +276 -0
  124. package/dist/devtools/saveEndpoint.d.ts +46 -0
  125. package/dist/devtools/saveEndpoint.js +48 -0
  126. package/dist/devtools/transformTunables.d.ts +3 -0
  127. package/dist/devtools/transformTunables.js +3 -0
  128. package/dist/devtools/tunableSchema.d.ts +31 -0
  129. package/dist/devtools/tunableSchema.js +31 -0
  130. package/dist/devtools/types.d.ts +212 -0
  131. package/dist/devtools/types.js +1 -0
  132. package/dist/economy/auctionBook.d.ts +122 -0
  133. package/dist/economy/auctionBook.js +213 -0
  134. package/dist/economy/currency.d.ts +12 -1
  135. package/dist/economy/currency.js +12 -1
  136. package/dist/economy/listingBook.d.ts +91 -0
  137. package/dist/economy/listingBook.js +144 -0
  138. package/dist/economy/priceHistory.d.ts +44 -0
  139. package/dist/economy/priceHistory.js +89 -0
  140. package/dist/economy/resourceLedger.d.ts +222 -0
  141. package/dist/economy/resourceLedger.js +353 -0
  142. package/dist/economy/sharedWallet.d.ts +14 -0
  143. package/dist/economy/sharedWallet.js +14 -0
  144. package/dist/economy/techTree.d.ts +12 -0
  145. package/dist/economy/techTree.js +12 -0
  146. package/dist/economy/unlockPoints.d.ts +92 -0
  147. package/dist/economy/unlockPoints.js +103 -0
  148. package/dist/economy/wallet.d.ts +26 -2
  149. package/dist/economy/wallet.js +35 -6
  150. package/dist/editor/commandApply.d.ts +5 -0
  151. package/dist/editor/commandApply.js +755 -0
  152. package/dist/editor/commands.d.ts +235 -7
  153. package/dist/editor/commands.js +82 -124
  154. package/dist/editor/directives.d.ts +94 -0
  155. package/dist/editor/directives.js +206 -0
  156. package/dist/editor/document.d.ts +194 -13
  157. package/dist/editor/document.js +1166 -19
  158. package/dist/editor/entityCatalog.d.ts +42 -0
  159. package/dist/editor/entityCatalog.js +101 -0
  160. package/dist/editor/environment.d.ts +74 -0
  161. package/dist/editor/environment.js +169 -0
  162. package/dist/editor/grid.d.ts +229 -0
  163. package/dist/editor/grid.js +366 -0
  164. package/dist/editor/gridAdapters.d.ts +80 -0
  165. package/dist/editor/gridAdapters.js +134 -0
  166. package/dist/editor/index.d.ts +98 -6
  167. package/dist/editor/index.js +13 -2
  168. package/dist/editor/liveSync.d.ts +127 -0
  169. package/dist/editor/liveSync.js +249 -0
  170. package/dist/editor/minimap.d.ts +31 -0
  171. package/dist/editor/minimap.js +73 -0
  172. package/dist/editor/runtimeInspector.d.ts +88 -0
  173. package/dist/editor/runtimeInspector.js +239 -0
  174. package/dist/editor/streamer.d.ts +66 -0
  175. package/dist/editor/streamer.js +68 -0
  176. package/dist/editor/types.d.ts +250 -1
  177. package/dist/editor/world.d.ts +136 -0
  178. package/dist/editor/world.js +303 -0
  179. package/dist/faction/reputation.d.ts +5 -0
  180. package/dist/faction/reputation.js +5 -0
  181. package/dist/format/distance.d.ts +17 -0
  182. package/dist/format/distance.js +18 -0
  183. package/dist/format/duration.d.ts +27 -0
  184. package/dist/format/duration.js +45 -0
  185. package/dist/format/speed.d.ts +17 -0
  186. package/dist/format/speed.js +25 -0
  187. package/dist/game/breeding.d.ts +161 -0
  188. package/dist/game/breeding.js +181 -0
  189. package/dist/game/cameraConfig.d.ts +451 -0
  190. package/dist/game/cameraConfig.js +1 -0
  191. package/dist/game/connectedPlayers.d.ts +6 -4
  192. package/dist/game/connectedPlayers.js +2 -2
  193. package/dist/game/cosmetics.d.ts +9 -0
  194. package/dist/game/cosmetics.js +16 -0
  195. package/dist/game/defineGame.d.ts +110 -5
  196. package/dist/game/defineGame.js +49 -4
  197. package/dist/game/defineSystem.d.ts +90 -0
  198. package/dist/game/defineSystem.js +47 -0
  199. package/dist/game/dialogue.d.ts +33 -0
  200. package/dist/game/dialogue.js +21 -0
  201. package/dist/game/events.d.ts +63 -13
  202. package/dist/game/events.js +5 -0
  203. package/dist/game/feed.d.ts +33 -0
  204. package/dist/game/feed.js +35 -2
  205. package/dist/game/gamePhase.d.ts +11 -0
  206. package/dist/game/gamePhase.js +16 -0
  207. package/dist/game/leaderboard.d.ts +5 -0
  208. package/dist/game/leaderboard.js +5 -0
  209. package/dist/game/loadout.d.ts +5 -0
  210. package/dist/game/loadout.js +5 -0
  211. package/dist/game/lootFilter.d.ts +2 -0
  212. package/dist/game/lootFilter.js +2 -0
  213. package/dist/game/lootPipeline.d.ts +164 -0
  214. package/dist/game/lootPipeline.js +216 -0
  215. package/dist/game/lootTable.d.ts +19 -2
  216. package/dist/game/lootTable.js +15 -5
  217. package/dist/game/objectives.d.ts +43 -0
  218. package/dist/game/objectives.js +36 -0
  219. package/dist/game/paramLayers.d.ts +148 -0
  220. package/dist/game/paramLayers.js +185 -0
  221. package/dist/game/ping.d.ts +5 -0
  222. package/dist/game/ping.js +5 -0
  223. package/dist/game/playableGame.d.ts +116 -432
  224. package/dist/game/playableGame.js +1 -1
  225. package/dist/game/progression.d.ts +35 -0
  226. package/dist/game/progression.js +19 -0
  227. package/dist/game/quest.d.ts +8 -0
  228. package/dist/game/quest.js +30 -3
  229. package/dist/game/race.d.ts +141 -0
  230. package/dist/game/race.js +169 -0
  231. package/dist/game/recordBook.d.ts +3 -1
  232. package/dist/game/recordBook.js +4 -1
  233. package/dist/game/ruleSelection.d.ts +75 -0
  234. package/dist/game/ruleSelection.js +127 -0
  235. package/dist/game/runDraft.d.ts +5 -0
  236. package/dist/game/runDraft.js +5 -0
  237. package/dist/game/saveStore.d.ts +111 -0
  238. package/dist/game/saveStore.js +312 -0
  239. package/dist/game/snapshotHistory.d.ts +67 -0
  240. package/dist/game/snapshotHistory.js +95 -0
  241. package/dist/game/social.d.ts +38 -1
  242. package/dist/game/social.js +71 -0
  243. package/dist/game/spawnPoints.d.ts +5 -0
  244. package/dist/game/spawnPoints.js +5 -0
  245. package/dist/game/systemRuntime.d.ts +50 -0
  246. package/dist/game/systemRuntime.js +157 -0
  247. package/dist/game/systemSchedule.d.ts +72 -0
  248. package/dist/game/systemSchedule.js +242 -0
  249. package/dist/game/toasts.d.ts +43 -0
  250. package/dist/game/toasts.js +44 -0
  251. package/dist/game/trade.d.ts +10 -0
  252. package/dist/game/trade.js +10 -0
  253. package/dist/game/tribe.d.ts +184 -0
  254. package/dist/game/tribe.js +432 -0
  255. package/dist/game/unlocks.d.ts +8 -0
  256. package/dist/game/unlocks.js +16 -0
  257. package/dist/game/vfxInstance.d.ts +138 -0
  258. package/dist/game/vfxInstance.js +96 -0
  259. package/dist/game/worldItem.d.ts +17 -4
  260. package/dist/game/worldItem.js +17 -4
  261. package/dist/gameplay.d.ts +93 -0
  262. package/dist/gameplay.js +93 -0
  263. package/dist/index.d.ts +5 -14
  264. package/dist/index.js +5 -14
  265. package/dist/input/actionBindings.d.ts +23 -6
  266. package/dist/input/actionBindings.js +23 -6
  267. package/dist/input/axisInput.d.ts +7 -2
  268. package/dist/input/axisInput.js +7 -2
  269. package/dist/input/controlGroups.d.ts +67 -0
  270. package/dist/input/controlGroups.js +41 -0
  271. package/dist/input/touchScheme.d.ts +82 -6
  272. package/dist/input/touchScheme.js +123 -10
  273. package/dist/interaction/lockpick.d.ts +61 -0
  274. package/dist/interaction/lockpick.js +168 -0
  275. package/dist/interaction/proximityPrompt.d.ts +2 -0
  276. package/dist/interaction/proximityPrompt.js +2 -0
  277. package/dist/interaction/qte.d.ts +5 -0
  278. package/dist/interaction/qte.js +5 -0
  279. package/dist/interaction/skillCheck.d.ts +5 -0
  280. package/dist/interaction/skillCheck.js +5 -0
  281. package/dist/inventory/encumbrance.d.ts +69 -0
  282. package/dist/inventory/encumbrance.js +68 -0
  283. package/dist/inventory/inventoryModel.d.ts +12 -0
  284. package/dist/inventory/inventoryModel.js +12 -0
  285. package/dist/inventory/shapedGrid.d.ts +16 -0
  286. package/dist/inventory/shapedGrid.js +16 -0
  287. package/dist/inventory/slotModel.d.ts +10 -0
  288. package/dist/inventory/slotModel.js +10 -0
  289. package/dist/item/durability.d.ts +5 -0
  290. package/dist/item/durability.js +6 -3
  291. package/dist/item/itemIdentity.d.ts +171 -0
  292. package/dist/item/itemIdentity.js +138 -0
  293. package/dist/item/itemInstanceRegistry.d.ts +32 -0
  294. package/dist/item/itemInstanceRegistry.js +34 -0
  295. package/dist/item/itemgen.d.ts +163 -0
  296. package/dist/item/itemgen.js +151 -0
  297. package/dist/item/modularItem.d.ts +5 -0
  298. package/dist/item/modularItem.js +5 -0
  299. package/dist/item/use.d.ts +5 -0
  300. package/dist/item/use.js +5 -0
  301. package/dist/item/useBehavior.d.ts +142 -0
  302. package/dist/item/useBehavior.js +105 -0
  303. package/dist/item/weapon.d.ts +5 -0
  304. package/dist/item/weapon.js +5 -0
  305. package/dist/math/scalar.d.ts +25 -0
  306. package/dist/math/scalar.js +47 -0
  307. package/dist/meta/changelog.d.ts +4 -1
  308. package/dist/meta/changelog.js +39 -2
  309. package/dist/movement/avoidance.d.ts +45 -0
  310. package/dist/movement/avoidance.js +123 -0
  311. package/dist/movement/cameraRig.d.ts +8 -0
  312. package/dist/movement/cameraRig.js +8 -0
  313. package/dist/movement/dash.d.ts +11 -0
  314. package/dist/movement/dash.js +11 -0
  315. package/dist/movement/formation.d.ts +135 -0
  316. package/dist/movement/formation.js +194 -0
  317. package/dist/movement/glideModel.d.ts +5 -0
  318. package/dist/movement/glideModel.js +5 -0
  319. package/dist/movement/grappleSwing.d.ts +5 -0
  320. package/dist/movement/grappleSwing.js +5 -0
  321. package/dist/movement/leaderTrail.d.ts +5 -0
  322. package/dist/movement/leaderTrail.js +5 -0
  323. package/dist/movement/movementModel.d.ts +50 -9
  324. package/dist/movement/movementModel.js +75 -29
  325. package/dist/movement/playerMovement.js +167 -12
  326. package/dist/movement/poseState.d.ts +13 -0
  327. package/dist/movement/poseState.js +16 -0
  328. package/dist/movement/steering.d.ts +8 -0
  329. package/dist/movement/steering.js +18 -0
  330. package/dist/multiplayer/combatSnapshot.d.ts +3 -0
  331. package/dist/multiplayer/combatSnapshot.js +16 -8
  332. package/dist/multiplayer/lagCompensation.d.ts +5 -0
  333. package/dist/multiplayer/lagCompensation.js +5 -0
  334. package/dist/multiplayer/presenceModel.d.ts +11 -1
  335. package/dist/multiplayer/presenceModel.js +17 -1
  336. package/dist/multiplayer/simultaneousCommit.d.ts +3 -0
  337. package/dist/multiplayer/simultaneousCommit.js +3 -0
  338. package/dist/multiplayer.d.ts +11 -0
  339. package/dist/multiplayer.js +11 -0
  340. package/dist/nav/pathFollow.d.ts +57 -0
  341. package/dist/nav/pathFollow.js +109 -0
  342. package/dist/orders/orderKinds.d.ts +156 -0
  343. package/dist/orders/orderKinds.js +197 -0
  344. package/dist/orders/orderQueue.d.ts +208 -0
  345. package/dist/orders/orderQueue.js +211 -0
  346. package/dist/physics/drivableVehicle.d.ts +31 -0
  347. package/dist/physics/drivableVehicle.js +16 -0
  348. package/dist/physics/flightDynamics.d.ts +82 -0
  349. package/dist/physics/flightDynamics.js +165 -0
  350. package/dist/physics/gravityField.d.ts +25 -0
  351. package/dist/physics/gravityField.js +41 -0
  352. package/dist/physics/kinematicVehicle.d.ts +108 -1
  353. package/dist/physics/kinematicVehicle.js +212 -15
  354. package/dist/physics/physicsWorld.d.ts +50 -12
  355. package/dist/physics/physicsWorld.js +120 -122
  356. package/dist/physics/radialImpulse.d.ts +25 -0
  357. package/dist/physics/radialImpulse.js +27 -0
  358. package/dist/physics/vehicleObstacles.d.ts +44 -0
  359. package/dist/physics/vehicleObstacles.js +115 -0
  360. package/dist/procedural.d.ts +3 -0
  361. package/dist/procedural.js +3 -0
  362. package/dist/progression/statGraph.d.ts +116 -0
  363. package/dist/progression/statGraph.js +318 -0
  364. package/dist/puzzle/cellGrid.d.ts +9 -0
  365. package/dist/puzzle/cellGrid.js +9 -0
  366. package/dist/puzzle/fallingPiece.d.ts +9 -0
  367. package/dist/puzzle/fallingPiece.js +9 -0
  368. package/dist/puzzle/nonogram.d.ts +39 -0
  369. package/dist/puzzle/nonogram.js +136 -0
  370. package/dist/random/nameGen.d.ts +5 -0
  371. package/dist/random/nameGen.js +5 -0
  372. package/dist/random/pick.d.ts +8 -0
  373. package/dist/random/pick.js +31 -0
  374. package/dist/random/rng.d.ts +26 -1
  375. package/dist/random/rng.js +32 -9
  376. package/dist/random/seedLink.d.ts +4 -0
  377. package/dist/random/seedLink.js +4 -0
  378. package/dist/relation/keyedValues.d.ts +54 -0
  379. package/dist/relation/keyedValues.js +115 -0
  380. package/dist/relation/thresholds.d.ts +62 -0
  381. package/dist/relation/thresholds.js +62 -0
  382. package/dist/render/color.d.ts +12 -0
  383. package/dist/render/color.js +26 -0
  384. package/dist/render/lookPreset.d.ts +41 -0
  385. package/dist/render/lookPreset.js +29 -0
  386. package/dist/render/postProcessing.d.ts +20 -0
  387. package/dist/render/postProcessing.js +21 -1
  388. package/dist/rules/predicate.d.ts +53 -0
  389. package/dist/rules/predicate.js +64 -0
  390. package/dist/rules/ruleEffects.d.ts +38 -0
  391. package/dist/rules/ruleEffects.js +37 -0
  392. package/dist/rules/triggeredRules.d.ts +160 -0
  393. package/dist/rules/triggeredRules.js +241 -0
  394. package/dist/runtime/adapter.d.ts +55 -3
  395. package/dist/runtime/adapter.js +57 -1
  396. package/dist/runtime/cameraDirector.d.ts +1 -0
  397. package/dist/runtime/cameraDirector.js +1 -0
  398. package/dist/runtime/commandRunner.d.ts +1 -0
  399. package/dist/runtime/commandRunner.js +1 -0
  400. package/dist/runtime/context/combat.d.ts +51 -0
  401. package/dist/runtime/context/combat.js +130 -0
  402. package/dist/runtime/context/combatFx.d.ts +23 -0
  403. package/dist/runtime/context/combatFx.js +161 -0
  404. package/dist/runtime/context/deathLoot.d.ts +30 -0
  405. package/dist/runtime/context/deathLoot.js +39 -0
  406. package/dist/runtime/context/player.d.ts +48 -0
  407. package/dist/runtime/context/player.js +125 -0
  408. package/dist/runtime/context/registries.d.ts +13 -0
  409. package/dist/runtime/context/registries.js +84 -0
  410. package/dist/runtime/context/scene.d.ts +59 -0
  411. package/dist/runtime/context/scene.js +291 -0
  412. package/dist/runtime/context/snapshotCodecs.d.ts +12 -0
  413. package/dist/runtime/context/snapshotCodecs.js +26 -0
  414. package/dist/runtime/context/worldItems.d.ts +21 -0
  415. package/dist/runtime/context/worldItems.js +37 -0
  416. package/dist/runtime/descriptors/baseline.d.ts +48 -0
  417. package/dist/runtime/descriptors/baseline.js +157 -0
  418. package/dist/runtime/descriptors/features.d.ts +79 -0
  419. package/dist/runtime/descriptors/features.js +299 -0
  420. package/dist/runtime/gameContext.d.ts +2 -327
  421. package/dist/runtime/gameContext.js +273 -778
  422. package/dist/runtime/gameContextTypes.d.ts +467 -0
  423. package/dist/runtime/gameContextTypes.js +1 -0
  424. package/dist/runtime/gameRuntime.d.ts +1 -0
  425. package/dist/runtime/gameRuntime.js +1 -0
  426. package/dist/runtime/headlessRunner.d.ts +62 -0
  427. package/dist/runtime/headlessRunner.js +45 -0
  428. package/dist/runtime/hostPersistence.d.ts +12 -0
  429. package/dist/runtime/hostPersistence.js +12 -0
  430. package/dist/runtime/hostPolicy.d.ts +51 -0
  431. package/dist/runtime/hostPolicy.js +68 -0
  432. package/dist/runtime/hostedGameRunner.d.ts +11 -4
  433. package/dist/runtime/hostedGameRunner.js +27 -3
  434. package/dist/runtime/hostedWorldSession.d.ts +15 -5
  435. package/dist/runtime/hostedWorldSession.js +12 -4
  436. package/dist/runtime/inputSnapshot.d.ts +8 -3
  437. package/dist/runtime/inputSnapshot.js +6 -2
  438. package/dist/runtime/motionIntents.d.ts +11 -2
  439. package/dist/runtime/motionIntents.js +16 -2
  440. package/dist/runtime/perContext.d.ts +15 -0
  441. package/dist/runtime/perContext.js +21 -0
  442. package/dist/runtime/runtimeSave.d.ts +79 -0
  443. package/dist/runtime/runtimeSave.js +105 -0
  444. package/dist/runtime/save.d.ts +4 -0
  445. package/dist/runtime/save.js +4 -0
  446. package/dist/runtime/snapshot.d.ts +7 -0
  447. package/dist/runtime/snapshot.js +7 -0
  448. package/dist/runtime/visibility.d.ts +2 -1
  449. package/dist/runtime/visibility.js +2 -1
  450. package/dist/runtime/worldChannel.d.ts +7 -3
  451. package/dist/runtime/worldChannel.js +51 -6
  452. package/dist/runtime/worldMirror.d.ts +14 -2
  453. package/dist/runtime/worldMirror.js +15 -2
  454. package/dist/runtime/worldProjection.d.ts +47 -0
  455. package/dist/runtime/worldProjection.js +52 -0
  456. package/dist/runtime/worldReplication.d.ts +30 -7
  457. package/dist/runtime/worldReplication.js +41 -9
  458. package/dist/runtime/worldSnapshot.d.ts +42 -3
  459. package/dist/runtime/worldSnapshot.js +34 -7
  460. package/dist/scene/assetCatalog.d.ts +26 -0
  461. package/dist/scene/assetCatalog.js +4 -0
  462. package/dist/scene/assetDiagnostics.d.ts +69 -0
  463. package/dist/scene/assetDiagnostics.js +110 -0
  464. package/dist/scene/assetGenerator.d.ts +65 -0
  465. package/dist/scene/assetGenerator.js +64 -0
  466. package/dist/scene/assetSpace.d.ts +137 -0
  467. package/dist/scene/assetSpace.js +257 -0
  468. package/dist/scene/authoredTriggers.d.ts +219 -0
  469. package/dist/scene/authoredTriggers.js +454 -0
  470. package/dist/scene/behaviorRuntime.d.ts +75 -0
  471. package/dist/scene/behaviorRuntime.js +217 -0
  472. package/dist/scene/behaviors.d.ts +14 -2
  473. package/dist/scene/behaviors.js +7 -2
  474. package/dist/scene/bodyBind.d.ts +60 -0
  475. package/dist/scene/bodyBind.js +51 -0
  476. package/dist/scene/builtinSceneKinds.d.ts +5 -0
  477. package/dist/scene/builtinSceneKinds.js +67 -0
  478. package/dist/scene/colliders.d.ts +71 -1
  479. package/dist/scene/colliders.js +145 -1
  480. package/dist/scene/collisionMesh.d.ts +94 -0
  481. package/dist/scene/collisionMesh.js +699 -0
  482. package/dist/scene/companion.d.ts +147 -0
  483. package/dist/scene/companion.js +193 -0
  484. package/dist/scene/entityStats.d.ts +18 -11
  485. package/dist/scene/entityStats.js +21 -16
  486. package/dist/scene/entityStore.d.ts +12 -1
  487. package/dist/scene/entityStore.js +15 -0
  488. package/dist/scene/facing.d.ts +18 -0
  489. package/dist/scene/facing.js +26 -0
  490. package/dist/scene/modelSockets.d.ts +33 -0
  491. package/dist/scene/modelSockets.js +29 -0
  492. package/dist/scene/objectQuery.d.ts +2 -0
  493. package/dist/scene/objectQuery.js +2 -0
  494. package/dist/scene/objectStore.d.ts +4 -0
  495. package/dist/scene/objectStore.js +6 -0
  496. package/dist/scene/possession.d.ts +8 -0
  497. package/dist/scene/possession.js +14 -0
  498. package/dist/scene/roster.d.ts +3 -0
  499. package/dist/scene/roster.js +12 -0
  500. package/dist/scene/sceneKinds.d.ts +256 -0
  501. package/dist/scene/sceneKinds.js +218 -0
  502. package/dist/scene/sceneOwnership.d.ts +169 -0
  503. package/dist/scene/sceneOwnership.js +179 -0
  504. package/dist/scene/sceneRaycast.js +15 -0
  505. package/dist/scene/selectionBookmarks.d.ts +93 -0
  506. package/dist/scene/selectionBookmarks.js +122 -0
  507. package/dist/scene/vehicleSeat.d.ts +68 -0
  508. package/dist/scene/vehicleSeat.js +59 -0
  509. package/dist/sensor/concealment.d.ts +3 -0
  510. package/dist/sensor/concealment.js +3 -0
  511. package/dist/sensor/freezeMonitor.d.ts +1 -0
  512. package/dist/sensor/freezeMonitor.js +1 -0
  513. package/dist/sensor/frustumSensor.d.ts +7 -3
  514. package/dist/sensor/frustumSensor.js +7 -3
  515. package/dist/sensor/hiddenStateProbe.d.ts +5 -2
  516. package/dist/sensor/hiddenStateProbe.js +5 -2
  517. package/dist/sensor/recordingBuffer.d.ts +2 -1
  518. package/dist/sensor/recordingBuffer.js +2 -1
  519. package/dist/sensor/replayLoop.d.ts +6 -2
  520. package/dist/sensor/replayLoop.js +6 -2
  521. package/dist/sensor/revealQuery.d.ts +2 -1
  522. package/dist/sensor/revealQuery.js +2 -1
  523. package/dist/sensor/visionCone.d.ts +10 -3
  524. package/dist/sensor/visionCone.js +10 -3
  525. package/dist/session/contestedChannel.d.ts +1 -0
  526. package/dist/session/contestedChannel.js +1 -0
  527. package/dist/session/extraction.d.ts +1 -0
  528. package/dist/session/extraction.js +1 -0
  529. package/dist/session/roles.d.ts +6 -0
  530. package/dist/session/roles.js +6 -0
  531. package/dist/session/roundState.d.ts +8 -0
  532. package/dist/session/roundState.js +2 -0
  533. package/dist/settings/settingsModel.d.ts +1 -0
  534. package/dist/settings/settingsModel.js +1 -0
  535. package/dist/stats/accumulatorMeter.d.ts +6 -0
  536. package/dist/stats/accumulatorMeter.js +6 -0
  537. package/dist/stats/eventMeter.d.ts +5 -0
  538. package/dist/stats/eventMeter.js +5 -0
  539. package/dist/stats/rollCheck.d.ts +5 -0
  540. package/dist/stats/rollCheck.js +5 -0
  541. package/dist/stats/spawnLevelStats.d.ts +110 -0
  542. package/dist/stats/spawnLevelStats.js +140 -0
  543. package/dist/stats/statModifiers.d.ts +5 -0
  544. package/dist/stats/statModifiers.js +5 -0
  545. package/dist/stats/statPool.d.ts +70 -0
  546. package/dist/stats/statPool.js +59 -0
  547. package/dist/store/changeSignal.d.ts +3 -0
  548. package/dist/store/changeSignal.js +2 -0
  549. package/dist/store/defineKeyedStore.d.ts +38 -0
  550. package/dist/store/defineKeyedStore.js +42 -0
  551. package/dist/store/defineStore.d.ts +33 -0
  552. package/dist/store/defineStore.js +35 -0
  553. package/dist/store/observableKeyedStore.d.ts +7 -0
  554. package/dist/store/observableKeyedStore.js +35 -2
  555. package/dist/survival/decayMeter.d.ts +55 -0
  556. package/dist/survival/decayMeter.js +130 -57
  557. package/dist/survival/moodle.d.ts +2 -0
  558. package/dist/survival/regionHealth.d.ts +6 -0
  559. package/dist/survival/regionHealth.js +6 -3
  560. package/dist/tactics/fallingGrid.d.ts +4 -2
  561. package/dist/tactics/fallingGrid.js +4 -2
  562. package/dist/tactics/predictiveQuery.d.ts +3 -0
  563. package/dist/tactics/predictiveQuery.js +3 -0
  564. package/dist/tactics/snapshot.d.ts +2 -0
  565. package/dist/tactics/snapshot.js +2 -0
  566. package/dist/tactics/surface.d.ts +1 -0
  567. package/dist/tactics/surface.js +1 -0
  568. package/dist/tactics/tacticalGrid.d.ts +1 -0
  569. package/dist/tactics/tacticalGrid.js +1 -0
  570. package/dist/time/beatClock.d.ts +14 -4
  571. package/dist/time/beatClock.js +14 -4
  572. package/dist/time/calendarClock.d.ts +3 -0
  573. package/dist/time/calendarClock.js +3 -0
  574. package/dist/time/idleProgress.d.ts +4 -0
  575. package/dist/time/idleProgress.js +4 -0
  576. package/dist/time/simClock.d.ts +2 -0
  577. package/dist/time/simClock.js +20 -5
  578. package/dist/ui/actionModel.d.ts +110 -0
  579. package/dist/ui/actionModel.js +159 -0
  580. package/dist/ui/gameLayout.d.ts +30 -11
  581. package/dist/ui/gameLayout.js +30 -11
  582. package/dist/ui/hudDocument.d.ts +114 -0
  583. package/dist/ui/hudDocument.js +220 -0
  584. package/dist/ui/hudLayout.d.ts +38 -1
  585. package/dist/ui/hudLayout.js +220 -17
  586. package/dist/ui/selectionModel.d.ts +92 -0
  587. package/dist/ui/selectionModel.js +88 -0
  588. package/dist/ui/tooltipModel.d.ts +63 -0
  589. package/dist/ui/tooltipModel.js +82 -0
  590. package/dist/ui.d.ts +15 -0
  591. package/dist/ui.js +15 -0
  592. package/dist/visibility/bounds.d.ts +8 -1
  593. package/dist/visibility/bounds.js +8 -1
  594. package/dist/visibility/frustum.d.ts +12 -3
  595. package/dist/visibility/frustum.js +12 -3
  596. package/dist/work/jobQueue.d.ts +201 -0
  597. package/dist/work/jobQueue.js +253 -0
  598. package/dist/work/unitTraining.d.ts +58 -0
  599. package/dist/work/unitTraining.js +52 -0
  600. package/dist/world/authoredEntities.d.ts +29 -0
  601. package/dist/world/authoredEntities.js +29 -0
  602. package/dist/world/authoredObjects.d.ts +72 -0
  603. package/dist/world/authoredObjects.js +81 -0
  604. package/dist/world/authoredSpawn.d.ts +39 -0
  605. package/dist/world/authoredSpawn.js +37 -0
  606. package/dist/world/buildSockets.d.ts +152 -0
  607. package/dist/world/buildSockets.js +188 -0
  608. package/dist/world/buildingGenerator.d.ts +18 -0
  609. package/dist/world/buildingGenerator.js +62 -0
  610. package/dist/world/buildings.d.ts +5 -0
  611. package/dist/world/buildings.js +5 -0
  612. package/dist/world/catenary.d.ts +22 -0
  613. package/dist/world/catenary.js +69 -0
  614. package/dist/world/cityBlocks.d.ts +152 -0
  615. package/dist/world/cityBlocks.js +670 -0
  616. package/dist/world/cityContent.d.ts +77 -0
  617. package/dist/world/cityContent.js +261 -0
  618. package/dist/world/cityGeometry.d.ts +114 -0
  619. package/dist/world/cityGeometry.js +573 -0
  620. package/dist/world/cityKind.d.ts +314 -0
  621. package/dist/world/cityKind.js +1578 -0
  622. package/dist/world/features.d.ts +133 -10
  623. package/dist/world/features.js +66 -6
  624. package/dist/world/footprintGrid.d.ts +59 -0
  625. package/dist/world/footprintGrid.js +141 -0
  626. package/dist/world/geometry.d.ts +64 -0
  627. package/dist/world/geometry.js +94 -0
  628. package/dist/world/grassKind.d.ts +51 -0
  629. package/dist/world/grassKind.js +101 -0
  630. package/dist/world/markers.d.ts +50 -4
  631. package/dist/world/markers.js +49 -0
  632. package/dist/world/massing.js +1 -1
  633. package/dist/world/minimapBake.d.ts +78 -0
  634. package/dist/world/minimapBake.js +208 -0
  635. package/dist/world/minimapTrack.d.ts +17 -0
  636. package/dist/world/minimapTrack.js +22 -0
  637. package/dist/world/pathInstances.d.ts +27 -0
  638. package/dist/world/pathInstances.js +27 -0
  639. package/dist/world/pathNetwork.d.ts +159 -0
  640. package/dist/world/pathNetwork.js +684 -0
  641. package/dist/world/pathTerrain.d.ts +80 -0
  642. package/dist/world/pathTerrain.js +142 -0
  643. package/dist/world/place.d.ts +166 -0
  644. package/dist/world/place.js +96 -0
  645. package/dist/world/placeAsset.d.ts +81 -0
  646. package/dist/world/placeAsset.js +79 -0
  647. package/dist/world/placement.d.ts +4 -0
  648. package/dist/world/placement.js +4 -0
  649. package/dist/world/placementController.d.ts +6 -0
  650. package/dist/world/placementController.js +6 -0
  651. package/dist/world/poleLineKind.d.ts +40 -0
  652. package/dist/world/poleLineKind.js +97 -0
  653. package/dist/world/polyline.d.ts +34 -0
  654. package/dist/world/polyline.js +88 -0
  655. package/dist/world/resourceNode.d.ts +109 -0
  656. package/dist/world/resourceNode.js +140 -0
  657. package/dist/world/roads.d.ts +8 -0
  658. package/dist/world/roads.js +38 -0
  659. package/dist/world/scatter.js +2 -20
  660. package/dist/world/scatterRegion.d.ts +164 -0
  661. package/dist/world/scatterRegion.js +409 -0
  662. package/dist/world/sceneShapes.d.ts +43 -0
  663. package/dist/world/sceneShapes.js +1 -0
  664. package/dist/world/segment.d.ts +27 -0
  665. package/dist/world/segment.js +43 -0
  666. package/dist/world/soilKind.d.ts +48 -0
  667. package/dist/world/soilKind.js +92 -0
  668. package/dist/world/spatialSample.d.ts +241 -0
  669. package/dist/world/spatialSample.js +465 -0
  670. package/dist/world/streets.d.ts +29 -0
  671. package/dist/world/streets.js +55 -0
  672. package/dist/world/terraform.d.ts +213 -1
  673. package/dist/world/terraform.js +627 -22
  674. package/dist/world/terrain.d.ts +164 -20
  675. package/dist/world/terrain.js +325 -41
  676. package/dist/world/terrainGuides.d.ts +182 -0
  677. package/dist/world/terrainGuides.js +343 -0
  678. package/dist/world/vec2.d.ts +81 -0
  679. package/dist/world/vec2.js +128 -0
  680. package/dist/world/vec3.d.ts +49 -0
  681. package/dist/world/vec3.js +76 -0
  682. package/dist/world/vegetation.d.ts +71 -0
  683. package/dist/world/vegetation.js +151 -0
  684. package/dist/world/visibilityField.d.ts +154 -0
  685. package/dist/world/visibilityField.js +271 -0
  686. package/dist/world/volumetricClouds.d.ts +52 -0
  687. package/dist/world/volumetricClouds.js +43 -0
  688. package/dist/world/walls.d.ts +9 -0
  689. package/dist/world/walls.js +9 -0
  690. package/dist/world/waterKind.d.ts +55 -0
  691. package/dist/world/waterKind.js +99 -0
  692. package/dist/world.d.ts +141 -0
  693. package/dist/world.js +141 -0
  694. package/package.json +32 -8
  695. package/skills/game-design/SKILL.md +28 -0
  696. package/skills/game-design/agents/openai.yaml +4 -0
  697. package/skills/game-design/references/application-playbook.md +170 -0
  698. package/skills/game-design/references/field-guide.md +288 -0
  699. package/skills/jgengine/SKILL.md +54 -0
  700. package/skills/jgengine/api.md +527 -0
  701. package/skills/jgengine/capabilities.md +131 -0
  702. package/skills/jgengine/recipes/minimal-game.md +88 -0
  703. package/skills/jgengine-combat/SKILL.md +38 -0
  704. package/skills/jgengine-combat/api.md +585 -0
  705. package/skills/jgengine-combat/capabilities.md +213 -0
  706. package/skills/jgengine-combat/recipes/portable-stat-pools.md +122 -0
  707. package/skills/jgengine-combat/reference.md +108 -0
  708. package/skills/jgengine-gameplay/SKILL.md +39 -0
  709. package/skills/jgengine-gameplay/api.md +1920 -0
  710. package/skills/jgengine-gameplay/capabilities.md +454 -0
  711. package/skills/jgengine-gameplay/reference-systems.md +56 -0
  712. package/skills/jgengine-world/SKILL.md +51 -0
  713. package/skills/jgengine-world/api.md +3056 -0
  714. package/skills/jgengine-world/capabilities.md +476 -0
  715. package/skills/jgengine-world/recipes/commanding-entities.md +128 -0
  716. package/skills/jgengine-world/reference.md +261 -0
  717. package/dist/cartridge/runtime.d.ts +0 -15
  718. package/dist/cartridge/runtime.js +0 -556
  719. package/dist/cartridge/spec.d.ts +0 -188
  720. package/dist/cartridge/spec.js +0 -19
  721. package/dist/cartridge/validate.d.ts +0 -2
  722. package/dist/cartridge/validate.js +0 -78
  723. package/dist/store/engineStore.d.ts +0 -22
  724. package/dist/store/engineStore.js +0 -50
  725. package/dist/store/features.d.ts +0 -10
  726. package/dist/store/features.js +0 -23
  727. package/llms.txt +0 -5389
@@ -6,12 +6,15 @@ export const MAX_SCAN_TARGETS = 512;
6
6
  const COLOR_PATTERN = /^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/;
7
7
  const UNSAFE_KEYS = new Set(["__proto__", "constructor", "prototype"]);
8
8
  const DEFAULT_AXIS = ["x", "y", "z", "w"];
9
+ /** @internal */
9
10
  export function isFiniteNumber(value) {
10
11
  return typeof value === "number" && Number.isFinite(value);
11
12
  }
13
+ /** @internal */
12
14
  export function escapePathSegment(segment) {
13
15
  return segment.replace(/\\/g, "\\\\").replace(/\./g, "\\.");
14
16
  }
17
+ /** @internal */
15
18
  export function unescapePathSegment(segment) {
16
19
  let out = "";
17
20
  for (let i = 0; i < segment.length; i += 1) {
@@ -25,10 +28,12 @@ export function unescapePathSegment(segment) {
25
28
  }
26
29
  return out;
27
30
  }
31
+ /** @internal */
28
32
  export function joinTunablePath(parent, segment) {
29
33
  const escaped = escapePathSegment(segment);
30
34
  return parent === "" ? escaped : `${parent}.${escaped}`;
31
35
  }
36
+ /** @internal */
32
37
  export function splitTunablePath(path) {
33
38
  const parts = [];
34
39
  let current = "";
@@ -49,6 +54,7 @@ export function splitTunablePath(path) {
49
54
  parts.push(unescapePathSegment(current));
50
55
  return parts;
51
56
  }
57
+ /** @internal */
52
58
  export function parseColor(input) {
53
59
  if (typeof input !== "string" || !COLOR_PATTERN.test(input))
54
60
  return null;
@@ -81,6 +87,7 @@ export function parseColor(input) {
81
87
  const hex = `${rgb}${a.toLowerCase()}`;
82
88
  return { hex, rgb, alpha, hasAlpha: true };
83
89
  }
90
+ /** @internal */
84
91
  export function formatColor(rgb, alpha, withAlpha) {
85
92
  const parsed = parseColor(rgb);
86
93
  const rgbHex = parsed?.rgb ?? (/^#[0-9a-fA-F]{6}$/.test(rgb) ? rgb.toLowerCase() : null);
@@ -94,6 +101,7 @@ export function formatColor(rgb, alpha, withAlpha) {
94
101
  .padStart(2, "0");
95
102
  return `${rgbHex}${a}`;
96
103
  }
104
+ /** @internal */
97
105
  export function normalizeColorValue(input, forceAlpha) {
98
106
  const parsed = parseColor(input);
99
107
  if (parsed === null)
@@ -103,9 +111,11 @@ export function normalizeColorValue(input, forceAlpha) {
103
111
  }
104
112
  return parsed.rgb;
105
113
  }
114
+ /** @internal */
106
115
  export function isColorString(value) {
107
116
  return typeof value === "string" && COLOR_PATTERN.test(value);
108
117
  }
118
+ /** @internal */
109
119
  export function vecLength(kind) {
110
120
  if (kind === "vec2")
111
121
  return 2;
@@ -113,11 +123,13 @@ export function vecLength(kind) {
113
123
  return 3;
114
124
  return 4;
115
125
  }
126
+ /** @internal */
116
127
  export function isNumericTuple(value, length) {
117
128
  if (!Array.isArray(value) || value.length !== length)
118
129
  return false;
119
130
  return value.every(isFiniteNumber);
120
131
  }
132
+ /** @internal */
121
133
  export function isIntervalShape(value) {
122
134
  if (value === null || typeof value !== "object" || Array.isArray(value))
123
135
  return false;
@@ -127,6 +139,7 @@ export function isIntervalShape(value) {
127
139
  return false;
128
140
  return isFiniteNumber(record.min) && isFiniteNumber(record.max);
129
141
  }
142
+ /** @internal */
130
143
  export function expandAxisMeta(length, labels, min, max, step, sample) {
131
144
  const resolvedLabels = Array.from({ length }, (_, i) => labels?.[i] ?? DEFAULT_AXIS[i] ?? `a${i}`);
132
145
  const resolvedMin = Array.from({ length }, (_, i) => {
@@ -154,15 +167,18 @@ export function expandAxisMeta(length, labels, min, max, step, sample) {
154
167
  });
155
168
  return { labels: resolvedLabels, min: resolvedMin, max: resolvedMax, step: resolvedStep };
156
169
  }
170
+ /** @internal */
157
171
  export function clampAxisValue(value, min, max) {
158
172
  return Math.min(max, Math.max(min, value));
159
173
  }
174
+ /** @internal */
160
175
  export function parseVec(kind, raw, bounds) {
161
176
  const length = vecLength(kind);
162
177
  if (!isNumericTuple(raw, length))
163
178
  return null;
164
179
  return raw.map((value, i) => clampAxisValue(value, bounds.min[i], bounds.max[i]));
165
180
  }
181
+ /** @internal */
166
182
  export function parseInterval(raw, options) {
167
183
  if (!isIntervalShape(raw))
168
184
  return null;
@@ -200,6 +216,7 @@ export function parseInterval(raw, options) {
200
216
  }
201
217
  return { min: lo, max: hi };
202
218
  }
219
+ /** @internal */
203
220
  export function convertAngle(value, from, to) {
204
221
  if (from === to)
205
222
  return value;
@@ -207,6 +224,7 @@ export function convertAngle(value, from, to) {
207
224
  return (value * Math.PI) / 180;
208
225
  return (value * 180) / Math.PI;
209
226
  }
227
+ /** @internal */
210
228
  export function normalizeAngle(value, unit, options) {
211
229
  let next = value;
212
230
  if (options.wrap === true) {
@@ -225,6 +243,7 @@ export function normalizeAngle(value, unit, options) {
225
243
  }
226
244
  return next;
227
245
  }
246
+ /** @internal */
228
247
  export function resolveChoices(options, choices) {
229
248
  if (choices !== undefined)
230
249
  return choices;
@@ -232,22 +251,26 @@ export function resolveChoices(options, choices) {
232
251
  return options.map((value) => ({ value }));
233
252
  return undefined;
234
253
  }
254
+ /** @internal */
235
255
  export function choiceValues(choices) {
236
256
  if (choices === undefined)
237
257
  return undefined;
238
258
  return choices.map((choice) => choice.value);
239
259
  }
260
+ /** @internal */
240
261
  export function findChoice(choices, raw) {
241
262
  if (choices === undefined)
242
263
  return undefined;
243
264
  return choices.find((choice) => Object.is(choice.value, raw));
244
265
  }
266
+ /** @internal */
245
267
  export function parseEnumValue(raw, choices) {
246
268
  if (choices === undefined)
247
269
  return null;
248
270
  const match = findChoice(choices, raw);
249
271
  return match === undefined ? null : match.value;
250
272
  }
273
+ /** @internal */
251
274
  export function coerceSelectWrite(raw, choices, options) {
252
275
  if (choices !== undefined) {
253
276
  const byValue = findChoice(choices, raw);
@@ -275,6 +298,7 @@ export function coerceSelectWrite(raw, choices, options) {
275
298
  }
276
299
  return raw;
277
300
  }
301
+ /** @internal */
278
302
  export function inferKind(initial, options) {
279
303
  if (options?.kind !== undefined)
280
304
  return options.kind;
@@ -289,6 +313,7 @@ export function inferKind(initial, options) {
289
313
  return "color";
290
314
  return "text";
291
315
  }
316
+ /** @internal */
292
317
  export function discoverableKind(value, meta) {
293
318
  if (meta?.kind !== undefined) {
294
319
  if (meta.kind === "vec2" || meta.kind === "vec3" || meta.kind === "vec4") {
@@ -320,6 +345,7 @@ export function discoverableKind(value, meta) {
320
345
  return "color";
321
346
  return null;
322
347
  }
348
+ /** @internal */
323
349
  export function isScannableContainer(value) {
324
350
  if (value === null || typeof value !== "object")
325
351
  return false;
@@ -328,6 +354,7 @@ export function isScannableContainer(value) {
328
354
  const proto = Object.getPrototypeOf(value);
329
355
  return proto === Object.prototype || proto === null;
330
356
  }
357
+ /** @internal */
331
358
  export function ownWritableDataKeys(target) {
332
359
  return Object.keys(target).filter((key) => {
333
360
  if (UNSAFE_KEYS.has(key))
@@ -342,12 +369,14 @@ export function ownWritableDataKeys(target) {
342
369
  return true;
343
370
  });
344
371
  }
372
+ /** @internal */
345
373
  export function sliderBounds(initial, options) {
346
374
  const min = options?.min ?? (initial < 0 ? initial * 2 : 0);
347
375
  const max = options?.max ?? (initial > 0 ? initial * 2 : initial < 0 ? 0 : 1);
348
376
  const step = options?.step ?? (max - min) / 100;
349
377
  return { min, max, step };
350
378
  }
379
+ /** @internal */
351
380
  export function validateControlValue(kind, raw, context) {
352
381
  switch (kind) {
353
382
  case "slider": {
@@ -420,6 +449,7 @@ export function validateControlValue(kind, raw, context) {
420
449
  return { ok: false, reason: "unknown kind" };
421
450
  }
422
451
  }
452
+ /** @internal */
423
453
  export function parseOverridesPayload(raw) {
424
454
  if (raw === null || typeof raw !== "object" || Array.isArray(raw)) {
425
455
  return { overrides: null, diagnostics: ["overrides payload is not an object"] };
@@ -467,6 +497,7 @@ export function parseOverridesPayload(raw) {
467
497
  diagnostics: version === 0 ? ["migrated unversioned overrides to v1"] : [],
468
498
  };
469
499
  }
500
+ /** @internal */
470
501
  export function cloneValue(value) {
471
502
  if (Array.isArray(value))
472
503
  return value.slice();
@@ -0,0 +1,212 @@
1
+ import type { ChangeSignal } from "../store/changeSignal.js";
2
+ import type { AngleUnit, DevtoolsControlKind, DevtoolsOverrides, DiscoverySkip, OverrideApplyDiagnostic, ScanMeta, TunableChoice, TunableOptions } from "./tunableSchema.js";
3
+ /** Registered tunable control with its resolved schema metadata and read/write/reset accessors. */
4
+ export interface DevtoolsControl {
5
+ readonly name: string;
6
+ readonly kind: DevtoolsControlKind;
7
+ readonly label: string;
8
+ readonly group: string;
9
+ readonly initial: unknown;
10
+ readonly min?: number;
11
+ readonly max?: number;
12
+ readonly step?: number;
13
+ readonly options?: readonly unknown[];
14
+ readonly choices?: readonly TunableChoice[];
15
+ readonly unit?: AngleUnit;
16
+ readonly displayUnit?: AngleUnit;
17
+ readonly wrap?: boolean;
18
+ readonly integer?: boolean;
19
+ readonly axisLabels?: readonly string[];
20
+ readonly axisMin?: readonly number[];
21
+ readonly axisMax?: readonly number[];
22
+ readonly axisStep?: readonly number[];
23
+ readonly hasAlpha?: boolean;
24
+ readonly schemaVersion: number;
25
+ read(): unknown;
26
+ write(value: unknown): boolean;
27
+ reset(): void;
28
+ }
29
+ /** Typed handle to a registered control, exposing its live value and subscribe/set/reset operations. */
30
+ export interface Tunable<T> {
31
+ readonly name: string;
32
+ readonly kind: DevtoolsControlKind;
33
+ readonly initial: T;
34
+ readonly value: T;
35
+ set(value: T): boolean;
36
+ reset(): void;
37
+ subscribe(listener: (value: T) => void): () => void;
38
+ }
39
+ /** Outcome of applying a devtools overrides payload: counts of applied and skipped entries plus diagnostics. */
40
+ export interface OverrideApplyResult {
41
+ applied: number;
42
+ skipped: readonly OverrideApplyDiagnostic[];
43
+ diagnostics: readonly string[];
44
+ }
45
+ /** Aggregated frame-timing statistics over the recent sampling window, including per-phase breakdown. */
46
+ export interface FrameStats {
47
+ fps: number;
48
+ avgFrameMs: number;
49
+ p95FrameMs: number;
50
+ maxFrameMs: number;
51
+ avgSimMs: number;
52
+ maxSimMs: number;
53
+ avgOutsideMs: number;
54
+ maxOutsideMs: number;
55
+ longFrames: number;
56
+ samples: number;
57
+ recentFrameMs: readonly number[];
58
+ phases: readonly PhaseStats[];
59
+ }
60
+ /** Timing summary for a single named profiling phase across the sampling window. */
61
+ export interface PhaseStats {
62
+ name: string;
63
+ avgMs: number;
64
+ maxMs: number;
65
+ lastMs: number;
66
+ samples: number;
67
+ pctOfSim: number;
68
+ }
69
+ /** Recorded spike event for a frame that exceeded the long-frame threshold, with culprit attribution. */
70
+ export interface LongFrameEvent {
71
+ at: number;
72
+ frameMs: number;
73
+ simMs: number;
74
+ outsideMs: number;
75
+ phases: readonly {
76
+ name: string;
77
+ ms: number;
78
+ pct: number;
79
+ }[];
80
+ topPhase: string | null;
81
+ culprit: string;
82
+ reason: string;
83
+ probes: Record<string, unknown>;
84
+ render: RenderSample | null;
85
+ }
86
+ /** Snapshot of renderer resource counts (draw calls, triangles, geometries, textures) for a frame. */
87
+ export interface RenderSample {
88
+ drawCalls: number;
89
+ triangles: number;
90
+ geometries: number;
91
+ textures: number;
92
+ }
93
+ /** Aggregated latency statistics (last/avg/min/max) over recorded latency samples. */
94
+ export interface LatencyStats {
95
+ lastMs: number;
96
+ avgMs: number;
97
+ minMs: number;
98
+ maxMs: number;
99
+ samples: number;
100
+ }
101
+ /** Severity level for a captured devtools log entry. */
102
+ export type DevtoolsLogLevel = "log" | "info" | "warn" | "error";
103
+ /** A single captured log line with timestamp, level, and formatted message. */
104
+ export interface DevtoolsLogEntry {
105
+ at: number;
106
+ level: DevtoolsLogLevel;
107
+ message: string;
108
+ }
109
+ /** A control auto-discovered by scanning an object/table, with its binding metadata and current reader. */
110
+ export interface DiscoveredEntry {
111
+ readonly id: string;
112
+ readonly table: string;
113
+ readonly key: string;
114
+ readonly kind: DevtoolsControlKind;
115
+ readonly initial: unknown;
116
+ readonly enabled: boolean;
117
+ read(): unknown;
118
+ }
119
+ /** Get/set accessor pair plus initial value used to bind a discovered field to a control. */
120
+ export interface TunableAccessor {
121
+ initial: unknown;
122
+ get(): unknown;
123
+ set(value: unknown): void;
124
+ }
125
+ /** Serializable point-in-time snapshot of devtools state: frame, render, latency, logs, controls, and discovered fields. */
126
+ export interface DevtoolsSnapshot {
127
+ at: number;
128
+ frame: FrameStats | null;
129
+ render: RenderSample | null;
130
+ latency: LatencyStats | null;
131
+ longFrames: readonly LongFrameEvent[];
132
+ logs: readonly DevtoolsLogEntry[];
133
+ probes: Record<string, unknown>;
134
+ controls: readonly {
135
+ name: string;
136
+ kind: DevtoolsControlKind;
137
+ value: unknown;
138
+ initial: unknown;
139
+ }[];
140
+ discovered: readonly {
141
+ id: string;
142
+ kind: DevtoolsControlKind;
143
+ value: unknown;
144
+ enabled: boolean;
145
+ }[];
146
+ skipped: readonly DiscoverySkip[];
147
+ }
148
+ /** Per-frame timing input recorded by callers: total frame time, sim time, and optional named phase durations. */
149
+ export interface FrameRecordSample {
150
+ frameMs: number;
151
+ simMs: number;
152
+ phases?: Readonly<Record<string, number>>;
153
+ }
154
+ /** Top-level devtools facade aggregating frame, profile, render, logs, latency, controls, discover, overrides, and probes. */
155
+ export interface Devtools {
156
+ frame: {
157
+ record(sample: FrameRecordSample): void;
158
+ stats(): FrameStats | null;
159
+ longFrames(): readonly LongFrameEvent[];
160
+ clearLongFrames(): void;
161
+ /** Drop all frame/phase/long-frame history so the next stats() window starts clean — use after load/shader warmup before measuring. */
162
+ reset(): void;
163
+ };
164
+ profile: {
165
+ begin(name: string): () => void;
166
+ measure<T>(name: string, fn: () => T): T;
167
+ add(name: string, ms: number): void;
168
+ current(): Record<string, number>;
169
+ reset(): void;
170
+ };
171
+ render: {
172
+ record(sample: RenderSample): void;
173
+ latest(): RenderSample | null;
174
+ };
175
+ logs: {
176
+ push(level: DevtoolsLogLevel, message: string): void;
177
+ captureConsole(): void;
178
+ list(): readonly DevtoolsLogEntry[];
179
+ clear(): void;
180
+ };
181
+ latency: {
182
+ record(ms: number): void;
183
+ stats(): LatencyStats | null;
184
+ };
185
+ controls: {
186
+ register<T>(name: string, initial: T, options?: TunableOptions<T>): Tunable<T>;
187
+ list(): readonly DevtoolsControl[];
188
+ get(name: string): DevtoolsControl | null;
189
+ remove(name: string): void;
190
+ resetAll(): void;
191
+ };
192
+ discover: {
193
+ bind(table: string, key: string, accessor: TunableAccessor, options?: TunableOptions): void;
194
+ scanTable(table: string, candidate: unknown, meta?: ScanMeta): number;
195
+ scanModule(exports: Record<string, unknown>, meta?: ScanMeta): number;
196
+ list(): readonly DiscoveredEntry[];
197
+ skipped(): readonly DiscoverySkip[];
198
+ enable(id: string): void;
199
+ disable(id: string): void;
200
+ clear(): void;
201
+ };
202
+ overrides: {
203
+ export(): DevtoolsOverrides;
204
+ apply(overrides: DevtoolsOverrides | unknown): OverrideApplyResult;
205
+ };
206
+ probes: {
207
+ register(name: string, read: () => unknown): () => void;
208
+ read(): Record<string, unknown>;
209
+ };
210
+ signal: ChangeSignal;
211
+ snapshot(): DevtoolsSnapshot;
212
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,122 @@
1
+ import type { CollectionBoxSnapshot } from "./listingBook.js";
2
+ /** One live timed auction in an {@link AuctionBook}: an item stack under open bidding until it closes. */
3
+ export interface Auction {
4
+ readonly id: string;
5
+ readonly sellerId: string;
6
+ readonly itemId: string;
7
+ readonly count: number;
8
+ readonly currency: string;
9
+ readonly startPrice: number;
10
+ readonly minIncrement: number;
11
+ readonly buyoutPrice: number | null;
12
+ readonly listedAt: number;
13
+ readonly endsAt: number;
14
+ readonly highBid: HighBid | null;
15
+ }
16
+ /** The current leading bid on an {@link Auction}. */
17
+ export interface HighBid {
18
+ readonly bidderId: string;
19
+ readonly amount: number;
20
+ readonly at: number;
21
+ }
22
+ /**
23
+ * Tunables for {@link createAuctionBook} — per-seller auction cap, run length, house cut, and the
24
+ * anti-snipe window: a bid landing within `antiSnipeWindowSeconds` of the close pushes the close
25
+ * out so it ends at least `antiSnipeExtensionSeconds` after that bid.
26
+ */
27
+ export interface AuctionBookConfig {
28
+ maxAuctionsPerSeller: number;
29
+ durationSeconds: number;
30
+ cutRate: number;
31
+ antiSnipeWindowSeconds?: number;
32
+ antiSnipeExtensionSeconds?: number;
33
+ }
34
+ /** Input to {@link AuctionBook.post} — the goods, opening terms, and current game-time. */
35
+ export interface PostAuctionInput {
36
+ id?: string;
37
+ sellerId: string;
38
+ itemId: string;
39
+ count: number;
40
+ currency: string;
41
+ startPrice: number;
42
+ minIncrement: number;
43
+ buyoutPrice?: number;
44
+ now: number;
45
+ }
46
+ /** Why {@link AuctionBook.post} refused an auction. */
47
+ export type PostAuctionReason = "invalid-count" | "invalid-price" | "invalid-increment" | "invalid-buyout" | "auction-cap-reached";
48
+ /** Result of {@link AuctionBook.post}. */
49
+ export type PostAuctionResult = {
50
+ status: "ok";
51
+ auction: Auction;
52
+ } | {
53
+ status: "rejected";
54
+ reason: PostAuctionReason;
55
+ };
56
+ /** Why {@link AuctionBook.bid} refused a bid. */
57
+ export type BidReason = "not-found" | "ended" | "own-auction" | "already-leading" | "bid-too-low" | "invalid-amount" | "no-buyout";
58
+ /**
59
+ * Result of {@link AuctionBook.bid}. On `ok` the caller must escrow `escrowed` from the bidder's
60
+ * wallet; any previously escrowed leading bid has already been refunded to that bidder's
61
+ * collection box. `won` is true when the bid met the buyout price and settled the auction
62
+ * immediately.
63
+ */
64
+ export type BidResult = {
65
+ status: "ok";
66
+ auction: Auction;
67
+ escrowed: number;
68
+ won: boolean;
69
+ } | {
70
+ status: "rejected";
71
+ reason: BidReason;
72
+ };
73
+ /** Result of {@link AuctionBook.cancel}: a bid-on auction can no longer be withdrawn. */
74
+ export type CancelAuctionResult = {
75
+ status: "ok";
76
+ auction: Auction;
77
+ } | {
78
+ status: "rejected";
79
+ reason: "not-found" | "not-owner" | "has-bids";
80
+ };
81
+ /** How one closed auction resolved during {@link AuctionBook.settleExpired}. */
82
+ export type AuctionSettlement = {
83
+ status: "sold";
84
+ auction: Auction;
85
+ winnerId: string;
86
+ price: number;
87
+ houseCut: number;
88
+ sellerProceeds: number;
89
+ } | {
90
+ status: "returned";
91
+ auction: Auction;
92
+ };
93
+ /**
94
+ * A timed-bid auction marketplace plus the per-player collection boxes behind it. See
95
+ * {@link createAuctionBook}.
96
+ */
97
+ export interface AuctionBook {
98
+ post(input: PostAuctionInput): PostAuctionResult;
99
+ bid(auctionId: string, bidderId: string, amount: number, now: number): BidResult;
100
+ buyout(auctionId: string, buyerId: string, now: number): BidResult;
101
+ cancel(auctionId: string, sellerId: string): CancelAuctionResult;
102
+ settleExpired(now: number): readonly AuctionSettlement[];
103
+ get(auctionId: string): Auction | null;
104
+ active(): readonly Auction[];
105
+ auctionsOf(sellerId: string): readonly Auction[];
106
+ countOf(sellerId: string): number;
107
+ collectionOf(playerId: string): CollectionBoxSnapshot;
108
+ claimCurrency(playerId: string): Readonly<Record<string, number>>;
109
+ claimItem(playerId: string, itemId: string, count: number): boolean;
110
+ }
111
+ /**
112
+ * Timed-bid auctions in the WoW/BDO auction-house mold: post an item with a start price, minimum
113
+ * increment, and optional buyout; bids escrow currency, outbid players are refunded into their
114
+ * collection box, bids near the close extend it (anti-snipe), and settlement pays the seller minus
115
+ * the house cut while the item lands in the winner's collection box. Unsold auctions return the
116
+ * goods to the seller's box. Wallet and inventory movement is the caller's job (mirrors
117
+ * `economy/listingBook`) — this primitive owns the auction lifecycle and the escrowed
118
+ * collection-box bookkeeping behind it.
119
+ *
120
+ * @capability auction-book timed bid auctions with escrowed bids, buyout, anti-snipe close extension, and collection-box settlement
121
+ */
122
+ export declare function createAuctionBook(config: AuctionBookConfig): AuctionBook;