Pathway entries

One pathway invocation wraps each call to axon.request() or axon.stream(). All pathway entries share an invocationId that links them together.

pathway:start

Emitted before the pathway handler runs.

type PathwayStart = ThreadEntry<"pathway:start", {
    pathway: string       // route name e.g. "api/chat"
    invocationId: string  // stable ID linking all events from this invocation
}>

pathway:complete

Emitted after the handler returns successfully.

type PathwayComplete = ThreadEntry<"pathway:complete", {
    pathway: string
    invocationId: string
    durationMs: number
    billing: BillingTotal | null  // null if no engine was called
}>

pathway:abort

Emitted when the client cancels the request (e.g. user presses Escape).

type PathwayAbort = ThreadEntry<"pathway:abort", {
    pathway: string
    invocationId: string
    reason?: string
}>

pathway:error

Emitted when the pathway handler throws an unhandled error.

type PathwayError = ThreadEntry<"pathway:error", {
    pathway: string
    invocationId: string
    error: string
}>

engine:retry

Emitted each time an LLM call fails with a transient error and is being retried. A final axon:agent:error with kind "engine:error" follows if all attempts are exhausted.

type EngineRetry = ThreadEntry<"engine:retry", {
    engine: string       // which engine is retrying
    attempt: number      // 1-based retry index
    maxAttempts: number
    status?: number      // HTTP status that triggered the retry
    delayMs: number      // wait before next attempt
}>