@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,332 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Transcript Tester CLI
4
+ *
5
+ * Usage:
6
+ * transcript-test <story-path> [transcript-files...]
7
+ * transcript-test <story-path> --all
8
+ * transcript-test <story-path> --verbose
9
+ */
10
+ import * as path from 'path';
11
+ import * as fs from 'fs';
12
+ import * as readline from 'readline';
13
+ import { parseTranscriptFile, validateTranscript } from './parser';
14
+ import { runTranscript } from './runner';
15
+ import { reportTranscript, reportTestRun, getExitCode, generateTimestamp, writeResultsToJson, writeReportToFile } from './reporter';
16
+ import { loadStory, findTranscripts } from './story-loader';
17
+ /**
18
+ * Parse command line arguments
19
+ */
20
+ function parseArgs(args) {
21
+ const options = {
22
+ storyPath: '',
23
+ transcriptPaths: [],
24
+ verbose: false,
25
+ stopOnFailure: false,
26
+ all: false,
27
+ chain: false,
28
+ outputDir: null,
29
+ play: false
30
+ };
31
+ let i = 0;
32
+ while (i < args.length) {
33
+ const arg = args[i];
34
+ if (arg === '--verbose' || arg === '-v') {
35
+ options.verbose = true;
36
+ }
37
+ else if (arg === '--stop-on-failure' || arg === '-s') {
38
+ options.stopOnFailure = true;
39
+ }
40
+ else if (arg === '--all' || arg === '-a') {
41
+ options.all = true;
42
+ }
43
+ else if (arg === '--chain' || arg === '-c') {
44
+ options.chain = true;
45
+ }
46
+ else if (arg === '--play' || arg === '-p') {
47
+ options.play = true;
48
+ }
49
+ else if (arg === '--output-dir' || arg === '-o') {
50
+ i++;
51
+ if (i < args.length) {
52
+ options.outputDir = args[i];
53
+ }
54
+ }
55
+ else if (arg === '--help' || arg === '-h') {
56
+ printHelp();
57
+ process.exit(0);
58
+ }
59
+ else if (!arg.startsWith('-')) {
60
+ if (!options.storyPath) {
61
+ options.storyPath = arg;
62
+ }
63
+ else {
64
+ options.transcriptPaths.push(arg);
65
+ }
66
+ }
67
+ i++;
68
+ }
69
+ return options;
70
+ }
71
+ /**
72
+ * Print help message
73
+ */
74
+ function printHelp() {
75
+ console.log(`
76
+ Transcript Tester - Test Sharpee stories with transcript files
77
+
78
+ Usage:
79
+ transcript-test <story-path> [transcript-files...] [options]
80
+ transcript-test <story-path> --play
81
+
82
+ Arguments:
83
+ story-path Path to the story directory (e.g., stories/dungeo)
84
+ transcript-files One or more .transcript files to run
85
+
86
+ Options:
87
+ -p, --play Interactive play mode (REPL)
88
+ -a, --all Run all transcripts in the story's tests/ directory
89
+ -c, --chain Chain transcripts (don't reset game state between them)
90
+ -v, --verbose Show detailed output for each command
91
+ -s, --stop-on-failure Stop on first failure
92
+ -o, --output-dir <dir> Write timestamped results to directory (JSON + text report)
93
+ -h, --help Show this help message
94
+
95
+ Examples:
96
+ transcript-test stories/dungeo --play
97
+ transcript-test stories/dungeo tests/navigation.transcript
98
+ transcript-test stories/dungeo --all
99
+ transcript-test stories/dungeo tests/*.transcript --verbose
100
+ transcript-test stories/dungeo --all -o test-results
101
+ transcript-test stories/dungeo --chain tests/setup.transcript tests/puzzle.transcript
102
+ `);
103
+ }
104
+ /**
105
+ * Run interactive play mode (REPL)
106
+ */
107
+ async function runInteractiveMode(game) {
108
+ const rl = readline.createInterface({
109
+ input: process.stdin,
110
+ output: process.stdout
111
+ });
112
+ let debugMode = false;
113
+ let traceMode = false;
114
+ console.log('\n--- Interactive Mode ---');
115
+ console.log('Type commands to play. Special commands:');
116
+ console.log(' /quit, /q - Exit the game');
117
+ console.log(' /debug - Toggle debug mode (show events after each command)');
118
+ console.log(' /trace - Toggle parser trace mode (show grammar matching)');
119
+ console.log(' /events - Show events from last command');
120
+ console.log(' /look, /l - Shortcut for "look"');
121
+ console.log(' /inv, /i - Shortcut for "inventory"');
122
+ console.log('');
123
+ // Show initial room description
124
+ const initialOutput = await game.executeCommand('look');
125
+ console.log(initialOutput);
126
+ const prompt = () => {
127
+ rl.question('\n> ', async (input) => {
128
+ const trimmed = input.trim();
129
+ if (!trimmed) {
130
+ prompt();
131
+ return;
132
+ }
133
+ // Handle special commands
134
+ if (trimmed === '/quit' || trimmed === '/q') {
135
+ console.log('Goodbye!');
136
+ rl.close();
137
+ process.exit(0);
138
+ return;
139
+ }
140
+ if (trimmed === '/restart') {
141
+ console.log('(Restart not yet implemented - please exit and rerun)');
142
+ prompt();
143
+ return;
144
+ }
145
+ if (trimmed === '/debug') {
146
+ debugMode = !debugMode;
147
+ console.log(`Debug mode: ${debugMode ? 'ON' : 'OFF'}`);
148
+ prompt();
149
+ return;
150
+ }
151
+ if (trimmed === '/trace') {
152
+ traceMode = !traceMode;
153
+ process.env.PARSER_DEBUG = traceMode ? 'true' : '';
154
+ console.log(`Parser trace: ${traceMode ? 'ON' : 'OFF'}`);
155
+ prompt();
156
+ return;
157
+ }
158
+ if (trimmed === '/events') {
159
+ if (game.lastEvents && game.lastEvents.length > 0) {
160
+ console.log('\nEvents from last command:');
161
+ for (const event of game.lastEvents) {
162
+ console.log(` ${event.type}`);
163
+ if (event.data && Object.keys(event.data).length > 0) {
164
+ console.log(` ${JSON.stringify(event.data)}`);
165
+ }
166
+ }
167
+ }
168
+ else {
169
+ console.log('(No events from last command)');
170
+ }
171
+ prompt();
172
+ return;
173
+ }
174
+ // Shortcuts
175
+ let command = trimmed;
176
+ if (trimmed === '/look' || trimmed === '/l') {
177
+ command = 'look';
178
+ }
179
+ else if (trimmed === '/inv' || trimmed === '/i') {
180
+ command = 'inventory';
181
+ }
182
+ // Execute the command
183
+ try {
184
+ const output = await game.executeCommand(command);
185
+ console.log(output);
186
+ // Show events in debug mode
187
+ if (debugMode && game.lastEvents && game.lastEvents.length > 0) {
188
+ console.log('\n[Events]');
189
+ for (const event of game.lastEvents) {
190
+ const data = event.data && Object.keys(event.data).length > 0
191
+ ? ` ${JSON.stringify(event.data)}`
192
+ : '';
193
+ console.log(` ${event.type}${data}`);
194
+ }
195
+ }
196
+ }
197
+ catch (error) {
198
+ console.error(`Error: ${error instanceof Error ? error.message : error}`);
199
+ }
200
+ prompt();
201
+ });
202
+ };
203
+ prompt();
204
+ }
205
+ /**
206
+ * Main entry point
207
+ */
208
+ async function main() {
209
+ const args = process.argv.slice(2);
210
+ if (args.length === 0) {
211
+ printHelp();
212
+ process.exit(1);
213
+ }
214
+ const options = parseArgs(args);
215
+ if (!options.storyPath) {
216
+ console.error('Error: Story path is required');
217
+ printHelp();
218
+ process.exit(1);
219
+ }
220
+ // Interactive play mode
221
+ if (options.play) {
222
+ console.log(`Loading story from: ${options.storyPath}`);
223
+ let game;
224
+ try {
225
+ game = await loadStory(options.storyPath);
226
+ }
227
+ catch (error) {
228
+ console.error(`Error loading story: ${error}`);
229
+ process.exit(3);
230
+ }
231
+ await runInteractiveMode(game);
232
+ return;
233
+ }
234
+ // Find transcript files
235
+ let transcriptPaths = options.transcriptPaths;
236
+ if (options.all || transcriptPaths.length === 0) {
237
+ const testsDir = path.join(options.storyPath, 'tests');
238
+ if (fs.existsSync(testsDir)) {
239
+ transcriptPaths = findTranscripts(testsDir);
240
+ }
241
+ else {
242
+ // Check for transcripts directory
243
+ const transcriptsDir = path.join(options.storyPath, 'tests', 'transcripts');
244
+ if (fs.existsSync(transcriptsDir)) {
245
+ transcriptPaths = findTranscripts(transcriptsDir);
246
+ }
247
+ }
248
+ }
249
+ // Deduplicate paths
250
+ transcriptPaths = [...new Set(transcriptPaths)];
251
+ if (transcriptPaths.length === 0) {
252
+ console.error('Error: No transcript files found');
253
+ console.error(`Looked in: ${path.join(options.storyPath, 'tests')}`);
254
+ process.exit(2);
255
+ }
256
+ console.log(`Loading story from: ${options.storyPath}`);
257
+ // Load the story
258
+ let game;
259
+ try {
260
+ game = await loadStory(options.storyPath);
261
+ }
262
+ catch (error) {
263
+ console.error(`Error loading story: ${error}`);
264
+ process.exit(3);
265
+ }
266
+ console.log(`Found ${transcriptPaths.length} transcript(s) to run`);
267
+ if (options.chain) {
268
+ console.log(`Chain mode: Game state will persist between transcripts`);
269
+ }
270
+ // Run all transcripts
271
+ const results = [];
272
+ for (const transcriptPath of transcriptPaths) {
273
+ // Parse the transcript
274
+ const transcript = parseTranscriptFile(transcriptPath);
275
+ // Validate
276
+ const errors = validateTranscript(transcript);
277
+ if (errors.length > 0) {
278
+ console.error(`\nErrors in ${transcriptPath}:`);
279
+ for (const err of errors) {
280
+ console.error(` - ${err}`);
281
+ }
282
+ continue;
283
+ }
284
+ // Reload story for each transcript to reset state (unless chaining)
285
+ if (!options.chain) {
286
+ game = await loadStory(options.storyPath);
287
+ }
288
+ // Run the transcript
289
+ const result = await runTranscript(transcript, game, {
290
+ verbose: options.verbose,
291
+ stopOnFailure: options.stopOnFailure
292
+ });
293
+ results.push(result);
294
+ // Report individual transcript results
295
+ reportTranscript(result, { verbose: options.verbose });
296
+ // Stop if requested and there was a failure
297
+ if (options.stopOnFailure && result.failed > 0) {
298
+ break;
299
+ }
300
+ }
301
+ // Aggregate results
302
+ const runResult = {
303
+ transcripts: results,
304
+ totalPassed: results.reduce((sum, r) => sum + r.passed, 0),
305
+ totalFailed: results.reduce((sum, r) => sum + r.failed, 0),
306
+ totalExpectedFailures: results.reduce((sum, r) => sum + r.expectedFailures, 0),
307
+ totalSkipped: results.reduce((sum, r) => sum + r.skipped, 0),
308
+ totalDuration: results.reduce((sum, r) => sum + r.duration, 0)
309
+ };
310
+ // Final report if multiple transcripts
311
+ if (results.length > 1) {
312
+ reportTestRun(runResult, { verbose: options.verbose });
313
+ }
314
+ // Write results to files if output directory specified
315
+ if (options.outputDir) {
316
+ const timestamp = generateTimestamp();
317
+ const jsonPath = writeResultsToJson(runResult, options.outputDir, timestamp);
318
+ const reportPath = writeReportToFile(runResult, options.outputDir, timestamp);
319
+ console.log();
320
+ console.log(`Results written to:`);
321
+ console.log(` JSON: ${jsonPath}`);
322
+ console.log(` Report: ${reportPath}`);
323
+ }
324
+ // Exit with appropriate code
325
+ process.exit(getExitCode(runResult));
326
+ }
327
+ // Run
328
+ main().catch(error => {
329
+ console.error('Fatal error:', error);
330
+ process.exit(1);
331
+ });
332
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Condition Evaluator for Smart Transcript Directives (ADR-092)
3
+ *
4
+ * Evaluates condition expressions against game state.
5
+ *
6
+ * Supported expressions:
7
+ * - location = "Room Name" - Player is in room with that name
8
+ * - room contains "entity" - Entity with that name is in current room
9
+ * - inventory contains "item" - Player has item with that name
10
+ * - not inventory contains "item" - Player does NOT have item
11
+ * - entity "X" exists - Entity with name X exists anywhere
12
+ * - entity "X" alive - NPC entity is not dead
13
+ * - entity "X" in "Room" - Entity X is in specified room
14
+ */
15
+ import { ConditionResult } from './types';
16
+ interface WorldModelLike {
17
+ getLocation(entityId: string): string | null;
18
+ getContents(containerId: string, options?: {
19
+ includeWorn?: boolean;
20
+ }): any[];
21
+ getEntity(entityId: string): any | null;
22
+ findWhere(predicate: (entity: any) => boolean): any[];
23
+ getAllEntities(): any[];
24
+ }
25
+ /**
26
+ * Parse and evaluate a condition expression
27
+ */
28
+ export declare function evaluateCondition(condition: string, world: WorldModelLike, playerId: string): ConditionResult;
29
+ export {};
30
+ //# sourceMappingURL=condition-evaluator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"condition-evaluator.d.ts","sourceRoot":"","sources":["../src/condition-evaluator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAG1C,UAAU,cAAc;IACtB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC7C,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,GAAG,EAAE,CAAC;IAC7E,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC;IACxC,SAAS,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,OAAO,GAAG,GAAG,EAAE,CAAC;IACtD,cAAc,IAAI,GAAG,EAAE,CAAC;CACzB;AAsHD;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,cAAc,EACrB,QAAQ,EAAE,MAAM,GACf,eAAe,CA+BjB"}