Class: TurnTracker<TRecord>
Makaio Framework / ai-adapters-core / TurnTracker
Class: TurnTracker<TRecord>
Section titled “Class: TurnTracker<TRecord>”Defined in: ../../../adapters/core/src/log-importer/turn-tracker.ts:185
State machine for tracking turn boundaries during log import.
Purpose
Section titled “Purpose”Some external tools (like Claude Code) don’t emit explicit turn start/end events. This tracker synthesizes these events based on adapter-specific detection logic.
State Transitions
Section titled “State Transitions”idle --[turn start detected]--> active (emit turn.started)active --[turn complete detected]--> idle (emit turn.completed)Multi-Session Support
Section titled “Multi-Session Support”The tracker maintains independent state per session ID, enabling concurrent processing of multiple sessions from the same log file.
Remarks
Section titled “Remarks”- Thread-safe for single-threaded async processing (no mutex needed)
- Stateless between sessions (each session tracked independently)
- Idempotent: processing the same record twice produces consistent results
Example
Section titled “Example”// Create tracker for Claude Code logsconst tracker = new TurnTracker({ detectTurnStart: (record) => record.type === 'user', detectTurnComplete: (record) => record.type === 'assistant' && record.message?.content?.some((b) => b.type === 'text'), getSessionId: (record) => record.sessionId,});
// Process recordsfor (const record of records) { const turnEvents = tracker.processRecord(record); for (const event of turnEvents) { // Emit turn.started or turn.completed events console.log(event.type, event.turnId); }}- TurnTrackerOptions - Configuration options
- TurnEvent - Emitted turn events
Type Parameters
Section titled “Type Parameters”TRecord
Section titled “TRecord”TRecord
The adapter’s native log record type
Constructors
Section titled “Constructors”Constructor
Section titled “Constructor”new TurnTracker<
TRecord>(options):TurnTracker<TRecord>
Defined in: ../../../adapters/core/src/log-importer/turn-tracker.ts:194
Create a new turn tracker.
Parameters
Section titled “Parameters”options
Section titled “options”TurnTrackerOptions<TRecord>
Tracker configuration with detection functions
Returns
Section titled “Returns”TurnTracker<TRecord>
Methods
Section titled “Methods”forceCompleteTurn()
Section titled “forceCompleteTurn()”forceCompleteTurn(
sessionId):TurnEvent|undefined
Defined in: ../../../adapters/core/src/log-importer/turn-tracker.ts:357
Manually complete the current turn for a session.
Parameters
Section titled “Parameters”sessionId
Section titled “sessionId”string
Session identifier
Returns
Section titled “Returns”TurnEvent | undefined
Turn completed event or undefined if no active turn
Remarks
Section titled “Remarks”Use this for cleanup when processing ends mid-turn (e.g., end of file with an incomplete conversation). Does nothing if no active turn.
getCurrentTurnId()
Section titled “getCurrentTurnId()”getCurrentTurnId(
sessionId):string|undefined
Defined in: ../../../adapters/core/src/log-importer/turn-tracker.ts:271
Get the current turn ID for a session.
Parameters
Section titled “Parameters”sessionId
Section titled “sessionId”string
Session identifier
Returns
Section titled “Returns”string | undefined
Current turn ID or undefined if no active turn
getState()
Section titled “getState()”getState(
sessionId):TurnState
Defined in: ../../../adapters/core/src/log-importer/turn-tracker.ts:262
Get the current turn state for a session.
Parameters
Section titled “Parameters”sessionId
Section titled “sessionId”string
Session identifier
Returns
Section titled “Returns”Current turn state (‘idle’ if session not tracked)
getTrackedSessions()
Section titled “getTrackedSessions()”getTrackedSessions():
string[]
Defined in: ../../../adapters/core/src/log-importer/turn-tracker.ts:345
Get all currently tracked session IDs.
Returns
Section titled “Returns”string[]
Array of session IDs being tracked
hasActiveTurn()
Section titled “hasActiveTurn()”hasActiveTurn(
sessionId):boolean
Defined in: ../../../adapters/core/src/log-importer/turn-tracker.ts:280
Check if a session has an active turn.
Parameters
Section titled “Parameters”sessionId
Section titled “sessionId”string
Session identifier
Returns
Section titled “Returns”boolean
True if the session has an active (non-idle) turn
processRecord()
Section titled “processRecord()”processRecord(
record):TurnEvent[]
Defined in: ../../../adapters/core/src/log-importer/turn-tracker.ts:215
Process a log record and return any turn events that should be emitted.
Parameters
Section titled “Parameters”record
Section titled “record”TRecord
Log record to process
Returns
Section titled “Returns”Array of turn events (may be empty, one, or two if turn completes and new one starts)
Remarks
Section titled “Remarks”Transition Rules
Section titled “Transition Rules”- idle + turn start detected emits
turn.started, transitions to active - active + turn complete detected emits
turn.completed, transitions to idle - active + turn start detected emits
turn.completedfor previous turn, then emitsturn.startedfor new turn (implicit completion) - idle + turn complete detected is a no-op (no active turn to complete)
Rule 3 handles cases where a user sends another message before the assistant finishes responding (rare but possible in log replays).
resetAll()
Section titled “resetAll()”resetAll():
void
Defined in: ../../../adapters/core/src/log-importer/turn-tracker.ts:300
Reset all tracked session state.
Returns
Section titled “Returns”void
Remarks
Section titled “Remarks”Use this for cleanup or when starting fresh.
resetSession()
Section titled “resetSession()”resetSession(
sessionId):boolean
Defined in: ../../../adapters/core/src/log-importer/turn-tracker.ts:291
Reset state for a specific session.
Parameters
Section titled “Parameters”sessionId
Section titled “sessionId”string
Session identifier
Returns
Section titled “Returns”boolean
True if the session was tracked and removed
Remarks
Section titled “Remarks”Use this when a session is known to be complete or when re-processing.
restore()
Section titled “restore()”restore(
serialized):void
Defined in: ../../../adapters/core/src/log-importer/turn-tracker.ts:331
Restore tracker state from a serialized form.
Parameters
Section titled “Parameters”serialized
Section titled “serialized”State object from serialize
Returns
Section titled “Returns”void
Remarks
Section titled “Remarks”Clears all current state before restoring. Use this to resume processing after a restart or between chunks.
serialize - Create serialized state
serialize()
Section titled “serialize()”serialize():
TurnTrackerSerializedState
Defined in: ../../../adapters/core/src/log-importer/turn-tracker.ts:312
Serialize the tracker state for persistence.
Returns
Section titled “Returns”JSON-serializable state object
Remarks
Section titled “Remarks”Use this to save state between chunks or before process shutdown for incremental log imports.
restore - Restore state from serialized form