@sharpee/engine 0.9.66-beta → 0.9.67-beta

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 (77) hide show
  1. package/action-context-factory.d.ts +11 -0
  2. package/action-context-factory.d.ts.map +1 -0
  3. package/action-context-factory.js +258 -0
  4. package/action-context-factory.js.map +1 -0
  5. package/capability-dispatch-helper.d.ts +106 -0
  6. package/capability-dispatch-helper.d.ts.map +1 -0
  7. package/capability-dispatch-helper.js +269 -0
  8. package/capability-dispatch-helper.js.map +1 -0
  9. package/command-executor.d.ts +53 -0
  10. package/command-executor.d.ts.map +1 -0
  11. package/command-executor.js +329 -0
  12. package/command-executor.js.map +1 -0
  13. package/event-adapter.d.ts +44 -0
  14. package/event-adapter.d.ts.map +1 -0
  15. package/event-adapter.js +127 -0
  16. package/event-adapter.js.map +1 -0
  17. package/event-sequencer.d.ts +73 -0
  18. package/event-sequencer.d.ts.map +1 -0
  19. package/event-sequencer.js +134 -0
  20. package/event-sequencer.js.map +1 -0
  21. package/events/event-emitter.d.ts +34 -0
  22. package/events/event-emitter.d.ts.map +1 -0
  23. package/events/event-emitter.js +67 -0
  24. package/events/event-emitter.js.map +1 -0
  25. package/game-engine.d.ts +292 -0
  26. package/game-engine.d.ts.map +1 -0
  27. package/game-engine.js +1597 -0
  28. package/game-engine.js.map +1 -0
  29. package/index.d.ts +27 -0
  30. package/index.d.ts.map +1 -0
  31. package/index.js +63 -0
  32. package/index.js.map +1 -0
  33. package/narrative/index.d.ts +5 -0
  34. package/narrative/index.d.ts.map +1 -0
  35. package/narrative/index.js +10 -0
  36. package/narrative/index.js.map +1 -0
  37. package/narrative/narrative-settings.d.ts +73 -0
  38. package/narrative/narrative-settings.d.ts.map +1 -0
  39. package/narrative/narrative-settings.js +28 -0
  40. package/narrative/narrative-settings.js.map +1 -0
  41. package/package.json +1 -15
  42. package/parser-interface.d.ts +77 -0
  43. package/parser-interface.d.ts.map +1 -0
  44. package/parser-interface.js +48 -0
  45. package/parser-interface.js.map +1 -0
  46. package/platform-operations.d.ts +83 -0
  47. package/platform-operations.d.ts.map +1 -0
  48. package/platform-operations.js +218 -0
  49. package/platform-operations.js.map +1 -0
  50. package/save-restore-service.d.ts +125 -0
  51. package/save-restore-service.d.ts.map +1 -0
  52. package/save-restore-service.js +405 -0
  53. package/save-restore-service.js.map +1 -0
  54. package/shared-data-keys.d.ts +53 -0
  55. package/shared-data-keys.d.ts.map +1 -0
  56. package/shared-data-keys.js +29 -0
  57. package/shared-data-keys.js.map +1 -0
  58. package/story.d.ts +216 -0
  59. package/story.d.ts.map +1 -0
  60. package/story.js +60 -0
  61. package/story.js.map +1 -0
  62. package/test-helpers/mock-text-service.d.ts +11 -0
  63. package/test-helpers/mock-text-service.d.ts.map +1 -0
  64. package/test-helpers/mock-text-service.js +47 -0
  65. package/test-helpers/mock-text-service.js.map +1 -0
  66. package/turn-event-processor.d.ts +89 -0
  67. package/turn-event-processor.d.ts.map +1 -0
  68. package/turn-event-processor.js +144 -0
  69. package/turn-event-processor.js.map +1 -0
  70. package/types.d.ts +214 -0
  71. package/types.d.ts.map +1 -0
  72. package/types.js +8 -0
  73. package/types.js.map +1 -0
  74. package/vocabulary-manager.d.ts +35 -0
  75. package/vocabulary-manager.d.ts.map +1 -0
  76. package/vocabulary-manager.js +74 -0
  77. package/vocabulary-manager.js.map +1 -0
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Event Sequencer - Manages event ordering within turns
3
+ *
4
+ * Ensures all events have proper sequence numbers for ordering
5
+ * and grouping within a turn.
6
+ */
7
+ import { GameEvent, SequencedEvent } from './types';
8
+ /**
9
+ * Event sequencer class
10
+ */
11
+ declare class EventSequencer {
12
+ private counter;
13
+ /**
14
+ * Get next sequence number
15
+ */
16
+ next(): number;
17
+ /**
18
+ * Reset turn counter (optional, for testing)
19
+ */
20
+ resetTurn(turn: number): void;
21
+ /**
22
+ * Sequence a single event
23
+ */
24
+ sequence(event: GameEvent, turn: number): SequencedEvent;
25
+ /**
26
+ * Sequence multiple events
27
+ */
28
+ sequenceAll(events: GameEvent[], turn: number): SequencedEvent[];
29
+ }
30
+ /**
31
+ * Event sequence utilities
32
+ */
33
+ export declare class EventSequenceUtils {
34
+ /**
35
+ * Sort events by sequence number
36
+ */
37
+ static sort(events: SequencedEvent[]): SequencedEvent[];
38
+ /**
39
+ * Filter events by type
40
+ */
41
+ static filterByType(events: SequencedEvent[], type: string): SequencedEvent[];
42
+ /**
43
+ * Filter events by turn
44
+ */
45
+ static filterByTurn(events: SequencedEvent[], turn: number): SequencedEvent[];
46
+ /**
47
+ * Filter events by scope
48
+ */
49
+ static filterByScope(events: SequencedEvent[], scope: SequencedEvent['scope']): SequencedEvent[];
50
+ /**
51
+ * Group events by type
52
+ */
53
+ static groupByType(events: SequencedEvent[]): Record<string, SequencedEvent[]>;
54
+ /**
55
+ * Group events by turn
56
+ */
57
+ static groupByTurn(events: SequencedEvent[]): Record<number, SequencedEvent[]>;
58
+ /**
59
+ * Get latest event by type
60
+ */
61
+ static getLatestByType(events: SequencedEvent[], type: string): SequencedEvent | undefined;
62
+ /**
63
+ * Count events by type
64
+ */
65
+ static countByType(events: SequencedEvent[]): Record<string, number>;
66
+ /**
67
+ * Get events in sequence range
68
+ */
69
+ static getInRange(events: SequencedEvent[], start: number, end: number, inclusive?: boolean): SequencedEvent[];
70
+ }
71
+ export declare const eventSequencer: EventSequencer;
72
+ export {};
73
+ //# sourceMappingURL=event-sequencer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-sequencer.d.ts","sourceRoot":"","sources":["../../../../../mnt/c/repotemp/sharpee/packages/engine/src/event-sequencer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEpD;;GAEG;AACH,cAAM,cAAc;IAClB,OAAO,CAAC,OAAO,CAAsB;IAErC;;OAEG;IACH,IAAI,IAAI,MAAM;IAId;;OAEG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI7B;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc;IAUxD;;OAEG;IACH,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc,EAAE;CAGjE;AAED;;GAEG;AACH,qBAAa,kBAAkB;IAC7B;;OAEG;IACH,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,cAAc,EAAE;IAIvD;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc,EAAE;IAI7E;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc,EAAE;IAI7E;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,cAAc,CAAC,OAAO,CAAC,GAAG,cAAc,EAAE;IAIhG;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC;IAa9E;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC;IAa9E;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAS1F;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAUpE;;OAEG;IACH,MAAM,CAAC,UAAU,CACf,MAAM,EAAE,cAAc,EAAE,EACxB,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,SAAS,GAAE,OAAc,GACxB,cAAc,EAAE;CAOpB;AAGD,eAAO,MAAM,cAAc,gBAAuB,CAAC"}
@@ -0,0 +1,134 @@
1
+ "use strict";
2
+ /**
3
+ * Event Sequencer - Manages event ordering within turns
4
+ *
5
+ * Ensures all events have proper sequence numbers for ordering
6
+ * and grouping within a turn.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.eventSequencer = exports.EventSequenceUtils = void 0;
10
+ /**
11
+ * Event sequencer class
12
+ */
13
+ class EventSequencer {
14
+ counter = Date.now();
15
+ /**
16
+ * Get next sequence number
17
+ */
18
+ next() {
19
+ return ++this.counter;
20
+ }
21
+ /**
22
+ * Reset turn counter (optional, for testing)
23
+ */
24
+ resetTurn(turn) {
25
+ // No-op in this implementation
26
+ }
27
+ /**
28
+ * Sequence a single event
29
+ */
30
+ sequence(event, turn) {
31
+ return {
32
+ ...event,
33
+ sequence: this.next(),
34
+ timestamp: new Date(),
35
+ turn,
36
+ scope: 'turn'
37
+ };
38
+ }
39
+ /**
40
+ * Sequence multiple events
41
+ */
42
+ sequenceAll(events, turn) {
43
+ return events.map(event => this.sequence(event, turn));
44
+ }
45
+ }
46
+ /**
47
+ * Event sequence utilities
48
+ */
49
+ class EventSequenceUtils {
50
+ /**
51
+ * Sort events by sequence number
52
+ */
53
+ static sort(events) {
54
+ return [...events].sort((a, b) => a.sequence - b.sequence);
55
+ }
56
+ /**
57
+ * Filter events by type
58
+ */
59
+ static filterByType(events, type) {
60
+ return events.filter(e => e.type === type);
61
+ }
62
+ /**
63
+ * Filter events by turn
64
+ */
65
+ static filterByTurn(events, turn) {
66
+ return events.filter(e => e.turn === turn);
67
+ }
68
+ /**
69
+ * Filter events by scope
70
+ */
71
+ static filterByScope(events, scope) {
72
+ return events.filter(e => e.scope === scope);
73
+ }
74
+ /**
75
+ * Group events by type
76
+ */
77
+ static groupByType(events) {
78
+ const groups = {};
79
+ for (const event of events) {
80
+ if (!groups[event.type]) {
81
+ groups[event.type] = [];
82
+ }
83
+ groups[event.type].push(event);
84
+ }
85
+ return groups;
86
+ }
87
+ /**
88
+ * Group events by turn
89
+ */
90
+ static groupByTurn(events) {
91
+ const groups = {};
92
+ for (const event of events) {
93
+ if (!groups[event.turn]) {
94
+ groups[event.turn] = [];
95
+ }
96
+ groups[event.turn].push(event);
97
+ }
98
+ return groups;
99
+ }
100
+ /**
101
+ * Get latest event by type
102
+ */
103
+ static getLatestByType(events, type) {
104
+ const filtered = this.filterByType(events, type);
105
+ if (filtered.length === 0)
106
+ return undefined;
107
+ return filtered.reduce((latest, current) => current.sequence > latest.sequence ? current : latest);
108
+ }
109
+ /**
110
+ * Count events by type
111
+ */
112
+ static countByType(events) {
113
+ const counts = {};
114
+ for (const event of events) {
115
+ counts[event.type] = (counts[event.type] || 0) + 1;
116
+ }
117
+ return counts;
118
+ }
119
+ /**
120
+ * Get events in sequence range
121
+ */
122
+ static getInRange(events, start, end, inclusive = true) {
123
+ if (inclusive) {
124
+ return events.filter(e => e.sequence >= start && e.sequence <= end);
125
+ }
126
+ else {
127
+ return events.filter(e => e.sequence > start && e.sequence < end);
128
+ }
129
+ }
130
+ }
131
+ exports.EventSequenceUtils = EventSequenceUtils;
132
+ // Export singleton instance
133
+ exports.eventSequencer = new EventSequencer();
134
+ //# sourceMappingURL=event-sequencer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-sequencer.js","sourceRoot":"","sources":["../../../../../../../../mnt/c/repotemp/sharpee/packages/engine/src/event-sequencer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Event emitter for managing game events
3
+ */
4
+ import { ISemanticEvent } from "../src/index";
5
+ import { IGameEvent, SimpleEventHandler } from "../src/index";
6
+ /**
7
+ * Simple event emitter for the game event system
8
+ * Used for story-level event handlers (daemons)
9
+ */
10
+ export declare class EventEmitter {
11
+ private handlers;
12
+ /**
13
+ * Register a handler for an event type
14
+ */
15
+ on(eventType: string, handler: SimpleEventHandler): void;
16
+ /**
17
+ * Remove a handler for an event type
18
+ */
19
+ off(eventType: string, handler: SimpleEventHandler): void;
20
+ /**
21
+ * Emit an event to all registered handlers
22
+ * Returns any semantic events generated by handlers
23
+ */
24
+ emit(event: IGameEvent): ISemanticEvent[];
25
+ /**
26
+ * Clear all handlers for a specific event type
27
+ */
28
+ clear(eventType?: string): void;
29
+ /**
30
+ * Get count of handlers for an event type
31
+ */
32
+ listenerCount(eventType: string): number;
33
+ }
34
+ //# sourceMappingURL=event-emitter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-emitter.d.ts","sourceRoot":"","sources":["../../../../../../mnt/c/repotemp/sharpee/packages/engine/src/events/event-emitter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAEtE;;;GAGG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAgD;IAEhE;;OAEG;IACH,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,GAAG,IAAI;IAMxD;;OAEG;IACH,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,GAAG,IAAI;IAUzD;;;OAGG;IACH,IAAI,CAAC,KAAK,EAAE,UAAU,GAAG,cAAc,EAAE;IAczC;;OAEG;IACH,KAAK,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAQ/B;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;CAGzC"}
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ /**
3
+ * Event emitter for managing game events
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.EventEmitter = void 0;
7
+ /**
8
+ * Simple event emitter for the game event system
9
+ * Used for story-level event handlers (daemons)
10
+ */
11
+ class EventEmitter {
12
+ handlers = new Map();
13
+ /**
14
+ * Register a handler for an event type
15
+ */
16
+ on(eventType, handler) {
17
+ const handlers = this.handlers.get(eventType) || [];
18
+ handlers.push(handler);
19
+ this.handlers.set(eventType, handlers);
20
+ }
21
+ /**
22
+ * Remove a handler for an event type
23
+ */
24
+ off(eventType, handler) {
25
+ const handlers = this.handlers.get(eventType);
26
+ if (handlers) {
27
+ const index = handlers.indexOf(handler);
28
+ if (index !== -1) {
29
+ handlers.splice(index, 1);
30
+ }
31
+ }
32
+ }
33
+ /**
34
+ * Emit an event to all registered handlers
35
+ * Returns any semantic events generated by handlers
36
+ */
37
+ emit(event) {
38
+ const results = [];
39
+ const handlers = this.handlers.get(event.type) || [];
40
+ for (const handler of handlers) {
41
+ const result = handler(event);
42
+ if (result) {
43
+ results.push(...result);
44
+ }
45
+ }
46
+ return results;
47
+ }
48
+ /**
49
+ * Clear all handlers for a specific event type
50
+ */
51
+ clear(eventType) {
52
+ if (eventType) {
53
+ this.handlers.delete(eventType);
54
+ }
55
+ else {
56
+ this.handlers.clear();
57
+ }
58
+ }
59
+ /**
60
+ * Get count of handlers for an event type
61
+ */
62
+ listenerCount(eventType) {
63
+ return this.handlers.get(eventType)?.length || 0;
64
+ }
65
+ }
66
+ exports.EventEmitter = EventEmitter;
67
+ //# sourceMappingURL=event-emitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-emitter.js","sourceRoot":"","sources":["../../../../../../../../../mnt/c/repotemp/sharpee/packages/engine/src/events/event-emitter.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAKH;;;GAGG;AACH,MAAa,YAAY;IACf,QAAQ,GAAsC,IAAI,GAAG,EAAE,CAAC;IAEhE;;OAEG;IACH,EAAE,CAAC,SAAiB,EAAE,OAA2B;QAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QACpD,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,SAAiB,EAAE,OAA2B;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC9C,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACxC,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;gBACjB,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,IAAI,CAAC,KAAiB;QACpB,MAAM,OAAO,GAAqB,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAErD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;YAC9B,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAkB;QACtB,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAClC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACxB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,SAAiB;QAC7B,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC;IACnD,CAAC;CACF;AA5DD,oCA4DC"}
@@ -0,0 +1,292 @@
1
+ /**
2
+ * Game Engine - Main runtime for Sharpee IF games
3
+ *
4
+ * Manages game state, turn execution, and coordinates all subsystems
5
+ */
6
+ import { WorldModel, IFEntity } from "./src/index";
7
+ import { EventProcessor } from "./src/index";
8
+ import { Parser, IPerceptionService } from "./src/index";
9
+ import { LanguageProvider } from "./src/index";
10
+ import { ITextService } from "./src/index";
11
+ import { ISemanticEvent, ISaveRestoreHooks, ISemanticEventSource } from "./src/index";
12
+ import { PluginRegistry } from "./src/index";
13
+ import { GameContext, TurnResult, EngineConfig, SequencedEvent } from './types';
14
+ import { Story } from './story';
15
+ import { NarrativeSettings } from './narrative';
16
+ import { ParsedCommandTransformer } from './command-executor';
17
+ /**
18
+ * Game engine events
19
+ */
20
+ export interface GameEngineEvents {
21
+ 'turn:start': (turn: number, input: string) => void;
22
+ 'turn:complete': (result: TurnResult) => void;
23
+ 'turn:failed': (error: Error, turn: number) => void;
24
+ 'event': (event: SequencedEvent) => void;
25
+ 'state:changed': (context: GameContext) => void;
26
+ 'game:over': (context: GameContext) => void;
27
+ 'text:output': (text: string, turn: number) => void;
28
+ 'text:channel': (channel: string, text: string, turn: number) => void;
29
+ }
30
+ type GameEngineEventName = keyof GameEngineEvents;
31
+ type GameEngineEventListener<K extends GameEngineEventName> = GameEngineEvents[K];
32
+ /**
33
+ * Main game engine
34
+ */
35
+ export declare class GameEngine {
36
+ private world;
37
+ private sessionStartTime?;
38
+ private sessionTurns;
39
+ private sessionMoves;
40
+ private context;
41
+ private config;
42
+ private commandExecutor;
43
+ private eventProcessor;
44
+ private platformEvents;
45
+ private actionRegistry;
46
+ private textService?;
47
+ private turnEvents;
48
+ private running;
49
+ private story?;
50
+ private languageProvider?;
51
+ private parser?;
52
+ private eventListeners;
53
+ private saveRestoreHooks?;
54
+ private eventSource;
55
+ private systemEventSource;
56
+ private pendingPlatformOps;
57
+ private perceptionService?;
58
+ private pluginRegistry;
59
+ private random;
60
+ private narrativeSettings;
61
+ private vocabularyManager;
62
+ private saveRestoreService;
63
+ private turnEventProcessor;
64
+ private platformOpHandler?;
65
+ private hasEmittedInitialized;
66
+ constructor(options: {
67
+ world: WorldModel;
68
+ player: IFEntity;
69
+ parser: Parser;
70
+ language: LanguageProvider;
71
+ perceptionService?: IPerceptionService;
72
+ config?: EngineConfig;
73
+ });
74
+ /**
75
+ * Set the story for this engine
76
+ */
77
+ setStory(story: Story): void;
78
+ /**
79
+ * Get the current parser
80
+ */
81
+ getParser(): Parser | undefined;
82
+ /**
83
+ * Get the current language provider
84
+ */
85
+ getLanguageProvider(): LanguageProvider | undefined;
86
+ /**
87
+ * Start the game engine
88
+ */
89
+ start(): void;
90
+ /**
91
+ * Stop the game engine
92
+ */
93
+ stop(reason?: 'quit' | 'victory' | 'defeat' | 'abort', details?: any): void;
94
+ /**
95
+ * Execute a turn
96
+ */
97
+ executeTurn(input: string): Promise<TurnResult>;
98
+ /**
99
+ * Execute a meta-command (VERSION, SCORE, HELP, etc.)
100
+ *
101
+ * Meta-commands operate outside the turn cycle:
102
+ * - They don't increment turns
103
+ * - They don't trigger NPC ticks or scheduler
104
+ * - They don't create undo snapshots
105
+ * - They don't get stored in command history
106
+ * - Events are processed immediately through text service (not stored in turnEvents)
107
+ *
108
+ * @param input - Raw command string
109
+ * @param parsedCommand - Parsed command from parser
110
+ * @returns MetaCommandResult with events and success status
111
+ */
112
+ private executeMetaCommand;
113
+ /**
114
+ * Process meta-command events: text service → emit to clients
115
+ *
116
+ * - Does NOT store in turnEvents
117
+ * - Passes currentTurn for display context (turn/score shown to player)
118
+ * - Turn counter is NOT incremented
119
+ */
120
+ private processMetaEvents;
121
+ /**
122
+ * Process a single platform operation for meta-commands.
123
+ *
124
+ * This is similar to processPlatformOperations but handles one operation
125
+ * at a time and returns completion events for inclusion in the result.
126
+ */
127
+ private processMetaPlatformOperation;
128
+ /**
129
+ * Get current game context
130
+ */
131
+ getContext(): GameContext;
132
+ /**
133
+ * Get world model
134
+ */
135
+ getWorld(): WorldModel;
136
+ /**
137
+ * Get the current story
138
+ */
139
+ getStory(): Story | undefined;
140
+ /**
141
+ * Get the event source for save/restore
142
+ */
143
+ getEventSource(): ISemanticEventSource;
144
+ /**
145
+ * Get narrative settings (ADR-089)
146
+ *
147
+ * Returns the story's narrative perspective and related settings.
148
+ * Use this for text rendering that needs to know 1st/2nd/3rd person.
149
+ */
150
+ getNarrativeSettings(): NarrativeSettings;
151
+ /**
152
+ * Configure language provider with narrative settings (ADR-089)
153
+ *
154
+ * Sets up the language provider for perspective-aware message resolution.
155
+ * For 3rd person narratives, extracts player pronouns from ActorTrait.
156
+ */
157
+ private configureLanguageProviderNarrative;
158
+ /**
159
+ * Get plugin registry for registering turn-cycle plugins (ADR-120)
160
+ */
161
+ getPluginRegistry(): PluginRegistry;
162
+ /**
163
+ * Get event processor for handler registration (ADR-075)
164
+ */
165
+ getEventProcessor(): EventProcessor;
166
+ /**
167
+ * Get the text service
168
+ */
169
+ getTextService(): ITextService | undefined;
170
+ /**
171
+ * Set a custom text service
172
+ */
173
+ setTextService(service: ITextService): void;
174
+ /**
175
+ * Register save/restore hooks
176
+ */
177
+ registerSaveRestoreHooks(hooks: ISaveRestoreHooks): void;
178
+ /**
179
+ * Register a transformer for parsed commands.
180
+ * Transformers are called after parsing but before validation,
181
+ * allowing stories to modify commands (e.g., for debug tools).
182
+ *
183
+ * @param transformer - Function to transform parsed commands
184
+ */
185
+ registerParsedCommandTransformer(transformer: ParsedCommandTransformer): void;
186
+ /**
187
+ * Unregister a parsed command transformer.
188
+ *
189
+ * @param transformer - The transformer to remove
190
+ * @returns true if the transformer was found and removed
191
+ */
192
+ unregisterParsedCommandTransformer(transformer: ParsedCommandTransformer): boolean;
193
+ /**
194
+ * Save game state using registered hooks
195
+ */
196
+ save(): Promise<boolean>;
197
+ /**
198
+ * Restore game state using registered hooks
199
+ */
200
+ restore(): Promise<boolean>;
201
+ /**
202
+ * Create an undo snapshot of the current world state
203
+ */
204
+ private createUndoSnapshot;
205
+ /**
206
+ * Undo to previous turn
207
+ * @returns true if undo succeeded, false if nothing to undo
208
+ */
209
+ undo(): boolean;
210
+ /**
211
+ * Check if undo is available
212
+ */
213
+ canUndo(): boolean;
214
+ /**
215
+ * Get number of undo levels available
216
+ */
217
+ getUndoLevels(): number;
218
+ /**
219
+ * Process events from a plugin through the shared pipeline (ADR-120)
220
+ * Enriches, filters, stores, and emits events.
221
+ */
222
+ private processPluginEvents;
223
+ /**
224
+ * Create save data from current engine state
225
+ */
226
+ private createSaveData;
227
+ /**
228
+ * Load save data into engine
229
+ */
230
+ private loadSaveData;
231
+ /**
232
+ * Get turn history
233
+ */
234
+ getHistory(): TurnResult[];
235
+ /**
236
+ * Get recent events
237
+ */
238
+ getRecentEvents(count?: number): SequencedEvent[];
239
+ /**
240
+ * Update vocabulary for an entity
241
+ */
242
+ updateEntityVocabulary(entity: IFEntity, inScope: boolean): void;
243
+ /**
244
+ * Update vocabulary for all entities in scope
245
+ */
246
+ updateScopeVocabulary(): void;
247
+ /**
248
+ * Emit a platform event with turn metadata
249
+ */
250
+ emitPlatformEvent(event: Omit<ISemanticEvent, 'id' | 'timestamp'>): void;
251
+ /**
252
+ * Update context after a turn
253
+ */
254
+ private updateContext;
255
+ /**
256
+ * Update command history capability
257
+ */
258
+ private updateCommandHistory;
259
+ /**
260
+ * Process pending platform operations
261
+ */
262
+ private processPlatformOperations;
263
+ /**
264
+ * Emit a game lifecycle event.
265
+ * All game events now use ISemanticEvent with data in the `data` field.
266
+ * (IGameEvent with `payload` is deprecated - see ADR-097)
267
+ */
268
+ private emitGameEvent;
269
+ /**
270
+ * Emit an event to listeners
271
+ */
272
+ private emit;
273
+ /**
274
+ * Dispatch an event to entity handlers (entity.on)
275
+ * Entities can define handlers for specific event types
276
+ */
277
+ private dispatchEntityHandlers;
278
+ /**
279
+ * Check if game is over
280
+ */
281
+ private isGameOver;
282
+ /**
283
+ * Add event listener
284
+ */
285
+ on<K extends GameEngineEventName>(event: K, listener: GameEngineEventListener<K>): this;
286
+ /**
287
+ * Remove event listener
288
+ */
289
+ off<K extends GameEngineEventName>(event: K, listener: GameEngineEventListener<K>): this;
290
+ }
291
+ export {};
292
+ //# sourceMappingURL=game-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"game-engine.d.ts","sourceRoot":"","sources":["../../../../../mnt/c/repotemp/sharpee/packages/engine/src/game-engine.ts"],"names":[],"mappings":"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"}