@sharpee/engine 0.9.60-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 (95) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +328 -0
  3. package/dist/action-context-factory.d.ts +11 -0
  4. package/dist/action-context-factory.d.ts.map +1 -0
  5. package/dist/action-context-factory.js +258 -0
  6. package/dist/action-context-factory.js.map +1 -0
  7. package/dist/capability-dispatch-helper.d.ts +106 -0
  8. package/dist/capability-dispatch-helper.d.ts.map +1 -0
  9. package/dist/capability-dispatch-helper.js +269 -0
  10. package/dist/capability-dispatch-helper.js.map +1 -0
  11. package/dist/command-executor.d.ts +53 -0
  12. package/dist/command-executor.d.ts.map +1 -0
  13. package/dist/command-executor.js +329 -0
  14. package/dist/command-executor.js.map +1 -0
  15. package/dist/event-adapter.d.ts +44 -0
  16. package/dist/event-adapter.d.ts.map +1 -0
  17. package/dist/event-adapter.js +127 -0
  18. package/dist/event-adapter.js.map +1 -0
  19. package/dist/event-sequencer.d.ts +73 -0
  20. package/dist/event-sequencer.d.ts.map +1 -0
  21. package/dist/event-sequencer.js +134 -0
  22. package/dist/event-sequencer.js.map +1 -0
  23. package/dist/events/event-emitter.d.ts +34 -0
  24. package/dist/events/event-emitter.d.ts.map +1 -0
  25. package/dist/events/event-emitter.js +67 -0
  26. package/dist/events/event-emitter.js.map +1 -0
  27. package/dist/game-engine.d.ts +292 -0
  28. package/dist/game-engine.d.ts.map +1 -0
  29. package/dist/game-engine.js +1631 -0
  30. package/dist/game-engine.js.map +1 -0
  31. package/dist/index.d.ts +27 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +62 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/narrative/index.d.ts +5 -0
  36. package/dist/narrative/index.d.ts.map +1 -0
  37. package/dist/narrative/index.js +10 -0
  38. package/dist/narrative/index.js.map +1 -0
  39. package/dist/narrative/narrative-settings.d.ts +73 -0
  40. package/dist/narrative/narrative-settings.d.ts.map +1 -0
  41. package/dist/narrative/narrative-settings.js +28 -0
  42. package/dist/narrative/narrative-settings.js.map +1 -0
  43. package/dist/parser-interface.d.ts +77 -0
  44. package/dist/parser-interface.d.ts.map +1 -0
  45. package/dist/parser-interface.js +48 -0
  46. package/dist/parser-interface.js.map +1 -0
  47. package/dist/platform-operations.d.ts +83 -0
  48. package/dist/platform-operations.d.ts.map +1 -0
  49. package/dist/platform-operations.js +218 -0
  50. package/dist/platform-operations.js.map +1 -0
  51. package/dist/save-restore-service.d.ts +133 -0
  52. package/dist/save-restore-service.d.ts.map +1 -0
  53. package/dist/save-restore-service.js +446 -0
  54. package/dist/save-restore-service.js.map +1 -0
  55. package/dist/scheduler/index.d.ts +9 -0
  56. package/dist/scheduler/index.d.ts.map +1 -0
  57. package/dist/scheduler/index.js +25 -0
  58. package/dist/scheduler/index.js.map +1 -0
  59. package/dist/scheduler/scheduler-service.d.ts +75 -0
  60. package/dist/scheduler/scheduler-service.d.ts.map +1 -0
  61. package/dist/scheduler/scheduler-service.js +310 -0
  62. package/dist/scheduler/scheduler-service.js.map +1 -0
  63. package/dist/scheduler/seeded-random.d.ts +7 -0
  64. package/dist/scheduler/seeded-random.d.ts.map +1 -0
  65. package/dist/scheduler/seeded-random.js +11 -0
  66. package/dist/scheduler/seeded-random.js.map +1 -0
  67. package/dist/scheduler/types.d.ts +134 -0
  68. package/dist/scheduler/types.d.ts.map +1 -0
  69. package/dist/scheduler/types.js +9 -0
  70. package/dist/scheduler/types.js.map +1 -0
  71. package/dist/shared-data-keys.d.ts +53 -0
  72. package/dist/shared-data-keys.d.ts.map +1 -0
  73. package/dist/shared-data-keys.js +29 -0
  74. package/dist/shared-data-keys.js.map +1 -0
  75. package/dist/story.d.ts +211 -0
  76. package/dist/story.d.ts.map +1 -0
  77. package/dist/story.js +60 -0
  78. package/dist/story.js.map +1 -0
  79. package/dist/test-helpers/mock-text-service.d.ts +11 -0
  80. package/dist/test-helpers/mock-text-service.d.ts.map +1 -0
  81. package/dist/test-helpers/mock-text-service.js +47 -0
  82. package/dist/test-helpers/mock-text-service.js.map +1 -0
  83. package/dist/turn-event-processor.d.ts +89 -0
  84. package/dist/turn-event-processor.d.ts.map +1 -0
  85. package/dist/turn-event-processor.js +144 -0
  86. package/dist/turn-event-processor.js.map +1 -0
  87. package/dist/types.d.ts +214 -0
  88. package/dist/types.d.ts.map +1 -0
  89. package/dist/types.js +8 -0
  90. package/dist/types.js.map +1 -0
  91. package/dist/vocabulary-manager.d.ts +35 -0
  92. package/dist/vocabulary-manager.d.ts.map +1 -0
  93. package/dist/vocabulary-manager.js +74 -0
  94. package/dist/vocabulary-manager.js.map +1 -0
  95. package/package.json +70 -0
@@ -0,0 +1,218 @@
1
+ "use strict";
2
+ /**
3
+ * Platform Operations Handler - Handles platform events (save/restore/quit/restart/undo)
4
+ *
5
+ * Extracted from GameEngine as part of Phase 4 remediation.
6
+ * Uses strategy pattern to handle different platform operation types.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.PlatformOperationHandler = void 0;
10
+ exports.createPlatformOperationHandler = createPlatformOperationHandler;
11
+ const core_1 = require("@sharpee/core");
12
+ const parser_interface_1 = require("./parser-interface");
13
+ /**
14
+ * Handler for platform operations
15
+ */
16
+ class PlatformOperationHandler {
17
+ saveRestoreHooks;
18
+ saveRestoreService;
19
+ stateProvider;
20
+ vocabularyManager;
21
+ constructor(saveRestoreHooks, saveRestoreService, stateProvider, vocabularyManager) {
22
+ this.saveRestoreHooks = saveRestoreHooks;
23
+ this.saveRestoreService = saveRestoreService;
24
+ this.stateProvider = stateProvider;
25
+ this.vocabularyManager = vocabularyManager;
26
+ }
27
+ /**
28
+ * Process all pending platform operations
29
+ *
30
+ * @param pendingOps - Array of pending platform operations
31
+ * @param context - Platform operation context
32
+ * @param engineCallbacks - Callbacks for engine-level operations
33
+ */
34
+ async processAll(pendingOps, context, engineCallbacks) {
35
+ // Ensure there's an entry for the current turn
36
+ if (!context.turnEvents.has(context.currentTurn)) {
37
+ context.turnEvents.set(context.currentTurn, []);
38
+ }
39
+ for (const platformOp of pendingOps) {
40
+ try {
41
+ const resultEvent = await this.handleOperation(platformOp, context, engineCallbacks);
42
+ if (resultEvent) {
43
+ // Add to event source and turn events
44
+ context.eventSource.emit(resultEvent);
45
+ context.turnEvents.get(context.currentTurn)?.push(resultEvent);
46
+ context.emitEvent(resultEvent);
47
+ }
48
+ }
49
+ catch (error) {
50
+ console.error(`Error processing platform operation ${platformOp.type}:`, error);
51
+ // Emit appropriate error event
52
+ const errorEvent = this.createErrorEvent(platformOp.type, error instanceof Error ? error.message : 'Unknown error');
53
+ if (errorEvent) {
54
+ context.eventSource.emit(errorEvent);
55
+ context.turnEvents.get(context.currentTurn)?.push(errorEvent);
56
+ context.emitEvent(errorEvent);
57
+ }
58
+ }
59
+ }
60
+ }
61
+ /**
62
+ * Handle a single platform operation
63
+ */
64
+ async handleOperation(platformOp, context, engineCallbacks) {
65
+ switch (platformOp.type) {
66
+ case core_1.PlatformEventType.SAVE_REQUESTED:
67
+ return this.handleSave(platformOp);
68
+ case core_1.PlatformEventType.RESTORE_REQUESTED:
69
+ return this.handleRestore(platformOp, engineCallbacks);
70
+ case core_1.PlatformEventType.QUIT_REQUESTED:
71
+ return this.handleQuit(platformOp, context, engineCallbacks);
72
+ case core_1.PlatformEventType.RESTART_REQUESTED:
73
+ return this.handleRestart(platformOp, context, engineCallbacks);
74
+ case core_1.PlatformEventType.UNDO_REQUESTED:
75
+ return this.handleUndo(engineCallbacks);
76
+ default:
77
+ return null;
78
+ }
79
+ }
80
+ /**
81
+ * Handle save request
82
+ */
83
+ async handleSave(platformOp) {
84
+ if (!this.saveRestoreHooks?.onSaveRequested) {
85
+ return (0, core_1.createSaveCompletedEvent)(false, 'No save handler registered');
86
+ }
87
+ const saveContext = platformOp.payload.context;
88
+ const saveData = this.saveRestoreService.createSaveData(this.stateProvider);
89
+ // Add any additional context from the platform event
90
+ if (saveContext?.saveName) {
91
+ saveData.metadata.description = saveContext.saveName;
92
+ }
93
+ if (saveContext?.metadata) {
94
+ Object.assign(saveData.metadata, saveContext.metadata);
95
+ }
96
+ await this.saveRestoreHooks.onSaveRequested(saveData);
97
+ return (0, core_1.createSaveCompletedEvent)(true);
98
+ }
99
+ /**
100
+ * Handle restore request
101
+ */
102
+ async handleRestore(platformOp, engineCallbacks) {
103
+ if (!this.saveRestoreHooks?.onRestoreRequested) {
104
+ return (0, core_1.createRestoreCompletedEvent)(false, 'No restore handler registered');
105
+ }
106
+ const saveData = await this.saveRestoreHooks.onRestoreRequested();
107
+ if (!saveData) {
108
+ return (0, core_1.createRestoreCompletedEvent)(false, 'No save data available or restore cancelled');
109
+ }
110
+ const result = this.saveRestoreService.loadSaveData(saveData, this.stateProvider);
111
+ // Update context
112
+ engineCallbacks.updateContext({ currentTurn: result.currentTurn });
113
+ // Reset pronoun context
114
+ const parser = engineCallbacks.getParser();
115
+ if (parser && (0, parser_interface_1.hasPronounContext)(parser)) {
116
+ parser.resetPronounContext();
117
+ }
118
+ // Update vocabulary for current scope
119
+ engineCallbacks.updateScopeVocabulary();
120
+ engineCallbacks.emitStateChanged();
121
+ return (0, core_1.createRestoreCompletedEvent)(true);
122
+ }
123
+ /**
124
+ * Handle quit request
125
+ */
126
+ async handleQuit(platformOp, context, engineCallbacks) {
127
+ const quitContext = platformOp.payload.context;
128
+ if (this.saveRestoreHooks?.onQuitRequested) {
129
+ const shouldQuit = await this.saveRestoreHooks.onQuitRequested(quitContext || {});
130
+ if (shouldQuit) {
131
+ engineCallbacks.stopEngine('quit');
132
+ return (0, core_1.createQuitConfirmedEvent)();
133
+ }
134
+ else {
135
+ return (0, core_1.createQuitCancelledEvent)();
136
+ }
137
+ }
138
+ else {
139
+ // No quit hook registered, auto-confirm
140
+ return (0, core_1.createQuitConfirmedEvent)();
141
+ }
142
+ }
143
+ /**
144
+ * Handle restart request
145
+ */
146
+ async handleRestart(platformOp, context, engineCallbacks) {
147
+ const restartContext = platformOp.payload.context;
148
+ if (this.saveRestoreHooks?.onRestartRequested) {
149
+ const shouldRestart = await this.saveRestoreHooks.onRestartRequested(restartContext || {});
150
+ if (shouldRestart) {
151
+ // Reset pronoun context
152
+ const parser = engineCallbacks.getParser();
153
+ if (parser && (0, parser_interface_1.hasPronounContext)(parser)) {
154
+ parser.resetPronounContext();
155
+ }
156
+ await engineCallbacks.restartStory();
157
+ return (0, core_1.createRestartCompletedEvent)(true);
158
+ }
159
+ else {
160
+ return (0, core_1.createRestartCompletedEvent)(false);
161
+ }
162
+ }
163
+ else {
164
+ // No restart hook registered - default behavior is to restart
165
+ const parser = engineCallbacks.getParser();
166
+ if (parser && (0, parser_interface_1.hasPronounContext)(parser)) {
167
+ parser.resetPronounContext();
168
+ }
169
+ await engineCallbacks.restartStory();
170
+ return (0, core_1.createRestartCompletedEvent)(true);
171
+ }
172
+ }
173
+ /**
174
+ * Handle undo request
175
+ */
176
+ handleUndo(engineCallbacks) {
177
+ const world = this.stateProvider.getWorld();
178
+ const result = this.saveRestoreService.undo(world);
179
+ if (result) {
180
+ // Update context with restored turn
181
+ engineCallbacks.updateContext({ currentTurn: result.turn });
182
+ // Update vocabulary for current scope
183
+ engineCallbacks.updateScopeVocabulary();
184
+ engineCallbacks.emitStateChanged();
185
+ return (0, core_1.createUndoCompletedEvent)(true, result.turn);
186
+ }
187
+ else {
188
+ return (0, core_1.createUndoCompletedEvent)(false, undefined, 'Nothing to undo');
189
+ }
190
+ }
191
+ /**
192
+ * Create an error event for a failed operation
193
+ */
194
+ createErrorEvent(operationType, errorMessage) {
195
+ switch (operationType) {
196
+ case core_1.PlatformEventType.SAVE_REQUESTED:
197
+ return (0, core_1.createSaveCompletedEvent)(false, errorMessage);
198
+ case core_1.PlatformEventType.RESTORE_REQUESTED:
199
+ return (0, core_1.createRestoreCompletedEvent)(false, errorMessage);
200
+ case core_1.PlatformEventType.QUIT_REQUESTED:
201
+ return (0, core_1.createQuitCancelledEvent)();
202
+ case core_1.PlatformEventType.RESTART_REQUESTED:
203
+ return (0, core_1.createRestartCompletedEvent)(false);
204
+ case core_1.PlatformEventType.UNDO_REQUESTED:
205
+ return (0, core_1.createUndoCompletedEvent)(false, undefined, errorMessage);
206
+ default:
207
+ return null;
208
+ }
209
+ }
210
+ }
211
+ exports.PlatformOperationHandler = PlatformOperationHandler;
212
+ /**
213
+ * Create a platform operation handler instance
214
+ */
215
+ function createPlatformOperationHandler(saveRestoreHooks, saveRestoreService, stateProvider, vocabularyManager) {
216
+ return new PlatformOperationHandler(saveRestoreHooks, saveRestoreService, stateProvider, vocabularyManager);
217
+ }
218
+ //# sourceMappingURL=platform-operations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform-operations.js","sourceRoot":"","sources":["../src/platform-operations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,133 @@
1
+ /**
2
+ * Save/Restore Service - Manages game state persistence and undo
3
+ *
4
+ * Extracted from GameEngine as part of Phase 4 remediation.
5
+ * Handles save/restore data creation, undo snapshots, and serialization.
6
+ */
7
+ import { WorldModel } from '@sharpee/world-model';
8
+ import { ISaveData, ISerializedTurn, ISemanticEventSource } from '@sharpee/core';
9
+ import { ISchedulerService } from './scheduler';
10
+ import { TurnResult, GameContext } from './types';
11
+ import { Story } from './story';
12
+ /**
13
+ * Interface for accessing engine state needed for save/restore
14
+ */
15
+ export interface ISaveRestoreStateProvider {
16
+ getWorld(): WorldModel;
17
+ getContext(): GameContext;
18
+ getStory(): Story | undefined;
19
+ getEventSource(): ISemanticEventSource;
20
+ getScheduler(): ISchedulerService;
21
+ getParser(): unknown | undefined;
22
+ }
23
+ /**
24
+ * Configuration for the undo system
25
+ */
26
+ export interface UndoConfig {
27
+ maxSnapshots: number;
28
+ }
29
+ /**
30
+ * Service for managing save/restore and undo functionality
31
+ */
32
+ export declare class SaveRestoreService {
33
+ private undoSnapshots;
34
+ private undoSnapshotTurns;
35
+ private maxUndoSnapshots;
36
+ constructor(config?: UndoConfig);
37
+ /**
38
+ * Create an undo snapshot of the current world state
39
+ */
40
+ createUndoSnapshot(world: WorldModel, currentTurn: number): void;
41
+ /**
42
+ * Undo to previous turn
43
+ * @returns The turn number restored to, or null if nothing to undo
44
+ */
45
+ undo(world: WorldModel): {
46
+ turn: number;
47
+ } | null;
48
+ /**
49
+ * Check if undo is available
50
+ */
51
+ canUndo(): boolean;
52
+ /**
53
+ * Get number of undo levels available
54
+ */
55
+ getUndoLevels(): number;
56
+ /**
57
+ * Clear all undo snapshots (e.g., after restore)
58
+ */
59
+ clearUndoSnapshots(): void;
60
+ /**
61
+ * Create save data from current engine state
62
+ */
63
+ createSaveData(provider: ISaveRestoreStateProvider): ISaveData;
64
+ /**
65
+ * Load save data into engine state
66
+ * @returns New event source with restored events
67
+ */
68
+ loadSaveData(saveData: ISaveData, provider: ISaveRestoreStateProvider): {
69
+ eventSource: ISemanticEventSource;
70
+ currentTurn: number;
71
+ };
72
+ /**
73
+ * Serialize event source
74
+ */
75
+ private serializeEventSource;
76
+ /**
77
+ * Serialize event data, handling functions and special types
78
+ */
79
+ private serializeEventData;
80
+ /**
81
+ * Deserialize event source
82
+ */
83
+ private deserializeEventSource;
84
+ /**
85
+ * Deserialize event data, handling function markers
86
+ */
87
+ private deserializeEventData;
88
+ /**
89
+ * Serialize spatial index (world state)
90
+ */
91
+ private serializeSpatialIndex;
92
+ /**
93
+ * Deserialize spatial index
94
+ */
95
+ private deserializeSpatialIndex;
96
+ /**
97
+ * Serialize turn history
98
+ */
99
+ private serializeTurnHistory;
100
+ /**
101
+ * Deserialize turn history
102
+ */
103
+ deserializeTurnHistory(turns: ISerializedTurn[], eventSource: ISemanticEventSource): TurnResult[];
104
+ /**
105
+ * Serialize parser state
106
+ */
107
+ private serializeParserState;
108
+ /**
109
+ * Serialize scheduler state (daemons and fuses)
110
+ */
111
+ private serializeSchedulerState;
112
+ /**
113
+ * Deserialize scheduler state
114
+ */
115
+ private deserializeSchedulerState;
116
+ /**
117
+ * Serialize a trait
118
+ */
119
+ private serializeTrait;
120
+ /**
121
+ * Deserialize a trait
122
+ */
123
+ private deserializeTrait;
124
+ /**
125
+ * Extract connections from a location entity
126
+ */
127
+ private extractConnections;
128
+ }
129
+ /**
130
+ * Create a save/restore service instance
131
+ */
132
+ export declare function createSaveRestoreService(config?: UndoConfig): SaveRestoreService;
133
+ //# sourceMappingURL=save-restore-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"save-restore-service.d.ts","sourceRoot":"","sources":["../src/save-restore-service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,UAAU,EAIX,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,SAAS,EAQT,eAAe,EAGf,oBAAoB,EAErB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAGhC;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,QAAQ,IAAI,UAAU,CAAC;IACvB,UAAU,IAAI,WAAW,CAAC;IAC1B,QAAQ,IAAI,KAAK,GAAG,SAAS,CAAC;IAC9B,cAAc,IAAI,oBAAoB,CAAC;IACvC,YAAY,IAAI,iBAAiB,CAAC;IAClC,SAAS,IAAI,OAAO,GAAG,SAAS,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,qBAAa,kBAAkB;IAE7B,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,iBAAiB,CAAgB;IACzC,OAAO,CAAC,gBAAgB,CAAS;gBAErB,MAAM,CAAC,EAAE,UAAU;IAI/B;;OAEG;IACH,kBAAkB,CAAC,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAiBhE;;;OAGG;IACH,IAAI,CAAC,KAAK,EAAE,UAAU,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAehD;;OAEG;IACH,OAAO,IAAI,OAAO;IAIlB;;OAEG;IACH,aAAa,IAAI,MAAM;IAIvB;;OAEG;IACH,kBAAkB,IAAI,IAAI;IAK1B;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,yBAAyB,GAAG,SAAS;IAwC9D;;;OAGG;IACH,YAAY,CACV,QAAQ,EAAE,SAAS,EACnB,QAAQ,EAAE,yBAAyB,GAClC;QACD,WAAW,EAAE,oBAAoB,CAAC;QAClC,WAAW,EAAE,MAAM,CAAC;KACrB;IAwCD;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAe5B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA6B1B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAgB9B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAwB5B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAyC7B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAoC/B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAe5B;;OAEG;IACH,sBAAsB,CACpB,KAAK,EAAE,eAAe,EAAE,EACxB,WAAW,EAAE,oBAAoB,GAChC,UAAU,EAAE;IAyBf;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAU5B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAmB/B;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAqBjC;;OAEG;IACH,OAAO,CAAC,cAAc;IAOtB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAOxB;;OAEG;IACH,OAAO,CAAC,kBAAkB;CA0C3B;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,kBAAkB,CAEhF"}