@sharpee/world-model 0.9.102 → 0.9.103

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sharpee/world-model",
3
- "version": "0.9.102",
3
+ "version": "0.9.103",
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": "^0.9.102",
16
- "@sharpee/if-domain": "^0.9.102"
15
+ "@sharpee/core": "^0.9.103",
16
+ "@sharpee/if-domain": "^0.9.103"
17
17
  },
18
18
  "keywords": [
19
19
  "interactive-fiction",
@@ -1,11 +1,28 @@
1
+ /**
2
+ * AuthorModel — unrestricted world model access for authoring and setup.
3
+ *
4
+ * Public interface: Implements IWorldModel. Entity creation and movement
5
+ * bypass validation. All other methods delegate to the backing WorldModel.
6
+ *
7
+ * Owner context: packages/world-model. Used during initializeWorld() for
8
+ * setup that requires bypassing game rules (placing items in closed
9
+ * containers, etc.).
10
+ */
1
11
  import { IFEntity } from '../entities/if-entity';
2
12
  import { TraitType } from '../traits/trait-types';
3
13
  import { SpatialIndex } from './SpatialIndex';
4
14
  import { ITrait } from '../traits/trait';
5
15
  import { ICapabilityStore } from './capabilities';
6
- import type { IWorldModel } from './WorldModel';
16
+ import type { IWorldModel, EventHandler, EventValidator, EventPreviewer, EventChainHandler, ChainEventOptions } from './WorldModel';
17
+ import type { ScoreEntry } from './ScoreLedger';
18
+ import type { ISemanticEvent } from "../../core/index";
19
+ import type { WorldState, ContentsOptions, WorldChange, IEventProcessorWiring, GamePrompt, IGrammarVocabularyProvider } from "../../if-domain/index";
20
+ import type { DirectionType } from '../constants/directions';
21
+ import type { ScopeRegistry } from '../scope/scope-registry';
22
+ import type { IScopeRule } from '../scope/scope-rule';
23
+ import type { ICapabilityData, ICapabilityRegistration } from './capabilities';
7
24
  /**
8
- * Data store shared between WorldModel and AuthorModel
25
+ * Data store shared between WorldModel and AuthorModel.
9
26
  */
10
27
  export interface IDataStore {
11
28
  entities: Map<string, IFEntity>;
@@ -17,7 +34,7 @@ export interface IDataStore {
17
34
  capabilities: ICapabilityStore;
18
35
  }
19
36
  /**
20
- * Item specification for bulk creation
37
+ * Item specification for bulk creation.
21
38
  */
22
39
  export interface IItemSpec {
23
40
  name: string;
@@ -27,125 +44,125 @@ export interface IItemSpec {
27
44
  }
28
45
  /**
29
46
  * AuthorModel provides unrestricted access to the world state for authoring,
30
- * testing, and world setup. It bypasses all validation rules and does not
31
- * emit events (unless explicitly requested).
32
- *
33
- * Use AuthorModel when:
34
- * - Setting up initial world state
35
- * - Populating containers (even closed ones)
36
- * - Loading saved games
37
- * - Writing tests
38
- * - Implementing special mechanics (magic, teleportation, etc.)
47
+ * testing, and world setup. It bypasses validation rules for entity creation
48
+ * and movement. All other IWorldModel methods delegate to the backing WorldModel.
39
49
  *
40
50
  * @example
41
51
  * ```typescript
42
- * const author = new AuthorModel(world.getDataStore());
43
- * const cabinet = author.createEntity('Medicine Cabinet', 'container');
44
- * cabinet.add(new OpenableTrait({ isOpen: false }));
45
- *
46
- * // Can place items in closed container!
52
+ * const author = new AuthorModel(world.getDataStore(), world);
47
53
  * const medicine = author.createEntity('Aspirin', 'item');
48
- * author.moveEntity(medicine.id, cabinet.id); // Works even though closed
54
+ * author.moveEntity(medicine.id, closedCabinet.id); // Works even though closed
49
55
  * ```
50
56
  */
51
- export declare class AuthorModel {
57
+ export declare class AuthorModel implements IWorldModel {
52
58
  private dataStore;
53
- private worldModel?;
54
- private eventHandlers;
55
- constructor(dataStore: IDataStore, worldModel?: IWorldModel);
59
+ private worldModel;
60
+ constructor(dataStore: IDataStore, worldModel: IWorldModel);
56
61
  /**
57
- * Get the shared data store. This allows creating a WorldModel
58
- * that shares the same state.
62
+ * Get the shared data store.
59
63
  */
60
64
  getDataStore(): IDataStore;
61
65
  /**
62
- * Create a new entity without any validation.
63
- * @param name Display name for the entity
64
- * @param type Entity type (room, item, actor, etc.)
65
- * @param recordEvent If true, emits an 'author:entity:created' event
66
- */
67
- createEntity(name: string, type?: string, recordEvent?: boolean): IFEntity;
68
- /**
69
- * Remove an entity without validation.
70
- * @param entityId ID of entity to remove
71
- * @param recordEvent If true, emits an 'author:entity:removed' event
72
- */
73
- removeEntity(entityId: string, recordEvent?: boolean): void;
74
- /**
75
- * Move an entity to a new location without any validation.
76
- * Can move entities into closed containers, locked containers, or any location.
77
- * @param entityId ID of entity to move
78
- * @param targetId ID of target location (null to remove from world)
79
- * @param recordEvent If true, emits an 'author:entity:moved' event
80
- */
81
- moveEntity(entityId: string, targetId: string | null, recordEvent?: boolean): void;
82
- /**
83
- * Get an entity by ID
84
- */
85
- getEntity(entityId: string): IFEntity | undefined;
86
- /**
87
- * Set an entity property directly without validation
88
- */
89
- setEntityProperty(entityId: string, property: string, value: any, recordEvent?: boolean): void;
90
- /**
91
- * Add a trait to an entity without validation
92
- */
93
- addTrait(entityId: string, trait: ITrait, recordEvent?: boolean): void;
94
- /**
95
- * Remove a trait from an entity without validation
96
- */
97
- removeTrait(entityId: string, traitType: TraitType, recordEvent?: boolean): void;
98
- /**
99
- * Move multiple entities to a container in one operation
100
- */
101
- populate(containerId: string, entityIds: string[], recordEvent?: boolean): void;
102
- /**
103
- * Create a bidirectional connection between two rooms
104
- */
105
- connect(room1Id: string, room2Id: string, direction: string, recordEvent?: boolean): void;
106
- /**
107
- * Fill a container with items based on specifications
108
- */
109
- fillContainer(containerId: string, itemSpecs: IItemSpec[], recordEvent?: boolean): void;
110
- /**
111
- * Place an actor at a location (convenience method)
112
- */
113
- placeActor(actorId: string, locationId: string, recordEvent?: boolean): void;
114
- /**
115
- * Set up a container with common properties
116
- */
117
- setupContainer(containerId: string, isOpen?: boolean, isLocked?: boolean, keyId?: string, recordEvent?: boolean): void;
118
- /**
119
- * Set a world state value directly
120
- */
121
- setStateValue(key: string, value: any, recordEvent?: boolean): void;
122
- /**
123
- * Set the player entity
124
- */
125
- setPlayer(entityId: string, recordEvent?: boolean): void;
66
+ * Create a new entity without validation.
67
+ *
68
+ * @param name - Display name for the entity
69
+ * @param type - Entity type (room, item, actor, etc.)
70
+ * @returns The created entity
71
+ */
72
+ createEntity(name: string, type?: string): IFEntity;
73
+ /**
74
+ * Move an entity without validation. Can move into closed/locked containers.
75
+ *
76
+ * @param entityId - ID of entity to move
77
+ * @param targetId - ID of target location (null to remove from world)
78
+ * @returns Always true (no validation to fail)
79
+ */
80
+ moveEntity(entityId: string, targetId: string | null): boolean;
81
+ getEntity(id: string): IFEntity | undefined;
82
+ hasEntity(id: string): boolean;
83
+ removeEntity(id: string): boolean;
84
+ getAllEntities(): IFEntity[];
85
+ updateEntity(entityId: string, updater: (entity: IFEntity) => void): void;
86
+ getLocation(entityId: string): string | undefined;
87
+ getContents(containerId: string, options?: ContentsOptions): IFEntity[];
88
+ canMoveEntity(entityId: string, targetId: string | null): boolean;
89
+ getContainingRoom(entityId: string): IFEntity | undefined;
90
+ getAllContents(entityId: string, options?: ContentsOptions): IFEntity[];
91
+ getState(): WorldState;
92
+ setState(state: WorldState): void;
93
+ getStateValue(key: string): any;
94
+ setStateValue(key: string, value: any): void;
95
+ getPrompt(): GamePrompt;
96
+ setPrompt(prompt: GamePrompt): void;
97
+ findByTrait(traitType: TraitType): IFEntity[];
98
+ findByType(entityType: string): IFEntity[];
99
+ findWhere(predicate: (entity: IFEntity) => boolean): IFEntity[];
100
+ getVisible(observerId: string): IFEntity[];
101
+ getInScope(observerId: string): IFEntity[];
102
+ canSee(observerId: string, targetId: string): boolean;
103
+ getRelated(entityId: string, relationshipType: string): string[];
104
+ areRelated(entity1Id: string, entity2Id: string, relationshipType: string): boolean;
105
+ addRelationship(entity1Id: string, entity2Id: string, relationshipType: string): void;
106
+ removeRelationship(entity1Id: string, entity2Id: string, relationshipType: string): void;
107
+ getTotalWeight(entityId: string): number;
108
+ wouldCreateLoop(entityId: string, targetId: string): boolean;
109
+ findPath(fromRoomId: string, toRoomId: string): string[] | null;
110
+ getPlayer(): IFEntity | undefined;
111
+ setPlayer(entityId: string): void;
112
+ connectRooms(room1Id: string, room2Id: string, direction: DirectionType): void;
113
+ createDoor(displayName: string, opts: {
114
+ room1Id: string;
115
+ room2Id: string;
116
+ direction: DirectionType;
117
+ description?: string;
118
+ aliases?: string[];
119
+ isOpen?: boolean;
120
+ isLocked?: boolean;
121
+ keyId?: string;
122
+ }): IFEntity;
123
+ registerCapability(name: string, registration: Partial<ICapabilityRegistration>): void;
124
+ updateCapability(name: string, data: Partial<ICapabilityData>): void;
125
+ getCapability(name: string): ICapabilityData | undefined;
126
+ hasCapability(name: string): boolean;
127
+ awardScore(id: string, points: number, description: string): boolean;
128
+ revokeScore(id: string): boolean;
129
+ hasScore(id: string): boolean;
130
+ getScore(): number;
131
+ getScoreEntries(): ScoreEntry[];
132
+ setMaxScore(max: number): void;
133
+ getMaxScore(): number;
134
+ toJSON(): string;
135
+ loadJSON(json: string): void;
136
+ clear(): void;
137
+ registerEventHandler(eventType: string, handler: EventHandler): void;
138
+ unregisterEventHandler(eventType: string): void;
139
+ registerEventValidator(eventType: string, validator: EventValidator): void;
140
+ registerEventPreviewer(eventType: string, previewer: EventPreviewer): void;
141
+ connectEventProcessor(wiring: IEventProcessorWiring): void;
142
+ chainEvent(triggerType: string, handler: EventChainHandler, options?: ChainEventOptions): void;
143
+ applyEvent(event: ISemanticEvent): void;
144
+ canApplyEvent(event: ISemanticEvent): boolean;
145
+ previewEvent(event: ISemanticEvent): WorldChange[];
146
+ getAppliedEvents(): ISemanticEvent[];
147
+ getEventsSince(timestamp: number): ISemanticEvent[];
148
+ clearEventHistory(): void;
149
+ getScopeRegistry(): ScopeRegistry;
150
+ addScopeRule(rule: IScopeRule): void;
151
+ removeScopeRule(ruleId: string): boolean;
152
+ evaluateScope(actorId: string, actionId?: string): string[];
153
+ getGrammarVocabularyProvider(): IGrammarVocabularyProvider;
126
154
  /**
127
- * Clear all world data
155
+ * Move multiple entities to a container in one operation.
128
156
  */
129
- clear(recordEvent?: boolean): void;
157
+ populate(containerId: string, entityIds: string[]): void;
130
158
  /**
131
- * Import world data from a serialized format
159
+ * Add a trait to an entity.
132
160
  */
133
- import(data: any, recordEvent?: boolean): void;
161
+ addTrait(entityId: string, trait: ITrait): void;
134
162
  /**
135
- * Generate an ID for a new entity
163
+ * Remove a trait from an entity.
136
164
  */
165
+ removeTrait(entityId: string, traitType: TraitType): void;
137
166
  private generateId;
138
- /**
139
- * Emit an author event if event recording is enabled
140
- */
141
- private emitEvent;
142
- /**
143
- * Register an event handler for author events
144
- */
145
- registerEventHandler(eventType: string, handler: (event: any) => void): void;
146
- /**
147
- * Unregister an event handler
148
- */
149
- unregisterEventHandler(eventType: string): void;
150
167
  }
151
168
  //# sourceMappingURL=AuthorModel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AuthorModel.d.ts","sourceRoot":"","sources":["../../../../../../repos/sharpee/packages/world-model/src/world/AuthorModel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AuthorModel.d.ts","sourceRoot":"","sources":["../../../../../../repos/sharpee/packages/world-model/src/world/AuthorModel.ts"],"names":[],"mappings":"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"}
@@ -1,368 +1,314 @@
1
1
  "use strict";
2
- // AuthorModel.ts - Unrestricted world model access for authoring and setup
2
+ /**
3
+ * AuthorModel — unrestricted world model access for authoring and setup.
4
+ *
5
+ * Public interface: Implements IWorldModel. Entity creation and movement
6
+ * bypass validation. All other methods delegate to the backing WorldModel.
7
+ *
8
+ * Owner context: packages/world-model. Used during initializeWorld() for
9
+ * setup that requires bypassing game rules (placing items in closed
10
+ * containers, etc.).
11
+ */
3
12
  Object.defineProperty(exports, "__esModule", { value: true });
4
13
  exports.AuthorModel = void 0;
5
14
  const if_entity_1 = require("../entities/if-entity");
6
- const openableTrait_1 = require("../traits/openable/openableTrait");
7
- const lockableTrait_1 = require("../traits/lockable/lockableTrait");
8
15
  /**
9
16
  * AuthorModel provides unrestricted access to the world state for authoring,
10
- * testing, and world setup. It bypasses all validation rules and does not
11
- * emit events (unless explicitly requested).
12
- *
13
- * Use AuthorModel when:
14
- * - Setting up initial world state
15
- * - Populating containers (even closed ones)
16
- * - Loading saved games
17
- * - Writing tests
18
- * - Implementing special mechanics (magic, teleportation, etc.)
17
+ * testing, and world setup. It bypasses validation rules for entity creation
18
+ * and movement. All other IWorldModel methods delegate to the backing WorldModel.
19
19
  *
20
20
  * @example
21
21
  * ```typescript
22
- * const author = new AuthorModel(world.getDataStore());
23
- * const cabinet = author.createEntity('Medicine Cabinet', 'container');
24
- * cabinet.add(new OpenableTrait({ isOpen: false }));
25
- *
26
- * // Can place items in closed container!
22
+ * const author = new AuthorModel(world.getDataStore(), world);
27
23
  * const medicine = author.createEntity('Aspirin', 'item');
28
- * author.moveEntity(medicine.id, cabinet.id); // Works even though closed
24
+ * author.moveEntity(medicine.id, closedCabinet.id); // Works even though closed
29
25
  * ```
30
26
  */
31
27
  class AuthorModel {
32
28
  dataStore;
33
29
  worldModel;
34
- eventHandlers = new Map();
35
30
  constructor(dataStore, worldModel) {
36
31
  this.dataStore = dataStore;
37
32
  this.worldModel = worldModel;
38
33
  }
39
34
  /**
40
- * Get the shared data store. This allows creating a WorldModel
41
- * that shares the same state.
35
+ * Get the shared data store.
42
36
  */
43
37
  getDataStore() {
44
38
  return this.dataStore;
45
39
  }
46
- // ========== Entity Management ==========
40
+ // ========== Overridden Methods (bypass validation) ==========
47
41
  /**
48
- * Create a new entity without any validation.
49
- * @param name Display name for the entity
50
- * @param type Entity type (room, item, actor, etc.)
51
- * @param recordEvent If true, emits an 'author:entity:created' event
42
+ * Create a new entity without validation.
43
+ *
44
+ * @param name - Display name for the entity
45
+ * @param type - Entity type (room, item, actor, etc.)
46
+ * @returns The created entity
52
47
  */
53
- createEntity(name, type = 'object', recordEvent = false) {
48
+ createEntity(name, type = 'object') {
54
49
  const id = this.generateId(type);
55
50
  const entity = new if_entity_1.IFEntity(id, type, {
56
51
  attributes: {
57
52
  displayName: name,
58
- name: name, // For compatibility
53
+ name: name,
59
54
  entityType: type
60
55
  }
61
56
  });
62
- // Add to data store
63
57
  this.dataStore.entities.set(id, entity);
64
- if (recordEvent) {
65
- this.emitEvent('author:entity:created', {
66
- entityId: id,
67
- name,
68
- entityType: type
69
- });
70
- }
71
58
  return entity;
72
59
  }
73
60
  /**
74
- * Remove an entity without validation.
75
- * @param entityId ID of entity to remove
76
- * @param recordEvent If true, emits an 'author:entity:removed' event
77
- */
78
- removeEntity(entityId, recordEvent = false) {
79
- const entity = this.dataStore.entities.get(entityId);
80
- if (!entity)
81
- return;
82
- // Remove from spatial index
83
- this.dataStore.spatialIndex.remove(entityId);
84
- // Remove from relationships
85
- this.dataStore.relationships.delete(entityId);
86
- // Remove as target of relationships
87
- for (const [, rels] of this.dataStore.relationships) {
88
- for (const [, targets] of rels) {
89
- targets.delete(entityId);
90
- }
91
- }
92
- // Remove entity
93
- this.dataStore.entities.delete(entityId);
94
- if (recordEvent) {
95
- this.emitEvent('author:entity:removed', {
96
- entityId,
97
- name: entity.name
98
- });
99
- }
100
- }
101
- /**
102
- * Move an entity to a new location without any validation.
103
- * Can move entities into closed containers, locked containers, or any location.
104
- * @param entityId ID of entity to move
105
- * @param targetId ID of target location (null to remove from world)
106
- * @param recordEvent If true, emits an 'author:entity:moved' event
61
+ * Move an entity without validation. Can move into closed/locked containers.
62
+ *
63
+ * @param entityId - ID of entity to move
64
+ * @param targetId - ID of target location (null to remove from world)
65
+ * @returns Always true (no validation to fail)
107
66
  */
108
- moveEntity(entityId, targetId, recordEvent = false) {
109
- // Remove from current location
67
+ moveEntity(entityId, targetId) {
110
68
  const currentLocation = this.dataStore.spatialIndex.getParent(entityId);
111
69
  if (currentLocation) {
112
70
  this.dataStore.spatialIndex.removeChild(currentLocation, entityId);
113
71
  }
114
- // Add to new location
115
72
  if (targetId !== null) {
116
73
  this.dataStore.spatialIndex.addChild(targetId, entityId);
117
74
  }
118
- if (recordEvent) {
119
- this.emitEvent('author:entity:moved', {
120
- entityId,
121
- from: currentLocation,
122
- to: targetId
123
- });
124
- }
75
+ return true;
125
76
  }
126
- /**
127
- * Get an entity by ID
128
- */
129
- getEntity(entityId) {
130
- return this.dataStore.entities.get(entityId);
77
+ // ========== Delegated Methods ==========
78
+ // Entity Management
79
+ getEntity(id) {
80
+ return this.dataStore.entities.get(id);
131
81
  }
132
- /**
133
- * Set an entity property directly without validation
134
- */
135
- setEntityProperty(entityId, property, value, recordEvent = false) {
136
- const entity = this.dataStore.entities.get(entityId);
137
- if (!entity)
138
- return;
139
- entity.attributes[property] = value;
140
- if (recordEvent) {
141
- this.emitEvent('author:entity:property:changed', {
142
- entityId,
143
- property,
144
- value
145
- });
146
- }
82
+ hasEntity(id) {
83
+ return this.dataStore.entities.has(id);
147
84
  }
148
- /**
149
- * Add a trait to an entity without validation
150
- */
151
- addTrait(entityId, trait, recordEvent = false) {
152
- const entity = this.dataStore.entities.get(entityId);
153
- if (!entity)
154
- return;
155
- entity.add(trait);
156
- if (recordEvent) {
157
- this.emitEvent('author:entity:trait:added', {
158
- entityId,
159
- traitType: trait.type
160
- });
161
- }
85
+ removeEntity(id) {
86
+ return this.worldModel.removeEntity(id);
162
87
  }
163
- /**
164
- * Remove a trait from an entity without validation
165
- */
166
- removeTrait(entityId, traitType, recordEvent = false) {
167
- const entity = this.dataStore.entities.get(entityId);
168
- if (!entity)
169
- return;
170
- entity.remove(traitType);
171
- if (recordEvent) {
172
- this.emitEvent('author:entity:trait:removed', {
173
- entityId,
174
- traitType
175
- });
176
- }
88
+ getAllEntities() {
89
+ return Array.from(this.dataStore.entities.values());
177
90
  }
178
- // ========== Convenience Methods ==========
179
- /**
180
- * Move multiple entities to a container in one operation
181
- */
182
- populate(containerId, entityIds, recordEvent = false) {
183
- for (const entityId of entityIds) {
184
- this.moveEntity(entityId, containerId, recordEvent);
185
- }
91
+ updateEntity(entityId, updater) {
92
+ this.worldModel.updateEntity(entityId, updater);
186
93
  }
187
- /**
188
- * Create a bidirectional connection between two rooms
189
- */
190
- connect(room1Id, room2Id, direction, recordEvent = false) {
191
- const room1 = this.dataStore.entities.get(room1Id);
192
- const room2 = this.dataStore.entities.get(room2Id);
193
- if (!room1 || !room2)
194
- return;
195
- // Get opposite direction
196
- const opposites = {
197
- 'north': 'south',
198
- 'south': 'north',
199
- 'east': 'west',
200
- 'west': 'east',
201
- 'northeast': 'southwest',
202
- 'northwest': 'southeast',
203
- 'southeast': 'northwest',
204
- 'southwest': 'northeast',
205
- 'up': 'down',
206
- 'down': 'up',
207
- 'in': 'out',
208
- 'out': 'in'
209
- };
210
- const opposite = opposites[direction] || direction;
211
- // Add exits to both rooms
212
- if (!room1.attributes.exits) {
213
- room1.attributes.exits = {};
214
- }
215
- if (!room2.attributes.exits) {
216
- room2.attributes.exits = {};
217
- }
218
- // Type assertion since we know exits is now a Record<string, string>
219
- room1.attributes.exits[direction] = room2Id;
220
- room2.attributes.exits[opposite] = room1Id;
221
- if (recordEvent) {
222
- this.emitEvent('author:rooms:connected', {
223
- room1Id,
224
- room2Id,
225
- direction,
226
- opposite
227
- });
228
- }
94
+ // Spatial Management
95
+ getLocation(entityId) {
96
+ return this.dataStore.spatialIndex.getParent(entityId);
229
97
  }
230
- /**
231
- * Fill a container with items based on specifications
232
- */
233
- fillContainer(containerId, itemSpecs, recordEvent = false) {
234
- for (const spec of itemSpecs) {
235
- const item = this.createEntity(spec.name, spec.type || 'item', recordEvent);
236
- // Apply attributes
237
- if (spec.attributes) {
238
- Object.assign(item.attributes, spec.attributes);
239
- }
240
- // Add traits
241
- if (spec.traits) {
242
- for (const traitType of spec.traits) {
243
- // Note: In a real implementation, you'd need trait factories
244
- // For now, we'll skip trait creation
245
- }
246
- }
247
- this.moveEntity(item.id, containerId, recordEvent);
248
- }
98
+ getContents(containerId, options) {
99
+ return this.worldModel.getContents(containerId, options);
249
100
  }
250
- /**
251
- * Place an actor at a location (convenience method)
252
- */
253
- placeActor(actorId, locationId, recordEvent = false) {
254
- this.moveEntity(actorId, locationId, recordEvent);
101
+ canMoveEntity(entityId, targetId) {
102
+ return true; // AuthorModel always allows moves
255
103
  }
256
- /**
257
- * Set up a container with common properties
258
- */
259
- setupContainer(containerId, isOpen, isLocked, keyId, recordEvent = false) {
260
- const container = this.dataStore.entities.get(containerId);
261
- if (!container)
262
- return;
263
- if (isOpen !== undefined) {
264
- const openable = container.getTrait(openableTrait_1.OpenableTrait);
265
- if (openable) {
266
- openable.isOpen = isOpen;
267
- }
268
- else {
269
- const newOpenable = new openableTrait_1.OpenableTrait();
270
- newOpenable.isOpen = isOpen;
271
- this.addTrait(containerId, newOpenable, recordEvent);
272
- }
273
- }
274
- if (isLocked !== undefined) {
275
- const lockable = container.getTrait(lockableTrait_1.LockableTrait);
276
- if (lockable) {
277
- lockable.isLocked = isLocked;
278
- if (keyId)
279
- lockable.keyId = keyId;
280
- }
281
- else {
282
- const newLockable = new lockableTrait_1.LockableTrait();
283
- newLockable.isLocked = isLocked;
284
- if (keyId)
285
- newLockable.keyId = keyId;
286
- this.addTrait(containerId, newLockable, recordEvent);
287
- }
288
- }
104
+ getContainingRoom(entityId) {
105
+ return this.worldModel.getContainingRoom(entityId);
289
106
  }
290
- // ========== State Management ==========
291
- /**
292
- * Set a world state value directly
293
- */
294
- setStateValue(key, value, recordEvent = false) {
107
+ getAllContents(entityId, options) {
108
+ return this.worldModel.getAllContents(entityId, options);
109
+ }
110
+ // World State Management
111
+ getState() {
112
+ return { ...this.dataStore.state };
113
+ }
114
+ setState(state) {
115
+ Object.assign(this.dataStore.state, state);
116
+ }
117
+ getStateValue(key) {
118
+ return this.dataStore.state[key];
119
+ }
120
+ setStateValue(key, value) {
295
121
  this.dataStore.state[key] = value;
296
- if (recordEvent) {
297
- this.emitEvent('author:state:changed', {
298
- key,
299
- value
300
- });
301
- }
302
122
  }
123
+ // Prompt
124
+ getPrompt() {
125
+ return this.worldModel.getPrompt();
126
+ }
127
+ setPrompt(prompt) {
128
+ this.worldModel.setPrompt(prompt);
129
+ }
130
+ // Query Operations
131
+ findByTrait(traitType) {
132
+ return this.worldModel.findByTrait(traitType);
133
+ }
134
+ findByType(entityType) {
135
+ return this.worldModel.findByType(entityType);
136
+ }
137
+ findWhere(predicate) {
138
+ return this.worldModel.findWhere(predicate);
139
+ }
140
+ getVisible(observerId) {
141
+ return this.worldModel.getVisible(observerId);
142
+ }
143
+ getInScope(observerId) {
144
+ return this.worldModel.getInScope(observerId);
145
+ }
146
+ canSee(observerId, targetId) {
147
+ return this.worldModel.canSee(observerId, targetId);
148
+ }
149
+ // Relationship Queries
150
+ getRelated(entityId, relationshipType) {
151
+ return this.worldModel.getRelated(entityId, relationshipType);
152
+ }
153
+ areRelated(entity1Id, entity2Id, relationshipType) {
154
+ return this.worldModel.areRelated(entity1Id, entity2Id, relationshipType);
155
+ }
156
+ addRelationship(entity1Id, entity2Id, relationshipType) {
157
+ this.worldModel.addRelationship(entity1Id, entity2Id, relationshipType);
158
+ }
159
+ removeRelationship(entity1Id, entity2Id, relationshipType) {
160
+ this.worldModel.removeRelationship(entity1Id, entity2Id, relationshipType);
161
+ }
162
+ // Utility Methods
163
+ getTotalWeight(entityId) {
164
+ return this.worldModel.getTotalWeight(entityId);
165
+ }
166
+ wouldCreateLoop(entityId, targetId) {
167
+ return this.worldModel.wouldCreateLoop(entityId, targetId);
168
+ }
169
+ findPath(fromRoomId, toRoomId) {
170
+ return this.worldModel.findPath(fromRoomId, toRoomId);
171
+ }
172
+ getPlayer() {
173
+ return this.worldModel.getPlayer();
174
+ }
175
+ setPlayer(entityId) {
176
+ this.worldModel.setPlayer(entityId);
177
+ }
178
+ // Convenience Creators
179
+ connectRooms(room1Id, room2Id, direction) {
180
+ this.worldModel.connectRooms(room1Id, room2Id, direction);
181
+ }
182
+ createDoor(displayName, opts) {
183
+ return this.worldModel.createDoor(displayName, opts);
184
+ }
185
+ // Capability Management
186
+ registerCapability(name, registration) {
187
+ this.worldModel.registerCapability(name, registration);
188
+ }
189
+ updateCapability(name, data) {
190
+ this.worldModel.updateCapability(name, data);
191
+ }
192
+ getCapability(name) {
193
+ return this.worldModel.getCapability(name);
194
+ }
195
+ hasCapability(name) {
196
+ return this.worldModel.hasCapability(name);
197
+ }
198
+ // Score Ledger
199
+ awardScore(id, points, description) {
200
+ return this.worldModel.awardScore(id, points, description);
201
+ }
202
+ revokeScore(id) {
203
+ return this.worldModel.revokeScore(id);
204
+ }
205
+ hasScore(id) {
206
+ return this.worldModel.hasScore(id);
207
+ }
208
+ getScore() {
209
+ return this.worldModel.getScore();
210
+ }
211
+ getScoreEntries() {
212
+ return this.worldModel.getScoreEntries();
213
+ }
214
+ setMaxScore(max) {
215
+ this.worldModel.setMaxScore(max);
216
+ }
217
+ getMaxScore() {
218
+ return this.worldModel.getMaxScore();
219
+ }
220
+ // Persistence
221
+ toJSON() {
222
+ return this.worldModel.toJSON();
223
+ }
224
+ loadJSON(json) {
225
+ this.worldModel.loadJSON(json);
226
+ }
227
+ clear() {
228
+ this.worldModel.clear();
229
+ }
230
+ // Event System
231
+ registerEventHandler(eventType, handler) {
232
+ this.worldModel.registerEventHandler(eventType, handler);
233
+ }
234
+ unregisterEventHandler(eventType) {
235
+ this.worldModel.unregisterEventHandler(eventType);
236
+ }
237
+ registerEventValidator(eventType, validator) {
238
+ this.worldModel.registerEventValidator(eventType, validator);
239
+ }
240
+ registerEventPreviewer(eventType, previewer) {
241
+ this.worldModel.registerEventPreviewer(eventType, previewer);
242
+ }
243
+ connectEventProcessor(wiring) {
244
+ this.worldModel.connectEventProcessor(wiring);
245
+ }
246
+ chainEvent(triggerType, handler, options) {
247
+ this.worldModel.chainEvent(triggerType, handler, options);
248
+ }
249
+ applyEvent(event) {
250
+ this.worldModel.applyEvent(event);
251
+ }
252
+ canApplyEvent(event) {
253
+ return this.worldModel.canApplyEvent(event);
254
+ }
255
+ previewEvent(event) {
256
+ return this.worldModel.previewEvent(event);
257
+ }
258
+ getAppliedEvents() {
259
+ return this.worldModel.getAppliedEvents();
260
+ }
261
+ getEventsSince(timestamp) {
262
+ return this.worldModel.getEventsSince(timestamp);
263
+ }
264
+ clearEventHistory() {
265
+ this.worldModel.clearEventHistory();
266
+ }
267
+ // Scope Management
268
+ getScopeRegistry() {
269
+ return this.worldModel.getScopeRegistry();
270
+ }
271
+ addScopeRule(rule) {
272
+ this.worldModel.addScopeRule(rule);
273
+ }
274
+ removeScopeRule(ruleId) {
275
+ return this.worldModel.removeScopeRule(ruleId);
276
+ }
277
+ evaluateScope(actorId, actionId) {
278
+ return this.worldModel.evaluateScope(actorId, actionId);
279
+ }
280
+ // Vocabulary Management
281
+ getGrammarVocabularyProvider() {
282
+ return this.worldModel.getGrammarVocabularyProvider();
283
+ }
284
+ // ========== Author-Only Convenience Methods ==========
303
285
  /**
304
- * Set the player entity
286
+ * Move multiple entities to a container in one operation.
305
287
  */
306
- setPlayer(entityId, recordEvent = false) {
307
- if (!this.dataStore.entities.has(entityId)) {
308
- // AuthorModel doesn't validate, but we should at least check existence
309
- console.warn(`Setting player to non-existent entity: ${entityId}`);
310
- }
311
- // If we have a reference to the WorldModel, use its setPlayer method
312
- if (this.worldModel) {
313
- // as any: justified — AuthorModel bypasses WorldModel.setPlayer() validation
314
- this.worldModel.playerId = entityId;
315
- }
316
- else {
317
- this.dataStore.playerId = entityId;
318
- }
319
- if (recordEvent) {
320
- this.emitEvent('author:player:set', {
321
- playerId: entityId
322
- });
288
+ populate(containerId, entityIds) {
289
+ for (const entityId of entityIds) {
290
+ this.moveEntity(entityId, containerId);
323
291
  }
324
292
  }
325
- // ========== Bulk Operations ==========
326
293
  /**
327
- * Clear all world data
294
+ * Add a trait to an entity.
328
295
  */
329
- clear(recordEvent = false) {
330
- this.dataStore.entities.clear();
331
- this.dataStore.spatialIndex.clear();
332
- // Clear state properties instead of replacing object
333
- for (const key in this.dataStore.state) {
334
- delete this.dataStore.state[key];
335
- }
336
- if (this.worldModel) {
337
- // as any: justified — AuthorModel bypasses WorldModel.setPlayer() validation
338
- this.worldModel.playerId = undefined;
339
- }
340
- else {
341
- this.dataStore.playerId = undefined;
342
- }
343
- this.dataStore.relationships.clear();
344
- this.dataStore.idCounters.clear();
345
- this.dataStore.capabilities = {};
346
- if (recordEvent) {
347
- this.emitEvent('author:world:cleared', {});
296
+ addTrait(entityId, trait) {
297
+ const entity = this.dataStore.entities.get(entityId);
298
+ if (entity) {
299
+ entity.add(trait);
348
300
  }
349
301
  }
350
302
  /**
351
- * Import world data from a serialized format
303
+ * Remove a trait from an entity.
352
304
  */
353
- import(data, recordEvent = false) {
354
- // Implementation would depend on the data format
355
- // For now, this is a placeholder
356
- if (recordEvent) {
357
- this.emitEvent('author:world:imported', {
358
- entityCount: this.dataStore.entities.size
359
- });
305
+ removeTrait(entityId, traitType) {
306
+ const entity = this.dataStore.entities.get(entityId);
307
+ if (entity) {
308
+ entity.remove(traitType);
360
309
  }
361
310
  }
362
311
  // ========== Private Helpers ==========
363
- /**
364
- * Generate an ID for a new entity
365
- */
366
312
  generateId(type) {
367
313
  const TYPE_PREFIXES = {
368
314
  'room': 'r',
@@ -385,33 +331,6 @@ class AuthorModel {
385
331
  const base36 = nextCounter.toString(36).padStart(2, '0');
386
332
  return `${prefix}${base36}`;
387
333
  }
388
- /**
389
- * Emit an author event if event recording is enabled
390
- */
391
- emitEvent(eventType, data) {
392
- const handler = this.eventHandlers.get(eventType);
393
- if (handler) {
394
- // Ensure the event has the type field included
395
- const event = {
396
- type: eventType,
397
- timestamp: Date.now(),
398
- ...data
399
- };
400
- handler(event);
401
- }
402
- }
403
- /**
404
- * Register an event handler for author events
405
- */
406
- registerEventHandler(eventType, handler) {
407
- this.eventHandlers.set(eventType, handler);
408
- }
409
- /**
410
- * Unregister an event handler
411
- */
412
- unregisterEventHandler(eventType) {
413
- this.eventHandlers.delete(eventType);
414
- }
415
334
  }
416
335
  exports.AuthorModel = AuthorModel;
417
336
  //# sourceMappingURL=AuthorModel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AuthorModel.js","sourceRoot":"","sources":["../../../../../../../repos/sharpee/packages/world-model/src/world/AuthorModel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AuthorModel.js","sourceRoot":"","sources":["../../../../../../../repos/sharpee/packages/world-model/src/world/AuthorModel.ts"],"names":[],"mappings":"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"}