@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,314 @@
1
+ "use strict";
2
+ /**
3
+ * Condition Evaluator for Smart Transcript Directives (ADR-092)
4
+ *
5
+ * Evaluates condition expressions against game state.
6
+ *
7
+ * Supported expressions:
8
+ * - location = "Room Name" - Player is in room with that name
9
+ * - room contains "entity" - Entity with that name is in current room
10
+ * - inventory contains "item" - Player has item with that name
11
+ * - not inventory contains "item" - Player does NOT have item
12
+ * - entity "X" exists - Entity with name X exists anywhere
13
+ * - entity "X" alive - NPC entity is not dead
14
+ * - entity "X" in "Room" - Entity X is in specified room
15
+ */
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.evaluateCondition = evaluateCondition;
18
+ /**
19
+ * Find an entity by name (searches identity.name and aliases)
20
+ * Prioritizes exact matches and actors/NPCs over rooms
21
+ */
22
+ function findEntityByName(world, name) {
23
+ const nameLower = name.toLowerCase();
24
+ const allMatches = world.findWhere((entity) => {
25
+ const identity = entity.get?.('identity') || entity.traits?.get?.('identity');
26
+ if (!identity)
27
+ return false;
28
+ const entityName = (identity.name || '').toLowerCase();
29
+ const aliases = (identity.aliases || []).map((a) => a.toLowerCase());
30
+ return entityName === nameLower ||
31
+ entityName.includes(nameLower) ||
32
+ aliases.some((a) => a === nameLower || a.includes(nameLower));
33
+ });
34
+ if (allMatches.length === 0)
35
+ return null;
36
+ // Prioritize: 1) exact name match, 2) exact alias match, 3) actors/NPCs, 4) first match
37
+ const exactNameMatch = allMatches.find((e) => {
38
+ const identity = e.get?.('identity') || e.traits?.get?.('identity');
39
+ return (identity?.name || '').toLowerCase() === nameLower;
40
+ });
41
+ if (exactNameMatch)
42
+ return exactNameMatch;
43
+ const exactAliasMatch = allMatches.find((e) => {
44
+ const identity = e.get?.('identity') || e.traits?.get?.('identity');
45
+ const aliases = (identity?.aliases || []).map((a) => a.toLowerCase());
46
+ return aliases.includes(nameLower);
47
+ });
48
+ if (exactAliasMatch)
49
+ return exactAliasMatch;
50
+ // Prefer actors/NPCs/combatants over rooms
51
+ const actorMatch = allMatches.find((e) => e.get?.('actor') || e.get?.('npc') || e.get?.('combatant') ||
52
+ e.traits?.get?.('actor') || e.traits?.get?.('npc') || e.traits?.get?.('combatant'));
53
+ if (actorMatch)
54
+ return actorMatch;
55
+ return allMatches[0];
56
+ }
57
+ /**
58
+ * Find a room by name
59
+ */
60
+ function findRoomByName(world, name) {
61
+ const nameLower = name.toLowerCase();
62
+ const rooms = world.findWhere((entity) => {
63
+ // Check if it's a room
64
+ const roomTrait = entity.get?.('room') || entity.traits?.get?.('room');
65
+ if (!roomTrait)
66
+ return false;
67
+ const identity = entity.get?.('identity') || entity.traits?.get?.('identity');
68
+ if (!identity)
69
+ return false;
70
+ const entityName = (identity.name || '').toLowerCase();
71
+ return entityName === nameLower || entityName.includes(nameLower);
72
+ });
73
+ return rooms[0] || null;
74
+ }
75
+ /**
76
+ * Get player entity
77
+ */
78
+ function getPlayer(world) {
79
+ const players = world.findWhere((entity) => {
80
+ const identity = entity.get?.('identity') || entity.traits?.get?.('identity');
81
+ return identity?.name === 'player' || identity?.name === 'yourself';
82
+ });
83
+ return players[0] || null;
84
+ }
85
+ /**
86
+ * Get the name of a room by ID
87
+ */
88
+ function getRoomName(world, roomId) {
89
+ const room = world.getEntity(roomId);
90
+ if (!room)
91
+ return roomId;
92
+ const identity = room.get?.('identity') || room.traits?.get?.('identity');
93
+ return identity?.name || roomId;
94
+ }
95
+ /**
96
+ * Check if an entity is "alive" (for NPCs/Combatants)
97
+ */
98
+ function isEntityAlive(entity) {
99
+ // Check for CombatantTrait (used by troll, thief, etc.)
100
+ const combatantTrait = entity.get?.('combatant') || entity.traits?.get?.('combatant');
101
+ if (combatantTrait) {
102
+ // CombatantTrait uses isAlive (not isDead)
103
+ if (combatantTrait.isAlive === false)
104
+ return false;
105
+ // Check health
106
+ if (combatantTrait.health !== undefined && combatantTrait.health <= 0)
107
+ return false;
108
+ }
109
+ // Check for NPC trait with health/alive status
110
+ const npcTrait = entity.get?.('npc') || entity.traits?.get?.('npc');
111
+ if (npcTrait) {
112
+ // Check isDead flag
113
+ if (entity.isDead === true)
114
+ return false;
115
+ if (npcTrait.isDead === true)
116
+ return false;
117
+ if (npcTrait.isAlive === false)
118
+ return false;
119
+ // Check health
120
+ if (npcTrait.health !== undefined && npcTrait.health <= 0)
121
+ return false;
122
+ }
123
+ // Default to alive if no NPC/combatant trait or death indicators
124
+ return true;
125
+ }
126
+ /**
127
+ * Parse and evaluate a condition expression
128
+ */
129
+ function evaluateCondition(condition, world, playerId) {
130
+ const trimmed = condition.trim();
131
+ // Handle negation prefix
132
+ const isNegated = trimmed.toLowerCase().startsWith('not ');
133
+ const expr = isNegated ? trimmed.slice(4).trim() : trimmed;
134
+ // Try each pattern
135
+ let result = tryLocationEquals(expr, world, playerId);
136
+ if (result)
137
+ return applyNegation(result, isNegated);
138
+ result = tryRoomContains(expr, world, playerId);
139
+ if (result)
140
+ return applyNegation(result, isNegated);
141
+ result = tryInventoryContains(expr, world, playerId);
142
+ if (result)
143
+ return applyNegation(result, isNegated);
144
+ result = tryEntityExists(expr, world);
145
+ if (result)
146
+ return applyNegation(result, isNegated);
147
+ result = tryEntityAlive(expr, world);
148
+ if (result)
149
+ return applyNegation(result, isNegated);
150
+ result = tryEntityInRoom(expr, world);
151
+ if (result)
152
+ return applyNegation(result, isNegated);
153
+ // Unknown condition format
154
+ return {
155
+ met: false,
156
+ reason: `Unknown condition format: "${condition}"`
157
+ };
158
+ }
159
+ /**
160
+ * Apply negation to a result
161
+ */
162
+ function applyNegation(result, negate) {
163
+ if (!negate)
164
+ return result;
165
+ return {
166
+ met: !result.met,
167
+ reason: `NOT (${result.reason})`
168
+ };
169
+ }
170
+ /**
171
+ * Pattern: location = "Room Name"
172
+ */
173
+ function tryLocationEquals(expr, world, playerId) {
174
+ const match = expr.match(/^location\s*=\s*"([^"]+)"$/i);
175
+ if (!match)
176
+ return null;
177
+ const targetRoomName = match[1];
178
+ const currentRoomId = world.getLocation(playerId);
179
+ if (!currentRoomId) {
180
+ return { met: false, reason: `Player location unknown` };
181
+ }
182
+ const currentRoomName = getRoomName(world, currentRoomId);
183
+ const met = currentRoomName.toLowerCase() === targetRoomName.toLowerCase() ||
184
+ currentRoomName.toLowerCase().includes(targetRoomName.toLowerCase());
185
+ return {
186
+ met,
187
+ reason: `Player is in "${currentRoomName}" (expected "${targetRoomName}")`
188
+ };
189
+ }
190
+ /**
191
+ * Pattern: room contains "entity"
192
+ */
193
+ function tryRoomContains(expr, world, playerId) {
194
+ const match = expr.match(/^room\s+contains\s+"([^"]+)"$/i);
195
+ if (!match)
196
+ return null;
197
+ const entityName = match[1];
198
+ const currentRoomId = world.getLocation(playerId);
199
+ if (!currentRoomId) {
200
+ return { met: false, reason: `Player location unknown` };
201
+ }
202
+ // Get room contents
203
+ const contents = world.getContents(currentRoomId);
204
+ const entityNameLower = entityName.toLowerCase();
205
+ const found = contents.some((item) => {
206
+ const identity = item.get?.('identity') || item.traits?.get?.('identity');
207
+ if (!identity)
208
+ return false;
209
+ const itemName = (identity.name || '').toLowerCase();
210
+ const aliases = (identity.aliases || []).map((a) => a.toLowerCase());
211
+ return itemName === entityNameLower ||
212
+ itemName.includes(entityNameLower) ||
213
+ aliases.some((a) => a === entityNameLower || a.includes(entityNameLower));
214
+ });
215
+ const roomName = getRoomName(world, currentRoomId);
216
+ return {
217
+ met: found,
218
+ reason: found
219
+ ? `"${entityName}" found in ${roomName}`
220
+ : `"${entityName}" not found in ${roomName}`
221
+ };
222
+ }
223
+ /**
224
+ * Pattern: inventory contains "item"
225
+ */
226
+ function tryInventoryContains(expr, world, playerId) {
227
+ const match = expr.match(/^inventory\s+contains\s+"([^"]+)"$/i);
228
+ if (!match)
229
+ return null;
230
+ const itemName = match[1];
231
+ // Get player inventory
232
+ const inventory = world.getContents(playerId, { includeWorn: true });
233
+ const itemNameLower = itemName.toLowerCase();
234
+ const found = inventory.some((item) => {
235
+ const identity = item.get?.('identity') || item.traits?.get?.('identity');
236
+ if (!identity)
237
+ return false;
238
+ const name = (identity.name || '').toLowerCase();
239
+ const aliases = (identity.aliases || []).map((a) => a.toLowerCase());
240
+ return name === itemNameLower ||
241
+ name.includes(itemNameLower) ||
242
+ aliases.some((a) => a === itemNameLower || a.includes(itemNameLower));
243
+ });
244
+ return {
245
+ met: found,
246
+ reason: found
247
+ ? `"${itemName}" found in inventory`
248
+ : `"${itemName}" not in inventory`
249
+ };
250
+ }
251
+ /**
252
+ * Pattern: entity "X" exists
253
+ */
254
+ function tryEntityExists(expr, world) {
255
+ const match = expr.match(/^entity\s+"([^"]+)"\s+exists$/i);
256
+ if (!match)
257
+ return null;
258
+ const entityName = match[1];
259
+ const entity = findEntityByName(world, entityName);
260
+ return {
261
+ met: entity !== null,
262
+ reason: entity
263
+ ? `Entity "${entityName}" exists`
264
+ : `Entity "${entityName}" not found`
265
+ };
266
+ }
267
+ /**
268
+ * Pattern: entity "X" alive
269
+ */
270
+ function tryEntityAlive(expr, world) {
271
+ const match = expr.match(/^entity\s+"([^"]+)"\s+alive$/i);
272
+ if (!match)
273
+ return null;
274
+ const entityName = match[1];
275
+ const entity = findEntityByName(world, entityName);
276
+ if (!entity) {
277
+ return { met: false, reason: `Entity "${entityName}" not found` };
278
+ }
279
+ const alive = isEntityAlive(entity);
280
+ return {
281
+ met: alive,
282
+ reason: alive
283
+ ? `Entity "${entityName}" is alive`
284
+ : `Entity "${entityName}" is dead`
285
+ };
286
+ }
287
+ /**
288
+ * Pattern: entity "X" in "Room"
289
+ */
290
+ function tryEntityInRoom(expr, world) {
291
+ const match = expr.match(/^entity\s+"([^"]+)"\s+in\s+"([^"]+)"$/i);
292
+ if (!match)
293
+ return null;
294
+ const entityName = match[1];
295
+ const roomName = match[2];
296
+ const entity = findEntityByName(world, entityName);
297
+ if (!entity) {
298
+ return { met: false, reason: `Entity "${entityName}" not found` };
299
+ }
300
+ const targetRoom = findRoomByName(world, roomName);
301
+ if (!targetRoom) {
302
+ return { met: false, reason: `Room "${roomName}" not found` };
303
+ }
304
+ const entityLocation = world.getLocation(entity.id);
305
+ const met = entityLocation === targetRoom.id;
306
+ const actualRoomName = entityLocation ? getRoomName(world, entityLocation) : 'unknown';
307
+ return {
308
+ met,
309
+ reason: met
310
+ ? `"${entityName}" is in "${roomName}"`
311
+ : `"${entityName}" is in "${actualRoomName}", not "${roomName}"`
312
+ };
313
+ }
314
+ //# sourceMappingURL=condition-evaluator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"condition-evaluator.js","sourceRoot":"","sources":["../src/condition-evaluator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Fast Transcript Tester CLI
4
+ *
5
+ * Uses pre-bundled platform (dist/sharpee.js) and story for instant loading.
6
+ * Supports --chain flag for walkthrough testing.
7
+ *
8
+ * Usage:
9
+ * node packages/transcript-tester/dist/fast-cli.js [transcript-files...] [options]
10
+ * node packages/transcript-tester/dist/fast-cli.js --chain wt-*.transcript
11
+ */
12
+ export {};
13
+ //# sourceMappingURL=fast-cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fast-cli.d.ts","sourceRoot":"","sources":["../src/fast-cli.ts"],"names":[],"mappings":";AAEA;;;;;;;;;GASG"}