@playerthree/sidecar
@playerthree/sidecar: the PlayerThree host for non-JS game servers (SPEC §20.8 (a)). The engine speaks
newline-delimited JSON over stdio or a local socket; this process serves MCP through a normal PlayerThreeHost.
Classes
EngineLink
Defined in: packages/sidecar/src/link.ts:38
Properties
| Property | Modifier | Type | Description | Defined in |
|---|---|---|---|---|
closed | readonly | Promise<LinkClosed> | Resolves once the connection is gone, for any reason. | packages/sidecar/src/link.ts:43 |
connected | readonly | Promise<void> | Resolves when the engine connected (at once for stdio). | packages/sidecar/src/link.ts:41 |
onMessage | public | (msg) => void | Engine-initiated messages: hello, host, advance. | packages/sidecar/src/link.ts:45 |
transport | readonly | Transport | - | packages/sidecar/src/link.ts:39 |
Accessors
isClosed
Get Signature
get isClosed(): boolean;Defined in: packages/sidecar/src/link.ts:120
Returns
boolean
Methods
call()
call(
session,
method,
args
): unknown;Defined in: packages/sidecar/src/link.ts:128
One synchronous adapter call. Returns the engine's data; throws SidecarCallError for ok:false (its code),
a timeout (timeout, and the connection is closed) or a closed connection (engine_closed).
Parameters
| Parameter | Type |
|---|---|
session | string |
method | string |
args | unknown[] |
Returns
unknown
callPadded()
callPadded(
session,
method,
args,
lineBytes
): unknown;Defined in: packages/sidecar/src/link.ts:136
Conformance probe: a call whose line is exactly lineBytes long (excluding "\n"), filled up by an ignored
pad member. Engines must answer lines up to MAX_LINE_BYTES.
Parameters
| Parameter | Type |
|---|---|
session | string |
method | string |
args | unknown[] |
lineBytes | number |
Returns
unknown
close()
close(code?, message?): void;Defined in: packages/sidecar/src/link.ts:183
Closes the connection, after a fatal {"op":"error"} notice when code is given.
Parameters
| Parameter | Type |
|---|---|
code? | FatalCode |
message? | string |
Returns
void
send()
send(msg): void;Defined in: packages/sidecar/src/link.ts:175
Fire-and-forget host → engine message (replies to engine requests, pushes, ready).
Parameters
| Parameter | Type |
|---|---|
msg | Msg |
Returns
void
sendRawLine()
sendRawLine(line): void;Defined in: packages/sidecar/src/link.ts:145
Conformance probe: writes one line verbatim, without the size check (line excludes the "\n").
Parameters
| Parameter | Type |
|---|---|
line | string |
Returns
void
open()
static open(opts): Promise<EngineLink>;Defined in: packages/sidecar/src/link.ts:101
Starts the link; for a socket, resolves once it listens (owner-only) and the engine may connect.
Parameters
| Parameter | Type |
|---|---|
opts | EngineLinkOptions |
Returns
Promise<EngineLink>
LineDecoder
Defined in: packages/sidecar/src/protocol.ts:68
Splits a byte stream into lines. Holds at most one open line (≤ MAX_LINE_BYTES) and never scans a byte twice.
push returns 'too_large' once a line, terminated or not, exceeds the limit and 'bad_utf8' for an
undecodable line; the stream is unusable afterwards.
Constructors
Constructor
new LineDecoder(): LineDecoder;Returns
Methods
push()
push(chunk, out): "too_large" | "ok" | "bad_utf8";Defined in: packages/sidecar/src/protocol.ts:72
Parameters
| Parameter | Type |
|---|---|
chunk | Buffer |
out | string[] |
Returns
"too_large" | "ok" | "bad_utf8"
SidecarCallError
Defined in: packages/sidecar/src/link.ts:16
A failed call: the engine answered ok:false, or the connection timed out or closed.
Extends
Error
Constructors
Constructor
new SidecarCallError(code, message): SidecarCallError;Defined in: packages/sidecar/src/link.ts:18
Parameters
| Parameter | Type |
|---|---|
code | string |
message | string |
Returns
Overrides
Error.constructor
Properties
| Property | Modifier | Type | Defined in |
|---|---|---|---|
code | readonly | string | packages/sidecar/src/link.ts:17 |
Interfaces
EngineLinkOptions
Defined in: packages/sidecar/src/link.ts:25
Properties
| Property | Type | Description | Defined in |
|---|---|---|---|
callTimeoutMs? | number | Per-call deadline; a missed deadline closes the connection. Default 5000 ms. | packages/sidecar/src/link.ts:28 |
tap? | (dir, msg) => void | Sees every message in wire order of this thread: in from the engine, out to it. | packages/sidecar/src/link.ts:30 |
transport | Transport | - | packages/sidecar/src/link.ts:26 |
LinkClosed
Defined in: packages/sidecar/src/link.ts:33
Properties
| Property | Type | Defined in |
|---|---|---|
code? | FatalCode | packages/sidecar/src/link.ts:35 |
reason | string | packages/sidecar/src/link.ts:34 |
ServedSidecar
Defined in: packages/sidecar/src/serve.ts:17
Properties
| Property | Modifier | Type | Description | Defined in |
|---|---|---|---|---|
mcpUrl | readonly | string | http://host:port/mcp, also sent to the engine in ready.mcp. | packages/sidecar/src/serve.ts:21 |
server | readonly | Server | - | packages/sidecar/src/serve.ts:19 |
sidecar | readonly | Sidecar | - | packages/sidecar/src/serve.ts:18 |
Methods
close()
close(): Promise<void>;Defined in: packages/sidecar/src/serve.ts:23
Closes the engine connection and the HTTP server.
Returns
Promise<void>
ServeSidecarOptions
Defined in: packages/sidecar/src/serve.ts:8
Extends
Omit<SidecarOptions,"serve">
Properties
| Property | Type | Description | Inherited from | Defined in |
|---|---|---|---|---|
callTimeoutMs? | number | Per-call deadline (default 5000 ms); a missed deadline closes the connection. | SidecarOptions.callTimeoutMs | packages/sidecar/src/sidecar.ts:20 |
devtools? | boolean | Also mount the operator console at /playerthree/devtools. | - | packages/sidecar/src/serve.ts:14 |
gate? | (request) => Promise<void> | Awaited before each engine request (host or advance) runs. Conformance orders engine ticks against agent calls with it. | SidecarOptions.gate | packages/sidecar/src/sidecar.ts:30 |
helloTimeoutMs? | number | How long a connected engine may take to send hello (default 10000 ms). | SidecarOptions.helloTimeoutMs | packages/sidecar/src/sidecar.ts:22 |
host? | Omit<PlayerThreeHostOptions<AnyManifest>, "definition"> | Everything of the host but the game definition: stores, data dir, history, commander log, … | SidecarOptions.host | packages/sidecar/src/sidecar.ts:24 |
listen? | string | MCP listen address (default 127.0.0.1). | - | packages/sidecar/src/serve.ts:12 |
port? | number | MCP listen port (default 8787; 0 picks a free one). | - | packages/sidecar/src/serve.ts:10 |
tap? | (dir, msg) => void | Sees every message, in from the engine and out to it, in this host's processing order. | SidecarOptions.tap | packages/sidecar/src/sidecar.ts:28 |
transport | Transport | - | SidecarOptions.transport | packages/sidecar/src/sidecar.ts:18 |
Sidecar
Defined in: packages/sidecar/src/sidecar.ts:33
Properties
| Property | Modifier | Type | Description | Defined in |
|---|---|---|---|---|
closed | readonly | Promise<LinkClosed> | Resolves once the engine connection is gone; every session is disposed by then. | packages/sidecar/src/sidecar.ts:38 |
link | readonly | EngineLink | - | packages/sidecar/src/sidecar.ts:34 |
ready | readonly | Promise<PlayerThreeHost<AnyManifest>> | Resolves with the host after a successful handshake; rejects when the handshake fails or the engine leaves first. | packages/sidecar/src/sidecar.ts:36 |
Methods
close()
close(): void;Defined in: packages/sidecar/src/sidecar.ts:41
Returns
void
match()
match(session):
| PlayerThreeMatch<AnyManifest>
| undefined;Defined in: packages/sidecar/src/sidecar.ts:40
The match behind an engine-created session.
Parameters
| Parameter | Type |
|---|---|
session | string |
Returns
| PlayerThreeMatch<AnyManifest>
| undefined
SidecarOptions
Defined in: packages/sidecar/src/sidecar.ts:17
Properties
| Property | Type | Description | Defined in |
|---|---|---|---|
callTimeoutMs? | number | Per-call deadline (default 5000 ms); a missed deadline closes the connection. | packages/sidecar/src/sidecar.ts:20 |
gate? | (request) => Promise<void> | Awaited before each engine request (host or advance) runs. Conformance orders engine ticks against agent calls with it. | packages/sidecar/src/sidecar.ts:30 |
helloTimeoutMs? | number | How long a connected engine may take to send hello (default 10000 ms). | packages/sidecar/src/sidecar.ts:22 |
host? | Omit<PlayerThreeHostOptions<AnyManifest>, "definition"> | Everything of the host but the game definition: stores, data dir, history, commander log, … | packages/sidecar/src/sidecar.ts:24 |
serve? | (host) => string | Promise<string | undefined> | undefined | Runs once the manifest is valid, before ready: serve MCP here and return its URL for ready.mcp. | packages/sidecar/src/sidecar.ts:26 |
tap? | (dir, msg) => void | Sees every message, in from the engine and out to it, in this host's processing order. | packages/sidecar/src/sidecar.ts:28 |
transport | Transport | - | packages/sidecar/src/sidecar.ts:18 |
Type Aliases
FatalCode
type FatalCode = "too_large" | "bad_frame" | "timeout" | "invalid_manifest" | "protocol";Defined in: packages/sidecar/src/protocol.ts:19
Fatal {"op":"error"} codes: the sender closes the connection right after.
Hook
type Hook = typeof HOOKS[number];Defined in: packages/sidecar/src/protocol.ts:16
@playerthree/sidecar: the PlayerThree host for non-JS game servers (SPEC §20.8 (a)). The engine speaks
newline-delimited JSON over stdio or a local socket; this process serves MCP through a normal PlayerThreeHost.
Msg
type Msg = Record<string, unknown>;Defined in: packages/sidecar/src/protocol.ts:26
@playerthree/sidecar: the PlayerThree host for non-JS game servers (SPEC §20.8 (a)). The engine speaks
newline-delimited JSON over stdio or a local socket; this process serves MCP through a normal PlayerThreeHost.
Transport
type Transport =
| {
kind: "stdio";
}
| {
kind: "socket";
path: string;
};Defined in: packages/sidecar/src/protocol.ts:28
@playerthree/sidecar: the PlayerThree host for non-JS game servers (SPEC §20.8 (a)). The engine speaks
newline-delimited JSON over stdio or a local socket; this process serves MCP through a normal PlayerThreeHost.
Variables
DEFAULT_CALL_TIMEOUT_MS
const DEFAULT_CALL_TIMEOUT_MS: 5000 = 5_000;Defined in: packages/sidecar/src/protocol.ts:9
@playerthree/sidecar: the PlayerThree host for non-JS game servers (SPEC §20.8 (a)). The engine speaks
newline-delimited JSON over stdio or a local socket; this process serves MCP through a normal PlayerThreeHost.
DEFAULT_HELLO_TIMEOUT_MS
const DEFAULT_HELLO_TIMEOUT_MS: 10000 = 10_000;Defined in: packages/sidecar/src/protocol.ts:10
@playerthree/sidecar: the PlayerThree host for non-JS game servers (SPEC §20.8 (a)). The engine speaks
newline-delimited JSON over stdio or a local socket; this process serves MCP through a normal PlayerThreeHost.
HOOKS
const HOOKS: readonly ["matchData", "debugView", "observerView", "end", "forfeit", "rank", "clone", "signalLimits"];Defined in: packages/sidecar/src/protocol.ts:15
Optional adapter calls an engine declares in hello.hooks; everything else in §10 is always forwarded.
MAX_ADVANCE
const MAX_ADVANCE: 10000 = 10_000;Defined in: packages/sidecar/src/sidecar.ts:13
Largest advance batch: bounds how long one engine request can hold the host.
MAX_LINE_BYTES
const MAX_LINE_BYTES: 1048576 = 1_048_576;Defined in: packages/sidecar/src/protocol.ts:8
Largest line in UTF-8 bytes, excluding the terminating "\n".
PROTOCOL
const PROTOCOL: 1 = 1;Defined in: packages/sidecar/src/protocol.ts:6
Sidecar wire protocol 1 (SPEC §20.8 (a)): newline-delimited UTF-8 JSON between a non-JS engine and this host. Shared by the host, the conformance runner, the mock engine's expectations and the tests.
SOCKET_ENV
const SOCKET_ENV: "PLAYERTHREE_SIDECAR_SOCKET" = 'PLAYERTHREE_SIDECAR_SOCKET';Defined in: packages/sidecar/src/protocol.ts:12
Environment variable a launcher uses to hand the socket path to the engine.
Functions
encodeLine()
function encodeLine(msg): string;Defined in: packages/sidecar/src/protocol.ts:41
Serialises one message to a line (with its "\n"); throws when the JSON exceeds the line limit.
Parameters
| Parameter | Type |
|---|---|
msg | Msg |
Returns
string
main()
function main(argv, err?): Promise<number>;Defined in: packages/sidecar/src/cli.ts:31
Parameters
| Parameter | Type |
|---|---|
argv | string[] |
err? | (text) => void |
Returns
Promise<number>
member()
function member(v, key): unknown;Defined in: packages/sidecar/src/protocol.ts:36
One member of a JSON object; undefined when v is not an object or lacks it.
Parameters
| Parameter | Type |
|---|---|
v | unknown |
key | string |
Returns
unknown
parseLine()
function parseLine(line): Msg | undefined;Defined in: packages/sidecar/src/protocol.ts:51
Parses one line into a message object, or undefined for anything that is not a JSON object.
Parameters
| Parameter | Type |
|---|---|
line | string |
Returns
Msg | undefined
serveSidecar()
function serveSidecar(opts): Promise<ServedSidecar>;Defined in: packages/sidecar/src/serve.ts:26
Parameters
| Parameter | Type |
|---|---|
opts | ServeSidecarOptions |
Returns
Promise<ServedSidecar>
startSidecar()
function startSidecar(opts): Promise<Sidecar>;Defined in: packages/sidecar/src/sidecar.ts:167
Opens the engine link and runs the sidecar until the engine leaves.
Parameters
| Parameter | Type |
|---|---|
opts | SidecarOptions |
Returns
Promise<Sidecar>
