@playerthree/console

@playerthree/console: the player console. A headless client over the game's player API (the owner's own seats only: status, mandate, scopes, limits, approvals, recent intents and ack codes, policy errors and logs, practice, observation size and token estimate) plus an optional drop-in panel. Browser-safe: no Node built-ins.

Classes

PlayerConsole

Defined in: packages/console/src/client.ts:295

Headless player-console client: polls /state, follows /stream while a match runs and publishes ConsoleSnapshots.

Constructors

Constructor
new PlayerConsole(opts): PlayerConsole;

Defined in: packages/console/src/client.ts:320

Parameters
ParameterType
optsPlayerConsoleOptions
Returns

PlayerConsole

Accessors

snapshot
Get Signature
get snapshot(): ConsoleSnapshot;

Defined in: packages/console/src/client.ts:338

The latest normalized snapshot.

Returns

ConsoleSnapshot

started
Get Signature
get started(): boolean;

Defined in: packages/console/src/client.ts:363

Returns

boolean

Methods

refresh()
refresh(): Promise<void>;

Defined in: packages/console/src/client.ts:368

Fetch /state now.

Returns

Promise<void>

start()
start(): void;

Defined in: packages/console/src/client.ts:349

Start polling (and streaming while a match runs). Idempotent.

Returns

void

stop()
stop(): void;

Defined in: packages/console/src/client.ts:357

Stop all network activity; the last snapshot stays readable.

Returns

void

subscribe()
subscribe(listener): () => void;

Defined in: packages/console/src/client.ts:343

Called with every new snapshot. Returns unsubscribe.

Parameters
ParameterType
listenerListener
Returns

() => void

Interfaces

CommanderInfo

Defined in: packages/console/src/client.ts:41

An owner's persistent commander (owner credential only).

Properties

PropertyTypeDefined in
approvalsobject[]packages/console/src/client.ts:54
botLevelstringpackages/console/src/client.ts:48
connectedbooleanpackages/console/src/client.ts:55
idstringpackages/console/src/client.ts:42
isolationobjectpackages/console/src/client.ts:46
isolation.independentSessionsbooleanpackages/console/src/client.ts:46
kind"policy" | "agent"packages/console/src/client.ts:44
lastPractice| { allies: string; at: number; opponent: string; outcome: Outcome; report: unknown; role: string; seed: number; ticks: number; version: number; } | nullpackages/console/src/client.ts:53
lastSeenAtnumber | nullpackages/console/src/client.ts:56
mandateMandatepackages/console/src/client.ts:50
metadata?objectpackages/console/src/client.ts:47
metadata.model?stringpackages/console/src/client.ts:47
metadata.provider?stringpackages/console/src/client.ts:47
metadata.scaffoldVersion?stringpackages/console/src/client.ts:47
namestringpackages/console/src/client.ts:43
policyobjectpackages/console/src/client.ts:51
policy.activeByRoleRecord<string, number | null>packages/console/src/client.ts:51
policy.versionsobject[]packages/console/src/client.ts:51
recordobjectpackages/console/src/client.ts:52
record.drawsnumberpackages/console/src/client.ts:52
record.lossesnumberpackages/console/src/client.ts:52
record.winsnumberpackages/console/src/client.ts:52
reservationsobject[]packages/console/src/client.ts:58
rolesstring[]packages/console/src/client.ts:45
scopes("act" | "policy" | "practice" | "publish" | "say")[]packages/console/src/client.ts:49
seated| { match: string; roles: string[]; team: string; } | nullpackages/console/src/client.ts:57

ConsoleIntent

Defined in: packages/console/src/client.ts:94

@playerthree/console: the player console. A headless client over the game's player API (the owner's own seats only: status, mandate, scopes, limits, approvals, recent intents and ack codes, policy errors and logs, practice, observation size and token estimate) plus an optional drop-in panel. Browser-safe: no Node built-ins.

Properties

PropertyTypeDescriptionDefined in
ackIntentAck-packages/console/src/client.ts:101
atnumber-packages/console/src/client.ts:95
codestringok, or the closed rejection code (a game code for game rejections). See ackCode.packages/console/src/client.ts:103
kindstring | nullThe intent kind when it passed schema validation (rejected input is never stored).packages/console/src/client.ts:100
sourcestringWho produced it: agent, policy, bot, owner or stream.packages/console/src/client.ts:98
ticknumber-packages/console/src/client.ts:96

ConsoleObservation

Defined in: packages/console/src/client.ts:131

@playerthree/console: the player console. A headless client over the game's player API (the owner's own seats only: status, mandate, scopes, limits, approvals, recent intents and ack codes, policy errors and logs, practice, observation size and token estimate) plus an optional drop-in panel. Browser-safe: no Node built-ins.

Properties

PropertyTypeDescriptionDefined in
atnumber-packages/console/src/client.ts:132
bytesnumberUTF-8 JSON bytes of the guarded observation the seat's agent last received.packages/console/src/client.ts:135
costnumber | nullEstimated cost of reading it once, in the price option's currency; null without a price.packages/console/src/client.ts:139
ticknumber-packages/console/src/client.ts:133
tokensnumberEstimated input tokens (ceil(bytes / bytesPerToken)).packages/console/src/client.ts:137

ConsolePanel

Defined in: packages/console/src/panel.ts:45

A mounted panel.

Properties

PropertyModifierTypeDefined in
elreadonlyHTMLElementpackages/console/src/panel.ts:46
isOpenreadonlybooleanpackages/console/src/panel.ts:47

Methods

close()
close(): void;

Defined in: packages/console/src/panel.ts:49

Returns

void

destroy()
destroy(): void;

Defined in: packages/console/src/panel.ts:52

Remove the panel, its key listener and its subscription (stops the client unless pollWhileHidden).

Returns

void

open()
open(): void;

Defined in: packages/console/src/panel.ts:48

Returns

void

toggle()
toggle(): void;

Defined in: packages/console/src/panel.ts:50

Returns

void


ConsolePanelOptions

Defined in: packages/console/src/panel.ts:19

Options of mountConsolePanel.

Properties

PropertyTypeDescriptionDefined in
actions?objectOwner actions the panel may offer. Without resolveApproval, approvals are shown read-only.packages/console/src/panel.ts:37
actions.resolveApproval?(target, id, approve) => Promise<void>-packages/console/src/panel.ts:37
className?stringExtra class names on the root (theme hooks).packages/console/src/panel.ts:33
consolePlayerConsole-packages/console/src/panel.ts:20
currency?stringPrefix for cost figures (the console's pricePerMTok currency), e.g. $. Default none.packages/console/src/panel.ts:41
mount?HTMLElementWhere the panel is appended. Default document.body.packages/console/src/panel.ts:22
onToggle?(open) => voidCalled after the panel opens or closes.packages/console/src/panel.ts:39
pollWhileHidden?booleanKeep the client polling while the panel is hidden. Default false: it runs only while open.packages/console/src/panel.ts:35
roleLabel?(role) => stringDisplay name of a role. Default: the role id.packages/console/src/panel.ts:31
title?stringPanel title. Default Agent console.packages/console/src/panel.ts:29
toggleKey?string | nullToggle key, matched against KeyboardEvent.code or KeyboardEvent.key (no Ctrl/Alt/Meta, never while typing in a field). Default Backslash; null: no keyboard toggle (call toggle() yourself).packages/console/src/panel.ts:27

ConsolePolicy

Defined in: packages/console/src/client.ts:142

@playerthree/console: the player console. A headless client over the game's player API (the owner's own seats only: status, mandate, scopes, limits, approvals, recent intents and ack codes, policy errors and logs, practice, observation size and token estimate) plus an optional drop-in panel. Browser-safe: no Node built-ins.

Properties

PropertyTypeDescriptionDefined in
calls?number-packages/console/src/client.ts:146
errors?number-packages/console/src/client.ts:147
intentsEmitted?number-packages/console/src/client.ts:151
intentsRejected?object[]-packages/console/src/client.ts:152
maxMs?number-packages/console/src/client.ts:150
meanMs?number-packages/console/src/client.ts:149
runtime?string-packages/console/src/client.ts:145
timeouts?number-packages/console/src/client.ts:148
versionnumber | nullVersion playing in the live seat (or the active library version in the lobby); null: none.packages/console/src/client.ts:144
versions?numberLibrary versions (owner credential).packages/console/src/client.ts:154

ConsolePolicyError

Defined in: packages/console/src/client.ts:106

@playerthree/console: the player console. A headless client over the game's player API (the owner's own seats only: status, mandate, scopes, limits, approvals, recent intents and ack codes, policy errors and logs, practice, observation size and token estimate) plus an optional drop-in panel. Browser-safe: no Node built-ins.

Properties

PropertyTypeDescriptionDefined in
atnumber-packages/console/src/client.ts:107
codePolicyErrorCode-packages/console/src/client.ts:111
message?stringOwn-authored engine text about the owner's own artifact (plain text).packages/console/src/client.ts:113
phase"call" | "deploy"A failed deploy/rollback, or a failed policy call at tick rate.packages/console/src/client.ts:110
ticknumber-packages/console/src/client.ts:108
version?number-packages/console/src/client.ts:114

ConsolePractice

Defined in: packages/console/src/client.ts:117

@playerthree/console: the player console. A headless client over the game's player API (the owner's own seats only: status, mandate, scopes, limits, approvals, recent intents and ack codes, policy errors and logs, practice, observation size and token estimate) plus an optional drop-in panel. Browser-safe: no Node built-ins.

Properties

PropertyTypeDescriptionDefined in
atnumber-packages/console/src/client.ts:118
code?"policy" | "guard"-packages/console/src/client.ts:126
opponentstring-packages/console/src/client.ts:121
outcomeOutcome | nullNull when the run failed (code).packages/console/src/client.ts:125
rolestringCompatible role selected for this practice run, not the commander's roster identity.packages/console/src/client.ts:120
seednumber-packages/console/src/client.ts:123
ticksnumber-packages/console/src/client.ts:122
version?numberPolicy version that played, when known.packages/console/src/client.ts:128

ConsoleSeat

Defined in: packages/console/src/client.ts:157

@playerthree/console: the player console. A headless client over the game's player API (the owner's own seats only: status, mandate, scopes, limits, approvals, recent intents and ack codes, policy errors and logs, practice, observation size and token estimate) plus an optional drop-in panel. Browser-safe: no Node built-ins.

Properties

PropertyTypeDescriptionDefined in
approvalsobject[]Pending proposals, role-labelled; live consoles include only their exact selected lane.packages/console/src/client.ts:184
commanderstring | nullPersistent roster identity, or null for a human/private-team seat console.packages/console/src/client.ts:159
controller"human" | "policy" | "agent" | "bot" | "none"Runtime controller in a match; commander execution kind in the lobby.packages/console/src/client.ts:168
errorsConsolePolicyError[]Newest first.packages/console/src/client.ts:193
intentsConsoleIntent[]Newest first.packages/console/src/client.ts:189
lastSeenAtnumber | nullLast agent call (owner credential), ms since epoch.packages/console/src/client.ts:178
limitsRecord<string, unknown> | nullmandate.limits (house rules the game enforces).packages/console/src/client.ts:182
livebooleanTrue while a live match seats it.packages/console/src/client.ts:170
logsstring[]Policy log() tail (own-authored text; render as plain text).packages/console/src/client.ts:187
mandateMandate | null-packages/console/src/client.ts:179
namestring | null-packages/console/src/client.ts:160
observationConsoleObservation | null-packages/console/src/client.ts:196
pausedbooleanThis seat holds a pausable session still while its agent is away (whenAbsent: 'pause').packages/console/src/client.ts:176
policyConsolePolicy | null-packages/console/src/client.ts:185
practiceConsolePractice[]Newest first.packages/console/src/client.ts:195
presentbooleanThe seat's agent is active now (a recent or in-flight call, or a running sequence).packages/console/src/client.ts:174
readinessConsoleReadiness | nullExact live preparation/probe/consent state; null for a reusable lobby connection.packages/console/src/client.ts:172
rejectionsobject[]Rejected intents among intents, by code, most frequent first.packages/console/src/client.ts:191
rolestring | nullExact runtime role, null for a reusable lobby commander.packages/console/src/client.ts:164
rolesstring[]All compatible roles in the lobby; no arbitrary primary role is selected.packages/console/src/client.ts:162
scopes("act" | "policy" | "practice" | "publish" | "say")[]-packages/console/src/client.ts:180
targetConsoleActionTarget-packages/console/src/client.ts:166
teamstring | null-packages/console/src/client.ts:165

ConsoleSnapshot

Defined in: packages/console/src/client.ts:203

One normalized view of the owner's own seats, rebuilt on every refresh and live trace event.

Properties

PropertyTypeDescriptionDefined in
errorstring | nullClosed code when status is error: the API's { error } (bad_token, forbidden…), http_<n> or network.packages/console/src/client.ts:206
estimateobject-packages/console/src/client.ts:217
estimate.bytesPerTokennumber-packages/console/src/client.ts:217
estimate.pricePerMToknumber | null-packages/console/src/client.ts:217
game| { id: string; tickRate: number; title: string; version: string; } | null-packages/console/src/client.ts:207
matchstring | null-packages/console/src/client.ts:210
outcomeOutcome | null-packages/console/src/client.ts:213
phase"match" | "lobby"match for an explicitly selected live lane or live owner capability, otherwise lobby.packages/console/src/client.ts:209
seatsConsoleSeat[]-packages/console/src/client.ts:216
statusConsoleStatus-packages/console/src/client.ts:204
streamingbooleanThe live trace stream is connected.packages/console/src/client.ts:215
teamstring | null-packages/console/src/client.ts:211
ticknumber-packages/console/src/client.ts:212
updatedAtnumberms since epoch of the last successful refresh; 0 before the first.packages/console/src/client.ts:219

PlayerConsoleOptions

Defined in: packages/console/src/client.ts:223

Options of PlayerConsole.

Properties

PropertyTypeDescriptionDefined in
bytesPerToken?numberBytes per token for the estimate. Default 4 (a rough average for JSON; real tokenizers vary by model).packages/console/src/client.ts:240
credentialstring | (() => string | undefined)The game's authenticated profile credential, a live exact-seat human capability, or a trusted private team capability. Profile identity comes only from the host's owner resolver. Read before every request.packages/console/src/client.ts:228
fetch?{ (input, init?): Promise<Response>; (input, init?): Promise<Response>; }fetch implementation (tests, custom transports). Default the global fetch.packages/console/src/client.ts:244
maxIntents?numberRecent intents kept per seat. Default 50.packages/console/src/client.ts:242
pollMs?number/state refresh interval, ms (≥ 250). Default 2000.packages/console/src/client.ts:234
pricePerMTok?numberPrice per million input tokens for the observation cost estimate (any currency). Default: no cost shown.packages/console/src/client.ts:238
stream?booleanFollow /stream for live intents and observations while a match runs. Default true.packages/console/src/client.ts:236
target?| PlayerConsoleTarget | (() => PlayerConsoleTarget | undefined)Explicit live commander lane; undefined keeps profile authentication in roster-only mode.packages/console/src/client.ts:232
url?stringPlayer API base URL. Default /playerthree/player.packages/console/src/client.ts:230

PlayerConsoleTarget

Defined in: packages/console/src/client.ts:62

Profile-authenticated live selection, checked against the current commander lease by the host.

Properties


PlayerStateWire

Defined in: packages/console/src/client.ts:75

GET <url>/state as the player API sends it.

Properties

Type Aliases

ConsoleActionTarget

type ConsoleActionTarget = 
  | {
  commander: string;
  kind: "commander";
  seat?: {
     match: string;
     role: string;
     team: string;
  };
}
  | {
  kind: "seat";
  match: string;
  role: string;
  team: string;
};

Defined in: packages/console/src/client.ts:70

Approval routing never conflates a reusable commander with a live human seat.


ConsoleReadiness

type ConsoleReadiness = 
  | "ready"
  | "online"
  | "waiting"
  | "absent"
  | "stale_policy"
  | "policy_failed"
  | "consent_required";

Defined in: packages/console/src/client.ts:18

@playerthree/console: the player console. A headless client over the game's player API (the owner's own seats only: status, mandate, scopes, limits, approvals, recent intents and ack codes, policy errors and logs, practice, observation size and token estimate) plus an optional drop-in panel. Browser-safe: no Node built-ins.


ConsoleStatus

type ConsoleStatus = "idle" | "connecting" | "live" | "error";

Defined in: packages/console/src/client.ts:200

Client state: live after a successful refresh, error after a failed one (see ConsoleSnapshot.error).


Controller

type Controller = SeatInfo["controller"];

Defined in: packages/console/src/client.ts:16

@playerthree/console: the player console. A headless client over the game's player API (the owner's own seats only: status, mandate, scopes, limits, approvals, recent intents and ack codes, policy errors and logs, practice, observation size and token estimate) plus an optional drop-in panel. Browser-safe: no Node built-ins.


Outcome

type Outcome = "win" | "loss" | "draw" | "running";

Defined in: packages/console/src/client.ts:17

@playerthree/console: the player console. A headless client over the game's player API (the owner's own seats only: status, mandate, scopes, limits, approvals, recent intents and ack codes, policy errors and logs, practice, observation size and token estimate) plus an optional drop-in panel. Browser-safe: no Node built-ins.


PlayerTraceEvent

type PlayerTraceEvent = 
  | SeatTrace & object
  | SeatTrace & object
  | SeatTrace & object
  | SeatTrace & object
  | SeatTrace & object;

Defined in: packages/console/src/client.ts:33

The trace events the console reads (the API may send others; they are ignored).


SeatInfo

type SeatInfo = Extract<ServerMsg, {
  op: "seats";
}>["seats"][number];

Defined in: packages/console/src/client.ts:15

One seat as the host reports it (playerthree SeatInfo).

Functions

ackCode()

function ackCode(ack): string;

Defined in: packages/console/src/client.ts:248

Closed rejection code of an ack: ok, the ack code, or the game's code for game rejections.

Parameters

ParameterType
ackIntentAck

Returns

string


createPlayerConsole()

function createPlayerConsole(opts): PlayerConsole;

Defined in: packages/console/src/client.ts:654

Creates a stopped PlayerConsole; call start().

Parameters

ParameterType
optsPlayerConsoleOptions

Returns

PlayerConsole


estimateTokens()

function estimateTokens(bytes, bytesPerToken?): number;

Defined in: packages/console/src/client.ts:254

Input tokens for bytes of JSON at bytesPerToken (default 4): an estimate, not a tokenizer.

Parameters

ParameterTypeDefault value
bytesnumberundefined
bytesPerToken?number4

Returns

number


mergeTrace()

function mergeTrace(snapshot, live): PlayerTraceEvent[];

Defined in: packages/console/src/client.ts:265

Server snapshot ∪ live events received since the snapshot was requested. Everything received before the request is in the snapshot; an event in both is counted once per occurrence (identical events can legitimately repeat).

Parameters

ParameterType
snapshotreadonly PlayerTraceEvent[]
livereadonly PlayerTraceEvent[]

Returns

PlayerTraceEvent[]


mountConsolePanel()

function mountConsolePanel(opts): ConsolePanel;

Defined in: packages/console/src/panel.ts:129

Mounts the panel (hidden) for opts.console, injecting its stylesheet once per document.

Parameters

ParameterType
optsConsolePanelOptions

Returns

ConsolePanel