@sharpee/world-model 2.2.0 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/behaviors/index.d.ts +1 -0
  2. package/behaviors/index.d.ts.map +1 -1
  3. package/behaviors/index.js +4 -1
  4. package/behaviors/index.js.map +1 -1
  5. package/capabilities/action-interceptor.d.ts +93 -6
  6. package/capabilities/action-interceptor.d.ts.map +1 -1
  7. package/capabilities/action-interceptor.js +59 -2
  8. package/capabilities/action-interceptor.js.map +1 -1
  9. package/capabilities/index.d.ts +1 -1
  10. package/capabilities/index.d.ts.map +1 -1
  11. package/capabilities/index.js +2 -1
  12. package/capabilities/index.js.map +1 -1
  13. package/index.d.ts +13 -0
  14. package/index.d.ts.map +1 -1
  15. package/index.js +23 -0
  16. package/index.js.map +1 -1
  17. package/package.json +3 -3
  18. package/traits/combatant/combatantBehavior.d.ts +23 -18
  19. package/traits/combatant/combatantBehavior.d.ts.map +1 -1
  20. package/traits/combatant/combatantBehavior.js +47 -45
  21. package/traits/combatant/combatantBehavior.js.map +1 -1
  22. package/traits/combatant/combatantTrait.d.ts +14 -48
  23. package/traits/combatant/combatantTrait.d.ts.map +1 -1
  24. package/traits/combatant/combatantTrait.js +13 -80
  25. package/traits/combatant/combatantTrait.js.map +1 -1
  26. package/traits/cuttable/cuttableBehavior.d.ts +23 -0
  27. package/traits/cuttable/cuttableBehavior.d.ts.map +1 -0
  28. package/traits/cuttable/cuttableBehavior.js +39 -0
  29. package/traits/cuttable/cuttableBehavior.js.map +1 -0
  30. package/traits/cuttable/cuttableTrait.d.ts +37 -0
  31. package/traits/cuttable/cuttableTrait.d.ts.map +1 -0
  32. package/traits/cuttable/cuttableTrait.js +30 -0
  33. package/traits/cuttable/cuttableTrait.js.map +1 -0
  34. package/traits/cuttable/index.d.ts +3 -0
  35. package/traits/cuttable/index.d.ts.map +1 -0
  36. package/traits/cuttable/index.js +20 -0
  37. package/traits/cuttable/index.js.map +1 -0
  38. package/traits/deadly-room/deadlyRoomBehavior.d.ts +48 -0
  39. package/traits/deadly-room/deadlyRoomBehavior.d.ts.map +1 -0
  40. package/traits/deadly-room/deadlyRoomBehavior.js +59 -0
  41. package/traits/deadly-room/deadlyRoomBehavior.js.map +1 -0
  42. package/traits/deadly-room/deadlyRoomTrait.d.ts +51 -0
  43. package/traits/deadly-room/deadlyRoomTrait.d.ts.map +1 -0
  44. package/traits/deadly-room/deadlyRoomTrait.js +37 -0
  45. package/traits/deadly-room/deadlyRoomTrait.js.map +1 -0
  46. package/traits/deadly-room/index.d.ts +3 -0
  47. package/traits/deadly-room/index.d.ts.map +1 -0
  48. package/traits/deadly-room/index.js +8 -0
  49. package/traits/deadly-room/index.js.map +1 -0
  50. package/traits/diggable/diggableBehavior.d.ts +23 -0
  51. package/traits/diggable/diggableBehavior.d.ts.map +1 -0
  52. package/traits/diggable/diggableBehavior.js +39 -0
  53. package/traits/diggable/diggableBehavior.js.map +1 -0
  54. package/traits/diggable/diggableTrait.d.ts +37 -0
  55. package/traits/diggable/diggableTrait.d.ts.map +1 -0
  56. package/traits/diggable/diggableTrait.js +30 -0
  57. package/traits/diggable/diggableTrait.js.map +1 -0
  58. package/traits/diggable/index.d.ts +3 -0
  59. package/traits/diggable/index.d.ts.map +1 -0
  60. package/traits/diggable/index.js +20 -0
  61. package/traits/diggable/index.js.map +1 -0
  62. package/traits/health/healthBehavior.d.ts +66 -0
  63. package/traits/health/healthBehavior.d.ts.map +1 -0
  64. package/traits/health/healthBehavior.js +98 -0
  65. package/traits/health/healthBehavior.js.map +1 -0
  66. package/traits/health/healthTrait.d.ts +60 -0
  67. package/traits/health/healthTrait.d.ts.map +1 -0
  68. package/traits/health/healthTrait.js +49 -0
  69. package/traits/health/healthTrait.js.map +1 -0
  70. package/traits/health/index.d.ts +3 -0
  71. package/traits/health/index.d.ts.map +1 -0
  72. package/traits/health/index.js +8 -0
  73. package/traits/health/index.js.map +1 -0
  74. package/traits/implementations.d.ts +5 -1
  75. package/traits/implementations.d.ts.map +1 -1
  76. package/traits/implementations.js +15 -1
  77. package/traits/implementations.js.map +1 -1
  78. package/traits/index.d.ts +4 -0
  79. package/traits/index.d.ts.map +1 -1
  80. package/traits/index.js +5 -0
  81. package/traits/index.js.map +1 -1
  82. package/traits/npc/npcTrait.d.ts +5 -27
  83. package/traits/npc/npcTrait.d.ts.map +1 -1
  84. package/traits/npc/npcTrait.js +0 -38
  85. package/traits/npc/npcTrait.js.map +1 -1
  86. package/traits/openable/openableBehavior.d.ts +10 -0
  87. package/traits/openable/openableBehavior.d.ts.map +1 -1
  88. package/traits/openable/openableBehavior.js +21 -0
  89. package/traits/openable/openableBehavior.js.map +1 -1
  90. package/traits/openable/openableTrait.d.ts +7 -0
  91. package/traits/openable/openableTrait.d.ts.map +1 -1
  92. package/traits/openable/openableTrait.js +4 -0
  93. package/traits/openable/openableTrait.js.map +1 -1
  94. package/traits/room/roomTrait.d.ts +8 -3
  95. package/traits/room/roomTrait.d.ts.map +1 -1
  96. package/traits/room/roomTrait.js +2 -2
  97. package/traits/room/roomTrait.js.map +1 -1
  98. package/traits/trait-types.d.ts +4 -0
  99. package/traits/trait-types.d.ts.map +1 -1
  100. package/traits/trait-types.js +12 -0
  101. package/traits/trait-types.js.map +1 -1
  102. package/world/AuthorModel.d.ts +2 -1
  103. package/world/AuthorModel.d.ts.map +1 -1
  104. package/world/AuthorModel.js +3 -0
  105. package/world/AuthorModel.js.map +1 -1
  106. package/world/VisibilityBehavior.d.ts +1 -1
  107. package/world/VisibilityBehavior.js +4 -4
  108. package/world/VisibilityBehavior.js.map +1 -1
  109. package/world/WorldModel.d.ts +38 -0
  110. package/world/WorldModel.d.ts.map +1 -1
  111. package/world/WorldModel.js +34 -1
  112. package/world/WorldModel.js.map +1 -1
  113. package/world/index.d.ts +1 -1
  114. package/world/index.d.ts.map +1 -1
  115. package/world/index.js.map +1 -1
@@ -13,6 +13,7 @@ export { BreakableBehavior } from '../traits/breakable/breakableBehavior';
13
13
  export { DestructibleBehavior } from '../traits/destructible/destructibleBehavior';
14
14
  export { CombatBehavior } from '../traits/combatant/combatantBehavior';
15
15
  export { AttackBehavior, IAttackResult } from './attack';
16
+ export { HealthBehavior } from '../traits/health/healthBehavior';
16
17
  export type { IOpenResult, ICloseResult } from '../traits/openable/openableBehavior';
17
18
  export type { IWeaponDamageResult } from '../traits/weapon/weaponBehavior';
18
19
  export type { IBreakResult } from '../traits/breakable/breakableBehavior';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../repos/sharpee_v2/packages/world-model/src/behaviors/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAIjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAGvE,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,6CAA6C,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGzD,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACrF,YAAY,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,YAAY,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAC1E,YAAY,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AACjF,YAAY,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../repos/sharpee_v2/packages/world-model/src/behaviors/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAIjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAGvE,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,6CAA6C,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGzD,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAGjE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACrF,YAAY,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,YAAY,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAC1E,YAAY,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AACjF,YAAY,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC"}
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  // packages/world-model/src/behaviors/index.ts
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.AttackBehavior = exports.CombatBehavior = exports.DestructibleBehavior = exports.BreakableBehavior = exports.WeaponBehavior = exports.LockableBehavior = exports.OpenableBehavior = exports.ClimbableBehavior = exports.ExitBehavior = exports.LightSourceBehavior = exports.ReadableBehavior = exports.WearableBehavior = exports.SceneryBehavior = exports.ContainerBehavior = exports.isWorldAwareBehavior = exports.Behavior = void 0;
4
+ exports.HealthBehavior = exports.AttackBehavior = exports.CombatBehavior = exports.DestructibleBehavior = exports.BreakableBehavior = exports.WeaponBehavior = exports.LockableBehavior = exports.OpenableBehavior = exports.ClimbableBehavior = exports.ExitBehavior = exports.LightSourceBehavior = exports.ReadableBehavior = exports.WearableBehavior = exports.SceneryBehavior = exports.ContainerBehavior = exports.isWorldAwareBehavior = exports.Behavior = void 0;
5
5
  var behavior_1 = require("./behavior");
6
6
  Object.defineProperty(exports, "Behavior", { enumerable: true, get: function () { return behavior_1.Behavior; } });
7
7
  Object.defineProperty(exports, "isWorldAwareBehavior", { enumerable: true, get: function () { return behavior_1.isWorldAwareBehavior; } });
@@ -36,4 +36,7 @@ var combatantBehavior_1 = require("../traits/combatant/combatantBehavior");
36
36
  Object.defineProperty(exports, "CombatBehavior", { enumerable: true, get: function () { return combatantBehavior_1.CombatBehavior; } });
37
37
  var attack_1 = require("./attack");
38
38
  Object.defineProperty(exports, "AttackBehavior", { enumerable: true, get: function () { return attack_1.AttackBehavior; } });
39
+ // Health / life-state (ADR-226, ADR-223 child A)
40
+ var healthBehavior_1 = require("../traits/health/healthBehavior");
41
+ Object.defineProperty(exports, "HealthBehavior", { enumerable: true, get: function () { return healthBehavior_1.HealthBehavior; } });
39
42
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../repos/sharpee_v2/packages/world-model/src/behaviors/index.ts"],"names":[],"mappings":";AAAA,8CAA8C;;;AAE9C,uCAAiF;AAAxE,oGAAA,QAAQ,OAAA;AAAuB,gHAAA,oBAAoB,OAAA;AAE5D,mDAAmD;AACnD,yCAAyC;AACzC,2EAA0E;AAAjE,sHAAA,iBAAiB,OAAA;AAC1B,qEAAoE;AAA3D,kHAAA,eAAe,OAAA;AACxB,wEAAuE;AAA9D,oHAAA,gBAAgB,OAAA;AACzB,wEAAuE;AAA9D,oHAAA,gBAAgB,OAAA;AACzB,kFAAiF;AAAxE,0HAAA,mBAAmB,OAAA;AAC5B,4DAA2D;AAAlD,4GAAA,YAAY,OAAA;AACrB,2EAA0E;AAAjE,sHAAA,iBAAiB,OAAA;AAC1B,wEAAuE;AAA9D,oHAAA,gBAAgB,OAAA;AACzB,wEAAuE;AAA9D,oHAAA,gBAAgB,OAAA;AAEzB,mBAAmB;AACnB,kEAAiE;AAAxD,gHAAA,cAAc,OAAA;AACvB,2EAA0E;AAAjE,sHAAA,iBAAiB,OAAA;AAC1B,oFAAmF;AAA1E,4HAAA,oBAAoB,OAAA;AAC7B,2EAAuE;AAA9D,mHAAA,cAAc,OAAA;AACvB,mCAAyD;AAAhD,wGAAA,cAAc,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../repos/sharpee_v2/packages/world-model/src/behaviors/index.ts"],"names":[],"mappings":";AAAA,8CAA8C;;;AAE9C,uCAAiF;AAAxE,oGAAA,QAAQ,OAAA;AAAuB,gHAAA,oBAAoB,OAAA;AAE5D,mDAAmD;AACnD,yCAAyC;AACzC,2EAA0E;AAAjE,sHAAA,iBAAiB,OAAA;AAC1B,qEAAoE;AAA3D,kHAAA,eAAe,OAAA;AACxB,wEAAuE;AAA9D,oHAAA,gBAAgB,OAAA;AACzB,wEAAuE;AAA9D,oHAAA,gBAAgB,OAAA;AACzB,kFAAiF;AAAxE,0HAAA,mBAAmB,OAAA;AAC5B,4DAA2D;AAAlD,4GAAA,YAAY,OAAA;AACrB,2EAA0E;AAAjE,sHAAA,iBAAiB,OAAA;AAC1B,wEAAuE;AAA9D,oHAAA,gBAAgB,OAAA;AACzB,wEAAuE;AAA9D,oHAAA,gBAAgB,OAAA;AAEzB,mBAAmB;AACnB,kEAAiE;AAAxD,gHAAA,cAAc,OAAA;AACvB,2EAA0E;AAAjE,sHAAA,iBAAiB,OAAA;AAC1B,oFAAmF;AAA1E,4HAAA,oBAAoB,OAAA;AAC7B,2EAAuE;AAA9D,mHAAA,cAAc,OAAA;AACvB,mCAAyD;AAAhD,wGAAA,cAAc,OAAA;AAEvB,iDAAiD;AACjD,kEAAiE;AAAxD,gHAAA,cAAc,OAAA"}
@@ -81,6 +81,44 @@ export interface InterceptorReportResult {
81
81
  /** Emit additional events alongside the action's standard events. */
82
82
  emit?: CapabilityEffect[];
83
83
  }
84
+ /**
85
+ * Result returned by `ActionInterceptor.onBlocked` (ADR-228, D2).
86
+ *
87
+ * Structurally symmetric with `InterceptorReportResult` so the whole
88
+ * interceptor API is teachable as one pattern:
89
+ *
90
+ * 1. `override` — swap the standard blocked event's `messageId` (and
91
+ * optional params/text). The blocked event's **type survives intact**
92
+ * (`if.event.take_blocked` etc.), so tests and state machines keyed on
93
+ * blocked events keep working while the interceptor controls the
94
+ * refusal's presentation.
95
+ *
96
+ * 2. `emit` — additional effects appended after the standard blocked
97
+ * event (side-channel narration, death events, etc.).
98
+ *
99
+ * Returning `null` or `{}` means standard blocked handling.
100
+ *
101
+ * The bare `CapabilityEffect[]` form (replace-the-event, with `[]`
102
+ * silently suppressing it) is retired: the standard blocked event is the
103
+ * machine-readable record of the refusal and can no longer be eaten.
104
+ * Note the primary custom-refusal path is unchanged and does not go
105
+ * through onBlocked at all: a pre/postValidate hook returning
106
+ * `{valid: false, error: customMessageId}` renders that message on the
107
+ * blocked event (the white-hot-axe pattern).
108
+ *
109
+ * @see applyInterceptorBlockedResult
110
+ */
111
+ export interface InterceptorBlockedResult {
112
+ /** Override the standard blocked event's messageId (and optional params/text).
113
+ * The event type is preserved. */
114
+ override?: {
115
+ messageId: string;
116
+ params?: Record<string, unknown>;
117
+ text?: string;
118
+ };
119
+ /** Emit additional effects after the standard blocked event. */
120
+ emit?: CapabilityEffect[];
121
+ }
84
122
  /**
85
123
  * Minimal context shape required by `applyInterceptorReportResult`.
86
124
  *
@@ -115,6 +153,11 @@ export interface InterceptorEventContext {
115
153
  * @param result - The value returned from `interceptor.postReport`.
116
154
  * @param context - The action context (any object exposing
117
155
  * `event(type, data)`).
156
+ * @param options - `searchFrom`: index in `events` from which override
157
+ * targeting searches (default 0). Per-item applications
158
+ * in multi-object commands (ADR-228 D4) pass the index
159
+ * where the item's report began so the override lands on
160
+ * that item's event, not an earlier item's.
118
161
  *
119
162
  * @example
120
163
  * ```typescript
@@ -126,7 +169,36 @@ export interface InterceptorEventContext {
126
169
  * }
127
170
  * ```
128
171
  */
129
- export declare function applyInterceptorReportResult(events: ISemanticEvent[], primaryEventType: string, result: InterceptorReportResult, context: InterceptorEventContext): void;
172
+ export declare function applyInterceptorReportResult(events: ISemanticEvent[], primaryEventType: string, result: InterceptorReportResult, context: InterceptorEventContext, options?: {
173
+ searchFrom?: number;
174
+ }): void;
175
+ /**
176
+ * Apply an interceptor's `onBlocked` result to an action's blocked events.
177
+ *
178
+ * - If `result.override` is set, copies `messageId` (and optional `params`/`text`)
179
+ * onto the data of the event whose type matches `blockedEventType`. The
180
+ * event itself — the machine-readable record of the refusal — survives.
181
+ * - If `result.emit` is set, converts each effect to an `ISemanticEvent`
182
+ * via `context.event(...)` and appends to `events`.
183
+ *
184
+ * The action's `blocked()` phase calls this helper with the events array
185
+ * it has built (containing the standard blocked event), the blocked event
186
+ * type (e.g. `'if.event.take_blocked'`), and the action context.
187
+ *
188
+ * @param events - The action's blocked events array; mutated in place.
189
+ * @param blockedEventType - The event type whose `messageId` an `override`
190
+ * should replace (e.g. `'if.event.take_blocked'`).
191
+ * @param result - The value returned from `interceptor.onBlocked`.
192
+ * @param context - The action context (any object exposing
193
+ * `event(type, data)`).
194
+ * @param options - `searchFrom`: index in `events` from which override
195
+ * targeting searches (default 0). See
196
+ * `applyInterceptorReportResult` for the ADR-228 D4
197
+ * per-item rationale.
198
+ */
199
+ export declare function applyInterceptorBlockedResult(events: ISemanticEvent[], blockedEventType: string, result: InterceptorBlockedResult, context: InterceptorEventContext, options?: {
200
+ searchFrom?: number;
201
+ }): void;
130
202
  /**
131
203
  * Action interceptor interface.
132
204
  *
@@ -268,18 +340,33 @@ export interface ActionInterceptor {
268
340
  /**
269
341
  * Called when action is blocked (validation failed).
270
342
  *
271
- * Use this to provide custom blocked handling for this entity.
272
- * Return effects to emit, or null to use standard blocked handling.
343
+ * Return an `InterceptorBlockedResult` (ADR-228, D2) that declares either:
344
+ * - `override`: swap the standard blocked event's `messageId` the event
345
+ * type survives as the machine-readable record of the refusal, or
346
+ * - `emit`: additional effects appended after the standard blocked event
347
+ * (side-channel narration, death events), or
348
+ * - both, or `null`/`{}` for standard blocked handling.
349
+ *
350
+ * The action's `blocked()` phase applies the result via
351
+ * `applyInterceptorBlockedResult`.
273
352
  *
274
353
  * @example
275
- * // Custom message when troll blocks entry
354
+ * // Override: richer refusal presentation, record event intact
276
355
  * onBlocked(entity, world, actorId, error, sharedData) {
277
356
  * if (error === 'dungeo.troll.blocks_path') {
278
- * return [createEffect('game.message', { messageId: 'dungeo.troll.snarls' })];
357
+ * return { override: { messageId: 'dungeo.troll.snarls' } };
279
358
  * }
280
359
  * return null; // Use standard blocked handling
281
360
  * }
361
+ *
362
+ * @example
363
+ * // Emit: refusal has side effects (poison death on blocked take)
364
+ * onBlocked(entity, world, actorId, error, sharedData) {
365
+ * if (!sharedData.poisonDeath) return null;
366
+ * killPlayer(world, world.getPlayer()!, { cause: 'poison', terminal: true });
367
+ * return { emit: [createEffect(PLAYER_DIED_EVENT, { cause: 'poison', terminal: true })] };
368
+ * }
282
369
  */
283
- onBlocked?(entity: IFEntity, world: WorldModel, actorId: string, error: string, sharedData: InterceptorSharedData): CapabilityEffect[] | null;
370
+ onBlocked?(entity: IFEntity, world: WorldModel, actorId: string, error: string, sharedData: InterceptorSharedData): InterceptorBlockedResult | null;
284
371
  }
285
372
  //# sourceMappingURL=action-interceptor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"action-interceptor.d.ts","sourceRoot":"","sources":["../../../../../../../repos/sharpee_v2/packages/world-model/src/capabilities/action-interceptor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE3C;;;;;;GAMG;AACH,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE5D;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,qCAAqC;IACrC,KAAK,EAAE,OAAO,CAAC;IACf,2DAA2D;IAC3D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4CAA4C;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,WAAW,uBAAuB;IACtC;;;;;;;;;;;iFAW6E;IAC7E,QAAQ,CAAC,EAAE;QACT,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACjC,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IAEF,qEAAqE;IACrE,IAAI,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAC3B;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,uBAAuB;IACtC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,cAAc,CAAC;CAChE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,cAAc,EAAE,EACxB,gBAAgB,EAAE,MAAM,EACxB,MAAM,EAAE,uBAAuB,EAC/B,OAAO,EAAE,uBAAuB,GAC/B,IAAI,CA4BN;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;;;;;;;;;;;;;OAeG;IACH,WAAW,CAAC,CACV,MAAM,EAAE,QAAQ,EAChB,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,qBAAqB,GAChC,iBAAiB,GAAG,IAAI,CAAC;IAE5B;;;;;;;;;;;;;;;;;;OAkBG;IACH,YAAY,CAAC,CACX,MAAM,EAAE,QAAQ,EAChB,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,qBAAqB,GAChC,iBAAiB,GAAG,IAAI,CAAC;IAE5B;;;;;;;;;;;;;;OAcG;IACH,WAAW,CAAC,CACV,MAAM,EAAE,QAAQ,EAChB,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,qBAAqB,GAChC,IAAI,CAAC;IAER;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAmCG;IACH,UAAU,CAAC,CACT,MAAM,EAAE,QAAQ,EAChB,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,qBAAqB,GAChC,uBAAuB,CAAC;IAE3B;;;;;;;;;;;;;;OAcG;IACH,SAAS,CAAC,CACR,MAAM,EAAE,QAAQ,EAChB,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,qBAAqB,GAChC,gBAAgB,EAAE,GAAG,IAAI,CAAC;CAC9B"}
1
+ {"version":3,"file":"action-interceptor.d.ts","sourceRoot":"","sources":["../../../../../../../repos/sharpee_v2/packages/world-model/src/capabilities/action-interceptor.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,7 @@
13
13
  */
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.applyInterceptorReportResult = applyInterceptorReportResult;
16
+ exports.applyInterceptorBlockedResult = applyInterceptorBlockedResult;
16
17
  /**
17
18
  * Apply an interceptor's `postReport` result to an action's emitted events.
18
19
  *
@@ -33,6 +34,11 @@ exports.applyInterceptorReportResult = applyInterceptorReportResult;
33
34
  * @param result - The value returned from `interceptor.postReport`.
34
35
  * @param context - The action context (any object exposing
35
36
  * `event(type, data)`).
37
+ * @param options - `searchFrom`: index in `events` from which override
38
+ * targeting searches (default 0). Per-item applications
39
+ * in multi-object commands (ADR-228 D4) pass the index
40
+ * where the item's report began so the override lands on
41
+ * that item's event, not an earlier item's.
36
42
  *
37
43
  * @example
38
44
  * ```typescript
@@ -44,9 +50,9 @@ exports.applyInterceptorReportResult = applyInterceptorReportResult;
44
50
  * }
45
51
  * ```
46
52
  */
47
- function applyInterceptorReportResult(events, primaryEventType, result, context) {
53
+ function applyInterceptorReportResult(events, primaryEventType, result, context, options) {
48
54
  if (result.override) {
49
- const primary = events.find((e) => e.type === primaryEventType);
55
+ const primary = events.find((e, i) => i >= (options?.searchFrom ?? 0) && e.type === primaryEventType);
50
56
  if (primary) {
51
57
  const data = primary.data;
52
58
  data.messageId = result.override.messageId;
@@ -71,4 +77,55 @@ function applyInterceptorReportResult(events, primaryEventType, result, context)
71
77
  }
72
78
  }
73
79
  }
80
+ /**
81
+ * Apply an interceptor's `onBlocked` result to an action's blocked events.
82
+ *
83
+ * - If `result.override` is set, copies `messageId` (and optional `params`/`text`)
84
+ * onto the data of the event whose type matches `blockedEventType`. The
85
+ * event itself — the machine-readable record of the refusal — survives.
86
+ * - If `result.emit` is set, converts each effect to an `ISemanticEvent`
87
+ * via `context.event(...)` and appends to `events`.
88
+ *
89
+ * The action's `blocked()` phase calls this helper with the events array
90
+ * it has built (containing the standard blocked event), the blocked event
91
+ * type (e.g. `'if.event.take_blocked'`), and the action context.
92
+ *
93
+ * @param events - The action's blocked events array; mutated in place.
94
+ * @param blockedEventType - The event type whose `messageId` an `override`
95
+ * should replace (e.g. `'if.event.take_blocked'`).
96
+ * @param result - The value returned from `interceptor.onBlocked`.
97
+ * @param context - The action context (any object exposing
98
+ * `event(type, data)`).
99
+ * @param options - `searchFrom`: index in `events` from which override
100
+ * targeting searches (default 0). See
101
+ * `applyInterceptorReportResult` for the ADR-228 D4
102
+ * per-item rationale.
103
+ */
104
+ function applyInterceptorBlockedResult(events, blockedEventType, result, context, options) {
105
+ if (result.override) {
106
+ const blocked = events.find((e, i) => i >= (options?.searchFrom ?? 0) && e.type === blockedEventType);
107
+ if (blocked) {
108
+ const data = blocked.data;
109
+ data.messageId = result.override.messageId;
110
+ if (result.override.params) {
111
+ data.params = result.override.params;
112
+ }
113
+ if (result.override.text) {
114
+ data.text = result.override.text;
115
+ }
116
+ }
117
+ else {
118
+ // Defensive: an interceptor asked for an override but the action
119
+ // didn't emit a blocked event of that type. Either the action's
120
+ // contract changed or the interceptor is misconfigured.
121
+ console.warn(`applyInterceptorBlockedResult: override requested for blocked event type ` +
122
+ `"${blockedEventType}" but no event of that type was found in the events array.`);
123
+ }
124
+ }
125
+ if (result.emit) {
126
+ for (const effect of result.emit) {
127
+ events.push(context.event(effect.type, effect.payload));
128
+ }
129
+ }
130
+ }
74
131
  //# sourceMappingURL=action-interceptor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"action-interceptor.js","sourceRoot":"","sources":["../../../../../../../repos/sharpee_v2/packages/world-model/src/capabilities/action-interceptor.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;AA4HH,oEAiCC;AAhED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,SAAgB,4BAA4B,CAC1C,MAAwB,EACxB,gBAAwB,EACxB,MAA+B,EAC/B,OAAgC;IAEhC,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpB,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,gBAAgB,CAAC,CAAC;QAChE,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,OAAO,CAAC,IAA+B,CAAC;YACrD,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC;YAC3C,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;gBAC3B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;YACvC,CAAC;YACD,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACzB,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;YACnC,CAAC;QACH,CAAC;aAAM,CAAC;YACN,iEAAiE;YACjE,gEAAgE;YAChE,wDAAwD;YACxD,OAAO,CAAC,IAAI,CACV,0EAA0E;gBAC1E,IAAI,gBAAgB,4DAA4D,CACjF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YACjC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"action-interceptor.js","sourceRoot":"","sources":["../../../../../../../repos/sharpee_v2/packages/world-model/src/capabilities/action-interceptor.ts"],"names":[],"mappings":"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"}
@@ -10,7 +10,7 @@ export { TraitBehaviorBinding, BehaviorRegistrationOptions } from './capability-
10
10
  export { CapabilityResolution, CapabilityMode, CapabilityConfig, defineCapabilityDefaults, getCapabilityConfig, hasCapabilityDefaults, clearCapabilityDefaults, getAllCapabilityDefaults } from './capability-defaults';
11
11
  export { findTraitWithCapability, hasCapability, getEntityCapabilities, traitHasCapability, getCapableTraits } from './capability-helpers';
12
12
  export { EntityBuilder, buildEntity } from './entity-builder';
13
- export { ActionInterceptor, InterceptorSharedData, InterceptorResult, InterceptorReportResult, InterceptorEventContext, applyInterceptorReportResult } from './action-interceptor';
13
+ export { ActionInterceptor, InterceptorSharedData, InterceptorResult, InterceptorReportResult, InterceptorBlockedResult, InterceptorEventContext, applyInterceptorReportResult, applyInterceptorBlockedResult } from './action-interceptor';
14
14
  export { TraitInterceptorBinding, InterceptorRegistrationOptions, InterceptorLookupResult } from './interceptor-binding';
15
15
  export { findTraitWithInterceptor, hasInterceptor, getEntityInterceptors, traitHasInterceptor, getInterceptorTraits } from './interceptor-helpers';
16
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../repos/sharpee_v2/packages/world-model/src/capabilities/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACL,0BAA0B,EAC1B,gBAAgB,EAChB,YAAY,EACb,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAOjF,OAAO,EACL,oBAAoB,EACpB,2BAA2B,EAC5B,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,gBAAgB,EAChB,wBAAwB,EACxB,mBAAmB,EACnB,qBAAqB,EACrB,uBAAuB,EACvB,wBAAwB,EACzB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,uBAAuB,EACvB,aAAa,EACb,qBAAqB,EACrB,kBAAkB,EAClB,gBAAgB,EACjB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,aAAa,EACb,WAAW,EACZ,MAAM,kBAAkB,CAAC;AAW1B,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EACjB,uBAAuB,EACvB,uBAAuB,EACvB,4BAA4B,EAC7B,MAAM,sBAAsB,CAAC;AAQ9B,OAAO,EACL,uBAAuB,EACvB,8BAA8B,EAC9B,uBAAuB,EACxB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,wBAAwB,EACxB,cAAc,EACd,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../repos/sharpee_v2/packages/world-model/src/capabilities/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACL,0BAA0B,EAC1B,gBAAgB,EAChB,YAAY,EACb,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAOjF,OAAO,EACL,oBAAoB,EACpB,2BAA2B,EAC5B,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,gBAAgB,EAChB,wBAAwB,EACxB,mBAAmB,EACnB,qBAAqB,EACrB,uBAAuB,EACvB,wBAAwB,EACzB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,uBAAuB,EACvB,aAAa,EACb,qBAAqB,EACrB,kBAAkB,EAClB,gBAAgB,EACjB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,aAAa,EACb,WAAW,EACZ,MAAM,kBAAkB,CAAC;AAW1B,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EACjB,uBAAuB,EACvB,wBAAwB,EACxB,uBAAuB,EACvB,4BAA4B,EAC5B,6BAA6B,EAC9B,MAAM,sBAAsB,CAAC;AAQ9B,OAAO,EACL,uBAAuB,EACvB,8BAA8B,EAC9B,uBAAuB,EACxB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,wBAAwB,EACxB,cAAc,EACd,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,uBAAuB,CAAC"}
@@ -6,7 +6,7 @@
6
6
  * (action IDs they respond to) and behaviors implement the logic.
7
7
  */
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.getInterceptorTraits = exports.traitHasInterceptor = exports.getEntityInterceptors = exports.hasInterceptor = exports.findTraitWithInterceptor = exports.applyInterceptorReportResult = exports.buildEntity = exports.EntityBuilder = exports.getCapableTraits = exports.traitHasCapability = exports.getEntityCapabilities = exports.hasCapability = exports.findTraitWithCapability = exports.getAllCapabilityDefaults = exports.clearCapabilityDefaults = exports.hasCapabilityDefaults = exports.getCapabilityConfig = exports.defineCapabilityDefaults = exports.createEffect = void 0;
9
+ exports.getInterceptorTraits = exports.traitHasInterceptor = exports.getEntityInterceptors = exports.hasInterceptor = exports.findTraitWithInterceptor = exports.applyInterceptorBlockedResult = exports.applyInterceptorReportResult = exports.buildEntity = exports.EntityBuilder = exports.getCapableTraits = exports.traitHasCapability = exports.getEntityCapabilities = exports.hasCapability = exports.findTraitWithCapability = exports.getAllCapabilityDefaults = exports.clearCapabilityDefaults = exports.hasCapabilityDefaults = exports.getCapabilityConfig = exports.defineCapabilityDefaults = exports.createEffect = void 0;
10
10
  // Types
11
11
  var types_1 = require("./types");
12
12
  Object.defineProperty(exports, "createEffect", { enumerable: true, get: function () { return types_1.createEffect; } });
@@ -38,6 +38,7 @@ Object.defineProperty(exports, "buildEntity", { enumerable: true, get: function
38
38
  // Interceptor interface
39
39
  var action_interceptor_1 = require("./action-interceptor");
40
40
  Object.defineProperty(exports, "applyInterceptorReportResult", { enumerable: true, get: function () { return action_interceptor_1.applyInterceptorReportResult; } });
41
+ Object.defineProperty(exports, "applyInterceptorBlockedResult", { enumerable: true, get: function () { return action_interceptor_1.applyInterceptorBlockedResult; } });
41
42
  // Interceptor helpers
42
43
  var interceptor_helpers_1 = require("./interceptor-helpers");
43
44
  Object.defineProperty(exports, "findTraitWithInterceptor", { enumerable: true, get: function () { return interceptor_helpers_1.findTraitWithInterceptor; } });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../repos/sharpee_v2/packages/world-model/src/capabilities/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,QAAQ;AACR,iCAIiB;AADf,qGAAA,YAAY,OAAA;AAgBd,6BAA6B;AAC7B,6DAS+B;AAL7B,+HAAA,wBAAwB,OAAA;AACxB,0HAAA,mBAAmB,OAAA;AACnB,4HAAA,qBAAqB,OAAA;AACrB,8HAAA,uBAAuB,OAAA;AACvB,+HAAA,wBAAwB,OAAA;AAG1B,UAAU;AACV,2DAM8B;AAL5B,6HAAA,uBAAuB,OAAA;AACvB,mHAAA,aAAa,OAAA;AACb,2HAAA,qBAAqB,OAAA;AACrB,wHAAA,kBAAkB,OAAA;AAClB,sHAAA,gBAAgB,OAAA;AAGlB,iBAAiB;AACjB,mDAG0B;AAFxB,+GAAA,aAAa,OAAA;AACb,6GAAA,WAAW,OAAA;AAGb,+EAA+E;AAC/E,gCAAgC;AAChC,EAAE;AACF,sEAAsE;AACtE,wEAAwE;AACxE,2BAA2B;AAC3B,+EAA+E;AAE/E,wBAAwB;AACxB,2DAO8B;AAD5B,kIAAA,4BAA4B,OAAA;AAe9B,sBAAsB;AACtB,6DAM+B;AAL7B,+HAAA,wBAAwB,OAAA;AACxB,qHAAA,cAAc,OAAA;AACd,4HAAA,qBAAqB,OAAA;AACrB,0HAAA,mBAAmB,OAAA;AACnB,2HAAA,oBAAoB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../repos/sharpee_v2/packages/world-model/src/capabilities/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,QAAQ;AACR,iCAIiB;AADf,qGAAA,YAAY,OAAA;AAgBd,6BAA6B;AAC7B,6DAS+B;AAL7B,+HAAA,wBAAwB,OAAA;AACxB,0HAAA,mBAAmB,OAAA;AACnB,4HAAA,qBAAqB,OAAA;AACrB,8HAAA,uBAAuB,OAAA;AACvB,+HAAA,wBAAwB,OAAA;AAG1B,UAAU;AACV,2DAM8B;AAL5B,6HAAA,uBAAuB,OAAA;AACvB,mHAAA,aAAa,OAAA;AACb,2HAAA,qBAAqB,OAAA;AACrB,wHAAA,kBAAkB,OAAA;AAClB,sHAAA,gBAAgB,OAAA;AAGlB,iBAAiB;AACjB,mDAG0B;AAFxB,+GAAA,aAAa,OAAA;AACb,6GAAA,WAAW,OAAA;AAGb,+EAA+E;AAC/E,gCAAgC;AAChC,EAAE;AACF,sEAAsE;AACtE,wEAAwE;AACxE,2BAA2B;AAC3B,+EAA+E;AAE/E,wBAAwB;AACxB,2DAS8B;AAF5B,kIAAA,4BAA4B,OAAA;AAC5B,mIAAA,6BAA6B,OAAA;AAe/B,sBAAsB;AACtB,6DAM+B;AAL7B,+HAAA,wBAAwB,OAAA;AACxB,qHAAA,cAAc,OAAA;AACd,4HAAA,qBAAqB,OAAA;AACrB,0HAAA,mBAAmB,OAAA;AACnB,2HAAA,oBAAoB,OAAA"}
package/index.d.ts CHANGED
@@ -13,6 +13,8 @@ export * from './traits/container';
13
13
  export * from './traits/room';
14
14
  export * from './traits/openable';
15
15
  export * from './traits/lockable';
16
+ export * from './traits/cuttable';
17
+ export * from './traits/diggable';
16
18
  export * from './traits/readable';
17
19
  export * from './traits/light-source';
18
20
  export * from './traits/exit';
@@ -38,6 +40,17 @@ export * from './traits/concealment';
38
40
  export * from './traits/acoustic';
39
41
  export * from './traits/listener';
40
42
  export * from './traits/obstructor-protocol';
43
+ export * from './traits/enterable';
44
+ export * from './traits/equipped';
45
+ export * from './traits/open-inventory';
46
+ export * from './traits/region';
47
+ export * from './traits/scene';
48
+ export * from './traits/weapon/weaponTrait';
49
+ export * from './traits/breakable/breakableTrait';
50
+ export * from './traits/destructible/destructibleTrait';
51
+ export * from './traits/combatant/combatantTrait';
52
+ export * from './traits/health/healthTrait';
53
+ export * from './traits/deadly-room';
41
54
  export * from './extensions';
42
55
  export * from './world';
43
56
  export * from './scope';
package/index.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../repos/sharpee_v2/packages/world-model/src/index.ts"],"names":[],"mappings":"AAGA,cAAc,YAAY,CAAC;AAG3B,cAAc,aAAa,CAAC;AAG5B,cAAc,aAAa,CAAC;AAG5B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAG7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AAGzC,OAAO,EACL,4BAA4B,EAC5B,kBAAkB,EAClB,KAAK,oBAAoB,GAC1B,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,yBAAyB,EACzB,eAAe,EACf,KAAK,iBAAiB,GACvB,MAAM,iBAAiB,CAAC;AAGzB,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,8BAA8B,CAAC;AAG7C,cAAc,cAAc,CAAC;AAG7B,cAAc,SAAS,CAAC;AAGxB,cAAc,SAAS,CAAC;AAGxB,cAAc,gBAAgB,CAAC;AAG/B,cAAc,gBAAgB,CAAC;AAG/B,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../repos/sharpee_v2/packages/world-model/src/index.ts"],"names":[],"mappings":"AAGA,cAAc,YAAY,CAAC;AAG3B,cAAc,aAAa,CAAC;AAG5B,cAAc,aAAa,CAAC;AAG5B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAG7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AAGzC,OAAO,EACL,4BAA4B,EAC5B,kBAAkB,EAClB,KAAK,oBAAoB,GAC1B,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,yBAAyB,EACzB,eAAe,EACf,KAAK,iBAAiB,GACvB,MAAM,iBAAiB,CAAC;AAGzB,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,8BAA8B,CAAC;AAU7C,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mCAAmC,CAAC;AAClD,cAAc,yCAAyC,CAAC;AACxD,cAAc,mCAAmC,CAAC;AAElD,cAAc,6BAA6B,CAAC;AAE5C,cAAc,sBAAsB,CAAC;AAGrC,cAAc,cAAc,CAAC;AAG7B,cAAc,SAAS,CAAC;AAGxB,cAAc,SAAS,CAAC;AAGxB,cAAc,gBAAgB,CAAC;AAG/B,cAAc,gBAAgB,CAAC;AAG/B,cAAc,eAAe,CAAC"}
package/index.js CHANGED
@@ -43,6 +43,8 @@ __exportStar(require("./traits/container"), exports);
43
43
  __exportStar(require("./traits/room"), exports);
44
44
  __exportStar(require("./traits/openable"), exports);
45
45
  __exportStar(require("./traits/lockable"), exports);
46
+ __exportStar(require("./traits/cuttable"), exports);
47
+ __exportStar(require("./traits/diggable"), exports);
46
48
  __exportStar(require("./traits/readable"), exports);
47
49
  __exportStar(require("./traits/light-source"), exports);
48
50
  __exportStar(require("./traits/exit"), exports);
@@ -68,6 +70,27 @@ __exportStar(require("./traits/concealment"), exports);
68
70
  __exportStar(require("./traits/acoustic"), exports);
69
71
  __exportStar(require("./traits/listener"), exports);
70
72
  __exportStar(require("./traits/obstructor-protocol"), exports);
73
+ // Root-barrel hygiene fix (2026-07-14): these trait subdirs shipped with leaf
74
+ // barrels and a mid-level traits/index.ts export but were never enumerated in
75
+ // this root barrel, so their traits were unreachable via `@sharpee/world-model`
76
+ // (consumers reached them only through deep subpath imports). Enumerated here to
77
+ // close the gap. The four combat-family subdirs export their *Trait via the trait
78
+ // file directly — NOT the leaf barrel — because their behaviors are already
79
+ // re-exported by `./behaviors` above; a leaf-barrel `export *` would double-star
80
+ // those behavior symbols and silently drop them.
81
+ __exportStar(require("./traits/enterable"), exports);
82
+ __exportStar(require("./traits/equipped"), exports);
83
+ __exportStar(require("./traits/open-inventory"), exports);
84
+ __exportStar(require("./traits/region"), exports);
85
+ __exportStar(require("./traits/scene"), exports);
86
+ __exportStar(require("./traits/weapon/weaponTrait"), exports);
87
+ __exportStar(require("./traits/breakable/breakableTrait"), exports);
88
+ __exportStar(require("./traits/destructible/destructibleTrait"), exports);
89
+ __exportStar(require("./traits/combatant/combatantTrait"), exports);
90
+ // Health trait (ADR-226) — trait file direct; HealthBehavior comes via `./behaviors`
91
+ __exportStar(require("./traits/health/healthTrait"), exports);
92
+ // Deadly-room trigger shape (ADR-224) — leaf barrel (trait + behavior + verdict type)
93
+ __exportStar(require("./traits/deadly-room"), exports);
71
94
  // Extension system
72
95
  __exportStar(require("./extensions"), exports);
73
96
  // World model
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../repos/sharpee_v2/packages/world-model/src/index.ts"],"names":[],"mappings":";AAAA,oCAAoC;;;;;;;;;;;;;;;;;AAEpC,gBAAgB;AAChB,6CAA2B;AAE3B,iBAAiB;AACjB,8CAA4B;AAE5B,YAAY;AACZ,8CAA4B;AAE5B,8CAA8C;AAC9C,6CAA2B;AAC3B,+CAA6B;AAE7B,SAAS;AACT,iDAA+B;AAC/B,uDAAqC;AACrC,2DAAyC;AAEzC,iDAAiD;AACjD,uDAI4B;AAH1B,gIAAA,4BAA4B,OAAA;AAC5B,sHAAA,kBAAkB,OAAA;AAIpB,wDAAwD;AACxD,iDAIyB;AAHvB,0HAAA,yBAAyB,OAAA;AACzB,gHAAA,eAAe,OAAA;AAIjB,2BAA2B;AAC3B,oDAAkC;AAClC,qDAAmC;AACnC,gDAA8B;AAC9B,oDAAkC;AAClC,oDAAkC;AAClC,oDAAkC;AAClC,wDAAsC;AACtC,gDAA8B;AAC9B,qDAAmC;AACnC,mDAAiC;AACjC,qDAAmC;AACnC,sDAAoC;AACpC,oDAAkC;AAClC,kDAAgC;AAChC,gDAA8B;AAC9B,iDAA+B;AAC/B,oDAAkC;AAClC,kDAAgC;AAChC,oDAAkC;AAClC,4DAA0C;AAC1C,oDAAkC;AAClC,oDAAkC;AAClC,+CAA6B;AAC7B,mDAAiC;AACjC,sDAAoC;AACpC,2DAAyC;AACzC,uDAAqC;AACrC,oDAAkC;AAClC,oDAAkC;AAClC,+DAA6C;AAE7C,mBAAmB;AACnB,+CAA6B;AAE7B,cAAc;AACd,0CAAwB;AAExB,eAAe;AACf,0CAAwB;AAExB,mFAAmF;AACnF,iDAA+B;AAE/B,uCAAuC;AACvC,iDAA+B;AAE/B,wBAAwB;AACxB,gDAA8B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../repos/sharpee_v2/packages/world-model/src/index.ts"],"names":[],"mappings":";AAAA,oCAAoC;;;;;;;;;;;;;;;;;AAEpC,gBAAgB;AAChB,6CAA2B;AAE3B,iBAAiB;AACjB,8CAA4B;AAE5B,YAAY;AACZ,8CAA4B;AAE5B,8CAA8C;AAC9C,6CAA2B;AAC3B,+CAA6B;AAE7B,SAAS;AACT,iDAA+B;AAC/B,uDAAqC;AACrC,2DAAyC;AAEzC,iDAAiD;AACjD,uDAI4B;AAH1B,gIAAA,4BAA4B,OAAA;AAC5B,sHAAA,kBAAkB,OAAA;AAIpB,wDAAwD;AACxD,iDAIyB;AAHvB,0HAAA,yBAAyB,OAAA;AACzB,gHAAA,eAAe,OAAA;AAIjB,2BAA2B;AAC3B,oDAAkC;AAClC,qDAAmC;AACnC,gDAA8B;AAC9B,oDAAkC;AAClC,oDAAkC;AAClC,oDAAkC;AAClC,oDAAkC;AAClC,oDAAkC;AAClC,wDAAsC;AACtC,gDAA8B;AAC9B,qDAAmC;AACnC,mDAAiC;AACjC,qDAAmC;AACnC,sDAAoC;AACpC,oDAAkC;AAClC,kDAAgC;AAChC,gDAA8B;AAC9B,iDAA+B;AAC/B,oDAAkC;AAClC,kDAAgC;AAChC,oDAAkC;AAClC,4DAA0C;AAC1C,oDAAkC;AAClC,oDAAkC;AAClC,+CAA6B;AAC7B,mDAAiC;AACjC,sDAAoC;AACpC,2DAAyC;AACzC,uDAAqC;AACrC,oDAAkC;AAClC,oDAAkC;AAClC,+DAA6C;AAE7C,8EAA8E;AAC9E,8EAA8E;AAC9E,gFAAgF;AAChF,iFAAiF;AACjF,kFAAkF;AAClF,4EAA4E;AAC5E,iFAAiF;AACjF,iDAAiD;AACjD,qDAAmC;AACnC,oDAAkC;AAClC,0DAAwC;AACxC,kDAAgC;AAChC,iDAA+B;AAC/B,8DAA4C;AAC5C,oEAAkD;AAClD,0EAAwD;AACxD,oEAAkD;AAClD,qFAAqF;AACrF,8DAA4C;AAC5C,sFAAsF;AACtF,uDAAqC;AAErC,mBAAmB;AACnB,+CAA6B;AAE7B,cAAc;AACd,0CAAwB;AAExB,eAAe;AACf,0CAAwB;AAExB,mFAAmF;AACnF,iDAA+B;AAE/B,uCAAuC;AACvC,iDAA+B;AAE/B,wBAAwB;AACxB,gDAA8B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sharpee/world-model",
3
- "version": "2.2.0",
3
+ "version": "3.1.0",
4
4
  "description": "World model for Sharpee IF platform - entities, traits, and behaviors",
5
5
  "main": "./index.js",
6
6
  "types": "./index.d.ts",
@@ -12,8 +12,8 @@
12
12
  }
13
13
  },
14
14
  "dependencies": {
15
- "@sharpee/core": "^2.2.0",
16
- "@sharpee/if-domain": "^2.2.0"
15
+ "@sharpee/core": "^3.1.0",
16
+ "@sharpee/if-domain": "^3.1.0"
17
17
  },
18
18
  "keywords": [
19
19
  "interactive-fiction",
@@ -1,5 +1,15 @@
1
1
  /**
2
- * Behavior for combatant entities
2
+ * Behavior for combatant entities.
3
+ *
4
+ * Combat orchestration — armor reduction, inventory-drop on death, combat messages —
5
+ * over the entity's combat *stats* (`CombatantTrait`). Health itself lives on the
6
+ * required {@link HealthTrait}; all health reads/writes route through
7
+ * {@link HealthBehavior} (ADR-226 / ADR-223 child A). A combatant is guaranteed a
8
+ * `HealthTrait` by the load-time AC-7 check.
9
+ *
10
+ * Public interface: `canAttack` / `attack` / `heal` / `resurrect` / `isAlive` /
11
+ * `getHealth` / `getHealthPercentage` / `isHostile` / `setHostile`.
12
+ * Owner context: `@sharpee/world-model` — combat (requires the HEALTH layer).
3
13
  */
4
14
  import { Behavior } from '../../behaviors/behavior';
5
15
  import { IFEntity } from '../../entities/if-entity';
@@ -18,52 +28,47 @@ export interface ICombatResult {
18
28
  message?: string;
19
29
  deathMessage?: string;
20
30
  }
21
- /**
22
- * Behavior for combatant entities.
23
- *
24
- * Handles combat with health, armor, and death.
25
- * This is a world-aware behavior because it handles inventory dropping on death.
26
- */
27
31
  export declare class CombatBehavior extends Behavior {
28
- static requiredTraits: "combatant"[];
32
+ static requiredTraits: ("combatant" | "health")[];
29
33
  /**
30
- * Check if a combatant can be attacked
34
+ * Check if a combatant can be attacked (present, and alive per its health).
31
35
  */
32
36
  static canAttack(entity: IFEntity): boolean;
33
37
  /**
34
- * Attack a combatant
38
+ * Attack a combatant.
35
39
  * @param entity The combatant to attack
36
- * @param damage Base damage amount
40
+ * @param damage Base damage amount (pre-armor)
37
41
  * @param world The world model (needed for dropping inventory)
38
42
  * @returns Result describing what happened
39
43
  */
40
44
  static attack(entity: IFEntity, damage: number, world: WorldModel): ICombatResult;
41
45
  /**
42
- * Heal a combatant
46
+ * Heal a combatant. Returns the amount actually healed.
43
47
  */
44
48
  static heal(entity: IFEntity, amount: number): number;
45
49
  /**
46
- * Resurrect a dead combatant
50
+ * Resurrect a dead combatant — clears the terminal state and restores full health.
51
+ * @returns true if a dead combatant was resurrected, false if it was already alive
47
52
  */
48
53
  static resurrect(entity: IFEntity): boolean;
49
54
  /**
50
- * Check if combatant is alive
55
+ * Check if combatant is alive (via its health). Non-combatants are alive by default.
51
56
  */
52
57
  static isAlive(entity: IFEntity): boolean;
53
58
  /**
54
- * Get current health
59
+ * Get current health.
55
60
  */
56
61
  static getHealth(entity: IFEntity): number;
57
62
  /**
58
- * Get health percentage
63
+ * Get health percentage.
59
64
  */
60
65
  static getHealthPercentage(entity: IFEntity): number;
61
66
  /**
62
- * Check if combatant is hostile
67
+ * Check if combatant is hostile.
63
68
  */
64
69
  static isHostile(entity: IFEntity): boolean;
65
70
  /**
66
- * Set hostility
71
+ * Set hostility.
67
72
  */
68
73
  static setHostile(entity: IFEntity, hostile: boolean): void;
69
74
  }
@@ -1 +1 @@
1
- {"version":3,"file":"combatantBehavior.d.ts","sourceRoot":"","sources":["../../../../../../../../repos/sharpee_v2/packages/world-model/src/traits/combatant/combatantBehavior.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGpD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,QAAQ,EAAE,CAAC;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;GAKG;AACH,qBAAa,cAAe,SAAQ,QAAQ;IAC1C,MAAM,CAAC,cAAc,gBAAyB;IAE9C;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO;IAQ3C;;;;;;OAMG;IACH,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,aAAa;IA+DjF;;OAEG;IACH,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAcrD;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO;IAa3C;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO;IAQzC;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,GAAG,MAAM;IAK1C;;OAEG;IACH,MAAM,CAAC,mBAAmB,CAAC,MAAM,EAAE,QAAQ,GAAG,MAAM;IAKpD;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO;IAK3C;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;CAI5D"}
1
+ {"version":3,"file":"combatantBehavior.d.ts","sourceRoot":"","sources":["../../../../../../../../repos/sharpee_v2/packages/world-model/src/traits/combatant/combatantBehavior.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAKpD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,QAAQ,EAAE,CAAC;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,cAAe,SAAQ,QAAQ;IAC1C,MAAM,CAAC,cAAc,6BAA2C;IAEhE;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO;IAQ3C;;;;;;OAMG;IACH,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,aAAa;IA6DjF;;OAEG;IACH,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAQrD;;;OAGG;IACH,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO;IAc3C;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO;IAQzC;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,GAAG,MAAM;IAK1C;;OAEG;IACH,MAAM,CAAC,mBAAmB,CAAC,MAAM,EAAE,QAAQ,GAAG,MAAM;IAKpD;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO;IAK3C;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;CAI5D"}