Telemetry Events
The shared event union is:
type ThreadplaneEvent = ThreadplaneNodeEvent | ThreadplaneBrowserEvent;Node events
type ThreadplaneNodeEvent =
| 'tplane:postinstall'
| 'tplane:runtime_instance_created'
| 'tplane:runtime_request_created'
| 'tplane:stream_started'
| 'tplane:stream_ended'
| 'tplane:stream_errored';| Event | Source | Properties from source |
|---|---|---|
tplane:postinstall | package postinstall script | pkg, version, node, node_version, os, arch, global_install, package-manager fields when npm exposes them |
tplane:runtime_instance_created | Node adapter helper | transport, provider, model, angularVersion; apiKey is removed |
tplane:runtime_request_created | Node adapter helper | transport, requestType, provider, model (provider and model optional) |
tplane:stream_started | Node adapter helper | provider, model, optional fields in the input object |
tplane:stream_ended | Node adapter helper | provider, model, durationMs when supplied |
tplane:stream_errored | Node adapter helper | stream properties plus errorClass |
captureEvent() also adds sample_weight to sent event properties.
Browser events
The shared event file lists these browser-only events:
type ThreadplaneBrowserEvent = 'tplane:browser_provided' | 'tplane:browser_chat_init';The browser Angular token broadens the local service event type to:
type ThreadplaneTelemetryEvent =
| 'tplane:browser_provided'
| 'tplane:browser_chat_init'
| 'tplane:runtime_instance_created'
| 'tplane:runtime_request_created'
| 'tplane:stream_started'
| 'tplane:stream_ended'
| 'tplane:stream_errored';That means browser code can capture the browser-specific events plus runtime lifecycle events when telemetry is enabled.
Browser payloads
Endpoint delivery sends:
{
"event": "tplane:stream_ended",
"distinctId": "browser:<ephemeral-id>",
"properties": {
"transport": "langgraph",
"provider": "openai",
"model": "gpt-4.1",
"durationMs": 1200,
"sample_weight": 1
}
}When using sink, the sink receives the same event and properties values before endpoint formatting.
Node payloads
Node delivery sends:
{
"key": "phc_public_cacheplane_telemetry",
"distinctId": "anon_<uuid>",
"event": "tplane:stream_started",
"properties": {
"provider": "openai",
"model": "gpt-4.1",
"sample_weight": 1
}
}The public ingest key is a routing identifier accepted by the Threadplane ingest proxy. It is not a secret.