/** * Telemetry records are metadata-only projections for observability. * Hard boundary: never store message text, tool payloads, file contents, * queries, environment values, absolute paths, or secrets. Bounded derived * labels are allowed (tool names, skill names, error first-line signatures). */ export declare const TELEMETRY_SCHEMA_VERSION = 1; /** * Causal-era revision marker for compaction-family records. * Records carrying `rev >= CAUSAL_SCHEMA_REV` include host-event correlation * (composite `(sessionId, compactionSeq)` keying and causal failure causes); * records without `rev` predate causal correlation and are treated as * version 0 by consumers. Introduced with `session_compact_failed` adoption * (ADR 2026-08-24-pi-0.84.x-adoption P0-A). */ export declare const CAUSAL_SCHEMA_REV = 2; export type TelemetryKind = "tool_call" | "compaction" | "compaction_begin" | "compaction_failure" | "compaction_quality" | "compaction_recall" | "skill_load" | "vault_query" | "follow_up" | "subagent" | "turn"; export interface TelemetryEventBase { v: typeof TELEMETRY_SCHEMA_VERSION; kind: TelemetryKind; ts: number; sessionId?: string; cwd?: string; /** "live" events are measured at runtime; "backfill" events are derived from persisted session JSONL. */ source?: "live" | "backfill"; /** Causal-era revision marker; absent on pre-causal records (treated as version 0). */ rev?: number; } export interface ToolCallTelemetryEvent extends TelemetryEventBase { kind: "tool_call"; tool: string; ok: boolean; durationMs?: number; errorSignature?: string; } export interface CompactionTelemetryEvent extends TelemetryEventBase { kind: "compaction"; reason: string; willRetry: boolean; fromExtension: boolean; tokensBefore?: number; summaryChars?: number; /** Composite correlation key half; paired with sessionId. Absent on orphan success. */ compactionSeq?: number; /** True when at least one causal failure was recorded for this seq before terminal success. */ retriedAfterFailure?: boolean; } export interface CompactionBeginTelemetryEvent extends TelemetryEventBase { kind: "compaction_begin"; reason: string; willRetry: boolean; /** Composite correlation key half; paired with sessionId. */ compactionSeq?: number; } export interface CompactionFailureTelemetryEvent extends TelemetryEventBase { kind: "compaction_failure"; stage: "preset" | "preset_directive" | "default_preset" | "stock_fallback" | "final" | "host"; errorSignature: string; /** Host-sourced failures only (stage === "host"): what triggered the compaction. */ reason?: string; /** Host-sourced failures only: true when compaction was cancelled or aborted. */ aborted?: boolean; /** True when no matching begin existed under the current session context. */ orphan?: boolean; /** True when aborted && willRetry — recoverable class, excluded from hard-failure counts. */ recoverable?: boolean; /** Composite correlation key half; paired with sessionId. Absent when orphan. */ compactionSeq?: number; } export type CompactionQualityMode = "model" | "deterministic_fallback" | "deterministic_repair" | "minimal_emergency" | "other"; export interface CompactionQualityTelemetryEvent extends TelemetryEventBase { kind: "compaction_quality"; mode: CompactionQualityMode; validationOk: boolean; fallback: boolean; repaired: boolean; splitTurn: boolean; summaryChars: number; /** Total messages in the compacted span before deterministic selection. */ compactedMessages?: number; selectedMessages: number; omittedMessages: number; omittedManagedRecords: number; omittedManagedBlocks?: number; continuityRecords?: number; evidenceAnchors?: number; redactions: number; truncatedRecords: number; inputTokenBudget: number; finalTokenBudget: number; worktreeVerified: boolean; durationMs?: number; } export type CompactionRecallScope = "lineage" | "all" | "degraded"; export type CompactionRecallMode = "hybrid" | "files" | "failures" | "commands"; export interface CompactionRecallTelemetryEvent extends TelemetryEventBase { kind: "compaction_recall"; scope: CompactionRecallScope; mode: CompactionRecallMode; queryTokens: number; sourceEntries?: number; sourceEntriesOmitted?: number; candidateCount: number; totalHits?: number; hitCount: number; page: number; expandedCount: number; directRefCount?: number; scopeWidened: boolean; durationMs?: number; } export interface SkillLoadTelemetryEvent extends TelemetryEventBase { kind: "skill_load"; skill: string; } export interface VaultQueryTelemetryEvent extends TelemetryEventBase { kind: "vault_query"; tool: string; ok: boolean; durationMs?: number; } export interface FollowUpTelemetryEvent extends TelemetryEventBase { kind: "follow_up"; sent: boolean; dispatchMode: string; blockedReason?: string; } export interface SubagentTelemetryEvent extends TelemetryEventBase { kind: "subagent"; profile: string; ok: boolean; durationMs?: number; } export interface TurnTelemetryEvent extends TelemetryEventBase { kind: "turn"; index: number; } export type TelemetryEvent = ToolCallTelemetryEvent | CompactionTelemetryEvent | CompactionBeginTelemetryEvent | CompactionFailureTelemetryEvent | CompactionQualityTelemetryEvent | CompactionRecallTelemetryEvent | SkillLoadTelemetryEvent | VaultQueryTelemetryEvent | FollowUpTelemetryEvent | SubagentTelemetryEvent | TurnTelemetryEvent; export declare function normalizeToolName(value: unknown): string; export declare function normalizeSkillName(value: unknown): string; /** * Error signature: first non-empty line of the error text, whitespace-collapsed, * with digits collapsed so retries of the same failure collapse to one signature. */ export declare function deriveErrorSignature(content: unknown): string | undefined;