@relayplane/proxy 1.8.37 → 1.8.39

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,155 @@
1
+ /**
2
+ * TraceWriter — deterministic per-request trace files for RelayPlane.
3
+ *
4
+ * Writes structured JSONL trace files to ~/.relayplane/traces/{sessionId}/{YYYY-MM-DD}/{traceId}.jsonl
5
+ * and maintains a SQLite index at ~/.relayplane/traces/index.db.
6
+ *
7
+ * CAP 3: Deterministic Traces (Phase 2, Session 2)
8
+ */
9
+ export type TraceEventType = 'request.start' | 'request.end' | 'tool.call' | 'tool.result' | 'tool.denied' | 'model.response.start' | 'model.response.end' | 'budget.checkpoint' | 'budget.threshold.hit' | 'model.switch' | 'memory.read' | 'memory.write' | 'session.start' | 'session.end';
10
+ export interface TracePayload {
11
+ model?: string;
12
+ modelUsed?: string;
13
+ systemPromptHash?: string;
14
+ messageCount?: number;
15
+ requestedTools?: string[];
16
+ tokensIn?: number;
17
+ tokensOut?: number;
18
+ costUsd?: number;
19
+ finishReason?: string;
20
+ toolName?: string;
21
+ toolInputHash?: string;
22
+ toolOutputHash?: string;
23
+ toolInputPreview?: string;
24
+ sessionCostUsd?: number;
25
+ sessionCapUsd?: number;
26
+ sessionPct?: number;
27
+ fromModel?: string;
28
+ toModel?: string;
29
+ switchReason?: string;
30
+ memoryLayer?: 'semantic' | 'episodic' | 'procedural';
31
+ memoryKeysAccessed?: string[];
32
+ }
33
+ export interface TraceEvent {
34
+ traceId: string;
35
+ sessionId: string;
36
+ parentTraceId?: string;
37
+ agentId?: string;
38
+ sequence: number;
39
+ timestamp: number;
40
+ eventType: TraceEventType;
41
+ durationMs?: number;
42
+ error?: {
43
+ code: string;
44
+ message: string;
45
+ retryable: boolean;
46
+ };
47
+ payload: TracePayload;
48
+ }
49
+ export interface SessionGraph {
50
+ sessionId: string;
51
+ rootTraceId: string;
52
+ startedAt: number;
53
+ endedAt?: number;
54
+ nodes: Array<{
55
+ id: string;
56
+ type: 'request' | 'tool-call' | 'subagent';
57
+ label: string;
58
+ startedAt: number;
59
+ durationMs?: number;
60
+ costUsd?: number;
61
+ outcome?: 'success' | 'failure' | 'denied';
62
+ }>;
63
+ edges: Array<{
64
+ from: string;
65
+ to: string;
66
+ type: 'spawned' | 'called' | 'replied';
67
+ timestamp: number;
68
+ }>;
69
+ }
70
+ export interface TracesConfig {
71
+ enabled: boolean;
72
+ /** Store full request bodies for replay (default: false — hashes only) */
73
+ storeFullRequests: boolean;
74
+ retentionDays: number;
75
+ directory: string;
76
+ maxDiskMb: number;
77
+ }
78
+ export interface ReplayResult {
79
+ originalTraceId: string;
80
+ replayTraceId: string;
81
+ matchScore: number;
82
+ diffs: Array<{
83
+ field: string;
84
+ original: unknown;
85
+ replayed: unknown;
86
+ }>;
87
+ }
88
+ export interface ExportOptions {
89
+ format: 'jsonl' | 'csv' | 'markdown' | 'traceops';
90
+ sessionIds?: string[];
91
+ fromTimestamp?: number;
92
+ toTimestamp?: number;
93
+ includeToolInputs?: boolean;
94
+ outputPath?: string;
95
+ }
96
+ /** Input type for write() — partial event (traceId, sessionId, sequence, timestamp filled in) */
97
+ export interface WriteEventInput {
98
+ eventType: TraceEventType;
99
+ parentTraceId?: string;
100
+ agentId?: string;
101
+ durationMs?: number;
102
+ error?: {
103
+ code: string;
104
+ message: string;
105
+ retryable: boolean;
106
+ };
107
+ payload?: TracePayload;
108
+ }
109
+ export declare function defaultTracesConfig(): TracesConfig;
110
+ export declare class TraceWriter {
111
+ private static _instance;
112
+ private db;
113
+ private readonly config;
114
+ private readonly baseDir;
115
+ private readonly sessionSequences;
116
+ private readonly traceEventCounts;
117
+ private readonly traceStartTimes;
118
+ private readonly sessionGraphs;
119
+ private readonly sessionIdleTimers;
120
+ private readonly knownSessions;
121
+ private constructor();
122
+ static getInstance(config?: TracesConfig): TraceWriter;
123
+ /** Replace the singleton (for testing / config reload) */
124
+ static reset(): void;
125
+ isEnabled(): boolean;
126
+ private initDb;
127
+ private traceFilePath;
128
+ private traceRelPath;
129
+ /** Estimate total size of baseDir in bytes (best-effort, non-recursive to keep it fast). */
130
+ private estimateDirSizeBytes;
131
+ /** Returns true if writing is allowed under the maxDiskMb cap. */
132
+ private isDiskBudgetOk;
133
+ private nextSequence;
134
+ private resetIdleTimer;
135
+ private updateGraph;
136
+ write(sessionId: string, traceId: string, input: WriteEventInput): Promise<void>;
137
+ private writeEventSync;
138
+ finalizeTrace(traceId: string, sessionId: string, meta: {
139
+ costUsd?: number;
140
+ modelUsed?: string;
141
+ durationMs?: number;
142
+ }): Promise<void>;
143
+ endSession(sessionId: string): Promise<void>;
144
+ private upsertSessionGraphRecord;
145
+ getRecentTraces(limit?: number): unknown[];
146
+ getSessionGraph(sessionId: string): SessionGraph | null;
147
+ /** Read raw JSONL events for a trace by traceId. Returns parsed events array. */
148
+ getTraceEvents(traceId: string): TraceEvent[];
149
+ export(options: ExportOptions): Promise<string>;
150
+ replay(_traceId: string): Promise<ReplayResult>;
151
+ pruneOldFiles(): void;
152
+ shutdown(): void;
153
+ }
154
+ export declare function sha256Hex(input: string): string;
155
+ //# sourceMappingURL=trace-writer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace-writer.d.ts","sourceRoot":"","sources":["../src/trace-writer.ts"],"names":[],"mappings":"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"}