start method
Last updated: 2026-03-05T10:53:28.864Z
Metrics
LOC: 40
Complexity: 6
Params: 2
Signature
start(inputFlow, configOverride)
Source Code
start(inputFlow, configOverride) {
if (status === "running" || status === "preparing") {
log.warn("Replay already in progress");
return;
}
flow = inputFlow;
stepIndex = 0;
stepResults = [];
startedAt = Date.now();
// Merge config
config = { ...DEFAULT_REPLAY_CONFIG, ...inputFlow.replayConfig };
if (configOverride) {
Object.assign(config, configOverride);
if (configOverride.speed && !configOverride.typingDelay) {
const preset = SPEED_PRESETS[configOverride.speed];
Object.assign(config, preset);
}
}
rng = createSeededRng(inputFlow.metadata.seed);
abortController = new AbortController();
setStatus("preparing");
log.info(
`Starting replay: "${inputFlow.metadata.name}" (${inputFlow.steps.length} steps)`,
);
// Run async loop (don't await — the orchestrator is non-blocking)
setStatus("running");
runLoop(abortController.signal).catch((err) => {
log.error("Replay loop error:", err);
setStatus("failed");
chrome.tabs
.sendMessage(tabId, { type: "DEMO_CURSOR_DESTROY" })
.catch(() => {});
callbacks.onComplete?.(buildResult());
});
},
Dependencies (Outgoing)
| Target | Type |
|---|---|
| createSeededRng | calls |
| setStatus | calls |
| runLoop | calls |
| buildResult | calls |
No incoming dependencies.