@sharpee/world-model 3.1.0 → 3.5.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 (629) hide show
  1. package/annotations/index.d.ts +1 -1
  2. package/annotations/index.d.ts.map +1 -1
  3. package/annotations/index.js +1 -1
  4. package/annotations/index.js.map +1 -1
  5. package/behaviors/attack.d.ts +21 -4
  6. package/behaviors/attack.d.ts.map +1 -1
  7. package/behaviors/attack.js +37 -33
  8. package/behaviors/attack.js.map +1 -1
  9. package/behaviors/behavior.d.ts +3 -3
  10. package/behaviors/behavior.d.ts.map +1 -1
  11. package/behaviors/index.d.ts +21 -21
  12. package/behaviors/index.d.ts.map +1 -1
  13. package/behaviors/index.js +33 -33
  14. package/behaviors/index.js.map +1 -1
  15. package/capabilities/action-interceptor.d.ts +3 -3
  16. package/capabilities/action-interceptor.d.ts.map +1 -1
  17. package/capabilities/capability-behavior.d.ts +3 -3
  18. package/capabilities/capability-behavior.d.ts.map +1 -1
  19. package/capabilities/capability-binding.d.ts +3 -3
  20. package/capabilities/capability-binding.d.ts.map +1 -1
  21. package/capabilities/capability-helpers.d.ts +2 -2
  22. package/capabilities/capability-helpers.d.ts.map +1 -1
  23. package/capabilities/entity-builder.d.ts +2 -2
  24. package/capabilities/entity-builder.d.ts.map +1 -1
  25. package/capabilities/index.d.ts +9 -9
  26. package/capabilities/index.d.ts.map +1 -1
  27. package/capabilities/index.js +26 -26
  28. package/capabilities/index.js.map +1 -1
  29. package/capabilities/interceptor-binding.d.ts +2 -2
  30. package/capabilities/interceptor-binding.d.ts.map +1 -1
  31. package/capabilities/interceptor-helpers.d.ts +2 -2
  32. package/capabilities/interceptor-helpers.d.ts.map +1 -1
  33. package/commands/command-types.d.ts +2 -2
  34. package/commands/command-types.d.ts.map +1 -1
  35. package/commands/index.d.ts +3 -3
  36. package/commands/index.d.ts.map +1 -1
  37. package/commands/index.js +3 -3
  38. package/commands/index.js.map +1 -1
  39. package/commands/parsed-command.d.ts +13 -0
  40. package/commands/parsed-command.d.ts.map +1 -1
  41. package/commands/validated-command.d.ts +16 -2
  42. package/commands/validated-command.d.ts.map +1 -1
  43. package/constants/index.d.ts +3 -3
  44. package/constants/index.d.ts.map +1 -1
  45. package/constants/index.js +3 -3
  46. package/constants/index.js.map +1 -1
  47. package/entities/entity-store.d.ts +1 -1
  48. package/entities/entity-store.d.ts.map +1 -1
  49. package/entities/entity-store.js +2 -2
  50. package/entities/entity-store.js.map +1 -1
  51. package/entities/if-entity.d.ts +3 -3
  52. package/entities/if-entity.d.ts.map +1 -1
  53. package/entities/if-entity.js +38 -34
  54. package/entities/if-entity.js.map +1 -1
  55. package/entities/index.d.ts +6 -6
  56. package/entities/index.d.ts.map +1 -1
  57. package/entities/index.js +10 -10
  58. package/entities/index.js.map +1 -1
  59. package/entities/trait-rehydrator.d.ts +43 -0
  60. package/entities/trait-rehydrator.d.ts.map +1 -0
  61. package/entities/trait-rehydrator.js +45 -0
  62. package/entities/trait-rehydrator.js.map +1 -0
  63. package/entities/wall-entity.d.ts +2 -2
  64. package/entities/wall-entity.d.ts.map +1 -1
  65. package/entities/wall-entity.js +2 -2
  66. package/entities/wall-entity.js.map +1 -1
  67. package/examples/event-handler-registration.d.ts +1 -1
  68. package/examples/event-handler-registration.d.ts.map +1 -1
  69. package/examples/event-handler-registration.js +24 -24
  70. package/examples/event-handler-registration.js.map +1 -1
  71. package/extensions/base-extension.d.ts +3 -3
  72. package/extensions/base-extension.d.ts.map +1 -1
  73. package/extensions/index.d.ts +4 -4
  74. package/extensions/index.d.ts.map +1 -1
  75. package/extensions/index.js +11 -11
  76. package/extensions/index.js.map +1 -1
  77. package/extensions/loader.d.ts +1 -1
  78. package/extensions/loader.d.ts.map +1 -1
  79. package/extensions/loader.js +2 -2
  80. package/extensions/loader.js.map +1 -1
  81. package/extensions/manager.d.ts +1 -1
  82. package/extensions/manager.d.ts.map +1 -1
  83. package/extensions/manager.js +2 -2
  84. package/extensions/manager.js.map +1 -1
  85. package/extensions/registry.d.ts +2 -2
  86. package/extensions/registry.d.ts.map +1 -1
  87. package/extensions/registry.js +4 -4
  88. package/extensions/registry.js.map +1 -1
  89. package/extensions/types.d.ts +2 -2
  90. package/extensions/types.d.ts.map +1 -1
  91. package/index.d.ts +58 -59
  92. package/index.d.ts.map +1 -1
  93. package/index.js +62 -63
  94. package/index.js.map +1 -1
  95. package/interfaces/command-executor.d.ts +1 -1
  96. package/interfaces/command-executor.d.ts.map +1 -1
  97. package/interfaces/command-processor.d.ts +1 -1
  98. package/interfaces/command-processor.d.ts.map +1 -1
  99. package/interfaces/command-validator.d.ts +1 -1
  100. package/interfaces/command-validator.d.ts.map +1 -1
  101. package/interfaces/index.d.ts +4 -4
  102. package/interfaces/index.d.ts.map +1 -1
  103. package/interfaces/index.js +4 -4
  104. package/interfaces/index.js.map +1 -1
  105. package/interfaces/parser.d.ts +1 -1
  106. package/interfaces/parser.d.ts.map +1 -1
  107. package/package.json +3 -3
  108. package/scope/index.d.ts +3 -3
  109. package/scope/index.d.ts.map +1 -1
  110. package/scope/index.js +3 -3
  111. package/scope/index.js.map +1 -1
  112. package/scope/scope-evaluator.d.ts +2 -2
  113. package/scope/scope-evaluator.d.ts.map +1 -1
  114. package/scope/scope-registry.d.ts +1 -1
  115. package/scope/scope-registry.d.ts.map +1 -1
  116. package/state-adjectives.d.ts +1 -1
  117. package/state-adjectives.d.ts.map +1 -1
  118. package/state-adjectives.js +5 -5
  119. package/state-adjectives.js.map +1 -1
  120. package/state-clauses.d.ts +1 -1
  121. package/state-clauses.d.ts.map +1 -1
  122. package/state-clauses.js +5 -5
  123. package/state-clauses.js.map +1 -1
  124. package/test-structure.d.ts +1 -1
  125. package/test-structure.d.ts.map +1 -1
  126. package/test-structure.js +7 -7
  127. package/test-structure.js.map +1 -1
  128. package/traits/acoustic/acousticDampenerTrait.d.ts +1 -1
  129. package/traits/acoustic/acousticDampenerTrait.d.ts.map +1 -1
  130. package/traits/acoustic/acousticDampenerTrait.js +3 -3
  131. package/traits/acoustic/acousticDampenerTrait.js.map +1 -1
  132. package/traits/acoustic/acousticTrait.d.ts +1 -1
  133. package/traits/acoustic/acousticTrait.d.ts.map +1 -1
  134. package/traits/acoustic/acousticTrait.js +3 -3
  135. package/traits/acoustic/acousticTrait.js.map +1 -1
  136. package/traits/acoustic/index.d.ts +2 -2
  137. package/traits/acoustic/index.d.ts.map +1 -1
  138. package/traits/acoustic/index.js +5 -5
  139. package/traits/acoustic/index.js.map +1 -1
  140. package/traits/actor/actorBehavior.d.ts +4 -4
  141. package/traits/actor/actorBehavior.d.ts.map +1 -1
  142. package/traits/actor/actorBehavior.js +38 -34
  143. package/traits/actor/actorBehavior.js.map +1 -1
  144. package/traits/actor/actorTrait.d.ts +1 -1
  145. package/traits/actor/actorTrait.d.ts.map +1 -1
  146. package/traits/actor/actorTrait.js +3 -3
  147. package/traits/actor/actorTrait.js.map +1 -1
  148. package/traits/actor/index.d.ts +2 -2
  149. package/traits/actor/index.d.ts.map +1 -1
  150. package/traits/actor/index.js +6 -6
  151. package/traits/actor/index.js.map +1 -1
  152. package/traits/all-traits.d.ts +30 -33
  153. package/traits/all-traits.d.ts.map +1 -1
  154. package/traits/all-traits.js +56 -62
  155. package/traits/all-traits.js.map +1 -1
  156. package/traits/attached/attachedTrait.d.ts +1 -1
  157. package/traits/attached/attachedTrait.d.ts.map +1 -1
  158. package/traits/attached/attachedTrait.js +3 -3
  159. package/traits/attached/attachedTrait.js.map +1 -1
  160. package/traits/attached/index.d.ts +1 -1
  161. package/traits/attached/index.d.ts.map +1 -1
  162. package/traits/attached/index.js +1 -1
  163. package/traits/attached/index.js.map +1 -1
  164. package/traits/breakable/breakableBehavior.d.ts +3 -3
  165. package/traits/breakable/breakableBehavior.d.ts.map +1 -1
  166. package/traits/breakable/breakableBehavior.js +10 -10
  167. package/traits/breakable/breakableBehavior.js.map +1 -1
  168. package/traits/breakable/breakableTrait.d.ts +1 -1
  169. package/traits/breakable/breakableTrait.d.ts.map +1 -1
  170. package/traits/breakable/index.d.ts +2 -2
  171. package/traits/breakable/index.d.ts.map +1 -1
  172. package/traits/breakable/index.js +4 -4
  173. package/traits/breakable/index.js.map +1 -1
  174. package/traits/button/buttonTrait.d.ts +1 -1
  175. package/traits/button/buttonTrait.d.ts.map +1 -1
  176. package/traits/button/buttonTrait.js +3 -3
  177. package/traits/button/buttonTrait.js.map +1 -1
  178. package/traits/button/index.d.ts +1 -1
  179. package/traits/button/index.d.ts.map +1 -1
  180. package/traits/button/index.js +1 -1
  181. package/traits/button/index.js.map +1 -1
  182. package/traits/character-model/characterModelTrait.d.ts +2 -2
  183. package/traits/character-model/characterModelTrait.d.ts.map +1 -1
  184. package/traits/character-model/characterModelTrait.js +16 -16
  185. package/traits/character-model/characterModelTrait.js.map +1 -1
  186. package/traits/character-model/index.d.ts +2 -2
  187. package/traits/character-model/index.d.ts.map +1 -1
  188. package/traits/character-model/index.js +3 -3
  189. package/traits/character-model/index.js.map +1 -1
  190. package/traits/climbable/climbableBehavior.d.ts +1 -1
  191. package/traits/climbable/climbableBehavior.d.ts.map +1 -1
  192. package/traits/climbable/climbableBehavior.js +9 -9
  193. package/traits/climbable/climbableBehavior.js.map +1 -1
  194. package/traits/climbable/climbableTrait.d.ts +1 -1
  195. package/traits/climbable/climbableTrait.d.ts.map +1 -1
  196. package/traits/climbable/climbableTrait.js +4 -4
  197. package/traits/climbable/climbableTrait.js.map +1 -1
  198. package/traits/climbable/index.d.ts +2 -2
  199. package/traits/climbable/index.d.ts.map +1 -1
  200. package/traits/climbable/index.js +2 -2
  201. package/traits/climbable/index.js.map +1 -1
  202. package/traits/clothing/clothingTrait.d.ts +2 -2
  203. package/traits/clothing/clothingTrait.d.ts.map +1 -1
  204. package/traits/clothing/clothingTrait.js +3 -3
  205. package/traits/clothing/clothingTrait.js.map +1 -1
  206. package/traits/clothing/index.d.ts +1 -1
  207. package/traits/clothing/index.d.ts.map +1 -1
  208. package/traits/clothing/index.js +1 -1
  209. package/traits/clothing/index.js.map +1 -1
  210. package/traits/combatant/combatantBehavior.d.ts +3 -3
  211. package/traits/combatant/combatantBehavior.d.ts.map +1 -1
  212. package/traits/combatant/combatantBehavior.js +26 -26
  213. package/traits/combatant/combatantBehavior.js.map +1 -1
  214. package/traits/combatant/combatantTrait.d.ts +1 -1
  215. package/traits/combatant/combatantTrait.d.ts.map +1 -1
  216. package/traits/combatant/index.d.ts +2 -2
  217. package/traits/combatant/index.d.ts.map +1 -1
  218. package/traits/combatant/index.js +4 -4
  219. package/traits/combatant/index.js.map +1 -1
  220. package/traits/concealment/concealedStateTrait.d.ts +3 -3
  221. package/traits/concealment/concealedStateTrait.d.ts.map +1 -1
  222. package/traits/concealment/concealedStateTrait.js +2 -2
  223. package/traits/concealment/concealedStateTrait.js.map +1 -1
  224. package/traits/concealment/concealedVisibilityBehavior.d.ts +2 -2
  225. package/traits/concealment/concealedVisibilityBehavior.d.ts.map +1 -1
  226. package/traits/concealment/concealedVisibilityBehavior.js +3 -3
  227. package/traits/concealment/concealedVisibilityBehavior.js.map +1 -1
  228. package/traits/concealment/concealmentTrait.d.ts +1 -1
  229. package/traits/concealment/concealmentTrait.d.ts.map +1 -1
  230. package/traits/concealment/index.d.ts +3 -3
  231. package/traits/concealment/index.d.ts.map +1 -1
  232. package/traits/concealment/index.js +3 -3
  233. package/traits/concealment/index.js.map +1 -1
  234. package/traits/container/container-utils.d.ts +2 -2
  235. package/traits/container/container-utils.d.ts.map +1 -1
  236. package/traits/container/container-utils.js +14 -14
  237. package/traits/container/container-utils.js.map +1 -1
  238. package/traits/container/containerBehavior.d.ts +7 -2
  239. package/traits/container/containerBehavior.d.ts.map +1 -1
  240. package/traits/container/containerBehavior.js +26 -26
  241. package/traits/container/containerBehavior.js.map +1 -1
  242. package/traits/container/containerTrait.d.ts +1 -1
  243. package/traits/container/containerTrait.d.ts.map +1 -1
  244. package/traits/container/containerTrait.js +3 -3
  245. package/traits/container/containerTrait.js.map +1 -1
  246. package/traits/container/index.d.ts +3 -3
  247. package/traits/container/index.d.ts.map +1 -1
  248. package/traits/container/index.js +9 -9
  249. package/traits/container/index.js.map +1 -1
  250. package/traits/cuttable/cuttableBehavior.d.ts +2 -2
  251. package/traits/cuttable/cuttableBehavior.d.ts.map +1 -1
  252. package/traits/cuttable/cuttableBehavior.js +6 -6
  253. package/traits/cuttable/cuttableBehavior.js.map +1 -1
  254. package/traits/cuttable/cuttableTrait.d.ts +1 -1
  255. package/traits/cuttable/cuttableTrait.d.ts.map +1 -1
  256. package/traits/cuttable/cuttableTrait.js +3 -3
  257. package/traits/cuttable/cuttableTrait.js.map +1 -1
  258. package/traits/cuttable/index.d.ts +2 -2
  259. package/traits/cuttable/index.d.ts.map +1 -1
  260. package/traits/cuttable/index.js +2 -2
  261. package/traits/cuttable/index.js.map +1 -1
  262. package/traits/deadly-room/deadlyRoomBehavior.d.ts +2 -2
  263. package/traits/deadly-room/deadlyRoomBehavior.d.ts.map +1 -1
  264. package/traits/deadly-room/deadlyRoomBehavior.js +4 -4
  265. package/traits/deadly-room/deadlyRoomBehavior.js.map +1 -1
  266. package/traits/deadly-room/deadlyRoomTrait.d.ts +1 -1
  267. package/traits/deadly-room/deadlyRoomTrait.d.ts.map +1 -1
  268. package/traits/deadly-room/index.d.ts +2 -2
  269. package/traits/deadly-room/index.d.ts.map +1 -1
  270. package/traits/deadly-room/index.js +4 -4
  271. package/traits/deadly-room/index.js.map +1 -1
  272. package/traits/destructible/destructibleBehavior.d.ts +3 -3
  273. package/traits/destructible/destructibleBehavior.d.ts.map +1 -1
  274. package/traits/destructible/destructibleBehavior.js +12 -12
  275. package/traits/destructible/destructibleBehavior.js.map +1 -1
  276. package/traits/destructible/destructibleTrait.d.ts +1 -1
  277. package/traits/destructible/destructibleTrait.d.ts.map +1 -1
  278. package/traits/destructible/index.d.ts +2 -2
  279. package/traits/destructible/index.d.ts.map +1 -1
  280. package/traits/destructible/index.js +4 -4
  281. package/traits/destructible/index.js.map +1 -1
  282. package/traits/diggable/diggableBehavior.d.ts +2 -2
  283. package/traits/diggable/diggableBehavior.d.ts.map +1 -1
  284. package/traits/diggable/diggableBehavior.js +6 -6
  285. package/traits/diggable/diggableBehavior.js.map +1 -1
  286. package/traits/diggable/diggableTrait.d.ts +1 -1
  287. package/traits/diggable/diggableTrait.d.ts.map +1 -1
  288. package/traits/diggable/diggableTrait.js +3 -3
  289. package/traits/diggable/diggableTrait.js.map +1 -1
  290. package/traits/diggable/index.d.ts +2 -2
  291. package/traits/diggable/index.d.ts.map +1 -1
  292. package/traits/diggable/index.js +2 -2
  293. package/traits/diggable/index.js.map +1 -1
  294. package/traits/door/doorBehavior.d.ts +2 -2
  295. package/traits/door/doorBehavior.d.ts.map +1 -1
  296. package/traits/door/doorBehavior.js +11 -11
  297. package/traits/door/doorBehavior.js.map +1 -1
  298. package/traits/door/doorTrait.d.ts +1 -1
  299. package/traits/door/doorTrait.d.ts.map +1 -1
  300. package/traits/door/doorTrait.js +3 -3
  301. package/traits/door/doorTrait.js.map +1 -1
  302. package/traits/door/index.d.ts +2 -2
  303. package/traits/door/index.d.ts.map +1 -1
  304. package/traits/door/index.js +4 -4
  305. package/traits/door/index.js.map +1 -1
  306. package/traits/edible/edibleBehavior.d.ts +3 -3
  307. package/traits/edible/edibleBehavior.d.ts.map +1 -1
  308. package/traits/edible/edibleBehavior.js +20 -20
  309. package/traits/edible/edibleBehavior.js.map +1 -1
  310. package/traits/edible/edibleTrait.d.ts +1 -1
  311. package/traits/edible/edibleTrait.d.ts.map +1 -1
  312. package/traits/edible/edibleTrait.js +3 -3
  313. package/traits/edible/edibleTrait.js.map +1 -1
  314. package/traits/edible/index.d.ts +2 -2
  315. package/traits/edible/index.d.ts.map +1 -1
  316. package/traits/edible/index.js +2 -2
  317. package/traits/edible/index.js.map +1 -1
  318. package/traits/enterable/enterableTrait.d.ts +1 -1
  319. package/traits/enterable/enterableTrait.d.ts.map +1 -1
  320. package/traits/enterable/enterableTrait.js +4 -4
  321. package/traits/enterable/enterableTrait.js.map +1 -1
  322. package/traits/enterable/index.d.ts +1 -1
  323. package/traits/enterable/index.d.ts.map +1 -1
  324. package/traits/enterable/index.js +1 -1
  325. package/traits/enterable/index.js.map +1 -1
  326. package/traits/equipped/equippedTrait.d.ts +1 -1
  327. package/traits/equipped/equippedTrait.d.ts.map +1 -1
  328. package/traits/equipped/index.d.ts +1 -1
  329. package/traits/equipped/index.d.ts.map +1 -1
  330. package/traits/equipped/index.js +2 -2
  331. package/traits/equipped/index.js.map +1 -1
  332. package/traits/exit/exitBehavior.d.ts +2 -2
  333. package/traits/exit/exitBehavior.d.ts.map +1 -1
  334. package/traits/exit/exitBehavior.js +27 -27
  335. package/traits/exit/exitBehavior.js.map +1 -1
  336. package/traits/exit/exitTrait.d.ts +1 -1
  337. package/traits/exit/exitTrait.d.ts.map +1 -1
  338. package/traits/exit/exitTrait.js +3 -3
  339. package/traits/exit/exitTrait.js.map +1 -1
  340. package/traits/exit/index.d.ts +2 -2
  341. package/traits/exit/index.d.ts.map +1 -1
  342. package/traits/exit/index.js +4 -4
  343. package/traits/exit/index.js.map +1 -1
  344. package/traits/health/healthBehavior.d.ts +2 -2
  345. package/traits/health/healthBehavior.d.ts.map +1 -1
  346. package/traits/health/healthBehavior.js +4 -4
  347. package/traits/health/healthBehavior.js.map +1 -1
  348. package/traits/health/healthTrait.d.ts +1 -1
  349. package/traits/health/healthTrait.d.ts.map +1 -1
  350. package/traits/health/index.d.ts +2 -2
  351. package/traits/health/index.d.ts.map +1 -1
  352. package/traits/health/index.js +4 -4
  353. package/traits/health/index.js.map +1 -1
  354. package/traits/identity/identityBehavior.d.ts +2 -2
  355. package/traits/identity/identityBehavior.d.ts.map +1 -1
  356. package/traits/identity/identityBehavior.js +16 -16
  357. package/traits/identity/identityBehavior.js.map +1 -1
  358. package/traits/identity/identityTrait.d.ts +8 -1
  359. package/traits/identity/identityTrait.d.ts.map +1 -1
  360. package/traits/identity/identityTrait.js +10 -3
  361. package/traits/identity/identityTrait.js.map +1 -1
  362. package/traits/identity/index.d.ts +3 -2
  363. package/traits/identity/index.d.ts.map +1 -1
  364. package/traits/identity/index.js +3 -2
  365. package/traits/identity/index.js.map +1 -1
  366. package/traits/identity/name-vocabulary.d.ts +31 -0
  367. package/traits/identity/name-vocabulary.d.ts.map +1 -0
  368. package/traits/identity/name-vocabulary.js +57 -0
  369. package/traits/identity/name-vocabulary.js.map +1 -0
  370. package/traits/implementations.d.ts +65 -42
  371. package/traits/implementations.d.ts.map +1 -1
  372. package/traits/implementations.js +163 -129
  373. package/traits/implementations.js.map +1 -1
  374. package/traits/index.d.ts +47 -48
  375. package/traits/index.d.ts.map +1 -1
  376. package/traits/index.js +47 -48
  377. package/traits/index.js.map +1 -1
  378. package/traits/light-source/index.d.ts +2 -2
  379. package/traits/light-source/index.d.ts.map +1 -1
  380. package/traits/light-source/index.js +4 -4
  381. package/traits/light-source/index.js.map +1 -1
  382. package/traits/light-source/lightSourceBehavior.d.ts +2 -2
  383. package/traits/light-source/lightSourceBehavior.d.ts.map +1 -1
  384. package/traits/light-source/lightSourceBehavior.js +16 -16
  385. package/traits/light-source/lightSourceBehavior.js.map +1 -1
  386. package/traits/light-source/lightSourceTrait.d.ts +1 -1
  387. package/traits/light-source/lightSourceTrait.d.ts.map +1 -1
  388. package/traits/light-source/lightSourceTrait.js +3 -3
  389. package/traits/light-source/lightSourceTrait.js.map +1 -1
  390. package/traits/listener/index.d.ts +1 -1
  391. package/traits/listener/index.d.ts.map +1 -1
  392. package/traits/listener/index.js +2 -2
  393. package/traits/listener/index.js.map +1 -1
  394. package/traits/listener/listenerTrait.d.ts +1 -1
  395. package/traits/listener/listenerTrait.d.ts.map +1 -1
  396. package/traits/listener/listenerTrait.js +3 -3
  397. package/traits/listener/listenerTrait.js.map +1 -1
  398. package/traits/lockable/index.d.ts +2 -2
  399. package/traits/lockable/index.d.ts.map +1 -1
  400. package/traits/lockable/index.js +2 -2
  401. package/traits/lockable/index.js.map +1 -1
  402. package/traits/lockable/lockableBehavior.d.ts +2 -2
  403. package/traits/lockable/lockableBehavior.d.ts.map +1 -1
  404. package/traits/lockable/lockableBehavior.js +19 -19
  405. package/traits/lockable/lockableBehavior.js.map +1 -1
  406. package/traits/lockable/lockableTrait.d.ts +1 -1
  407. package/traits/lockable/lockableTrait.d.ts.map +1 -1
  408. package/traits/lockable/lockableTrait.js +3 -3
  409. package/traits/lockable/lockableTrait.js.map +1 -1
  410. package/traits/moveable-scenery/index.d.ts +1 -1
  411. package/traits/moveable-scenery/index.d.ts.map +1 -1
  412. package/traits/moveable-scenery/index.js +1 -1
  413. package/traits/moveable-scenery/index.js.map +1 -1
  414. package/traits/moveable-scenery/moveableSceneryTrait.d.ts +1 -1
  415. package/traits/moveable-scenery/moveableSceneryTrait.d.ts.map +1 -1
  416. package/traits/moveable-scenery/moveableSceneryTrait.js +3 -3
  417. package/traits/moveable-scenery/moveableSceneryTrait.js.map +1 -1
  418. package/traits/npc/index.d.ts +1 -1
  419. package/traits/npc/index.d.ts.map +1 -1
  420. package/traits/npc/index.js +2 -2
  421. package/traits/npc/index.js.map +1 -1
  422. package/traits/npc/npcTrait.d.ts +1 -1
  423. package/traits/npc/npcTrait.d.ts.map +1 -1
  424. package/traits/obstructor-protocol.d.ts +3 -3
  425. package/traits/obstructor-protocol.d.ts.map +1 -1
  426. package/traits/open-inventory/index.d.ts +1 -1
  427. package/traits/open-inventory/index.d.ts.map +1 -1
  428. package/traits/open-inventory/index.js +2 -2
  429. package/traits/open-inventory/index.js.map +1 -1
  430. package/traits/open-inventory/openInventoryTrait.d.ts +1 -1
  431. package/traits/open-inventory/openInventoryTrait.d.ts.map +1 -1
  432. package/traits/open-inventory/openInventoryTrait.js +3 -3
  433. package/traits/open-inventory/openInventoryTrait.js.map +1 -1
  434. package/traits/openable/index.d.ts +2 -2
  435. package/traits/openable/index.d.ts.map +1 -1
  436. package/traits/openable/index.js +2 -2
  437. package/traits/openable/index.js.map +1 -1
  438. package/traits/openable/openableBehavior.d.ts +2 -2
  439. package/traits/openable/openableBehavior.d.ts.map +1 -1
  440. package/traits/openable/openableBehavior.js +13 -13
  441. package/traits/openable/openableBehavior.js.map +1 -1
  442. package/traits/openable/openableTrait.d.ts +1 -1
  443. package/traits/openable/openableTrait.d.ts.map +1 -1
  444. package/traits/openable/openableTrait.js +3 -3
  445. package/traits/openable/openableTrait.js.map +1 -1
  446. package/traits/pullable/index.d.ts +1 -1
  447. package/traits/pullable/index.d.ts.map +1 -1
  448. package/traits/pullable/index.js +1 -1
  449. package/traits/pullable/index.js.map +1 -1
  450. package/traits/pullable/pullableTrait.d.ts +1 -1
  451. package/traits/pullable/pullableTrait.d.ts.map +1 -1
  452. package/traits/pullable/pullableTrait.js +3 -3
  453. package/traits/pullable/pullableTrait.js.map +1 -1
  454. package/traits/pushable/index.d.ts +1 -1
  455. package/traits/pushable/index.d.ts.map +1 -1
  456. package/traits/pushable/index.js +1 -1
  457. package/traits/pushable/index.js.map +1 -1
  458. package/traits/pushable/pushableTrait.d.ts +1 -1
  459. package/traits/pushable/pushableTrait.d.ts.map +1 -1
  460. package/traits/pushable/pushableTrait.js +3 -3
  461. package/traits/pushable/pushableTrait.js.map +1 -1
  462. package/traits/readable/index.d.ts +2 -2
  463. package/traits/readable/index.d.ts.map +1 -1
  464. package/traits/readable/index.js +4 -4
  465. package/traits/readable/index.js.map +1 -1
  466. package/traits/readable/readableBehavior.d.ts +1 -1
  467. package/traits/readable/readableBehavior.d.ts.map +1 -1
  468. package/traits/readable/readableBehavior.js +10 -10
  469. package/traits/readable/readableBehavior.js.map +1 -1
  470. package/traits/readable/readableTrait.d.ts +1 -1
  471. package/traits/readable/readableTrait.d.ts.map +1 -1
  472. package/traits/readable/readableTrait.js +3 -3
  473. package/traits/readable/readableTrait.js.map +1 -1
  474. package/traits/region/index.d.ts +1 -1
  475. package/traits/region/index.d.ts.map +1 -1
  476. package/traits/region/index.js +2 -2
  477. package/traits/region/index.js.map +1 -1
  478. package/traits/region/regionTrait.d.ts +1 -1
  479. package/traits/region/regionTrait.d.ts.map +1 -1
  480. package/traits/region/regionTrait.js +3 -3
  481. package/traits/region/regionTrait.js.map +1 -1
  482. package/traits/room/index.d.ts +2 -2
  483. package/traits/room/index.d.ts.map +1 -1
  484. package/traits/room/index.js +4 -4
  485. package/traits/room/index.js.map +1 -1
  486. package/traits/room/roomBehavior.d.ts +4 -4
  487. package/traits/room/roomBehavior.d.ts.map +1 -1
  488. package/traits/room/roomBehavior.js +25 -25
  489. package/traits/room/roomBehavior.js.map +1 -1
  490. package/traits/room/roomTrait.d.ts +2 -2
  491. package/traits/room/roomTrait.d.ts.map +1 -1
  492. package/traits/room/roomTrait.js +3 -3
  493. package/traits/room/roomTrait.js.map +1 -1
  494. package/traits/scene/index.d.ts +1 -1
  495. package/traits/scene/index.d.ts.map +1 -1
  496. package/traits/scene/index.js +2 -2
  497. package/traits/scene/index.js.map +1 -1
  498. package/traits/scene/sceneTrait.d.ts +1 -1
  499. package/traits/scene/sceneTrait.d.ts.map +1 -1
  500. package/traits/scene/sceneTrait.js +3 -3
  501. package/traits/scene/sceneTrait.js.map +1 -1
  502. package/traits/scenery/index.d.ts +2 -2
  503. package/traits/scenery/index.d.ts.map +1 -1
  504. package/traits/scenery/index.js +4 -4
  505. package/traits/scenery/index.js.map +1 -1
  506. package/traits/scenery/sceneryBehavior.d.ts +1 -1
  507. package/traits/scenery/sceneryBehavior.d.ts.map +1 -1
  508. package/traits/scenery/sceneryBehavior.js +5 -5
  509. package/traits/scenery/sceneryBehavior.js.map +1 -1
  510. package/traits/scenery/sceneryTrait.d.ts +1 -1
  511. package/traits/scenery/sceneryTrait.d.ts.map +1 -1
  512. package/traits/scenery/sceneryTrait.js +3 -3
  513. package/traits/scenery/sceneryTrait.js.map +1 -1
  514. package/traits/story-info/index.d.ts +1 -1
  515. package/traits/story-info/index.d.ts.map +1 -1
  516. package/traits/story-info/index.js +2 -2
  517. package/traits/story-info/index.js.map +1 -1
  518. package/traits/story-info/storyInfoTrait.d.ts +1 -1
  519. package/traits/story-info/storyInfoTrait.d.ts.map +1 -1
  520. package/traits/supporter/index.d.ts +2 -2
  521. package/traits/supporter/index.d.ts.map +1 -1
  522. package/traits/supporter/index.js +4 -4
  523. package/traits/supporter/index.js.map +1 -1
  524. package/traits/supporter/supporterBehavior.d.ts +3 -3
  525. package/traits/supporter/supporterBehavior.d.ts.map +1 -1
  526. package/traits/supporter/supporterBehavior.js +15 -15
  527. package/traits/supporter/supporterBehavior.js.map +1 -1
  528. package/traits/supporter/supporterTrait.d.ts +1 -1
  529. package/traits/supporter/supporterTrait.d.ts.map +1 -1
  530. package/traits/supporter/supporterTrait.js +3 -3
  531. package/traits/supporter/supporterTrait.js.map +1 -1
  532. package/traits/switchable/index.d.ts +2 -2
  533. package/traits/switchable/index.d.ts.map +1 -1
  534. package/traits/switchable/index.js +2 -2
  535. package/traits/switchable/index.js.map +1 -1
  536. package/traits/switchable/switchableBehavior.d.ts +2 -2
  537. package/traits/switchable/switchableBehavior.d.ts.map +1 -1
  538. package/traits/switchable/switchableBehavior.js +18 -18
  539. package/traits/switchable/switchableBehavior.js.map +1 -1
  540. package/traits/switchable/switchableTrait.d.ts +1 -1
  541. package/traits/switchable/switchableTrait.d.ts.map +1 -1
  542. package/traits/switchable/switchableTrait.js +3 -3
  543. package/traits/switchable/switchableTrait.js.map +1 -1
  544. package/traits/trait-types.d.ts +0 -1
  545. package/traits/trait-types.d.ts.map +1 -1
  546. package/traits/trait-types.js +0 -2
  547. package/traits/trait-types.js.map +1 -1
  548. package/traits/trait.d.ts +1 -1
  549. package/traits/trait.d.ts.map +1 -1
  550. package/traits/vehicle/index.d.ts +2 -2
  551. package/traits/vehicle/index.d.ts.map +1 -1
  552. package/traits/vehicle/index.js +2 -2
  553. package/traits/vehicle/index.js.map +1 -1
  554. package/traits/vehicle/vehicleBehavior.d.ts +2 -2
  555. package/traits/vehicle/vehicleBehavior.d.ts.map +1 -1
  556. package/traits/vehicle/vehicleBehavior.js +7 -7
  557. package/traits/vehicle/vehicleBehavior.js.map +1 -1
  558. package/traits/vehicle/vehicleTrait.d.ts +1 -1
  559. package/traits/vehicle/vehicleTrait.d.ts.map +1 -1
  560. package/traits/vehicle/vehicleTrait.js +4 -4
  561. package/traits/vehicle/vehicleTrait.js.map +1 -1
  562. package/traits/weapon/index.d.ts +2 -2
  563. package/traits/weapon/index.d.ts.map +1 -1
  564. package/traits/weapon/index.js +4 -4
  565. package/traits/weapon/index.js.map +1 -1
  566. package/traits/weapon/weaponBehavior.d.ts +11 -4
  567. package/traits/weapon/weaponBehavior.d.ts.map +1 -1
  568. package/traits/weapon/weaponBehavior.js +24 -19
  569. package/traits/weapon/weaponBehavior.js.map +1 -1
  570. package/traits/weapon/weaponTrait.d.ts +1 -1
  571. package/traits/weapon/weaponTrait.d.ts.map +1 -1
  572. package/traits/wearable/index.d.ts +2 -2
  573. package/traits/wearable/index.d.ts.map +1 -1
  574. package/traits/wearable/index.js +2 -2
  575. package/traits/wearable/index.js.map +1 -1
  576. package/traits/wearable/wearableBehavior.d.ts +1 -1
  577. package/traits/wearable/wearableBehavior.d.ts.map +1 -1
  578. package/traits/wearable/wearableBehavior.js +11 -11
  579. package/traits/wearable/wearableBehavior.js.map +1 -1
  580. package/traits/wearable/wearableTrait.d.ts +1 -1
  581. package/traits/wearable/wearableTrait.d.ts.map +1 -1
  582. package/traits/wearable/wearableTrait.js +3 -3
  583. package/traits/wearable/wearableTrait.js.map +1 -1
  584. package/world/AuthorModel.d.ts +28 -17
  585. package/world/AuthorModel.d.ts.map +1 -1
  586. package/world/AuthorModel.js +31 -4
  587. package/world/AuthorModel.js.map +1 -1
  588. package/world/ScoreLedger.d.ts +75 -3
  589. package/world/ScoreLedger.d.ts.map +1 -1
  590. package/world/ScoreLedger.js +77 -3
  591. package/world/ScoreLedger.js.map +1 -1
  592. package/world/SharedDataStore.d.ts +2 -2
  593. package/world/SharedDataStore.d.ts.map +1 -1
  594. package/world/SharedDataStore.js +2 -2
  595. package/world/SharedDataStore.js.map +1 -1
  596. package/world/VisibilityBehavior.d.ts +59 -3
  597. package/world/VisibilityBehavior.d.ts.map +1 -1
  598. package/world/VisibilityBehavior.js +192 -100
  599. package/world/VisibilityBehavior.js.map +1 -1
  600. package/world/WorldEventSystem.d.ts +1 -1
  601. package/world/WorldEventSystem.d.ts.map +1 -1
  602. package/world/WorldModel.d.ts +75 -18
  603. package/world/WorldModel.d.ts.map +1 -1
  604. package/world/WorldModel.js +179 -113
  605. package/world/WorldModel.js.map +1 -1
  606. package/world/WorldSerializer.d.ts +4 -4
  607. package/world/WorldSerializer.d.ts.map +1 -1
  608. package/world/WorldSerializer.js +2 -2
  609. package/world/WorldSerializer.js.map +1 -1
  610. package/world/band.d.ts +22 -0
  611. package/world/band.d.ts.map +1 -0
  612. package/world/band.js +36 -0
  613. package/world/band.js.map +1 -0
  614. package/world/default-trait-registry.d.ts +1 -1
  615. package/world/default-trait-registry.d.ts.map +1 -1
  616. package/world/default-trait-registry.js +3 -3
  617. package/world/default-trait-registry.js.map +1 -1
  618. package/world/index.d.ts +10 -9
  619. package/world/index.d.ts.map +1 -1
  620. package/world/index.js +20 -16
  621. package/world/index.js.map +1 -1
  622. package/world/wall-creation.d.ts +2 -2
  623. package/world/wall-creation.d.ts.map +1 -1
  624. package/world/wall-creation.js +6 -6
  625. package/world/wall-creation.js.map +1 -1
  626. package/world/wall-validation.d.ts +2 -2
  627. package/world/wall-validation.d.ts.map +1 -1
  628. package/world/wall-validation.js +3 -3
  629. package/world/wall-validation.js.map +1 -1
@@ -2,37 +2,36 @@
2
2
  // WorldModel.ts - Core world model interface and implementation for Sharpee IF Platform
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.WorldModel = void 0;
5
- const if_entity_1 = require("../entities/if-entity");
6
- const entity_types_1 = require("../entities/entity-types");
7
- const wall_creation_1 = require("./wall-creation");
8
- const trait_types_1 = require("../traits/trait-types");
9
- const room_1 = require("../traits/room");
10
- const roomBehavior_1 = require("../traits/room/roomBehavior");
11
- const regionTrait_1 = require("../traits/region/regionTrait");
12
- const sceneTrait_1 = require("../traits/scene/sceneTrait");
13
- const door_1 = require("../traits/door");
14
- const scenery_1 = require("../traits/scenery");
15
- const default_trait_registry_1 = require("./default-trait-registry");
16
- const identityTrait_1 = require("../traits/identity/identityTrait");
17
- const openableTrait_1 = require("../traits/openable/openableTrait");
18
- const lockableTrait_1 = require("../traits/lockable/lockableTrait");
19
- const wearableTrait_1 = require("../traits/wearable/wearableTrait");
20
- const clothingTrait_1 = require("../traits/clothing/clothingTrait");
21
- const exitTrait_1 = require("../traits/exit/exitTrait");
22
- const directions_1 = require("../constants/directions");
23
- const SpatialIndex_1 = require("./SpatialIndex");
24
- const VisibilityBehavior_1 = require("./VisibilityBehavior");
25
- const WorldSerializer_1 = require("./WorldSerializer");
26
- const container_utils_1 = require("../traits/container/container-utils");
27
- const capability_binding_1 = require("../capabilities/capability-binding");
28
- const interceptor_binding_1 = require("../capabilities/interceptor-binding");
5
+ const if_entity_js_1 = require("../entities/if-entity.js");
6
+ const entity_types_js_1 = require("../entities/entity-types.js");
7
+ const wall_creation_js_1 = require("./wall-creation.js");
8
+ const trait_types_js_1 = require("../traits/trait-types.js");
9
+ const index_js_1 = require("../traits/room/index.js");
10
+ const roomBehavior_js_1 = require("../traits/room/roomBehavior.js");
11
+ const regionTrait_js_1 = require("../traits/region/regionTrait.js");
12
+ const sceneTrait_js_1 = require("../traits/scene/sceneTrait.js");
13
+ const index_js_2 = require("../traits/door/index.js");
14
+ const index_js_3 = require("../traits/scenery/index.js");
15
+ const default_trait_registry_js_1 = require("./default-trait-registry.js");
16
+ const identityTrait_js_1 = require("../traits/identity/identityTrait.js");
17
+ const openableTrait_js_1 = require("../traits/openable/openableTrait.js");
18
+ const lockableTrait_js_1 = require("../traits/lockable/lockableTrait.js");
19
+ const wearableBehavior_js_1 = require("../traits/wearable/wearableBehavior.js");
20
+ const exitTrait_js_1 = require("../traits/exit/exitTrait.js");
21
+ const directions_js_1 = require("../constants/directions.js");
22
+ const SpatialIndex_js_1 = require("./SpatialIndex.js");
23
+ const VisibilityBehavior_js_1 = require("./VisibilityBehavior.js");
24
+ const WorldSerializer_js_1 = require("./WorldSerializer.js");
25
+ const container_utils_js_1 = require("../traits/container/container-utils.js");
26
+ const capability_binding_js_1 = require("../capabilities/capability-binding.js");
27
+ const interceptor_binding_js_1 = require("../capabilities/interceptor-binding.js");
29
28
  const if_domain_1 = require("@sharpee/if-domain");
30
- const scope_registry_1 = require("../scope/scope-registry");
31
- const scope_evaluator_1 = require("../scope/scope-evaluator");
29
+ const scope_registry_js_1 = require("../scope/scope-registry.js");
30
+ const scope_evaluator_js_1 = require("../scope/scope-evaluator.js");
32
31
  // Event system — extracted to WorldEventSystem.ts, re-exported for backward compat
33
- const WorldEventSystem_1 = require("./WorldEventSystem");
32
+ const WorldEventSystem_js_1 = require("./WorldEventSystem.js");
34
33
  // Score Ledger (ADR-129)
35
- const ScoreLedger_1 = require("./ScoreLedger");
34
+ const ScoreLedger_js_1 = require("./ScoreLedger.js");
36
35
  // Type prefixes for entity ID generation
37
36
  const TYPE_PREFIXES = {
38
37
  'room': 'r',
@@ -66,16 +65,22 @@ class WorldModel {
66
65
  // wiring re-established by story init, not save-game state). Distinct
67
66
  // from both maps above despite the shared "wiring" flavor.
68
67
  interceptorBindings = new Map();
68
+ /**
69
+ * ADR-240: the per-world evaluator registry — named world-evaluators
70
+ * consulted at point of use (live derived state; no cached derivations).
71
+ * Lives and dies with this WorldModel instance, like the binding maps.
72
+ */
73
+ evaluators = new Map();
69
74
  // Score Ledger (ADR-129)
70
- scoreLedger = new ScoreLedger_1.ScoreLedger();
75
+ scoreLedger = new ScoreLedger_js_1.ScoreLedger();
71
76
  // Scene condition closures (ADR-149) — not serialized
72
77
  sceneConditions = new Map();
73
78
  // ID generation
74
79
  idCounters = new Map();
75
80
  // Event system (ADR-086, ADR-094) — delegates to WorldEventSystem
76
- eventSystem = new WorldEventSystem_1.WorldEventSystem();
81
+ eventSystem = new WorldEventSystem_js_1.WorldEventSystem();
77
82
  // Persistence — delegates to WorldSerializer
78
- serializer = new WorldSerializer_1.WorldSerializer();
83
+ serializer = new WorldSerializer_js_1.WorldSerializer();
79
84
  platformEvents;
80
85
  // Scope system
81
86
  scopeRegistry;
@@ -89,12 +94,12 @@ class WorldModel {
89
94
  strictMode: false,
90
95
  ...config
91
96
  };
92
- this.spatialIndex = new SpatialIndex_1.SpatialIndex();
97
+ this.spatialIndex = new SpatialIndex_js_1.SpatialIndex();
93
98
  this.platformEvents = platformEvents;
94
99
  this.eventSystem.setWorldRef(this);
95
100
  // Initialize scope system
96
- this.scopeRegistry = new scope_registry_1.ScopeRegistry();
97
- this.scopeEvaluator = new scope_evaluator_1.RuleScopeEvaluator(this.scopeRegistry);
101
+ this.scopeRegistry = new scope_registry_js_1.ScopeRegistry();
102
+ this.scopeEvaluator = new scope_evaluator_js_1.RuleScopeEvaluator(this.scopeRegistry);
98
103
  // Initialize vocabulary system (ADR-082)
99
104
  this.grammarVocabularyProvider = new if_domain_1.GrammarVocabularyProvider();
100
105
  // Register default scope rules
@@ -195,7 +200,7 @@ class WorldModel {
195
200
  // Registration is idempotent: re-registering a (traitType, capability) key
196
201
  // overwrites the previous binding rather than throwing (AC-4).
197
202
  registerCapabilityBehavior(traitType, capability, behavior, options) {
198
- const key = (0, capability_binding_1.capabilityBindingKey)(traitType, capability);
203
+ const key = (0, capability_binding_js_1.capabilityBindingKey)(traitType, capability);
199
204
  this.capabilityBindings.set(key, {
200
205
  traitType,
201
206
  capability,
@@ -206,8 +211,18 @@ class WorldModel {
206
211
  validateBinding: options?.validateBinding
207
212
  });
208
213
  }
214
+ // Evaluator Registry (ADR-240 — live derived state). Same ownership model
215
+ // as the binding maps above: per-world, idempotent last-wins, never
216
+ // serialized (registrars re-register on every load).
217
+ registerEvaluator(key, fn) {
218
+ this.evaluators.set(key, fn);
219
+ }
220
+ evaluate(key) {
221
+ const fn = this.evaluators.get(key);
222
+ return fn ? fn(this) : undefined;
223
+ }
209
224
  getBehaviorBinding(traitType, capability) {
210
- return this.capabilityBindings.get((0, capability_binding_1.capabilityBindingKey)(traitType, capability));
225
+ return this.capabilityBindings.get((0, capability_binding_js_1.capabilityBindingKey)(traitType, capability));
211
226
  }
212
227
  getAllCapabilityBindings() {
213
228
  return this.capabilityBindings;
@@ -234,7 +249,7 @@ class WorldModel {
234
249
  // Registration is idempotent: re-registering a (traitType, actionId) key
235
250
  // overwrites the previous binding rather than throwing (AC-4).
236
251
  registerActionInterceptor(traitType, actionId, interceptor, options) {
237
- const key = (0, interceptor_binding_1.interceptorBindingKey)(traitType, actionId);
252
+ const key = (0, interceptor_binding_js_1.interceptorBindingKey)(traitType, actionId);
238
253
  this.interceptorBindings.set(key, {
239
254
  traitType,
240
255
  actionId,
@@ -248,7 +263,7 @@ class WorldModel {
248
263
  // a static constructor property across module copies).
249
264
  const candidates = [];
250
265
  for (const trait of entity.traits.values()) {
251
- const binding = this.interceptorBindings.get((0, interceptor_binding_1.interceptorBindingKey)(trait.type, actionId));
266
+ const binding = this.interceptorBindings.get((0, interceptor_binding_js_1.interceptorBindingKey)(trait.type, actionId));
252
267
  if (binding) {
253
268
  candidates.push({ trait, binding });
254
269
  }
@@ -268,7 +283,7 @@ class WorldModel {
268
283
  };
269
284
  }
270
285
  getInterceptorBinding(traitType, actionId) {
271
- return this.interceptorBindings.get((0, interceptor_binding_1.interceptorBindingKey)(traitType, actionId));
286
+ return this.interceptorBindings.get((0, interceptor_binding_js_1.interceptorBindingKey)(traitType, actionId));
272
287
  }
273
288
  getAllActionInterceptors() {
274
289
  return this.interceptorBindings;
@@ -291,12 +306,12 @@ class WorldModel {
291
306
  // Entity Management
292
307
  createEntity(displayName, type = 'object', opts) {
293
308
  // Validate entity type
294
- if (!(0, entity_types_1.isEntityType)(type)) {
295
- throw new Error(`Unknown entity type: '${type}'. Valid types are: ${Object.values(entity_types_1.EntityType).join(', ')}`);
309
+ if (!(0, entity_types_js_1.isEntityType)(type)) {
310
+ throw new Error(`Unknown entity type: '${type}'. Valid types are: ${Object.values(entity_types_js_1.EntityType).join(', ')}`);
296
311
  }
297
312
  // Generate ID based on type
298
313
  const id = this.generateId(type);
299
- const entity = new if_entity_1.IFEntity(id, type, {
314
+ const entity = new if_entity_js_1.IFEntity(id, type, {
300
315
  attributes: {
301
316
  displayName: displayName,
302
317
  name: displayName, // For compatibility
@@ -309,7 +324,7 @@ class WorldModel {
309
324
  // unless the caller opts out. Each factory yields a fresh instance; an author can
310
325
  // override later via add() (replace-on-same-type).
311
326
  if (opts?.defaultTraits !== false) {
312
- const factories = default_trait_registry_1.DEFAULT_TRAITS.get(type);
327
+ const factories = default_trait_registry_js_1.DEFAULT_TRAITS.get(type);
313
328
  if (factories) {
314
329
  for (const factory of factories) {
315
330
  entity.add(factory());
@@ -397,22 +412,25 @@ class WorldModel {
397
412
  if (options.visibleOnly) {
398
413
  // Filter to only visible entities
399
414
  entities = entities.filter(e => {
400
- const scenery = e.getTrait(scenery_1.SceneryTrait);
415
+ const scenery = e.getTrait(index_js_3.SceneryTrait);
401
416
  return !scenery || scenery.visible !== false;
402
417
  });
403
418
  }
404
- if (!options.includeWorn) {
405
- // Filter out worn items (check both WEARABLE and CLOTHING traits)
406
- entities = entities.filter(e => {
407
- const wearable = e.getTrait(wearableTrait_1.WearableTrait);
408
- const clothing = e.getTrait(clothingTrait_1.ClothingTrait);
409
- const wornFromWearable = wearable && wearable.isWorn;
410
- const wornFromClothing = clothing && clothing.isWorn;
411
- return !(wornFromWearable || wornFromClothing);
412
- });
413
- }
419
+ // ADR-247: worn items are contents — returned unconditionally. Callers
420
+ // needing the carried/worn split use getCarriedAndWorn(), not a filter.
414
421
  return entities;
415
422
  }
423
+ getCarriedAndWorn(holderId) {
424
+ // ADR-247: the one partition method. `carried` is held-not-worn (the
425
+ // old filtered-default semantics); `worn` is the worn subset. For a
426
+ // holder with no wearables, `worn` is empty.
427
+ const carried = [];
428
+ const worn = [];
429
+ for (const e of this.getContents(holderId)) {
430
+ (wearableBehavior_js_1.WearableBehavior.isWorn(e) ? worn : carried).push(e);
431
+ }
432
+ return { carried, worn };
433
+ }
416
434
  moveEntity(entityId, targetId) {
417
435
  if (!this.canMoveEntity(entityId, targetId)) {
418
436
  this.emitPlatformEvent('move_entity_failed', {
@@ -454,12 +472,12 @@ class WorldModel {
454
472
  return false;
455
473
  }
456
474
  // Check if target can contain - using our new utility
457
- if (!(0, container_utils_1.canContain)(target)) {
475
+ if (!(0, container_utils_js_1.canContain)(target)) {
458
476
  return false;
459
477
  }
460
478
  // Check container constraints
461
- if (target.hasTrait(trait_types_1.TraitType.CONTAINER) && target.hasTrait(trait_types_1.TraitType.OPENABLE)) {
462
- const openable = target.getTrait(openableTrait_1.OpenableTrait);
479
+ if (target.hasTrait(trait_types_js_1.TraitType.CONTAINER) && target.hasTrait(trait_types_js_1.TraitType.OPENABLE)) {
480
+ const openable = target.getTrait(openableTrait_js_1.OpenableTrait);
463
481
  if (openable && !openable.isOpen) {
464
482
  return false;
465
483
  }
@@ -474,7 +492,7 @@ class WorldModel {
474
492
  if (!parent)
475
493
  return undefined;
476
494
  const parentEntity = this.getEntity(parent);
477
- if (parentEntity?.hasTrait(trait_types_1.TraitType.ROOM)) {
495
+ if (parentEntity?.hasTrait(trait_types_js_1.TraitType.ROOM)) {
478
496
  return parentEntity;
479
497
  }
480
498
  current = parent;
@@ -489,16 +507,9 @@ class WorldModel {
489
507
  if (visited.has(id) || depth > this.config.maxDepth)
490
508
  return;
491
509
  visited.add(id);
492
- // For the root entity, use the provided options
493
- // For recursive calls, always include worn items to get complete contents
494
- const contentsOptions = isRoot ? {
495
- visibleOnly: options.visibleOnly,
496
- includeWorn: options.includeWorn
497
- } : {
498
- visibleOnly: options.visibleOnly,
499
- includeWorn: true // Always include worn items when recursing
500
- };
501
- const contents = this.getContents(id, contentsOptions);
510
+ // ADR-247: worn items are always included now, so root and recursive
511
+ // calls share one options shape (visibleOnly still varies by caller).
512
+ const contents = this.getContents(id, { visibleOnly: options.visibleOnly });
502
513
  result.push(...contents);
503
514
  if (options.recursive) {
504
515
  contents.forEach(item => traverse(item.id, depth + 1, false));
@@ -617,7 +628,7 @@ class WorldModel {
617
628
  return [];
618
629
  const fromRoom = this.getEntity(fromRoomId);
619
630
  const toRoom = this.getEntity(toRoomId);
620
- if (!fromRoom?.hasTrait(trait_types_1.TraitType.ROOM) || !toRoom?.hasTrait(trait_types_1.TraitType.ROOM)) {
631
+ if (!fromRoom?.hasTrait(trait_types_js_1.TraitType.ROOM) || !toRoom?.hasTrait(trait_types_js_1.TraitType.ROOM)) {
621
632
  return null;
622
633
  }
623
634
  // Simple BFS pathfinding
@@ -632,7 +643,7 @@ class WorldModel {
632
643
  const room = this.getEntity(roomId);
633
644
  if (!room)
634
645
  continue;
635
- const roomTrait = room.getTrait(room_1.RoomTrait);
646
+ const roomTrait = room.getTrait(index_js_1.RoomTrait);
636
647
  const exits = roomTrait?.exits || {};
637
648
  for (const [direction, exitInfo] of Object.entries(exits)) {
638
649
  let targetRoom;
@@ -651,12 +662,12 @@ class WorldModel {
651
662
  continue;
652
663
  pathElement = exitInfo.via;
653
664
  // Get destination based on entity type
654
- if (exitEntity.hasTrait(trait_types_1.TraitType.DOOR)) {
655
- const door = exitEntity.getTrait(door_1.DoorTrait);
665
+ if (exitEntity.hasTrait(trait_types_js_1.TraitType.DOOR)) {
666
+ const door = exitEntity.getTrait(index_js_2.DoorTrait);
656
667
  targetRoom = door?.room1 === roomId ? door?.room2 : door?.room1;
657
668
  }
658
- else if (exitEntity.hasTrait(trait_types_1.TraitType.EXIT)) {
659
- targetRoom = exitEntity.getTrait(exitTrait_1.ExitTrait)?.to;
669
+ else if (exitEntity.hasTrait(trait_types_js_1.TraitType.EXIT)) {
670
+ targetRoom = exitEntity.getTrait(exitTrait_js_1.ExitTrait)?.to;
660
671
  }
661
672
  else {
662
673
  // Not a valid door/exit entity
@@ -719,6 +730,22 @@ class WorldModel {
719
730
  getMaxScore() {
720
731
  return this.scoreLedger.getMax();
721
732
  }
733
+ // Rank ladder (ADR-260) — delegates to ScoreLedger
734
+ setRanks(ranks) {
735
+ this.scoreLedger.setRanks(ranks);
736
+ }
737
+ getRanks() {
738
+ return this.scoreLedger.getRanks();
739
+ }
740
+ getRank() {
741
+ return this.scoreLedger.getRank();
742
+ }
743
+ setScoringEnabled(enabled) {
744
+ this.scoreLedger.setScoringEnabled(enabled);
745
+ }
746
+ isScoringEnabled() {
747
+ return this.scoreLedger.isScoringEnabled();
748
+ }
722
749
  // Persistence — delegates to WorldSerializer
723
750
  toJSON() {
724
751
  return this.serializer.serialize(this.getSerializableState(), this.scoreLedger);
@@ -901,6 +928,22 @@ class WorldModel {
901
928
  priority: 100,
902
929
  source: 'core'
903
930
  });
931
+ // A door is present at BOTH of its rooms (ADR-234 AC-3; David's ruling
932
+ // 2026-07-18): referenceable from either side. Only the door enters
933
+ // scope this way — the far room and its contents never do.
934
+ this.addScopeRule({
935
+ id: 'default_door_visibility',
936
+ fromLocations: '*',
937
+ includeEntities: (context) => this.findByTrait(trait_types_js_1.TraitType.DOOR)
938
+ .filter((door) => {
939
+ const doorTrait = door.get(trait_types_js_1.TraitType.DOOR);
940
+ return doorTrait !== undefined
941
+ && (doorTrait.room1 === context.currentLocation || doorTrait.room2 === context.currentLocation);
942
+ })
943
+ .map((door) => door.id),
944
+ priority: 50,
945
+ source: 'core'
946
+ });
904
947
  }
905
948
  /**
906
949
  * Get physically visible entities using VisibilityBehavior (line-of-sight)
@@ -922,7 +965,7 @@ class WorldModel {
922
965
  const observer = this.getEntity(observerId);
923
966
  if (!observer)
924
967
  return [];
925
- return VisibilityBehavior_1.VisibilityBehavior.getVisible(observer, this);
968
+ return VisibilityBehavior_js_1.VisibilityBehavior.getVisible(observer, this);
926
969
  }
927
970
  /**
928
971
  * Get entities in scope for command resolution using the scope system
@@ -965,22 +1008,49 @@ class WorldModel {
965
1008
  const target = this.getEntity(targetId);
966
1009
  if (!observer || !target)
967
1010
  return false;
968
- return VisibilityBehavior_1.VisibilityBehavior.canSee(observer, target, this);
1011
+ return VisibilityBehavior_js_1.VisibilityBehavior.canSee(observer, target, this);
969
1012
  }
970
1013
  // ========== Convenience Creators ==========
971
1014
  /**
972
1015
  * Create a bidirectional connection between two rooms.
973
1016
  * Sets exits in both directions (e.g. NORTH on room1, SOUTH on room2).
1017
+ *
1018
+ * With `doorId` (ADR-237 D4) this is the platform's one door-wiring
1019
+ * implementation: the door id is stamped on both exits (`via`) and the
1020
+ * door entity is placed in room1 for scope resolution. Throws if the id
1021
+ * resolves to no entity or to an entity without DoorTrait, or if the
1022
+ * trait's room pair disagrees with the rooms passed — the primitive owns
1023
+ * the invariant that DoorTrait and the exits never disagree.
974
1024
  */
975
- connectRooms(room1Id, room2Id, direction) {
1025
+ connectRooms(room1Id, room2Id, direction, doorId) {
976
1026
  const room1 = this.getEntity(room1Id);
977
1027
  const room2 = this.getEntity(room2Id);
978
1028
  if (!room1 || !room2) {
979
1029
  throw new Error(`connectRooms: both rooms must exist (${room1Id}, ${room2Id})`);
980
1030
  }
981
- const opposite = (0, directions_1.getOppositeDirection)(direction);
982
- roomBehavior_1.RoomBehavior.setExit(room1, direction, room2Id);
983
- roomBehavior_1.RoomBehavior.setExit(room2, opposite, room1Id);
1031
+ const opposite = (0, directions_js_1.getOppositeDirection)(direction);
1032
+ if (doorId === undefined) {
1033
+ roomBehavior_js_1.RoomBehavior.setExit(room1, direction, room2Id);
1034
+ roomBehavior_js_1.RoomBehavior.setExit(room2, opposite, room1Id);
1035
+ return;
1036
+ }
1037
+ const door = this.getEntity(doorId);
1038
+ if (!door) {
1039
+ throw new Error(`connectRooms: door must exist (${doorId})`);
1040
+ }
1041
+ const doorTrait = door.get(trait_types_js_1.TraitType.DOOR);
1042
+ if (!doorTrait) {
1043
+ throw new Error(`connectRooms: \`${doorId}\` has no DoorTrait — compose the trait before wiring`);
1044
+ }
1045
+ // DoorTrait's constructor requires both rooms, so the pair is always
1046
+ // pre-set: verify it names the rooms being wired (room1 = placement).
1047
+ if (doorTrait.room1 !== room1Id || doorTrait.room2 !== room2Id) {
1048
+ throw new Error(`connectRooms: DoorTrait on \`${doorId}\` connects (${doorTrait.room1}, ${doorTrait.room2}), not (${room1Id}, ${room2Id})`);
1049
+ }
1050
+ roomBehavior_js_1.RoomBehavior.setExit(room1, direction, room2Id, doorId);
1051
+ roomBehavior_js_1.RoomBehavior.setExit(room2, opposite, room1Id, doorId);
1052
+ // Place door in room1 for scope resolution
1053
+ this.moveEntity(doorId, room1Id);
984
1054
  }
985
1055
  /**
986
1056
  * Create a door entity and wire it into both rooms' exit data.
@@ -992,30 +1062,26 @@ class WorldModel {
992
1062
  if (!room1 || !room2) {
993
1063
  throw new Error(`createDoor: both rooms must exist (${opts.room1Id}, ${opts.room2Id})`);
994
1064
  }
995
- const door = this.createEntity(displayName, entity_types_1.EntityType.DOOR);
996
- door.add(new identityTrait_1.IdentityTrait({
1065
+ const door = this.createEntity(displayName, entity_types_js_1.EntityType.DOOR);
1066
+ door.add(new identityTrait_js_1.IdentityTrait({
997
1067
  name: displayName,
998
1068
  aliases: opts.aliases,
999
1069
  description: opts.description,
1000
1070
  }));
1001
- door.add(new door_1.DoorTrait({
1071
+ door.add(new index_js_2.DoorTrait({
1002
1072
  room1: opts.room1Id,
1003
1073
  room2: opts.room2Id,
1004
1074
  }));
1005
- door.add(new scenery_1.SceneryTrait());
1006
- door.add(new openableTrait_1.OpenableTrait({ isOpen: opts.isOpen ?? false }));
1075
+ door.add(new index_js_3.SceneryTrait());
1076
+ door.add(new openableTrait_js_1.OpenableTrait({ isOpen: opts.isOpen ?? false }));
1007
1077
  if (opts.isLocked !== undefined || opts.keyId) {
1008
- door.add(new lockableTrait_1.LockableTrait({
1078
+ door.add(new lockableTrait_js_1.LockableTrait({
1009
1079
  isLocked: opts.isLocked ?? true,
1010
1080
  ...(opts.keyId ? { keyId: opts.keyId } : {}),
1011
1081
  }));
1012
1082
  }
1013
- // Wire exits through the door
1014
- const opposite = (0, directions_1.getOppositeDirection)(opts.direction);
1015
- roomBehavior_1.RoomBehavior.setExit(room1, opts.direction, opts.room2Id, door.id);
1016
- roomBehavior_1.RoomBehavior.setExit(room2, opposite, opts.room1Id, door.id);
1017
- // Place door in room1 for scope resolution
1018
- this.moveEntity(door.id, opts.room1Id);
1083
+ // One wiring path (ADR-237 D4)
1084
+ this.connectRooms(opts.room1Id, opts.room2Id, opts.direction, door.id);
1019
1085
  return door;
1020
1086
  }
1021
1087
  // ── Wall Adjacency (ADR-173) ─────────────────────────────────────
@@ -1028,7 +1094,7 @@ class WorldModel {
1028
1094
  * @throws Error on any validation failure (per ADR-173 §"Rejection rules").
1029
1095
  */
1030
1096
  createWall(spec) {
1031
- return (0, wall_creation_1.createWall)(this.wallCreationSurface(), spec);
1097
+ return (0, wall_creation_js_1.createWall)(this.wallCreationSurface(), spec);
1032
1098
  }
1033
1099
  /**
1034
1100
  * Creates N walls between `from` and each room in `to` (ADR-173
@@ -1036,7 +1102,7 @@ class WorldModel {
1036
1102
  * on the K-th pair leaves walls 0..K-1 in the world.
1037
1103
  */
1038
1104
  createWalls(spec) {
1039
- return (0, wall_creation_1.createWalls)(this.wallCreationSurface(), spec);
1105
+ return (0, wall_creation_js_1.createWalls)(this.wallCreationSurface(), spec);
1040
1106
  }
1041
1107
  /**
1042
1108
  * Adapter exposing the narrow surface `wall-creation` requires
@@ -1046,7 +1112,7 @@ class WorldModel {
1046
1112
  return {
1047
1113
  getEntity: (id) => this.getEntity(id),
1048
1114
  getLocation: (entityId) => this.getLocation(entityId),
1049
- generateWallId: () => this.generateId(entity_types_1.EntityType.WALL),
1115
+ generateWallId: () => this.generateId(entity_types_js_1.EntityType.WALL),
1050
1116
  registerWall: (wall) => {
1051
1117
  this.entities.set(wall.id, wall);
1052
1118
  },
@@ -1068,14 +1134,14 @@ class WorldModel {
1068
1134
  if (options.parentRegionId && !this.hasEntity(options.parentRegionId)) {
1069
1135
  throw new Error(`createRegion: parent region '${options.parentRegionId}' not found`);
1070
1136
  }
1071
- const entity = new if_entity_1.IFEntity(id, entity_types_1.EntityType.REGION, {
1137
+ const entity = new if_entity_js_1.IFEntity(id, entity_types_js_1.EntityType.REGION, {
1072
1138
  attributes: {
1073
1139
  displayName: options.name,
1074
1140
  name: options.name,
1075
- entityType: entity_types_1.EntityType.REGION,
1141
+ entityType: entity_types_js_1.EntityType.REGION,
1076
1142
  },
1077
1143
  });
1078
- entity.add(new regionTrait_1.RegionTrait(options));
1144
+ entity.add(new regionTrait_js_1.RegionTrait(options));
1079
1145
  this.entities.set(id, entity);
1080
1146
  return entity;
1081
1147
  }
@@ -1091,7 +1157,7 @@ class WorldModel {
1091
1157
  if (!room) {
1092
1158
  throw new Error(`assignRoom: room '${roomId}' not found`);
1093
1159
  }
1094
- const roomTrait = room.get(trait_types_1.TraitType.ROOM);
1160
+ const roomTrait = room.get(trait_types_js_1.TraitType.ROOM);
1095
1161
  if (!roomTrait) {
1096
1162
  throw new Error(`assignRoom: entity '${roomId}' does not have RoomTrait`);
1097
1163
  }
@@ -1099,7 +1165,7 @@ class WorldModel {
1099
1165
  if (!region) {
1100
1166
  throw new Error(`assignRoom: region '${regionId}' not found`);
1101
1167
  }
1102
- if (!region.hasTrait(trait_types_1.TraitType.REGION)) {
1168
+ if (!region.hasTrait(trait_types_js_1.TraitType.REGION)) {
1103
1169
  throw new Error(`assignRoom: entity '${regionId}' is not a region`);
1104
1170
  }
1105
1171
  roomTrait.regionId = regionId;
@@ -1120,14 +1186,14 @@ class WorldModel {
1120
1186
  // If the entity is a room, use its regionId directly.
1121
1187
  // Otherwise, resolve the containing room.
1122
1188
  let roomRegionId;
1123
- if (entity.type === entity_types_1.EntityType.ROOM) {
1124
- roomRegionId = entity.get(trait_types_1.TraitType.ROOM)?.regionId;
1189
+ if (entity.type === entity_types_js_1.EntityType.ROOM) {
1190
+ roomRegionId = entity.get(trait_types_js_1.TraitType.ROOM)?.regionId;
1125
1191
  }
1126
1192
  else {
1127
1193
  const room = this.getContainingRoom(entityId);
1128
1194
  if (!room)
1129
1195
  return false;
1130
- roomRegionId = room.get(trait_types_1.TraitType.ROOM)?.regionId;
1196
+ roomRegionId = room.get(trait_types_js_1.TraitType.ROOM)?.regionId;
1131
1197
  }
1132
1198
  if (!roomRegionId)
1133
1199
  return false;
@@ -1146,10 +1212,10 @@ class WorldModel {
1146
1212
  const fromRoom = this.getEntity(fromRoomId);
1147
1213
  const toRoom = this.getEntity(toRoomId);
1148
1214
  const fromChain = fromRoom
1149
- ? this.getRegionAncestry(fromRoom.get(trait_types_1.TraitType.ROOM)?.regionId)
1215
+ ? this.getRegionAncestry(fromRoom.get(trait_types_js_1.TraitType.ROOM)?.regionId)
1150
1216
  : [];
1151
1217
  const toChain = toRoom
1152
- ? this.getRegionAncestry(toRoom.get(trait_types_1.TraitType.ROOM)?.regionId)
1218
+ ? this.getRegionAncestry(toRoom.get(trait_types_js_1.TraitType.ROOM)?.regionId)
1153
1219
  : [];
1154
1220
  // Convert to sets for fast lookup
1155
1221
  const fromSet = new Set(fromChain);
@@ -1176,7 +1242,7 @@ class WorldModel {
1176
1242
  const region = this.getEntity(currentId);
1177
1243
  if (!region)
1178
1244
  break;
1179
- const trait = region.get(trait_types_1.TraitType.REGION);
1245
+ const trait = region.get(trait_types_js_1.TraitType.REGION);
1180
1246
  if (!trait)
1181
1247
  break;
1182
1248
  chain.push(currentId);
@@ -1199,7 +1265,7 @@ class WorldModel {
1199
1265
  const region = this.getEntity(currentId);
1200
1266
  if (!region)
1201
1267
  return false;
1202
- const trait = region.get(trait_types_1.TraitType.REGION);
1268
+ const trait = region.get(trait_types_js_1.TraitType.REGION);
1203
1269
  if (!trait)
1204
1270
  return false;
1205
1271
  currentId = trait.parentRegionId;
@@ -1218,14 +1284,14 @@ class WorldModel {
1218
1284
  if (this.hasEntity(id)) {
1219
1285
  throw new Error(`createScene: entity '${id}' already exists`);
1220
1286
  }
1221
- const entity = new if_entity_1.IFEntity(id, entity_types_1.EntityType.SCENE, {
1287
+ const entity = new if_entity_js_1.IFEntity(id, entity_types_js_1.EntityType.SCENE, {
1222
1288
  attributes: {
1223
1289
  displayName: options.name,
1224
1290
  name: options.name,
1225
- entityType: entity_types_1.EntityType.SCENE,
1291
+ entityType: entity_types_js_1.EntityType.SCENE,
1226
1292
  },
1227
1293
  });
1228
- entity.add(new sceneTrait_1.SceneTrait({
1294
+ entity.add(new sceneTrait_js_1.SceneTrait({
1229
1295
  name: options.name,
1230
1296
  recurring: options.recurring,
1231
1297
  }));
@@ -1267,7 +1333,7 @@ class WorldModel {
1267
1333
  const entity = this.getEntity(sceneId);
1268
1334
  if (!entity)
1269
1335
  return false;
1270
- return entity.get(trait_types_1.TraitType.SCENE)?.state === 'active';
1336
+ return entity.get(trait_types_js_1.TraitType.SCENE)?.state === 'active';
1271
1337
  }
1272
1338
  /**
1273
1339
  * Returns true if the scene has reached the 'ended' state.
@@ -1280,7 +1346,7 @@ class WorldModel {
1280
1346
  const entity = this.getEntity(sceneId);
1281
1347
  if (!entity)
1282
1348
  return false;
1283
- return entity.get(trait_types_1.TraitType.SCENE)?.state === 'ended';
1349
+ return entity.get(trait_types_js_1.TraitType.SCENE)?.state === 'ended';
1284
1350
  }
1285
1351
  /**
1286
1352
  * Returns true if the scene has ever been active (beganAtTurn is set).
@@ -1291,7 +1357,7 @@ class WorldModel {
1291
1357
  const entity = this.getEntity(sceneId);
1292
1358
  if (!entity)
1293
1359
  return false;
1294
- return entity.get(trait_types_1.TraitType.SCENE)?.beganAtTurn !== undefined;
1360
+ return entity.get(trait_types_js_1.TraitType.SCENE)?.beganAtTurn !== undefined;
1295
1361
  }
1296
1362
  }
1297
1363
  exports.WorldModel = WorldModel;