@sharpee/transcript-tester 0.9.61-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 (137) hide show
  1. package/.turbo/turbo-build.log +4 -0
  2. package/LICENSE +21 -0
  3. package/dist/cli.d.ts +11 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +367 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/condition-evaluator.d.ts +30 -0
  8. package/dist/condition-evaluator.d.ts.map +1 -0
  9. package/dist/condition-evaluator.js +314 -0
  10. package/dist/condition-evaluator.js.map +1 -0
  11. package/dist/fast-cli.d.ts +13 -0
  12. package/dist/fast-cli.d.ts.map +1 -0
  13. package/dist/fast-cli.js +363 -0
  14. package/dist/fast-cli.js.map +1 -0
  15. package/dist/index.d.ts +17 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +48 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/navigator.d.ts +27 -0
  20. package/dist/navigator.d.ts.map +1 -0
  21. package/dist/navigator.js +303 -0
  22. package/dist/navigator.js.map +1 -0
  23. package/dist/parser.d.ts +19 -0
  24. package/dist/parser.d.ts.map +1 -0
  25. package/dist/parser.js +453 -0
  26. package/dist/parser.js.map +1 -0
  27. package/dist/reporter.d.ts +41 -0
  28. package/dist/reporter.d.ts.map +1 -0
  29. package/dist/reporter.js +386 -0
  30. package/dist/reporter.js.map +1 -0
  31. package/dist/runner.d.ts +44 -0
  32. package/dist/runner.d.ts.map +1 -0
  33. package/dist/runner.js +977 -0
  34. package/dist/runner.js.map +1 -0
  35. package/dist/story-loader.d.ts +31 -0
  36. package/dist/story-loader.d.ts.map +1 -0
  37. package/dist/story-loader.js +169 -0
  38. package/dist/story-loader.js.map +1 -0
  39. package/dist/types.d.ts +204 -0
  40. package/dist/types.d.ts.map +1 -0
  41. package/dist/types.js +8 -0
  42. package/dist/types.js.map +1 -0
  43. package/dist-esm/cli.d.ts +11 -0
  44. package/dist-esm/cli.d.ts.map +1 -0
  45. package/dist-esm/cli.js +332 -0
  46. package/dist-esm/cli.js.map +1 -0
  47. package/dist-esm/condition-evaluator.d.ts +30 -0
  48. package/dist-esm/condition-evaluator.d.ts.map +1 -0
  49. package/dist-esm/condition-evaluator.js +311 -0
  50. package/dist-esm/condition-evaluator.js.map +1 -0
  51. package/dist-esm/fast-cli.d.ts +13 -0
  52. package/dist-esm/fast-cli.d.ts.map +1 -0
  53. package/dist-esm/fast-cli.js +328 -0
  54. package/dist-esm/fast-cli.js.map +1 -0
  55. package/dist-esm/index.d.ts +17 -0
  56. package/dist-esm/index.d.ts.map +1 -0
  57. package/dist-esm/index.js +21 -0
  58. package/dist-esm/index.js.map +1 -0
  59. package/dist-esm/navigator.d.ts +27 -0
  60. package/dist-esm/navigator.d.ts.map +1 -0
  61. package/dist-esm/navigator.js +300 -0
  62. package/dist-esm/navigator.js.map +1 -0
  63. package/dist-esm/parser.d.ts +19 -0
  64. package/dist-esm/parser.d.ts.map +1 -0
  65. package/dist-esm/parser.js +415 -0
  66. package/dist-esm/parser.js.map +1 -0
  67. package/dist-esm/reporter.d.ts +41 -0
  68. package/dist-esm/reporter.d.ts.map +1 -0
  69. package/dist-esm/reporter.js +342 -0
  70. package/dist-esm/reporter.js.map +1 -0
  71. package/dist-esm/runner.d.ts +44 -0
  72. package/dist-esm/runner.d.ts.map +1 -0
  73. package/dist-esm/runner.js +941 -0
  74. package/dist-esm/runner.js.map +1 -0
  75. package/dist-esm/story-loader.d.ts +31 -0
  76. package/dist-esm/story-loader.d.ts.map +1 -0
  77. package/dist-esm/story-loader.js +131 -0
  78. package/dist-esm/story-loader.js.map +1 -0
  79. package/dist-esm/types.d.ts +204 -0
  80. package/dist-esm/types.d.ts.map +1 -0
  81. package/dist-esm/types.js +7 -0
  82. package/dist-esm/types.js.map +1 -0
  83. package/dist-npm/cli.d.ts +11 -0
  84. package/dist-npm/cli.d.ts.map +1 -0
  85. package/dist-npm/cli.js +367 -0
  86. package/dist-npm/cli.js.map +1 -0
  87. package/dist-npm/condition-evaluator.d.ts +30 -0
  88. package/dist-npm/condition-evaluator.d.ts.map +1 -0
  89. package/dist-npm/condition-evaluator.js +314 -0
  90. package/dist-npm/condition-evaluator.js.map +1 -0
  91. package/dist-npm/fast-cli.d.ts +13 -0
  92. package/dist-npm/fast-cli.d.ts.map +1 -0
  93. package/dist-npm/fast-cli.js +363 -0
  94. package/dist-npm/fast-cli.js.map +1 -0
  95. package/dist-npm/index.d.ts +17 -0
  96. package/dist-npm/index.d.ts.map +1 -0
  97. package/dist-npm/index.js +48 -0
  98. package/dist-npm/index.js.map +1 -0
  99. package/dist-npm/navigator.d.ts +27 -0
  100. package/dist-npm/navigator.d.ts.map +1 -0
  101. package/dist-npm/navigator.js +303 -0
  102. package/dist-npm/navigator.js.map +1 -0
  103. package/dist-npm/parser.d.ts +19 -0
  104. package/dist-npm/parser.d.ts.map +1 -0
  105. package/dist-npm/parser.js +453 -0
  106. package/dist-npm/parser.js.map +1 -0
  107. package/dist-npm/reporter.d.ts +41 -0
  108. package/dist-npm/reporter.d.ts.map +1 -0
  109. package/dist-npm/reporter.js +386 -0
  110. package/dist-npm/reporter.js.map +1 -0
  111. package/dist-npm/runner.d.ts +44 -0
  112. package/dist-npm/runner.d.ts.map +1 -0
  113. package/dist-npm/runner.js +977 -0
  114. package/dist-npm/runner.js.map +1 -0
  115. package/dist-npm/story-loader.d.ts +31 -0
  116. package/dist-npm/story-loader.d.ts.map +1 -0
  117. package/dist-npm/story-loader.js +169 -0
  118. package/dist-npm/story-loader.js.map +1 -0
  119. package/dist-npm/types.d.ts +204 -0
  120. package/dist-npm/types.d.ts.map +1 -0
  121. package/dist-npm/types.js +8 -0
  122. package/dist-npm/types.js.map +1 -0
  123. package/package.json +49 -0
  124. package/src/cli.ts +385 -0
  125. package/src/condition-evaluator.ts +382 -0
  126. package/src/fast-cli.ts +403 -0
  127. package/src/index.ts +26 -0
  128. package/src/navigator.ts +365 -0
  129. package/src/parser.ts +488 -0
  130. package/src/reporter.ts +409 -0
  131. package/src/runner.ts +1152 -0
  132. package/src/story-loader.ts +168 -0
  133. package/src/types.ts +244 -0
  134. package/tsconfig.esm.json +11 -0
  135. package/tsconfig.esm.tsbuildinfo +1 -0
  136. package/tsconfig.json +22 -0
  137. package/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1,303 @@
1
+ "use strict";
2
+ /**
3
+ * Navigator for Smart Transcript Directives (ADR-092)
4
+ *
5
+ * Handles NAVIGATE TO directives by pathfinding to target rooms
6
+ * and executing GO commands. Handles random outcomes (e.g., Round Room
7
+ * carousel) by recalculating path when actual location differs from expected.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.executeNavigate = executeNavigate;
11
+ // Constants
12
+ const MAX_NAVIGATE_ATTEMPTS = 50; // Max attempts to handle random outcomes
13
+ const ROOM_TRAIT_TYPE = 'if.trait.room';
14
+ /**
15
+ * Calculate room-to-room distance using BFS
16
+ * Returns Infinity if no path exists
17
+ */
18
+ function calculateRoomDistance(world, fromRoomId, toRoomId) {
19
+ if (fromRoomId === toRoomId)
20
+ return 0;
21
+ const visited = new Set();
22
+ const queue = [{ roomId: fromRoomId, distance: 0 }];
23
+ while (queue.length > 0) {
24
+ const { roomId, distance } = queue.shift();
25
+ if (visited.has(roomId))
26
+ continue;
27
+ visited.add(roomId);
28
+ const room = world.getEntity(roomId);
29
+ const roomTrait = room?.get?.('room') || room?.getTrait?.('room');
30
+ if (!roomTrait?.exits)
31
+ continue;
32
+ for (const [_direction, exitInfo] of Object.entries(roomTrait.exits)) {
33
+ if (!exitInfo)
34
+ continue;
35
+ let dest;
36
+ if (typeof exitInfo === 'string') {
37
+ dest = exitInfo;
38
+ }
39
+ else if (typeof exitInfo === 'object') {
40
+ dest = exitInfo.destination;
41
+ }
42
+ if (!dest)
43
+ continue;
44
+ // Found destination!
45
+ if (dest === toRoomId) {
46
+ return distance + 1;
47
+ }
48
+ // Add to queue if not visited
49
+ if (!visited.has(dest)) {
50
+ queue.push({ roomId: dest, distance: distance + 1 });
51
+ }
52
+ }
53
+ }
54
+ return Infinity; // No path found
55
+ }
56
+ /**
57
+ * Find a room by name (searches identity.name)
58
+ */
59
+ function findRoomByName(world, name) {
60
+ const nameLower = name.toLowerCase();
61
+ const rooms = world.findWhere((entity) => {
62
+ // Check if it's a room
63
+ const roomTrait = entity.get?.('room') || entity.traits?.get?.('room');
64
+ if (!roomTrait)
65
+ return false;
66
+ const identity = entity.get?.('identity') || entity.traits?.get?.('identity');
67
+ if (!identity)
68
+ return false;
69
+ const entityName = (identity.name || '').toLowerCase();
70
+ const aliases = (identity.aliases || []).map((a) => a.toLowerCase());
71
+ return entityName === nameLower ||
72
+ entityName.includes(nameLower) ||
73
+ aliases.some((a) => a === nameLower || a.includes(nameLower));
74
+ });
75
+ return rooms[0] || null;
76
+ }
77
+ /**
78
+ * Get the name of a room by ID
79
+ */
80
+ function getRoomName(world, roomId) {
81
+ const room = world.getEntity(roomId);
82
+ if (!room)
83
+ return roomId;
84
+ const identity = room.get?.('identity') || room.traits?.get?.('identity');
85
+ return identity?.name || roomId;
86
+ }
87
+ /**
88
+ * Get the direction that leads from one room to another
89
+ */
90
+ function getDirectionToRoom(world, fromRoomId, toRoomId) {
91
+ const fromRoom = world.getEntity(fromRoomId);
92
+ if (!fromRoom)
93
+ return null;
94
+ const roomTrait = fromRoom.get?.('room') || fromRoom.traits?.get?.('room');
95
+ if (!roomTrait || !roomTrait.exits)
96
+ return null;
97
+ // Check each exit to find one that leads to the target room
98
+ for (const [direction, exitInfo] of Object.entries(roomTrait.exits)) {
99
+ if (!exitInfo)
100
+ continue;
101
+ let destination;
102
+ if (typeof exitInfo === 'string') {
103
+ destination = exitInfo;
104
+ }
105
+ else if (typeof exitInfo === 'object') {
106
+ destination = exitInfo.destination;
107
+ }
108
+ if (destination === toRoomId) {
109
+ return direction.toLowerCase();
110
+ }
111
+ }
112
+ return null;
113
+ }
114
+ /**
115
+ * Execute navigation to a target room
116
+ *
117
+ * Uses pathfinding to find route, executes GO commands, and handles
118
+ * random outcomes by recalculating path from actual location.
119
+ */
120
+ async function executeNavigate(targetRoomName, world, engine, playerId, verbose = false) {
121
+ const path = [];
122
+ const commands = [];
123
+ // Find target room
124
+ if (verbose) {
125
+ console.log(` [NAVIGATE] Searching for room: "${targetRoomName}"`);
126
+ }
127
+ const targetRoom = findRoomByName(world, targetRoomName);
128
+ if (!targetRoom) {
129
+ if (verbose) {
130
+ // Debug: list all rooms to see what's available
131
+ const allRooms = world.findWhere((e) => {
132
+ const roomTrait = e.get?.('room') || e.getTrait?.('room');
133
+ return !!roomTrait;
134
+ });
135
+ console.log(` [NAVIGATE] Available rooms: ${allRooms.map((r) => {
136
+ const identity = r.get?.('identity') || r.getTrait?.('identity');
137
+ return identity?.name || r.id;
138
+ }).join(', ')}`);
139
+ }
140
+ return {
141
+ success: false,
142
+ path,
143
+ commands,
144
+ error: `Target room "${targetRoomName}" not found`
145
+ };
146
+ }
147
+ if (verbose) {
148
+ console.log(` [NAVIGATE] Found target room: ${targetRoom.id}`);
149
+ }
150
+ const targetRoomId = targetRoom.id;
151
+ // Check if already at destination
152
+ let currentRoomId = world.getLocation(playerId);
153
+ if (!currentRoomId) {
154
+ return {
155
+ success: false,
156
+ path,
157
+ commands,
158
+ error: 'Player location unknown'
159
+ };
160
+ }
161
+ if (currentRoomId === targetRoomId) {
162
+ if (verbose) {
163
+ console.log(` [NAVIGATE] Already at "${targetRoomName}"`);
164
+ }
165
+ return {
166
+ success: true,
167
+ path: [getRoomName(world, currentRoomId)],
168
+ commands
169
+ };
170
+ }
171
+ // Navigation loop - keep trying until we reach destination or run out of attempts
172
+ let attempts = 0;
173
+ if (verbose) {
174
+ console.log(` [NAVIGATE] Starting navigation from ${currentRoomId} to ${targetRoomId}`);
175
+ }
176
+ while (attempts < MAX_NAVIGATE_ATTEMPTS) {
177
+ attempts++;
178
+ currentRoomId = world.getLocation(playerId);
179
+ if (!currentRoomId) {
180
+ return {
181
+ success: false,
182
+ path,
183
+ commands,
184
+ error: 'Player location unknown'
185
+ };
186
+ }
187
+ // Already at destination?
188
+ if (currentRoomId === targetRoomId) {
189
+ if (verbose) {
190
+ console.log(` [NAVIGATE] Arrived at "${targetRoomName}" after ${commands.length} commands`);
191
+ }
192
+ return {
193
+ success: true,
194
+ path,
195
+ commands
196
+ };
197
+ }
198
+ // Find an exit that leads toward the destination
199
+ // We check each exit and verify it leads closer using findPath
200
+ const currentRoom = world.getEntity(currentRoomId);
201
+ const roomTrait = currentRoom?.get?.('room') || currentRoom?.getTrait?.('room');
202
+ if (!roomTrait?.exits) {
203
+ return {
204
+ success: false,
205
+ path,
206
+ commands,
207
+ error: `No exits from "${getRoomName(world, currentRoomId)}"`
208
+ };
209
+ }
210
+ // Find the best exit (one that gets us closest to destination)
211
+ let nextRoomId = null;
212
+ let bestDirection = null;
213
+ let shortestPathLength = Infinity;
214
+ for (const [direction, exitInfo] of Object.entries(roomTrait.exits)) {
215
+ if (!exitInfo)
216
+ continue;
217
+ let dest;
218
+ if (typeof exitInfo === 'string') {
219
+ dest = exitInfo;
220
+ }
221
+ else if (typeof exitInfo === 'object') {
222
+ dest = exitInfo.destination;
223
+ }
224
+ if (!dest)
225
+ continue;
226
+ // If this exit leads directly to destination, use it immediately
227
+ if (dest === targetRoomId) {
228
+ nextRoomId = dest;
229
+ bestDirection = direction;
230
+ shortestPathLength = 0;
231
+ break;
232
+ }
233
+ // Calculate actual room distance from this exit to destination
234
+ const distanceFromDest = calculateRoomDistance(world, dest, targetRoomId);
235
+ if (distanceFromDest < Infinity && distanceFromDest < shortestPathLength) {
236
+ nextRoomId = dest;
237
+ bestDirection = direction;
238
+ shortestPathLength = distanceFromDest;
239
+ }
240
+ }
241
+ if (!nextRoomId || !bestDirection) {
242
+ return {
243
+ success: false,
244
+ path,
245
+ commands,
246
+ error: `No path from "${getRoomName(world, currentRoomId)}" toward "${targetRoomName}"`
247
+ };
248
+ }
249
+ // Record current room name
250
+ const currentRoomName = getRoomName(world, currentRoomId);
251
+ if (path.length === 0 || path[path.length - 1] !== currentRoomName) {
252
+ path.push(currentRoomName);
253
+ }
254
+ // Execute direction command (parser uses just the direction, not "go direction")
255
+ const command = bestDirection.toLowerCase();
256
+ commands.push(command);
257
+ if (verbose) {
258
+ console.log(` [NAVIGATE] ${currentRoomName} -> go ${bestDirection.toLowerCase()}`);
259
+ }
260
+ try {
261
+ await engine.executeCommand(command);
262
+ }
263
+ catch (e) {
264
+ return {
265
+ success: false,
266
+ path,
267
+ commands,
268
+ error: `Command failed: ${command} - ${e instanceof Error ? e.message : String(e)}`
269
+ };
270
+ }
271
+ // Verify we moved to expected room (or handle random outcome)
272
+ const newRoomId = world.getLocation(playerId);
273
+ if (newRoomId !== nextRoomId && newRoomId !== currentRoomId) {
274
+ // We moved, but not to expected room (e.g., Round Room carousel)
275
+ // This is OK - we'll recalculate path from wherever we are
276
+ if (verbose) {
277
+ console.log(` [NAVIGATE] Ended up in "${getRoomName(world, newRoomId)}" (expected "${getRoomName(world, nextRoomId)}")`);
278
+ }
279
+ }
280
+ else if (newRoomId === currentRoomId) {
281
+ // Didn't move at all - blocked?
282
+ return {
283
+ success: false,
284
+ path,
285
+ commands,
286
+ error: `Blocked: could not go ${bestDirection.toLowerCase()} from "${currentRoomName}"`
287
+ };
288
+ }
289
+ // Update path with new location
290
+ if (newRoomId) {
291
+ const newRoomName = getRoomName(world, newRoomId);
292
+ path.push(newRoomName);
293
+ }
294
+ }
295
+ // Exceeded max attempts
296
+ return {
297
+ success: false,
298
+ path,
299
+ commands,
300
+ error: `Navigation exceeded ${MAX_NAVIGATE_ATTEMPTS} attempts (random outcomes?)`
301
+ };
302
+ }
303
+ //# sourceMappingURL=navigator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigator.js","sourceRoot":"","sources":["../src/navigator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Transcript Parser
3
+ *
4
+ * Parses .transcript files into a structured format for testing.
5
+ */
6
+ import { Transcript } from './types';
7
+ /**
8
+ * Parse a transcript file from disk
9
+ */
10
+ export declare function parseTranscriptFile(filePath: string): Transcript;
11
+ /**
12
+ * Parse transcript content string
13
+ */
14
+ export declare function parseTranscript(content: string, filePath?: string): Transcript;
15
+ /**
16
+ * Validate a transcript for common issues
17
+ */
18
+ export declare function validateTranscript(transcript: Transcript): string[];
19
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EACL,UAAU,EAOX,MAAM,SAAS,CAAC;AAEjB;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,CAGhE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAmB,GAAG,UAAU,CAqI1F;AAgTD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,EAAE,CAkBnE"}