proofscan 0.2.0 → 0.3.1

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.
Files changed (102) hide show
  1. package/README.md +205 -281
  2. package/dist/analyzers/IAnalyzer.d.ts +87 -0
  3. package/dist/analyzers/IAnalyzer.d.ts.map +1 -0
  4. package/dist/analyzers/IAnalyzer.js +48 -0
  5. package/dist/analyzers/IAnalyzer.js.map +1 -0
  6. package/dist/analyzers/NoopAnalyzer.d.ts +24 -0
  7. package/dist/analyzers/NoopAnalyzer.d.ts.map +1 -0
  8. package/dist/analyzers/NoopAnalyzer.js +50 -0
  9. package/dist/analyzers/NoopAnalyzer.js.map +1 -0
  10. package/dist/analyzers/index.d.ts +13 -0
  11. package/dist/analyzers/index.d.ts.map +1 -0
  12. package/dist/analyzers/index.js +23 -0
  13. package/dist/analyzers/index.js.map +1 -0
  14. package/dist/cli.d.ts +15 -1
  15. package/dist/cli.d.ts.map +1 -1
  16. package/dist/cli.js +131 -9
  17. package/dist/cli.js.map +1 -1
  18. package/dist/commands/events.d.ts +7 -0
  19. package/dist/commands/events.d.ts.map +1 -0
  20. package/dist/commands/events.js +185 -0
  21. package/dist/commands/events.js.map +1 -0
  22. package/dist/commands/explore.d.ts +9 -0
  23. package/dist/commands/explore.d.ts.map +1 -0
  24. package/dist/commands/explore.js +345 -0
  25. package/dist/commands/explore.js.map +1 -0
  26. package/dist/commands/index.d.ts +5 -0
  27. package/dist/commands/index.d.ts.map +1 -1
  28. package/dist/commands/index.js +7 -0
  29. package/dist/commands/index.js.map +1 -1
  30. package/dist/commands/monitor.d.ts +1 -0
  31. package/dist/commands/monitor.d.ts.map +1 -1
  32. package/dist/commands/monitor.js +70 -12
  33. package/dist/commands/monitor.js.map +1 -1
  34. package/dist/commands/scan.d.ts.map +1 -1
  35. package/dist/commands/scan.js +12 -7
  36. package/dist/commands/scan.js.map +1 -1
  37. package/dist/commands/status.d.ts +7 -0
  38. package/dist/commands/status.d.ts.map +1 -0
  39. package/dist/commands/status.js +108 -0
  40. package/dist/commands/status.js.map +1 -0
  41. package/dist/commands/tree.d.ts +7 -0
  42. package/dist/commands/tree.d.ts.map +1 -0
  43. package/dist/commands/tree.js +184 -0
  44. package/dist/commands/tree.js.map +1 -0
  45. package/dist/commands/view.d.ts +9 -0
  46. package/dist/commands/view.d.ts.map +1 -0
  47. package/dist/commands/view.js +210 -0
  48. package/dist/commands/view.js.map +1 -0
  49. package/dist/db/connection.d.ts.map +1 -1
  50. package/dist/db/connection.js +45 -4
  51. package/dist/db/connection.js.map +1 -1
  52. package/dist/db/events-store.d.ts +3 -0
  53. package/dist/db/events-store.d.ts.map +1 -1
  54. package/dist/db/events-store.js +6 -3
  55. package/dist/db/events-store.js.map +1 -1
  56. package/dist/db/schema.d.ts +8 -2
  57. package/dist/db/schema.d.ts.map +1 -1
  58. package/dist/db/schema.js +29 -3
  59. package/dist/db/schema.js.map +1 -1
  60. package/dist/db/types.d.ts +3 -0
  61. package/dist/db/types.d.ts.map +1 -1
  62. package/dist/eventline/index.d.ts +8 -0
  63. package/dist/eventline/index.d.ts.map +1 -0
  64. package/dist/eventline/index.js +8 -0
  65. package/dist/eventline/index.js.map +1 -0
  66. package/dist/eventline/normalizer.d.ts +79 -0
  67. package/dist/eventline/normalizer.d.ts.map +1 -0
  68. package/dist/eventline/normalizer.js +418 -0
  69. package/dist/eventline/normalizer.js.map +1 -0
  70. package/dist/eventline/schema-discovery.d.ts +79 -0
  71. package/dist/eventline/schema-discovery.d.ts.map +1 -0
  72. package/dist/eventline/schema-discovery.js +154 -0
  73. package/dist/eventline/schema-discovery.js.map +1 -0
  74. package/dist/eventline/store.d.ts +88 -0
  75. package/dist/eventline/store.d.ts.map +1 -0
  76. package/dist/eventline/store.js +358 -0
  77. package/dist/eventline/store.js.map +1 -0
  78. package/dist/eventline/types.d.ts +112 -0
  79. package/dist/eventline/types.d.ts.map +1 -0
  80. package/dist/eventline/types.js +67 -0
  81. package/dist/eventline/types.js.map +1 -0
  82. package/dist/protocols/A2aAdapter.d.ts +39 -0
  83. package/dist/protocols/A2aAdapter.d.ts.map +1 -0
  84. package/dist/protocols/A2aAdapter.js +48 -0
  85. package/dist/protocols/A2aAdapter.js.map +1 -0
  86. package/dist/protocols/IProtocolAdapter.d.ts +106 -0
  87. package/dist/protocols/IProtocolAdapter.d.ts.map +1 -0
  88. package/dist/protocols/IProtocolAdapter.js +57 -0
  89. package/dist/protocols/IProtocolAdapter.js.map +1 -0
  90. package/dist/protocols/McpAdapter.d.ts +23 -0
  91. package/dist/protocols/McpAdapter.d.ts.map +1 -0
  92. package/dist/protocols/McpAdapter.js +162 -0
  93. package/dist/protocols/McpAdapter.js.map +1 -0
  94. package/dist/protocols/index.d.ts +14 -0
  95. package/dist/protocols/index.d.ts.map +1 -0
  96. package/dist/protocols/index.js +24 -0
  97. package/dist/protocols/index.js.map +1 -0
  98. package/dist/scanner/index.d.ts +1 -0
  99. package/dist/scanner/index.d.ts.map +1 -1
  100. package/dist/scanner/index.js +97 -60
  101. package/dist/scanner/index.js.map +1 -1
  102. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-discovery.js","sourceRoot":"","sources":["../../src/eventline/schema-discovery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * EventLine Store - unified data access layer
3
+ *
4
+ * This provides a higher-level API for fetching EventLine data,
5
+ * abstracting away the underlying database structure.
6
+ */
7
+ import type { EventLine, TreeNode } from './types.js';
8
+ import type { Event, SessionWithStats, RpcCall, Proof } from '../db/types.js';
9
+ import { type SchemaInfo } from './schema-discovery.js';
10
+ export interface ViewOptions {
11
+ limit?: number;
12
+ since?: string | number;
13
+ errors?: boolean;
14
+ method?: string;
15
+ connector?: string;
16
+ session?: string;
17
+ includeSessionEvents?: boolean;
18
+ }
19
+ export interface TreeOptions {
20
+ sessions?: number;
21
+ rpc?: number;
22
+ session?: string;
23
+ rpcAll?: boolean;
24
+ method?: string;
25
+ status?: 'ok' | 'err' | 'all';
26
+ compact?: boolean;
27
+ idsOnly?: boolean;
28
+ since?: string | number;
29
+ }
30
+ export declare class EventLineStore {
31
+ private eventsStore;
32
+ private proofsStore;
33
+ private configDir;
34
+ private schemaInfo?;
35
+ constructor(configDir: string);
36
+ /**
37
+ * Discover and cache schema info
38
+ */
39
+ getSchema(): SchemaInfo;
40
+ /**
41
+ * Parse "since" parameter to epoch ms
42
+ */
43
+ private parseSince;
44
+ /**
45
+ * Get recent events as EventLines (for view command)
46
+ */
47
+ getRecentEvents(options?: ViewOptions): EventLine[];
48
+ /**
49
+ * Build tree structure for connector → session → rpc
50
+ */
51
+ buildTree(options?: TreeOptions): TreeNode[];
52
+ /**
53
+ * Get all connectors
54
+ */
55
+ getConnectors(): Array<{
56
+ id: string;
57
+ session_count: number;
58
+ latest_session?: string;
59
+ }>;
60
+ /**
61
+ * Get sessions for a connector
62
+ */
63
+ getSessions(connectorId?: string, limit?: number): SessionWithStats[];
64
+ /**
65
+ * Get RPC calls for a session
66
+ */
67
+ getRpcCalls(sessionId: string): RpcCall[];
68
+ /**
69
+ * Get events for a session
70
+ */
71
+ getSessionEvents(sessionId: string, limit?: number): EventLine[];
72
+ /**
73
+ * Get raw event details
74
+ */
75
+ getRawEvent(sessionId: string, rpcId: string): {
76
+ request?: Event;
77
+ response?: Event;
78
+ } | null;
79
+ /**
80
+ * Get proofs for a session
81
+ */
82
+ getProofs(sessionId: string): Proof[];
83
+ /**
84
+ * Get session by ID (supports partial match)
85
+ */
86
+ findSession(partialId: string): SessionWithStats | null;
87
+ }
88
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/eventline/store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAWH,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,KAAK,EAAE,KAAK,EAAW,gBAAgB,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvF,OAAO,EAAkB,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExE,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,IAAI,GAAG,KAAK,GAAG,KAAK,CAAC;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACzB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAC,CAAa;gBAEpB,SAAS,EAAE,MAAM;IAM7B;;OAEG;IACH,SAAS,IAAI,UAAU;IAQvB;;OAEG;IACH,OAAO,CAAC,UAAU;IAwBlB;;OAEG;IACH,eAAe,CAAC,OAAO,GAAE,WAAgB,GAAG,SAAS,EAAE;IA2GvD;;OAEG;IACH,SAAS,CAAC,OAAO,GAAE,WAAgB,GAAG,QAAQ,EAAE;IA2JhD;;OAEG;IACH,aAAa,IAAI,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAetF;;OAEG;IACH,WAAW,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,gBAAgB,EAAE;IAOrE;;OAEG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,EAAE;IAIzC;;OAEG;IACH,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,EAAE;IAkBhE;;OAEG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG;QAAE,OAAO,CAAC,EAAE,KAAK,CAAC;QAAC,QAAQ,CAAC,EAAE,KAAK,CAAA;KAAE,GAAG,IAAI;IAW3F;;OAEG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,KAAK,EAAE;IAIrC;;OAEG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI;CAMxD"}
@@ -0,0 +1,358 @@
1
+ /**
2
+ * EventLine Store - unified data access layer
3
+ *
4
+ * This provides a higher-level API for fetching EventLine data,
5
+ * abstracting away the underlying database structure.
6
+ */
7
+ import { EventsStore } from '../db/events-store.js';
8
+ import { ProofsStore } from '../db/proofs-store.js';
9
+ import { getEventsDb } from '../db/connection.js';
10
+ import { normalizeEvent, createSessionStartEvent, createSessionEndEvent, parseTimestamp, } from './normalizer.js';
11
+ import { discoverSchema } from './schema-discovery.js';
12
+ export class EventLineStore {
13
+ eventsStore;
14
+ proofsStore;
15
+ configDir;
16
+ schemaInfo;
17
+ constructor(configDir) {
18
+ this.configDir = configDir;
19
+ this.eventsStore = new EventsStore(configDir);
20
+ this.proofsStore = new ProofsStore(configDir);
21
+ }
22
+ /**
23
+ * Discover and cache schema info
24
+ */
25
+ getSchema() {
26
+ if (!this.schemaInfo) {
27
+ const db = getEventsDb(this.configDir);
28
+ this.schemaInfo = discoverSchema(db);
29
+ }
30
+ return this.schemaInfo;
31
+ }
32
+ /**
33
+ * Parse "since" parameter to epoch ms
34
+ */
35
+ parseSince(since) {
36
+ if (!since)
37
+ return undefined;
38
+ if (typeof since === 'number')
39
+ return since;
40
+ // Relative time: 24h, 7d, 1w
41
+ const relMatch = since.match(/^(\d+)(h|d|w|m)$/);
42
+ if (relMatch) {
43
+ const [, num, unit] = relMatch;
44
+ const n = parseInt(num, 10);
45
+ const now = Date.now();
46
+ switch (unit) {
47
+ case 'h': return now - n * 60 * 60 * 1000;
48
+ case 'd': return now - n * 24 * 60 * 60 * 1000;
49
+ case 'w': return now - n * 7 * 24 * 60 * 60 * 1000;
50
+ case 'm': return now - n * 30 * 24 * 60 * 60 * 1000;
51
+ }
52
+ }
53
+ // ISO date
54
+ const date = new Date(since);
55
+ return isNaN(date.getTime()) ? undefined : date.getTime();
56
+ }
57
+ /**
58
+ * Get recent events as EventLines (for view command)
59
+ */
60
+ getRecentEvents(options = {}) {
61
+ const limit = options.limit || 20;
62
+ const sinceMs = this.parseSince(options.since);
63
+ // Get sessions and RPC calls for context
64
+ const sessionsMap = new Map();
65
+ const rpcCallsMap = new Map();
66
+ // Get sessions
67
+ let sessions;
68
+ if (options.connector) {
69
+ sessions = this.eventsStore.getSessionsByConnector(options.connector, 100);
70
+ }
71
+ else {
72
+ sessions = this.eventsStore.getAllSessions(100);
73
+ }
74
+ for (const s of sessions) {
75
+ sessionsMap.set(s.session_id, s);
76
+ }
77
+ // Get events
78
+ const db = getEventsDb(this.configDir);
79
+ let sql = `
80
+ SELECT e.*, s.connector_id
81
+ FROM events e
82
+ JOIN sessions s ON e.session_id = s.session_id
83
+ WHERE 1=1
84
+ `;
85
+ const params = [];
86
+ if (options.connector) {
87
+ sql += ` AND s.connector_id = ?`;
88
+ params.push(options.connector);
89
+ }
90
+ if (options.session) {
91
+ sql += ` AND e.session_id LIKE ?`;
92
+ params.push(options.session + '%');
93
+ }
94
+ if (sinceMs) {
95
+ const sinceIso = new Date(sinceMs).toISOString();
96
+ sql += ` AND e.ts >= ?`;
97
+ params.push(sinceIso);
98
+ }
99
+ sql += ` ORDER BY e.ts DESC LIMIT ?`;
100
+ params.push(limit * 2); // Get more to filter later
101
+ const events = db.prepare(sql).all(...params);
102
+ // Get RPC calls for these events
103
+ const sessionIds = new Set(events.map(e => e.session_id));
104
+ for (const sessionId of sessionIds) {
105
+ const rpcs = this.eventsStore.getRpcCallsBySession(sessionId);
106
+ for (const rpc of rpcs) {
107
+ rpcCallsMap.set(`${sessionId}:${rpc.rpc_id}`, rpc);
108
+ }
109
+ }
110
+ // Normalize events
111
+ let eventLines = [];
112
+ for (const event of events) {
113
+ const session = sessionsMap.get(event.session_id);
114
+ const rpcCall = event.rpc_id ? rpcCallsMap.get(`${event.session_id}:${event.rpc_id}`) : undefined;
115
+ const line = normalizeEvent(event, session, rpcCall);
116
+ line.connector_id = event.connector_id; // Ensure connector_id is set
117
+ eventLines.push(line);
118
+ }
119
+ // Apply filters
120
+ if (options.errors) {
121
+ eventLines = eventLines.filter(e => e.status === 'ERR');
122
+ }
123
+ if (options.method) {
124
+ const pattern = options.method.toLowerCase();
125
+ eventLines = eventLines.filter(e => e.label.toLowerCase().includes(pattern));
126
+ }
127
+ // Add session start/end events if requested
128
+ if (options.includeSessionEvents) {
129
+ const sessionEvents = [];
130
+ for (const session of sessions) {
131
+ if (sinceMs) {
132
+ const startMs = parseTimestamp(session.started_at);
133
+ if (startMs < sinceMs)
134
+ continue;
135
+ }
136
+ sessionEvents.push(createSessionStartEvent(session));
137
+ if (session.ended_at) {
138
+ sessionEvents.push(createSessionEndEvent(session));
139
+ }
140
+ }
141
+ eventLines = [...eventLines, ...sessionEvents];
142
+ }
143
+ // Sort by timestamp descending and limit
144
+ eventLines.sort((a, b) => b.ts_ms - a.ts_ms);
145
+ eventLines = eventLines.slice(0, limit);
146
+ // Reverse to chronological order for display
147
+ eventLines.reverse();
148
+ return eventLines;
149
+ }
150
+ /**
151
+ * Build tree structure for connector → session → rpc
152
+ */
153
+ buildTree(options = {}) {
154
+ const sessionsLimit = options.sessions || 5;
155
+ const rpcLimit = options.rpc || 10;
156
+ const sinceMs = this.parseSince(options.since);
157
+ // Get connectors (from sessions)
158
+ const db = getEventsDb(this.configDir);
159
+ const connectors = db.prepare(`
160
+ SELECT DISTINCT connector_id FROM sessions ORDER BY connector_id
161
+ `).all();
162
+ const tree = [];
163
+ for (const { connector_id } of connectors) {
164
+ // Get sessions for this connector
165
+ let sessionSql = `
166
+ SELECT s.*,
167
+ (SELECT COUNT(*) FROM events WHERE session_id = s.session_id) as event_count,
168
+ (SELECT COUNT(*) FROM rpc_calls WHERE session_id = s.session_id) as rpc_count
169
+ FROM sessions s
170
+ WHERE s.connector_id = ?
171
+ `;
172
+ const sessionParams = [connector_id];
173
+ if (sinceMs) {
174
+ const sinceIso = new Date(sinceMs).toISOString();
175
+ sessionSql += ` AND s.started_at >= ?`;
176
+ sessionParams.push(sinceIso);
177
+ }
178
+ if (options.session) {
179
+ sessionSql += ` AND s.session_id LIKE ?`;
180
+ sessionParams.push(options.session + '%');
181
+ }
182
+ sessionSql += ` ORDER BY s.started_at DESC LIMIT ?`;
183
+ sessionParams.push(sessionsLimit);
184
+ const sessions = db.prepare(sessionSql).all(...sessionParams);
185
+ if (sessions.length === 0)
186
+ continue;
187
+ // Build connector node
188
+ const connectorNode = {
189
+ type: 'connector',
190
+ id: connector_id,
191
+ label: connector_id,
192
+ meta: {
193
+ session_count: sessions.length,
194
+ },
195
+ children: [],
196
+ };
197
+ for (const session of sessions) {
198
+ // Get RPC calls for this session
199
+ let rpcSql = `
200
+ SELECT * FROM rpc_calls WHERE session_id = ?
201
+ `;
202
+ const rpcParams = [session.session_id];
203
+ if (options.method) {
204
+ rpcSql += ` AND method LIKE ?`;
205
+ rpcParams.push('%' + options.method + '%');
206
+ }
207
+ if (options.status === 'ok') {
208
+ rpcSql += ` AND success = 1`;
209
+ }
210
+ else if (options.status === 'err') {
211
+ rpcSql += ` AND (success = 0 OR success IS NULL)`;
212
+ }
213
+ rpcSql += ` ORDER BY request_ts DESC`;
214
+ if (!options.rpcAll) {
215
+ rpcSql += ` LIMIT ?`;
216
+ rpcParams.push(rpcLimit);
217
+ }
218
+ const rpcs = db.prepare(rpcSql).all(...rpcParams);
219
+ // Calculate session duration
220
+ let durationMs;
221
+ if (session.ended_at) {
222
+ durationMs = parseTimestamp(session.ended_at) - parseTimestamp(session.started_at);
223
+ }
224
+ // Build session node
225
+ const sessionNode = {
226
+ type: 'session',
227
+ id: session.session_id,
228
+ label: options.idsOnly
229
+ ? session.session_id.slice(0, 8)
230
+ : `${session.session_id.slice(0, 8)}... (${session.rpc_count || 0} rpcs, ${session.event_count || 0} events)`,
231
+ meta: {
232
+ connector_id: session.connector_id,
233
+ started_at: session.started_at,
234
+ ended_at: session.ended_at,
235
+ exit_reason: session.exit_reason,
236
+ duration_ms: durationMs,
237
+ rpc_count: session.rpc_count,
238
+ event_count: session.event_count,
239
+ },
240
+ children: [],
241
+ };
242
+ // Add RPC nodes
243
+ for (const rpc of rpcs) {
244
+ let latencyMs;
245
+ if (rpc.response_ts) {
246
+ latencyMs = parseTimestamp(rpc.response_ts) - parseTimestamp(rpc.request_ts);
247
+ }
248
+ const statusSymbol = rpc.success === 1 ? '✓' : rpc.success === 0 ? '✗' : '?';
249
+ const rpcNode = {
250
+ type: 'rpc',
251
+ id: rpc.rpc_id,
252
+ label: options.idsOnly
253
+ ? `${rpc.method} (${rpc.rpc_id})`
254
+ : `${statusSymbol} ${rpc.method} (id=${rpc.rpc_id}${latencyMs ? `, ${latencyMs}ms` : ''})`,
255
+ meta: {
256
+ method: rpc.method,
257
+ success: rpc.success,
258
+ error_code: rpc.error_code,
259
+ latency_ms: latencyMs,
260
+ request_ts: rpc.request_ts,
261
+ response_ts: rpc.response_ts,
262
+ },
263
+ };
264
+ sessionNode.children.push(rpcNode);
265
+ }
266
+ // Add proof summary if available
267
+ const proofs = this.proofsStore.getProofsBySession(session.session_id);
268
+ if (proofs.length > 0) {
269
+ sessionNode.children.push({
270
+ type: 'proof',
271
+ id: 'proofs',
272
+ label: `[${proofs.length} proof(s)]`,
273
+ meta: {
274
+ count: proofs.length,
275
+ latest: proofs[0]?.created_at,
276
+ },
277
+ });
278
+ }
279
+ connectorNode.children.push(sessionNode);
280
+ }
281
+ tree.push(connectorNode);
282
+ }
283
+ return tree;
284
+ }
285
+ /**
286
+ * Get all connectors
287
+ */
288
+ getConnectors() {
289
+ const db = getEventsDb(this.configDir);
290
+ const result = db.prepare(`
291
+ SELECT
292
+ connector_id as id,
293
+ COUNT(*) as session_count,
294
+ MAX(started_at) as latest_session
295
+ FROM sessions
296
+ GROUP BY connector_id
297
+ ORDER BY latest_session DESC
298
+ `).all();
299
+ return result;
300
+ }
301
+ /**
302
+ * Get sessions for a connector
303
+ */
304
+ getSessions(connectorId, limit) {
305
+ if (connectorId) {
306
+ return this.eventsStore.getSessionsByConnector(connectorId, limit);
307
+ }
308
+ return this.eventsStore.getAllSessions(limit);
309
+ }
310
+ /**
311
+ * Get RPC calls for a session
312
+ */
313
+ getRpcCalls(sessionId) {
314
+ return this.eventsStore.getRpcCallsBySession(sessionId);
315
+ }
316
+ /**
317
+ * Get events for a session
318
+ */
319
+ getSessionEvents(sessionId, limit) {
320
+ const events = this.eventsStore.getEventsBySession(sessionId, limit);
321
+ const session = this.eventsStore.getSession(sessionId);
322
+ const rpcs = this.eventsStore.getRpcCallsBySession(sessionId);
323
+ const rpcMap = new Map();
324
+ for (const rpc of rpcs) {
325
+ rpcMap.set(`${sessionId}:${rpc.rpc_id}`, rpc);
326
+ }
327
+ const eventLines = events.map(e => {
328
+ const rpcCall = e.rpc_id ? rpcMap.get(`${sessionId}:${e.rpc_id}`) : undefined;
329
+ return normalizeEvent(e, session || undefined, rpcCall);
330
+ });
331
+ return eventLines;
332
+ }
333
+ /**
334
+ * Get raw event details
335
+ */
336
+ getRawEvent(sessionId, rpcId) {
337
+ const events = this.eventsStore.getEventsBySession(sessionId);
338
+ const request = events.find(e => e.rpc_id === rpcId && e.kind === 'request');
339
+ const response = events.find(e => e.rpc_id === rpcId && e.kind === 'response');
340
+ if (!request && !response)
341
+ return null;
342
+ return { request, response };
343
+ }
344
+ /**
345
+ * Get proofs for a session
346
+ */
347
+ getProofs(sessionId) {
348
+ return this.proofsStore.getProofsBySession(sessionId);
349
+ }
350
+ /**
351
+ * Get session by ID (supports partial match)
352
+ */
353
+ findSession(partialId) {
354
+ const sessions = this.eventsStore.getAllSessions();
355
+ return sessions.find(s => s.session_id === partialId || s.session_id.startsWith(partialId)) || null;
356
+ }
357
+ }
358
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/eventline/store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,qBAAqB,EACrB,cAAc,GACf,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,cAAc,EAAmB,MAAM,uBAAuB,CAAC;AAwBxE,MAAM,OAAO,cAAc;IACjB,WAAW,CAAc;IACzB,WAAW,CAAc;IACzB,SAAS,CAAS;IAClB,UAAU,CAAc;IAEhC,YAAY,SAAiB;QAC3B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,SAAS,CAAC,CAAC;QAC9C,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,SAAS,CAAC,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,SAAS;QACP,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,MAAM,EAAE,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACvC,IAAI,CAAC,UAAU,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED;;OAEG;IACK,UAAU,CAAC,KAAuB;QACxC,IAAI,CAAC,KAAK;YAAE,OAAO,SAAS,CAAC;QAE7B,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QAE5C,6BAA6B;QAC7B,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACjD,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,QAAQ,CAAC;YAC/B,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,QAAQ,IAAI,EAAE,CAAC;gBACb,KAAK,GAAG,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;gBAC1C,KAAK,GAAG,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;gBAC/C,KAAK,GAAG,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;gBACnD,KAAK,GAAG,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;YACtD,CAAC;QACH,CAAC;QAED,WAAW;QACX,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7B,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;IAC5D,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,UAAuB,EAAE;QACvC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAE/C,yCAAyC;QACzC,MAAM,WAAW,GAAG,IAAI,GAAG,EAA4B,CAAC;QACxD,MAAM,WAAW,GAAG,IAAI,GAAG,EAAmB,CAAC;QAE/C,eAAe;QACf,IAAI,QAA4B,CAAC;QACjC,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QAC7E,CAAC;aAAM,CAAC;YACN,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QAClD,CAAC;QAED,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACzB,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QACnC,CAAC;QAED,aAAa;QACb,MAAM,EAAE,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACvC,IAAI,GAAG,GAAG;;;;;KAKT,CAAC;QACF,MAAM,MAAM,GAAc,EAAE,CAAC;QAE7B,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,GAAG,IAAI,yBAAyB,CAAC;YACjC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACjC,CAAC;QAED,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,GAAG,IAAI,0BAA0B,CAAC;YAClC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC;QACrC,CAAC;QAED,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;YACjD,GAAG,IAAI,gBAAgB,CAAC;YACxB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxB,CAAC;QAED,GAAG,IAAI,6BAA6B,CAAC;QACrC,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,2BAA2B;QAEnD,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAA4C,CAAC;QAEzF,iCAAiC;QACjC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;QAC1D,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;YAC9D,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,WAAW,CAAC,GAAG,CAAC,GAAG,SAAS,IAAI,GAAG,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC;YACrD,CAAC;QACH,CAAC;QAED,mBAAmB;QACnB,IAAI,UAAU,GAAgB,EAAE,CAAC;QAEjC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAClD,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAClG,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YACrD,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC,6BAA6B;YACrE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;QAED,gBAAgB;QAChB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC;QAC1D,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;YAC7C,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QAC/E,CAAC;QAED,4CAA4C;QAC5C,IAAI,OAAO,CAAC,oBAAoB,EAAE,CAAC;YACjC,MAAM,aAAa,GAAgB,EAAE,CAAC;YACtC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,IAAI,OAAO,EAAE,CAAC;oBACZ,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;oBACnD,IAAI,OAAO,GAAG,OAAO;wBAAE,SAAS;gBAClC,CAAC;gBACD,aAAa,CAAC,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC,CAAC;gBACrD,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;oBACrB,aAAa,CAAC,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC;gBACrD,CAAC;YACH,CAAC;YACD,UAAU,GAAG,CAAC,GAAG,UAAU,EAAE,GAAG,aAAa,CAAC,CAAC;QACjD,CAAC;QAED,yCAAyC;QACzC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;QAC7C,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAExC,6CAA6C;QAC7C,UAAU,CAAC,OAAO,EAAE,CAAC;QAErB,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,UAAuB,EAAE;QACjC,MAAM,aAAa,GAAG,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC;QAC5C,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAE/C,iCAAiC;QACjC,MAAM,EAAE,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACvC,MAAM,UAAU,GAAG,EAAE,CAAC,OAAO,CAAC;;KAE7B,CAAC,CAAC,GAAG,EAAqC,CAAC;QAE5C,MAAM,IAAI,GAAe,EAAE,CAAC;QAE5B,KAAK,MAAM,EAAE,YAAY,EAAE,IAAI,UAAU,EAAE,CAAC;YAC1C,kCAAkC;YAClC,IAAI,UAAU,GAAG;;;;;;OAMhB,CAAC;YACF,MAAM,aAAa,GAAc,CAAC,YAAY,CAAC,CAAC;YAEhD,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;gBACjD,UAAU,IAAI,wBAAwB,CAAC;gBACvC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC/B,CAAC;YAED,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,UAAU,IAAI,0BAA0B,CAAC;gBACzC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC;YAC5C,CAAC;YAED,UAAU,IAAI,qCAAqC,CAAC;YACpD,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAElC,MAAM,QAAQ,GAAG,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,GAAG,aAAa,CAAuB,CAAC;YAEpF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YAEpC,uBAAuB;YACvB,MAAM,aAAa,GAAa;gBAC9B,IAAI,EAAE,WAAW;gBACjB,EAAE,EAAE,YAAY;gBAChB,KAAK,EAAE,YAAY;gBACnB,IAAI,EAAE;oBACJ,aAAa,EAAE,QAAQ,CAAC,MAAM;iBAC/B;gBACD,QAAQ,EAAE,EAAE;aACb,CAAC;YAEF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,iCAAiC;gBACjC,IAAI,MAAM,GAAG;;SAEZ,CAAC;gBACF,MAAM,SAAS,GAAc,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;gBAElD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;oBACnB,MAAM,IAAI,oBAAoB,CAAC;oBAC/B,SAAS,CAAC,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;gBAC7C,CAAC;gBAED,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;oBAC5B,MAAM,IAAI,kBAAkB,CAAC;gBAC/B,CAAC;qBAAM,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;oBACpC,MAAM,IAAI,uCAAuC,CAAC;gBACpD,CAAC;gBAED,MAAM,IAAI,2BAA2B,CAAC;gBAEtC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;oBACpB,MAAM,IAAI,UAAU,CAAC;oBACrB,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC3B,CAAC;gBAED,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS,CAAc,CAAC;gBAE/D,6BAA6B;gBAC7B,IAAI,UAA8B,CAAC;gBACnC,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;oBACrB,UAAU,GAAG,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,cAAc,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;gBACrF,CAAC;gBAED,qBAAqB;gBACrB,MAAM,WAAW,GAAa;oBAC5B,IAAI,EAAE,SAAS;oBACf,EAAE,EAAE,OAAO,CAAC,UAAU;oBACtB,KAAK,EAAE,OAAO,CAAC,OAAO;wBACpB,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;wBAChC,CAAC,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,OAAO,CAAC,SAAS,IAAI,CAAC,UAAU,OAAO,CAAC,WAAW,IAAI,CAAC,UAAU;oBAC/G,IAAI,EAAE;wBACJ,YAAY,EAAE,OAAO,CAAC,YAAY;wBAClC,UAAU,EAAE,OAAO,CAAC,UAAU;wBAC9B,QAAQ,EAAE,OAAO,CAAC,QAAQ;wBAC1B,WAAW,EAAE,OAAO,CAAC,WAAW;wBAChC,WAAW,EAAE,UAAU;wBACvB,SAAS,EAAE,OAAO,CAAC,SAAS;wBAC5B,WAAW,EAAE,OAAO,CAAC,WAAW;qBACjC;oBACD,QAAQ,EAAE,EAAE;iBACb,CAAC;gBAEF,gBAAgB;gBAChB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;oBACvB,IAAI,SAA6B,CAAC;oBAClC,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;wBACpB,SAAS,GAAG,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;oBAC/E,CAAC;oBAED,MAAM,YAAY,GAAG,GAAG,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;oBAC7E,MAAM,OAAO,GAAa;wBACxB,IAAI,EAAE,KAAK;wBACX,EAAE,EAAE,GAAG,CAAC,MAAM;wBACd,KAAK,EAAE,OAAO,CAAC,OAAO;4BACpB,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,MAAM,GAAG;4BACjC,CAAC,CAAC,GAAG,YAAY,IAAI,GAAG,CAAC,MAAM,QAAQ,GAAG,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG;wBAC5F,IAAI,EAAE;4BACJ,MAAM,EAAE,GAAG,CAAC,MAAM;4BAClB,OAAO,EAAE,GAAG,CAAC,OAAO;4BACpB,UAAU,EAAE,GAAG,CAAC,UAAU;4BAC1B,UAAU,EAAE,SAAS;4BACrB,UAAU,EAAE,GAAG,CAAC,UAAU;4BAC1B,WAAW,EAAE,GAAG,CAAC,WAAW;yBAC7B;qBACF,CAAC;oBAEF,WAAW,CAAC,QAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACtC,CAAC;gBAED,iCAAiC;gBACjC,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;gBACvE,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACtB,WAAW,CAAC,QAAS,CAAC,IAAI,CAAC;wBACzB,IAAI,EAAE,OAAO;wBACb,EAAE,EAAE,QAAQ;wBACZ,KAAK,EAAE,IAAI,MAAM,CAAC,MAAM,YAAY;wBACpC,IAAI,EAAE;4BACJ,KAAK,EAAE,MAAM,CAAC,MAAM;4BACpB,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,UAAU;yBAC9B;qBACF,CAAC,CAAC;gBACL,CAAC;gBAED,aAAa,CAAC,QAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC5C,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC3B,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,aAAa;QACX,MAAM,EAAE,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACvC,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;;;KAQzB,CAAC,CAAC,GAAG,EAA0E,CAAC;QAEjF,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,WAAoB,EAAE,KAAc;QAC9C,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QACrE,CAAC;QACD,OAAO,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,SAAiB;QAC3B,OAAO,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;IAC1D,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,SAAiB,EAAE,KAAc;QAChD,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QACrE,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QACvD,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;QAE9D,MAAM,MAAM,GAAG,IAAI,GAAG,EAAmB,CAAC;QAC1C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,IAAI,GAAG,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC;QAChD,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YAChC,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC9E,OAAO,cAAc,CAAC,CAAC,EAAE,OAAO,IAAI,SAAS,EAAE,OAAO,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;QAEH,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,SAAiB,EAAE,KAAa;QAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QAE9D,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,KAAK,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;QAC7E,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,KAAK,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;QAE/E,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC;QAEvC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,SAAiB;QACzB,OAAO,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;IACxD,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,SAAiB;QAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC;QACnD,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CACvB,CAAC,CAAC,UAAU,KAAK,SAAS,IAAI,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,CACjE,IAAI,IAAI,CAAC;IACZ,CAAC;CACF"}
@@ -0,0 +1,112 @@
1
+ /**
2
+ * EventLine - Normalized event model for Phase 2.1
3
+ *
4
+ * This is the canonical internal representation used by view/tree/explore.
5
+ * Direction uses → / ← (MCP Client → MCP Server / MCP Server → MCP Client).
6
+ */
7
+ /**
8
+ * Direction: always from perspective of MCP protocol flow
9
+ * "→" = MCP Client → MCP Server
10
+ * "←" = MCP Server → MCP Client
11
+ */
12
+ export type EventLineDirection = '→' | '←';
13
+ /**
14
+ * Kind of event - fixed 6 types
15
+ */
16
+ export type EventLineKind = 'session_start' | 'session_end' | 'req' | 'res' | 'notify' | 'error';
17
+ /**
18
+ * Status of the event
19
+ */
20
+ export type EventLineStatus = 'OK' | 'ERR' | '-';
21
+ /**
22
+ * Normalized EventLine - the universal internal event format
23
+ * Phase 2.1: Added seq, summary, payload_hash for enhanced observation
24
+ */
25
+ export interface EventLine {
26
+ /** Timestamp in epoch milliseconds */
27
+ ts_ms: number;
28
+ /** Sequence number within session (monotonic, 1-based) */
29
+ seq?: number;
30
+ /** Event kind */
31
+ kind: EventLineKind;
32
+ /** Direction: → (client→server) or ← (server→client) */
33
+ direction?: EventLineDirection;
34
+ /** Label (method name or "session start"/"session end") */
35
+ label: string;
36
+ /** Human-readable summary (e.g., "tools/list → 5 tools") */
37
+ summary?: string;
38
+ /** Connector ID */
39
+ connector_id?: string;
40
+ /** Connector label (human-readable name) */
41
+ connector_label?: string;
42
+ /** Session ID */
43
+ session_id?: string;
44
+ /** RPC ID (JSON-RPC id field) */
45
+ rpc_id?: string | number;
46
+ /** Status */
47
+ status: EventLineStatus;
48
+ /** Error code if status is ERR */
49
+ error_code?: number | string;
50
+ /** Latency in milliseconds (for responses) */
51
+ latency_ms?: number;
52
+ /** Size in bytes */
53
+ size_bytes?: number;
54
+ /** SHA-256 hash of payload (first 16 chars) for deduplication */
55
+ payload_hash?: string;
56
+ /** Raw JSON string */
57
+ raw_json?: string;
58
+ /** Additional metadata (for unknown columns, etc.) */
59
+ meta?: Record<string, unknown>;
60
+ }
61
+ /**
62
+ * EventLinePair - Request/Response correlation for --pairs option
63
+ */
64
+ export interface EventLinePair {
65
+ /** RPC ID that links request and response */
66
+ rpc_id: string | number;
67
+ /** Method name */
68
+ method: string;
69
+ /** Request event */
70
+ request: EventLine;
71
+ /** Response event (may be missing if pending) */
72
+ response?: EventLine;
73
+ /** Total latency (response.ts_ms - request.ts_ms) */
74
+ latency_ms?: number;
75
+ /** Success status */
76
+ success: boolean;
77
+ }
78
+ /**
79
+ * TreeNode for hierarchical display
80
+ */
81
+ export interface TreeNode {
82
+ type: 'connector' | 'session' | 'rpc' | 'proof' | 'event';
83
+ id: string;
84
+ label: string;
85
+ meta?: Record<string, unknown>;
86
+ children?: TreeNode[];
87
+ }
88
+ /**
89
+ * Kind symbol mapping for display
90
+ */
91
+ export declare const KIND_SYMBOLS: Record<EventLineKind, string>;
92
+ /**
93
+ * Get display symbol for kind
94
+ */
95
+ export declare function getKindSymbol(kind: EventLineKind): string;
96
+ /**
97
+ * Format timestamp for display
98
+ */
99
+ export declare function formatTimestamp(ts_ms: number, fulltime?: boolean): string;
100
+ /**
101
+ * Format duration in human-readable format
102
+ */
103
+ export declare function formatDuration(ms: number): string;
104
+ /**
105
+ * Format bytes in human-readable format
106
+ */
107
+ export declare function formatBytes(bytes: number): string;
108
+ /**
109
+ * Shorten UUID for display (first 8 chars + ...)
110
+ */
111
+ export declare function shortenId(id: string, length?: number): string;
112
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/eventline/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * EventLine - Normalized event model for Phase 2.1
3
+ *
4
+ * This is the canonical internal representation used by view/tree/explore.
5
+ * Direction uses → / ← (MCP Client → MCP Server / MCP Server → MCP Client).
6
+ */
7
+ /**
8
+ * Kind symbol mapping for display
9
+ */
10
+ export const KIND_SYMBOLS = {
11
+ session_start: '▶',
12
+ session_end: '■',
13
+ req: '→',
14
+ res: '←',
15
+ notify: '•',
16
+ error: '✖',
17
+ };
18
+ /**
19
+ * Get display symbol for kind
20
+ */
21
+ export function getKindSymbol(kind) {
22
+ return KIND_SYMBOLS[kind] || '?';
23
+ }
24
+ /**
25
+ * Format timestamp for display
26
+ */
27
+ export function formatTimestamp(ts_ms, fulltime = false) {
28
+ const date = new Date(ts_ms);
29
+ const time = date.toTimeString().slice(0, 8); // HH:MM:SS
30
+ const ms = String(date.getMilliseconds()).padStart(3, '0');
31
+ if (fulltime) {
32
+ const dateStr = date.toISOString().slice(0, 10); // YYYY-MM-DD
33
+ return `${dateStr} ${time}.${ms}`;
34
+ }
35
+ return `${time}.${ms}`;
36
+ }
37
+ /**
38
+ * Format duration in human-readable format
39
+ */
40
+ export function formatDuration(ms) {
41
+ if (ms < 1000)
42
+ return `${ms}ms`;
43
+ if (ms < 60000)
44
+ return `${(ms / 1000).toFixed(1)}s`;
45
+ if (ms < 3600000)
46
+ return `${(ms / 60000).toFixed(1)}m`;
47
+ return `${(ms / 3600000).toFixed(1)}h`;
48
+ }
49
+ /**
50
+ * Format bytes in human-readable format
51
+ */
52
+ export function formatBytes(bytes) {
53
+ if (bytes < 1024)
54
+ return `${bytes}B`;
55
+ if (bytes < 1024 * 1024)
56
+ return `${(bytes / 1024).toFixed(1)}KB`;
57
+ return `${(bytes / (1024 * 1024)).toFixed(1)}MB`;
58
+ }
59
+ /**
60
+ * Shorten UUID for display (first 8 chars + ...)
61
+ */
62
+ export function shortenId(id, length = 8) {
63
+ if (id.length <= length)
64
+ return id;
65
+ return id.slice(0, length) + '...';
66
+ }
67
+ //# sourceMappingURL=types.js.map