Skip to Content
This documentation is provided with the HEAT environment and is relevant for this HEAT instance only.
InternalCore APISession timeline (Core API)

Session timeline (Core API)

Internal append-only event log for diagnosing session lifecycle and runner scheduling. Not exposed on v1/v2 public APIs.

Storage

Table SessionTimelineEvents (Postgres via EF Core):

ColumnPurpose
IdMonotonic cursor for pagination
SessionIdFK to session (ON DELETE CASCADE)
OccurredAtUtcEvent timestamp
KindSessionTimelineEventKind (smallint)
NodeInstanceIdSoft reference (no FK)
RunnerTaskIdSoft reference (no FK)
NodeOutputIdSoft reference (no FK)
DetailKind-specific numeric payload

No string metadata columns.

Event kinds

KindValueWhen emitted
SessionCreated1Session persisted
NodeConfigurationUpdated10Node Configuration changed
NodeStateChanged11Node LastState changed (deduped if unchanged)
ReprocessTriggered12ReprocessNodeAsync
NodeOutputRegistered13After CreateNodeOutputAsync save
TaskCreated20After CreateTaskAsync save
TaskClaimed21Successful ClaimTaskAsync
TaskExecutionStarted22SignalStartTaskExecutionAsync
TaskCompleted23CompleteTaskAsync / MarkTaskAsCompleteAsync
TaskFailed24FailTaskAsync and claim retry exhaustion
TaskSuperseded25Join fingerprint supersede

Detail field

KindDetail
NodeStateChanged(short)NodeState
TaskFailed(short)RunnerTaskState.Failed
TaskSuperseded(short)SessionTimelineSupersedeReason (JoinFingerprintExpanded = 1)

Read API

GET /api/sessions/{sessionId}/timeline

Query parameters:

  • after (long, default 0): return rows with Id > after
  • limit (int, default 500, max 2000)

Response shape:

{ "sessionId": "...", "events": [ { "id": 1, "at": "2026-06-03T12:00:00Z", "kind": "TaskCreated", "nodeInstanceId": 153, "runnerTaskId": 42, "nodeOutputId": null, "detail": null } ], "nextAfter": 1 }

agentic-cli

node dist/cli.js timeline <session-guid>

Uses the same endpoint as above. Optional --pretty for formatted JSON.

Implementation

Existing sessions have no backfilled timeline rows.