Skip to content

Documentation / @debuffjp/dev / DevSession

Class: DevSession ​

Defined in: dev/src/session.ts:216

Shared dev state for a game: pause/step/speed, frame recording, an activity log and human notes. The overlay, dev hooks and the agent link all use the same session.

Properties ​

activity ​

readonly activity: Activity[] = []

Defined in: dev/src/session.ts:218


agentLastSeenAt ​

agentLastSeenAt: number = Number.NEGATIVE_INFINITY

Defined in: dev/src/session.ts:245

performance.now() of the last agent action (agent link); -Infinity if never.


agentsAttached ​

agentsAttached: number = 0

Defined in: dev/src/session.ts:319

Agents holding an attach connection through the dev server (agent link).


errors ​

readonly errors: ExplainedError[] = []

Defined in: dev/src/session.ts:225

Uncaught errors, unhandled rejections and loop errors, explained and de-duplicated (max 50).


eventCounts ​

readonly eventCounts: Record<string, number> = {}

Defined in: dev/src/session.ts:237

How many times the game emitted each event (game.emit) since load.


events ​

readonly events: GameEventRecord[] = []

Defined in: dev/src/session.ts:239

The latest game events with their tick and detail (max 200).


game ​

readonly game: Game

Defined in: dev/src/session.ts:254


notes ​

readonly notes: Note[] = []

Defined in: dev/src/session.ts:219


pausedBy ​

pausedBy: string | undefined

Defined in: dev/src/session.ts:241

Who paused the game, or undefined while running.


pauseOnSpikeMs ​

pauseOnSpikeMs: number = 0

Defined in: dev/src/session.ts:243

Pause automatically when a frame exceeds this many milliseconds (0 = off).


profiler ​

readonly profiler: Profiler

Defined in: dev/src/session.ts:251

myaku: hitches explained (profile()), with debuff's update and render as spans.


recorder ​

readonly recorder: FrameRecorder

Defined in: dev/src/session.ts:217


recording ​

recording: InputRecording | undefined

Defined in: dev/src/session.ts:221

Input recorded since page load, for replays (present once attachInput is called).

Accessors ​

agentConnected ​

Get Signature ​

get agentConnected(): boolean

Defined in: dev/src/session.ts:314

An agent acted on this game in the last 30 seconds.

Returns ​

boolean


paused ​

Get Signature ​

get paused(): boolean

Defined in: dev/src/session.ts:309

Returns ​

boolean

Methods ​

agentSeen() ​

agentSeen(): void

Defined in: dev/src/session.ts:332

Returns ​

void


attachInput() ​

attachInput(input): void

Defined in: dev/src/session.ts:361

Start recording this input for replays. Idempotent.

Parameters ​

input ​

DrivableInput

Returns ​

void


changed() ​

changed(): void

Defined in: dev/src/session.ts:499

Returns ​

void


clearErrors() ​

clearErrors(): void

Defined in: dev/src/session.ts:480

Forget recorded errors (after fixing them).

Returns ​

void


keepForReload() ​

keepForReload(): void

Defined in: dev/src/session.ts:394

Called just before the dev server reloads the page for a code change: save the session so the new code can replay it to this same tick (state-preserving reload). Running games keep running.

Returns ​

void


known() ​

known(): Replay | undefined

Defined in: dev/src/session.ts:369

Everything known about this session: the pre-rewind timeline while you're still parked where a rewind left you, otherwise what was actually played (any new tick or input branches off the old timeline).

Returns ​

Replay | undefined


log() ​

log(who, action, detail?, undo?): void

Defined in: dev/src/session.ts:485

Parameters ​

who ​

string

action ​

string

detail? ​

string

undo? ​

() => void

Returns ​

void


note() ​

note(text): Note

Defined in: dev/src/session.ts:437

Flag the current moment with a note for an agent to pick up.

Parameters ​

text ​

string

Returns ​

Note


pause() ​

pause(who?, detail?): void

Defined in: dev/src/session.ts:339

Parameters ​

who? ​

string = "you"

detail? ​

string

Returns ​

void


release() ​

release(): void

Defined in: dev/src/session.ts:296

Returns ​

void


restore() ​

restore(request, target): void

Defined in: dev/src/session.ts:402

Finish a rewind or a code reload after the page loads again (see rewind and keepForReload).

Parameters ​

request ​

RewindRequest

target ​

ReplayTarget

Returns ​

void


resume() ​

resume(who?): void

Defined in: dev/src/session.ts:346

Parameters ​

who? ​

string = "you"

Returns ​

void


rewind() ​

rewind(tick): void

Defined in: dev/src/session.ts:382

Go back (or forward, within the known session) to tick: the page reloads and replays its inputs to that tick, so the game's state is exactly what it was, then stays paused there.

Parameters ​

tick ​

number

Returns ​

void


setAgentsAttached() ​

setAgentsAttached(n): void

Defined in: dev/src/session.ts:322

Update attached agents from the dev server; logs connects and disconnects.

Parameters ​

n ​

number

Returns ​

void


setParam() ​

setParam(group, key, value, who?): void

Defined in: dev/src/session.ts:427

Set a param and log it with an undo that restores the previous value.

Parameters ​

group ​

string

key ​

string

value ​

ParamValue

who? ​

string = "you"

Returns ​

void


setSpeed() ​

setSpeed(scale, who?): void

Defined in: dev/src/session.ts:419

Parameters ​

scale ​

number

who? ​

string = "you"

Returns ​

void


step() ​

step(n?, who?): void

Defined in: dev/src/session.ts:354

Advance exactly n fixed steps (pauses first, so the result stays put).

Parameters ​

n? ​

number = 1

who? ​

string = "you"

Returns ​

void


subscribe() ​

subscribe(fn): () => void

Defined in: dev/src/session.ts:492

Subscribe to state changes (pause, log, notes). Returns an unsubscribe function.

Parameters ​

fn ​

() => void

Returns ​

() => void


acquire() ​

static acquire(game): DevSession

Defined in: dev/src/session.ts:286

The session for game, created on first use. Call release() when done.

Parameters ​

game ​

Game

Returns ​

DevSession