Member Junction
    Preparing search index...

    Complete record of a single step in the engine's main loop. Captures everything that happened: screenshot, controller decision, actions executed, tool calls, judge verdict, and timing.

    This is the primary data structure that flows through:

    • Judge evaluation (via JudgeContext.StepHistory)
    • OnStepComplete hook (for Layer 2 persistence)
    • ComputerUseResult.Steps (final output)
    Index

    Constructors

    Properties

    ActionMs: number = 0

    Time spent executing this step's browser actions + tool calls.

    ActionResults: ActionExecutionResult[] = []

    Results of executing each browser action

    ActionsRequested: BrowserAction[] = []

    Browser actions the controller requested

    BatchStopReason?: string

    Set when a multi-action batch stopped before running every requested action — e.g. "executed 3/5 actions, stopped: url-changed". Surfaced to the next step's summary so the controller knows exactly what did NOT run.

    CheckpointReached?: string

    The tour checkpoint the controller reported reaching this step, if any — telemetry, and the trigger for a scoped judge call this step.

    ControllerPromptRunId?: string

    Correlation id for the controller LLM invocation (e.g. an MJ AIPromptRun ID).

    ControllerReasoning: string = ''

    The controller's reasoning for this step

    Diagnostics: BrowserDiagnosticEvent[] = []

    Browser diagnostics captured during this step (console errors, failed requests, crashes).

    DurationMs: number = 0

    Total duration of this step in milliseconds

    Error that occurred during this step (if applicable)

    Evaluation?: string

    Controller self-tracked state emitted this step: outcome eval, durable memory, plan checklist.

    InteractiveElements: InteractiveElement[] = []

    Interactive elements the extractor found this step when element grounding is on — role/name/selector/bbox for each. Empty when grounding is off. The raw material that makes ClickElement/TypeIntoElement traces replayable and self-healable.

    JudgeMs: number = 0

    Time spent in the judge (heuristic + LLM) this step.

    JudgePromptRunId?: string

    Correlation id for the judge LLM invocation, when the judge ran this step.

    JudgeVerdict?: JudgeVerdict

    Judge verdict (if the judge was consulted this step)

    LlmMs: number = 0

    Time spent in the controller LLM call.

    Memory?: string
    Plan?: string
    RequestedJudgement: boolean = false

    Whether the controller explicitly requested judgement this step. Such a step is a deliberate "am I done?" checkpoint, not a stuck/misconfigured empty step — the main loop must not count it toward the empty-step abort.

    Screenshot: string = ''

    Screenshot captured at the start of this step (base64 PNG)

    ScreenshotHash: string = ''

    Perceptual (dHash) fingerprint of this step's screenshot. 16-char hex, or '' when the frame could not be hashed. Shared signal for loop/stagnation detection, screenshot dedupe, judge-call gating, and failure classification. App-agnostic — derived from pixels only.

    ScreenshotMs: number = 0

    Time spent capturing (and hashing) the screenshot.

    SettleMs: number = 0

    Time spent waiting for the page to settle before perceiving (engine-side; not agent reasoning).

    SettleReason: SettleReason = 'none'

    Why the settle loop stopped waiting this step — e.g. 'beacon-ready', 'stable', 'budget'.

    StartedAt: number = 0

    Wall-clock epoch (ms) when this step began.

    StepNumber: number = 0

    Step number (1-indexed)

    ToolCalls: ToolCallRecord[] = []

    Tool calls executed during this step

    Url: string = ''

    URL of the page at the START of this step (before this step's actions ran). Retained as Url for back-compat; prefer UrlBefore/UrlAfter.

    UrlAfter: string = ''

    URL after this step's actions executed. Use this for loop detection and judge context.

    UrlBefore: string = ''

    URL at the start of the step (== Url).