@sharpee/world-model 3.0.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.
- package/behaviors/index.d.ts +1 -0
- package/behaviors/index.d.ts.map +1 -1
- package/behaviors/index.js +4 -1
- package/behaviors/index.js.map +1 -1
- package/capabilities/action-interceptor.d.ts +93 -6
- package/capabilities/action-interceptor.d.ts.map +1 -1
- package/capabilities/action-interceptor.js +59 -2
- package/capabilities/action-interceptor.js.map +1 -1
- package/capabilities/index.d.ts +1 -1
- package/capabilities/index.d.ts.map +1 -1
- package/capabilities/index.js +2 -1
- package/capabilities/index.js.map +1 -1
- package/index.d.ts +13 -0
- package/index.d.ts.map +1 -1
- package/index.js +23 -0
- package/index.js.map +1 -1
- package/package.json +3 -3
- package/traits/combatant/combatantBehavior.d.ts +23 -18
- package/traits/combatant/combatantBehavior.d.ts.map +1 -1
- package/traits/combatant/combatantBehavior.js +47 -45
- package/traits/combatant/combatantBehavior.js.map +1 -1
- package/traits/combatant/combatantTrait.d.ts +14 -48
- package/traits/combatant/combatantTrait.d.ts.map +1 -1
- package/traits/combatant/combatantTrait.js +13 -80
- package/traits/combatant/combatantTrait.js.map +1 -1
- package/traits/cuttable/cuttableBehavior.d.ts +23 -0
- package/traits/cuttable/cuttableBehavior.d.ts.map +1 -0
- package/traits/cuttable/cuttableBehavior.js +39 -0
- package/traits/cuttable/cuttableBehavior.js.map +1 -0
- package/traits/cuttable/cuttableTrait.d.ts +37 -0
- package/traits/cuttable/cuttableTrait.d.ts.map +1 -0
- package/traits/cuttable/cuttableTrait.js +30 -0
- package/traits/cuttable/cuttableTrait.js.map +1 -0
- package/traits/cuttable/index.d.ts +3 -0
- package/traits/cuttable/index.d.ts.map +1 -0
- package/traits/cuttable/index.js +20 -0
- package/traits/cuttable/index.js.map +1 -0
- package/traits/deadly-room/deadlyRoomBehavior.d.ts +48 -0
- package/traits/deadly-room/deadlyRoomBehavior.d.ts.map +1 -0
- package/traits/deadly-room/deadlyRoomBehavior.js +59 -0
- package/traits/deadly-room/deadlyRoomBehavior.js.map +1 -0
- package/traits/deadly-room/deadlyRoomTrait.d.ts +51 -0
- package/traits/deadly-room/deadlyRoomTrait.d.ts.map +1 -0
- package/traits/deadly-room/deadlyRoomTrait.js +37 -0
- package/traits/deadly-room/deadlyRoomTrait.js.map +1 -0
- package/traits/deadly-room/index.d.ts +3 -0
- package/traits/deadly-room/index.d.ts.map +1 -0
- package/traits/deadly-room/index.js +8 -0
- package/traits/deadly-room/index.js.map +1 -0
- package/traits/diggable/diggableBehavior.d.ts +23 -0
- package/traits/diggable/diggableBehavior.d.ts.map +1 -0
- package/traits/diggable/diggableBehavior.js +39 -0
- package/traits/diggable/diggableBehavior.js.map +1 -0
- package/traits/diggable/diggableTrait.d.ts +37 -0
- package/traits/diggable/diggableTrait.d.ts.map +1 -0
- package/traits/diggable/diggableTrait.js +30 -0
- package/traits/diggable/diggableTrait.js.map +1 -0
- package/traits/diggable/index.d.ts +3 -0
- package/traits/diggable/index.d.ts.map +1 -0
- package/traits/diggable/index.js +20 -0
- package/traits/diggable/index.js.map +1 -0
- package/traits/health/healthBehavior.d.ts +66 -0
- package/traits/health/healthBehavior.d.ts.map +1 -0
- package/traits/health/healthBehavior.js +98 -0
- package/traits/health/healthBehavior.js.map +1 -0
- package/traits/health/healthTrait.d.ts +60 -0
- package/traits/health/healthTrait.d.ts.map +1 -0
- package/traits/health/healthTrait.js +49 -0
- package/traits/health/healthTrait.js.map +1 -0
- package/traits/health/index.d.ts +3 -0
- package/traits/health/index.d.ts.map +1 -0
- package/traits/health/index.js +8 -0
- package/traits/health/index.js.map +1 -0
- package/traits/implementations.d.ts +5 -1
- package/traits/implementations.d.ts.map +1 -1
- package/traits/implementations.js +15 -1
- package/traits/implementations.js.map +1 -1
- package/traits/index.d.ts +4 -0
- package/traits/index.d.ts.map +1 -1
- package/traits/index.js +5 -0
- package/traits/index.js.map +1 -1
- package/traits/npc/npcTrait.d.ts +5 -27
- package/traits/npc/npcTrait.d.ts.map +1 -1
- package/traits/npc/npcTrait.js +0 -38
- package/traits/npc/npcTrait.js.map +1 -1
- package/traits/openable/openableBehavior.d.ts +10 -0
- package/traits/openable/openableBehavior.d.ts.map +1 -1
- package/traits/openable/openableBehavior.js +21 -0
- package/traits/openable/openableBehavior.js.map +1 -1
- package/traits/openable/openableTrait.d.ts +7 -0
- package/traits/openable/openableTrait.d.ts.map +1 -1
- package/traits/openable/openableTrait.js +4 -0
- package/traits/openable/openableTrait.js.map +1 -1
- package/traits/room/roomTrait.d.ts +8 -3
- package/traits/room/roomTrait.d.ts.map +1 -1
- package/traits/room/roomTrait.js +2 -2
- package/traits/room/roomTrait.js.map +1 -1
- package/traits/trait-types.d.ts +4 -0
- package/traits/trait-types.d.ts.map +1 -1
- package/traits/trait-types.js +12 -0
- package/traits/trait-types.js.map +1 -1
- package/world/VisibilityBehavior.d.ts +1 -1
- package/world/VisibilityBehavior.js +4 -4
- package/world/VisibilityBehavior.js.map +1 -1
- package/world/WorldModel.js +1 -1
- package/world/WorldModel.js.map +1 -1
package/behaviors/index.d.ts
CHANGED
|
@@ -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';
|
package/behaviors/index.d.ts.map
CHANGED
|
@@ -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"}
|
package/behaviors/index.js
CHANGED
|
@@ -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
|
package/behaviors/index.js.map
CHANGED
|
@@ -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
|
|
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
|
-
*
|
|
272
|
-
*
|
|
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
|
-
* //
|
|
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
|
|
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):
|
|
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
|
|
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;;
|
|
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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"}
|
package/capabilities/index.d.ts
CHANGED
|
@@ -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,
|
|
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"}
|
package/capabilities/index.js
CHANGED
|
@@ -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,
|
|
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;
|
|
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": "3.
|
|
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": "^3.
|
|
16
|
-
"@sharpee/if-domain": "^3.
|
|
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
|
|
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"}
|