@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.
- package/.turbo/turbo-build.log +4 -0
- package/LICENSE +21 -0
- package/dist/cli.d.ts +11 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +367 -0
- package/dist/cli.js.map +1 -0
- package/dist/condition-evaluator.d.ts +30 -0
- package/dist/condition-evaluator.d.ts.map +1 -0
- package/dist/condition-evaluator.js +314 -0
- package/dist/condition-evaluator.js.map +1 -0
- package/dist/fast-cli.d.ts +13 -0
- package/dist/fast-cli.d.ts.map +1 -0
- package/dist/fast-cli.js +363 -0
- package/dist/fast-cli.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +48 -0
- package/dist/index.js.map +1 -0
- package/dist/navigator.d.ts +27 -0
- package/dist/navigator.d.ts.map +1 -0
- package/dist/navigator.js +303 -0
- package/dist/navigator.js.map +1 -0
- package/dist/parser.d.ts +19 -0
- package/dist/parser.d.ts.map +1 -0
- package/dist/parser.js +453 -0
- package/dist/parser.js.map +1 -0
- package/dist/reporter.d.ts +41 -0
- package/dist/reporter.d.ts.map +1 -0
- package/dist/reporter.js +386 -0
- package/dist/reporter.js.map +1 -0
- package/dist/runner.d.ts +44 -0
- package/dist/runner.d.ts.map +1 -0
- package/dist/runner.js +977 -0
- package/dist/runner.js.map +1 -0
- package/dist/story-loader.d.ts +31 -0
- package/dist/story-loader.d.ts.map +1 -0
- package/dist/story-loader.js +169 -0
- package/dist/story-loader.js.map +1 -0
- package/dist/types.d.ts +204 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -0
- package/dist-esm/cli.d.ts +11 -0
- package/dist-esm/cli.d.ts.map +1 -0
- package/dist-esm/cli.js +332 -0
- package/dist-esm/cli.js.map +1 -0
- package/dist-esm/condition-evaluator.d.ts +30 -0
- package/dist-esm/condition-evaluator.d.ts.map +1 -0
- package/dist-esm/condition-evaluator.js +311 -0
- package/dist-esm/condition-evaluator.js.map +1 -0
- package/dist-esm/fast-cli.d.ts +13 -0
- package/dist-esm/fast-cli.d.ts.map +1 -0
- package/dist-esm/fast-cli.js +328 -0
- package/dist-esm/fast-cli.js.map +1 -0
- package/dist-esm/index.d.ts +17 -0
- package/dist-esm/index.d.ts.map +1 -0
- package/dist-esm/index.js +21 -0
- package/dist-esm/index.js.map +1 -0
- package/dist-esm/navigator.d.ts +27 -0
- package/dist-esm/navigator.d.ts.map +1 -0
- package/dist-esm/navigator.js +300 -0
- package/dist-esm/navigator.js.map +1 -0
- package/dist-esm/parser.d.ts +19 -0
- package/dist-esm/parser.d.ts.map +1 -0
- package/dist-esm/parser.js +415 -0
- package/dist-esm/parser.js.map +1 -0
- package/dist-esm/reporter.d.ts +41 -0
- package/dist-esm/reporter.d.ts.map +1 -0
- package/dist-esm/reporter.js +342 -0
- package/dist-esm/reporter.js.map +1 -0
- package/dist-esm/runner.d.ts +44 -0
- package/dist-esm/runner.d.ts.map +1 -0
- package/dist-esm/runner.js +941 -0
- package/dist-esm/runner.js.map +1 -0
- package/dist-esm/story-loader.d.ts +31 -0
- package/dist-esm/story-loader.d.ts.map +1 -0
- package/dist-esm/story-loader.js +131 -0
- package/dist-esm/story-loader.js.map +1 -0
- package/dist-esm/types.d.ts +204 -0
- package/dist-esm/types.d.ts.map +1 -0
- package/dist-esm/types.js +7 -0
- package/dist-esm/types.js.map +1 -0
- package/dist-npm/cli.d.ts +11 -0
- package/dist-npm/cli.d.ts.map +1 -0
- package/dist-npm/cli.js +367 -0
- package/dist-npm/cli.js.map +1 -0
- package/dist-npm/condition-evaluator.d.ts +30 -0
- package/dist-npm/condition-evaluator.d.ts.map +1 -0
- package/dist-npm/condition-evaluator.js +314 -0
- package/dist-npm/condition-evaluator.js.map +1 -0
- package/dist-npm/fast-cli.d.ts +13 -0
- package/dist-npm/fast-cli.d.ts.map +1 -0
- package/dist-npm/fast-cli.js +363 -0
- package/dist-npm/fast-cli.js.map +1 -0
- package/dist-npm/index.d.ts +17 -0
- package/dist-npm/index.d.ts.map +1 -0
- package/dist-npm/index.js +48 -0
- package/dist-npm/index.js.map +1 -0
- package/dist-npm/navigator.d.ts +27 -0
- package/dist-npm/navigator.d.ts.map +1 -0
- package/dist-npm/navigator.js +303 -0
- package/dist-npm/navigator.js.map +1 -0
- package/dist-npm/parser.d.ts +19 -0
- package/dist-npm/parser.d.ts.map +1 -0
- package/dist-npm/parser.js +453 -0
- package/dist-npm/parser.js.map +1 -0
- package/dist-npm/reporter.d.ts +41 -0
- package/dist-npm/reporter.d.ts.map +1 -0
- package/dist-npm/reporter.js +386 -0
- package/dist-npm/reporter.js.map +1 -0
- package/dist-npm/runner.d.ts +44 -0
- package/dist-npm/runner.d.ts.map +1 -0
- package/dist-npm/runner.js +977 -0
- package/dist-npm/runner.js.map +1 -0
- package/dist-npm/story-loader.d.ts +31 -0
- package/dist-npm/story-loader.d.ts.map +1 -0
- package/dist-npm/story-loader.js +169 -0
- package/dist-npm/story-loader.js.map +1 -0
- package/dist-npm/types.d.ts +204 -0
- package/dist-npm/types.d.ts.map +1 -0
- package/dist-npm/types.js +8 -0
- package/dist-npm/types.js.map +1 -0
- package/package.json +49 -0
- package/src/cli.ts +385 -0
- package/src/condition-evaluator.ts +382 -0
- package/src/fast-cli.ts +403 -0
- package/src/index.ts +26 -0
- package/src/navigator.ts +365 -0
- package/src/parser.ts +488 -0
- package/src/reporter.ts +409 -0
- package/src/runner.ts +1152 -0
- package/src/story-loader.ts +168 -0
- package/src/types.ts +244 -0
- package/tsconfig.esm.json +11 -0
- package/tsconfig.esm.tsbuildinfo +1 -0
- package/tsconfig.json +22 -0
- package/tsconfig.tsbuildinfo +1 -0
|
@@ -0,0 +1,363 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
/**
|
|
4
|
+
* Fast Transcript Tester CLI
|
|
5
|
+
*
|
|
6
|
+
* Uses pre-bundled platform (dist/sharpee.js) and story for instant loading.
|
|
7
|
+
* Supports --chain flag for walkthrough testing.
|
|
8
|
+
*
|
|
9
|
+
* Usage:
|
|
10
|
+
* node packages/transcript-tester/dist/fast-cli.js [transcript-files...] [options]
|
|
11
|
+
* node packages/transcript-tester/dist/fast-cli.js --chain wt-*.transcript
|
|
12
|
+
*/
|
|
13
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
16
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
17
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
18
|
+
}
|
|
19
|
+
Object.defineProperty(o, k2, desc);
|
|
20
|
+
}) : (function(o, m, k, k2) {
|
|
21
|
+
if (k2 === undefined) k2 = k;
|
|
22
|
+
o[k2] = m[k];
|
|
23
|
+
}));
|
|
24
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
25
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
26
|
+
}) : function(o, v) {
|
|
27
|
+
o["default"] = v;
|
|
28
|
+
});
|
|
29
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
30
|
+
var ownKeys = function(o) {
|
|
31
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
32
|
+
var ar = [];
|
|
33
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
34
|
+
return ar;
|
|
35
|
+
};
|
|
36
|
+
return ownKeys(o);
|
|
37
|
+
};
|
|
38
|
+
return function (mod) {
|
|
39
|
+
if (mod && mod.__esModule) return mod;
|
|
40
|
+
var result = {};
|
|
41
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
42
|
+
__setModuleDefault(result, mod);
|
|
43
|
+
return result;
|
|
44
|
+
};
|
|
45
|
+
})();
|
|
46
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
47
|
+
const path = __importStar(require("path"));
|
|
48
|
+
const readline = __importStar(require("readline"));
|
|
49
|
+
const parser_1 = require("./parser");
|
|
50
|
+
const runner_1 = require("./runner");
|
|
51
|
+
const reporter_1 = require("./reporter");
|
|
52
|
+
// Load the pre-bundled platform
|
|
53
|
+
// __dirname is packages/transcript-tester/dist, so go up 3 levels to repo root
|
|
54
|
+
const bundlePath = path.resolve(__dirname, '..', '..', '..', 'dist', 'sharpee.js');
|
|
55
|
+
const platform = require(bundlePath);
|
|
56
|
+
// Extract what we need from the bundle
|
|
57
|
+
const { GameEngine, WorldModel, EntityType, Parser, LanguageProvider, PerceptionService, TestingExtension } = platform;
|
|
58
|
+
/**
|
|
59
|
+
* Parse command line arguments
|
|
60
|
+
*/
|
|
61
|
+
function parseArgs(args) {
|
|
62
|
+
const options = {
|
|
63
|
+
transcriptPaths: [],
|
|
64
|
+
verbose: false,
|
|
65
|
+
stopOnFailure: false,
|
|
66
|
+
chain: false,
|
|
67
|
+
play: false,
|
|
68
|
+
storyPath: 'stories/dungeo'
|
|
69
|
+
};
|
|
70
|
+
let i = 0;
|
|
71
|
+
while (i < args.length) {
|
|
72
|
+
const arg = args[i];
|
|
73
|
+
if (arg === '--verbose' || arg === '-v') {
|
|
74
|
+
options.verbose = true;
|
|
75
|
+
}
|
|
76
|
+
else if (arg === '--stop-on-failure' || arg === '-s') {
|
|
77
|
+
options.stopOnFailure = true;
|
|
78
|
+
}
|
|
79
|
+
else if (arg === '--chain' || arg === '-c') {
|
|
80
|
+
options.chain = true;
|
|
81
|
+
}
|
|
82
|
+
else if (arg === '--play' || arg === '-p') {
|
|
83
|
+
options.play = true;
|
|
84
|
+
}
|
|
85
|
+
else if (arg === '--story') {
|
|
86
|
+
i++;
|
|
87
|
+
if (i < args.length) {
|
|
88
|
+
options.storyPath = args[i];
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
else if (arg === '--help' || arg === '-h') {
|
|
92
|
+
printHelp();
|
|
93
|
+
process.exit(0);
|
|
94
|
+
}
|
|
95
|
+
else if (!arg.startsWith('-')) {
|
|
96
|
+
options.transcriptPaths.push(arg);
|
|
97
|
+
}
|
|
98
|
+
i++;
|
|
99
|
+
}
|
|
100
|
+
return options;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Print help message
|
|
104
|
+
*/
|
|
105
|
+
function printHelp() {
|
|
106
|
+
console.log(`
|
|
107
|
+
Fast Transcript Tester - Uses pre-bundled platform for instant loading
|
|
108
|
+
|
|
109
|
+
Usage:
|
|
110
|
+
fast-transcript-test [transcript-files...] [options]
|
|
111
|
+
|
|
112
|
+
Arguments:
|
|
113
|
+
transcript-files One or more .transcript files to run
|
|
114
|
+
|
|
115
|
+
Options:
|
|
116
|
+
-c, --chain Chain transcripts (don't reset game state between them)
|
|
117
|
+
-v, --verbose Show detailed output for each command
|
|
118
|
+
-s, --stop-on-failure Stop on first failure
|
|
119
|
+
-p, --play Interactive play mode (REPL)
|
|
120
|
+
--story <path> Story path (default: stories/dungeo)
|
|
121
|
+
-h, --help Show this help message
|
|
122
|
+
|
|
123
|
+
Examples:
|
|
124
|
+
fast-transcript-test stories/dungeo/walkthroughs/wt-01-get-torch-early.transcript
|
|
125
|
+
fast-transcript-test --chain stories/dungeo/walkthroughs/wt-*.transcript
|
|
126
|
+
fast-transcript-test --play
|
|
127
|
+
`);
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Load the story and create a testable game
|
|
131
|
+
*/
|
|
132
|
+
function loadStoryAndCreateGame(storyPath) {
|
|
133
|
+
// Resolve story path
|
|
134
|
+
const resolvedPath = path.isAbsolute(storyPath)
|
|
135
|
+
? storyPath
|
|
136
|
+
: path.resolve(process.cwd(), storyPath);
|
|
137
|
+
// Load the story module
|
|
138
|
+
const distPath = path.join(resolvedPath, 'dist', 'index.js');
|
|
139
|
+
const storyModule = require(distPath);
|
|
140
|
+
const story = storyModule.story || storyModule.default;
|
|
141
|
+
if (!story) {
|
|
142
|
+
throw new Error(`Story module at ${storyPath} does not export 'story' or 'default'`);
|
|
143
|
+
}
|
|
144
|
+
// Create world and player
|
|
145
|
+
const world = new WorldModel();
|
|
146
|
+
const player = world.createEntity('player', EntityType.ACTOR);
|
|
147
|
+
world.setPlayer(player.id);
|
|
148
|
+
// Create parser and language
|
|
149
|
+
const language = new LanguageProvider();
|
|
150
|
+
const parser = new Parser(language);
|
|
151
|
+
// Extend parser and language with story-specific vocabulary
|
|
152
|
+
if (story.extendParser) {
|
|
153
|
+
story.extendParser(parser);
|
|
154
|
+
}
|
|
155
|
+
if (story.extendLanguage) {
|
|
156
|
+
story.extendLanguage(language);
|
|
157
|
+
}
|
|
158
|
+
// Create perception service
|
|
159
|
+
const perceptionService = new PerceptionService();
|
|
160
|
+
// Create engine
|
|
161
|
+
const engine = new GameEngine({
|
|
162
|
+
world,
|
|
163
|
+
player,
|
|
164
|
+
parser,
|
|
165
|
+
language,
|
|
166
|
+
perceptionService,
|
|
167
|
+
});
|
|
168
|
+
// Set the story and start
|
|
169
|
+
engine.setStory(story);
|
|
170
|
+
engine.start();
|
|
171
|
+
// Create testing extension
|
|
172
|
+
const testingExtension = TestingExtension ? new TestingExtension() : null;
|
|
173
|
+
// Capture text output and events
|
|
174
|
+
let lastOutput = '';
|
|
175
|
+
let outputBuffer = [];
|
|
176
|
+
let lastEvents = [];
|
|
177
|
+
let lastTurnResult = null;
|
|
178
|
+
engine.on('text:output', (text) => {
|
|
179
|
+
outputBuffer.push(text);
|
|
180
|
+
});
|
|
181
|
+
let eventBuffer = [];
|
|
182
|
+
engine.on('event', (event) => {
|
|
183
|
+
eventBuffer.push(event);
|
|
184
|
+
});
|
|
185
|
+
const testableGame = {
|
|
186
|
+
engine,
|
|
187
|
+
world,
|
|
188
|
+
testingExtension,
|
|
189
|
+
lastOutput: '',
|
|
190
|
+
lastEvents: [],
|
|
191
|
+
lastTurnResult: null,
|
|
192
|
+
async executeCommand(input) {
|
|
193
|
+
outputBuffer = [];
|
|
194
|
+
eventBuffer = [];
|
|
195
|
+
lastEvents = [];
|
|
196
|
+
lastTurnResult = null;
|
|
197
|
+
try {
|
|
198
|
+
const result = await engine.executeTurn(input);
|
|
199
|
+
if (result) {
|
|
200
|
+
lastTurnResult = result;
|
|
201
|
+
lastEvents = eventBuffer;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
catch (error) {
|
|
205
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
206
|
+
outputBuffer.push(`Error: ${errorMessage}`);
|
|
207
|
+
}
|
|
208
|
+
lastOutput = outputBuffer.join('\n');
|
|
209
|
+
testableGame.lastOutput = lastOutput;
|
|
210
|
+
testableGame.lastEvents = lastEvents;
|
|
211
|
+
testableGame.lastTurnResult = lastTurnResult;
|
|
212
|
+
return lastOutput;
|
|
213
|
+
},
|
|
214
|
+
};
|
|
215
|
+
return testableGame;
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Run interactive play mode (REPL)
|
|
219
|
+
*/
|
|
220
|
+
async function runInteractiveMode(game) {
|
|
221
|
+
const rl = readline.createInterface({
|
|
222
|
+
input: process.stdin,
|
|
223
|
+
output: process.stdout
|
|
224
|
+
});
|
|
225
|
+
let debugMode = false;
|
|
226
|
+
console.log('\n--- Interactive Mode (Fast) ---');
|
|
227
|
+
console.log('Type commands to play. Special commands:');
|
|
228
|
+
console.log(' /quit, /q - Exit the game');
|
|
229
|
+
console.log(' /debug - Toggle debug mode (show events)');
|
|
230
|
+
console.log(' /look, /l - Shortcut for "look"');
|
|
231
|
+
console.log(' /inv, /i - Shortcut for "inventory"');
|
|
232
|
+
console.log('');
|
|
233
|
+
const initialOutput = await game.executeCommand('look');
|
|
234
|
+
console.log(initialOutput);
|
|
235
|
+
const prompt = () => {
|
|
236
|
+
rl.question('\n> ', async (input) => {
|
|
237
|
+
const trimmed = input.trim();
|
|
238
|
+
if (!trimmed) {
|
|
239
|
+
prompt();
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
if (trimmed === '/quit' || trimmed === '/q') {
|
|
243
|
+
console.log('Goodbye!');
|
|
244
|
+
rl.close();
|
|
245
|
+
process.exit(0);
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
if (trimmed === '/debug') {
|
|
249
|
+
debugMode = !debugMode;
|
|
250
|
+
console.log(`Debug mode: ${debugMode ? 'ON' : 'OFF'}`);
|
|
251
|
+
prompt();
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
let command = trimmed;
|
|
255
|
+
if (trimmed === '/look' || trimmed === '/l') {
|
|
256
|
+
command = 'look';
|
|
257
|
+
}
|
|
258
|
+
else if (trimmed === '/inv' || trimmed === '/i') {
|
|
259
|
+
command = 'inventory';
|
|
260
|
+
}
|
|
261
|
+
try {
|
|
262
|
+
const output = await game.executeCommand(command);
|
|
263
|
+
console.log(output);
|
|
264
|
+
if (debugMode && game.lastEvents && game.lastEvents.length > 0) {
|
|
265
|
+
console.log('\n[Events]');
|
|
266
|
+
for (const event of game.lastEvents) {
|
|
267
|
+
console.log(` ${event.type}`);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
catch (error) {
|
|
272
|
+
console.error(`Error: ${error instanceof Error ? error.message : error}`);
|
|
273
|
+
}
|
|
274
|
+
prompt();
|
|
275
|
+
});
|
|
276
|
+
};
|
|
277
|
+
prompt();
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Main entry point
|
|
281
|
+
*/
|
|
282
|
+
async function main() {
|
|
283
|
+
const args = process.argv.slice(2);
|
|
284
|
+
if (args.length === 0) {
|
|
285
|
+
printHelp();
|
|
286
|
+
process.exit(1);
|
|
287
|
+
}
|
|
288
|
+
const options = parseArgs(args);
|
|
289
|
+
// Interactive play mode
|
|
290
|
+
if (options.play) {
|
|
291
|
+
console.log(`Loading story from: ${options.storyPath} (using bundle)`);
|
|
292
|
+
const game = loadStoryAndCreateGame(options.storyPath);
|
|
293
|
+
await runInteractiveMode(game);
|
|
294
|
+
return;
|
|
295
|
+
}
|
|
296
|
+
if (options.transcriptPaths.length === 0) {
|
|
297
|
+
console.error('Error: No transcript files specified');
|
|
298
|
+
printHelp();
|
|
299
|
+
process.exit(1);
|
|
300
|
+
}
|
|
301
|
+
console.log(`Loading story from: ${options.storyPath} (using bundle)`);
|
|
302
|
+
console.log(`Found ${options.transcriptPaths.length} transcript(s) to run`);
|
|
303
|
+
if (options.chain) {
|
|
304
|
+
console.log(`Chain mode: Game state will persist between transcripts`);
|
|
305
|
+
}
|
|
306
|
+
// Load the game once (will reload for each transcript unless chaining)
|
|
307
|
+
let game = loadStoryAndCreateGame(options.storyPath);
|
|
308
|
+
// Run all transcripts
|
|
309
|
+
const results = [];
|
|
310
|
+
for (const transcriptPath of options.transcriptPaths) {
|
|
311
|
+
// Parse the transcript
|
|
312
|
+
const transcript = (0, parser_1.parseTranscriptFile)(transcriptPath);
|
|
313
|
+
// Validate
|
|
314
|
+
const errors = (0, parser_1.validateTranscript)(transcript);
|
|
315
|
+
if (errors.length > 0) {
|
|
316
|
+
console.error(`\nErrors in ${transcriptPath}:`);
|
|
317
|
+
for (const err of errors) {
|
|
318
|
+
console.error(` - ${err}`);
|
|
319
|
+
}
|
|
320
|
+
continue;
|
|
321
|
+
}
|
|
322
|
+
// Reload story for each transcript to reset state (unless chaining)
|
|
323
|
+
if (!options.chain) {
|
|
324
|
+
game = loadStoryAndCreateGame(options.storyPath);
|
|
325
|
+
}
|
|
326
|
+
// Run the transcript with saves directory based on story path
|
|
327
|
+
const savesDirectory = path.join(options.storyPath, 'saves');
|
|
328
|
+
const result = await (0, runner_1.runTranscript)(transcript, game, {
|
|
329
|
+
verbose: options.verbose,
|
|
330
|
+
stopOnFailure: options.stopOnFailure,
|
|
331
|
+
savesDirectory,
|
|
332
|
+
testingExtension: game.testingExtension
|
|
333
|
+
});
|
|
334
|
+
results.push(result);
|
|
335
|
+
// Report individual transcript results
|
|
336
|
+
(0, reporter_1.reportTranscript)(result, { verbose: options.verbose });
|
|
337
|
+
// Stop if requested and there was a failure
|
|
338
|
+
if (options.stopOnFailure && result.failed > 0) {
|
|
339
|
+
break;
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
// Aggregate results
|
|
343
|
+
const runResult = {
|
|
344
|
+
transcripts: results,
|
|
345
|
+
totalPassed: results.reduce((sum, r) => sum + r.passed, 0),
|
|
346
|
+
totalFailed: results.reduce((sum, r) => sum + r.failed, 0),
|
|
347
|
+
totalExpectedFailures: results.reduce((sum, r) => sum + r.expectedFailures, 0),
|
|
348
|
+
totalSkipped: results.reduce((sum, r) => sum + r.skipped, 0),
|
|
349
|
+
totalDuration: results.reduce((sum, r) => sum + r.duration, 0)
|
|
350
|
+
};
|
|
351
|
+
// Final report if multiple transcripts
|
|
352
|
+
if (results.length > 1) {
|
|
353
|
+
(0, reporter_1.reportTestRun)(runResult, { verbose: options.verbose });
|
|
354
|
+
}
|
|
355
|
+
// Exit with appropriate code
|
|
356
|
+
process.exit((0, reporter_1.getExitCode)(runResult));
|
|
357
|
+
}
|
|
358
|
+
// Run
|
|
359
|
+
main().catch(error => {
|
|
360
|
+
console.error('Fatal error:', error);
|
|
361
|
+
process.exit(1);
|
|
362
|
+
});
|
|
363
|
+
//# sourceMappingURL=fast-cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fast-cli.js","sourceRoot":"","sources":["../src/fast-cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @sharpee/transcript-tester
|
|
3
|
+
*
|
|
4
|
+
* Transcript-based testing for Sharpee interactive fiction stories.
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* npx transcript-test <story-path> [transcripts...]
|
|
8
|
+
*
|
|
9
|
+
* See ADR-073 for format specification.
|
|
10
|
+
*/
|
|
11
|
+
export * from './types';
|
|
12
|
+
export { parseTranscript, parseTranscriptFile, validateTranscript } from './parser';
|
|
13
|
+
export { runTranscript } from './runner';
|
|
14
|
+
export { reportTranscript, reportTestRun, getExitCode } from './reporter';
|
|
15
|
+
export { loadStory, createTestableGame, findTranscripts } from './story-loader';
|
|
16
|
+
export type { TestableGame } from './story-loader';
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,cAAc,SAAS,CAAC;AAGxB,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAGpF,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGzC,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAG1E,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAChF,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @sharpee/transcript-tester
|
|
4
|
+
*
|
|
5
|
+
* Transcript-based testing for Sharpee interactive fiction stories.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* npx transcript-test <story-path> [transcripts...]
|
|
9
|
+
*
|
|
10
|
+
* See ADR-073 for format specification.
|
|
11
|
+
*/
|
|
12
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
15
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
16
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
17
|
+
}
|
|
18
|
+
Object.defineProperty(o, k2, desc);
|
|
19
|
+
}) : (function(o, m, k, k2) {
|
|
20
|
+
if (k2 === undefined) k2 = k;
|
|
21
|
+
o[k2] = m[k];
|
|
22
|
+
}));
|
|
23
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
24
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
25
|
+
};
|
|
26
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
27
|
+
exports.findTranscripts = exports.createTestableGame = exports.loadStory = exports.getExitCode = exports.reportTestRun = exports.reportTranscript = exports.runTranscript = exports.validateTranscript = exports.parseTranscriptFile = exports.parseTranscript = void 0;
|
|
28
|
+
// Types
|
|
29
|
+
__exportStar(require("./types"), exports);
|
|
30
|
+
// Parser
|
|
31
|
+
var parser_1 = require("./parser");
|
|
32
|
+
Object.defineProperty(exports, "parseTranscript", { enumerable: true, get: function () { return parser_1.parseTranscript; } });
|
|
33
|
+
Object.defineProperty(exports, "parseTranscriptFile", { enumerable: true, get: function () { return parser_1.parseTranscriptFile; } });
|
|
34
|
+
Object.defineProperty(exports, "validateTranscript", { enumerable: true, get: function () { return parser_1.validateTranscript; } });
|
|
35
|
+
// Runner
|
|
36
|
+
var runner_1 = require("./runner");
|
|
37
|
+
Object.defineProperty(exports, "runTranscript", { enumerable: true, get: function () { return runner_1.runTranscript; } });
|
|
38
|
+
// Reporter
|
|
39
|
+
var reporter_1 = require("./reporter");
|
|
40
|
+
Object.defineProperty(exports, "reportTranscript", { enumerable: true, get: function () { return reporter_1.reportTranscript; } });
|
|
41
|
+
Object.defineProperty(exports, "reportTestRun", { enumerable: true, get: function () { return reporter_1.reportTestRun; } });
|
|
42
|
+
Object.defineProperty(exports, "getExitCode", { enumerable: true, get: function () { return reporter_1.getExitCode; } });
|
|
43
|
+
// Story Loader
|
|
44
|
+
var story_loader_1 = require("./story-loader");
|
|
45
|
+
Object.defineProperty(exports, "loadStory", { enumerable: true, get: function () { return story_loader_1.loadStory; } });
|
|
46
|
+
Object.defineProperty(exports, "createTestableGame", { enumerable: true, get: function () { return story_loader_1.createTestableGame; } });
|
|
47
|
+
Object.defineProperty(exports, "findTranscripts", { enumerable: true, get: function () { return story_loader_1.findTranscripts; } });
|
|
48
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;;;;;;;;;;;;;;;AAEH,QAAQ;AACR,0CAAwB;AAExB,SAAS;AACT,mCAAoF;AAA3E,yGAAA,eAAe,OAAA;AAAE,6GAAA,mBAAmB,OAAA;AAAE,4GAAA,kBAAkB,OAAA;AAEjE,SAAS;AACT,mCAAyC;AAAhC,uGAAA,aAAa,OAAA;AAEtB,WAAW;AACX,uCAA0E;AAAjE,4GAAA,gBAAgB,OAAA;AAAE,yGAAA,aAAa,OAAA;AAAE,uGAAA,WAAW,OAAA;AAErD,eAAe;AACf,+CAAgF;AAAvE,yGAAA,SAAS,OAAA;AAAE,kHAAA,kBAAkB,OAAA;AAAE,+GAAA,eAAe,OAAA"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Navigator for Smart Transcript Directives (ADR-092)
|
|
3
|
+
*
|
|
4
|
+
* Handles NAVIGATE TO directives by pathfinding to target rooms
|
|
5
|
+
* and executing GO commands. Handles random outcomes (e.g., Round Room
|
|
6
|
+
* carousel) by recalculating path when actual location differs from expected.
|
|
7
|
+
*/
|
|
8
|
+
import { NavigateResult } from './types';
|
|
9
|
+
interface WorldModelLike {
|
|
10
|
+
getLocation(entityId: string): string | undefined;
|
|
11
|
+
getEntity(entityId: string): any | undefined;
|
|
12
|
+
findByTrait(traitType: string): any[];
|
|
13
|
+
findWhere(predicate: (entity: any) => boolean): any[];
|
|
14
|
+
findPath(fromRoomId: string, toRoomId: string): string[] | null;
|
|
15
|
+
}
|
|
16
|
+
interface GameEngineLike {
|
|
17
|
+
executeCommand(input: string): Promise<string> | string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Execute navigation to a target room
|
|
21
|
+
*
|
|
22
|
+
* Uses pathfinding to find route, executes GO commands, and handles
|
|
23
|
+
* random outcomes by recalculating path from actual location.
|
|
24
|
+
*/
|
|
25
|
+
export declare function executeNavigate(targetRoomName: string, world: WorldModelLike, engine: GameEngineLike, playerId: string, verbose?: boolean): Promise<NavigateResult>;
|
|
26
|
+
export {};
|
|
27
|
+
//# sourceMappingURL=navigator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"navigator.d.ts","sourceRoot":"","sources":["../src/navigator.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAGzC,UAAU,cAAc;IACtB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAClD,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG,GAAG,SAAS,CAAC;IAC7C,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,GAAG,EAAE,CAAC;IACtC,SAAS,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,OAAO,GAAG,GAAG,EAAE,CAAC;IACtD,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC;CACjE;AAGD,UAAU,cAAc;IACtB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;CACzD;AA+HD;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,cAAc,EAAE,MAAM,EACtB,KAAK,EAAE,cAAc,EACrB,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,OAAe,GACvB,OAAO,CAAC,cAAc,CAAC,CA2MzB"}
|