sidekick-shared 0.23.1 → 0.24.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 (47) hide show
  1. package/README.md +134 -37
  2. package/dist/aggregation/EventAggregator.d.ts +5 -1
  3. package/dist/aggregation/EventAggregator.js +64 -131
  4. package/dist/aggregation/types.d.ts +3 -0
  5. package/dist/browser.d.ts +6 -0
  6. package/dist/browser.js +10 -1
  7. package/dist/context/sessionContext.js +8 -6
  8. package/dist/extractors/tokenUsage.js +1 -1
  9. package/dist/index.d.ts +11 -1
  10. package/dist/index.js +23 -7
  11. package/dist/modelInfo.d.ts +17 -7
  12. package/dist/modelInfo.js +5 -2
  13. package/dist/node.d.ts +4 -0
  14. package/dist/node.js +8 -1
  15. package/dist/observedSessionCollector.d.ts +71 -0
  16. package/dist/observedSessionCollector.js +179 -0
  17. package/dist/parsers/codexParser.js +32 -14
  18. package/dist/parsers/openCodeParser.js +22 -1
  19. package/dist/parsers/subagentTraceParser.js +11 -5
  20. package/dist/providers/claudeCode.js +45 -1
  21. package/dist/providers/codex.js +17 -7
  22. package/dist/report/transcriptParser.d.ts +3 -11
  23. package/dist/report/transcriptParser.js +69 -154
  24. package/dist/schemas/index.d.ts +7 -1
  25. package/dist/schemas/index.js +19 -2
  26. package/dist/schemas/observedSessionV1.d.ts +32 -1
  27. package/dist/schemas/observedSessionV1.js +11 -1
  28. package/dist/schemas/sessionEvent.d.ts +373 -12
  29. package/dist/schemas/sessionEvent.js +101 -16
  30. package/dist/schemas/tokenEstimation.d.ts +14 -0
  31. package/dist/schemas/tokenEstimation.js +10 -0
  32. package/dist/schemas/transcript.d.ts +25 -0
  33. package/dist/schemas/transcript.js +87 -0
  34. package/dist/schemas/usageNormalization.d.ts +55 -0
  35. package/dist/schemas/usageNormalization.js +41 -0
  36. package/dist/sessionTranscripts.d.ts +16 -0
  37. package/dist/sessionTranscripts.js +47 -0
  38. package/dist/tokenEstimation.d.ts +24 -0
  39. package/dist/tokenEstimation.js +62 -0
  40. package/dist/transcript.d.ts +98 -0
  41. package/dist/transcript.js +255 -0
  42. package/dist/types/observedSessionV1.d.ts +3 -1
  43. package/dist/types/observedSessionV1.js +14 -1
  44. package/dist/types/sessionEvent.d.ts +73 -7
  45. package/dist/usageNormalization.d.ts +69 -0
  46. package/dist/usageNormalization.js +100 -0
  47. package/package.json +1 -1
@@ -7,7 +7,7 @@
7
7
  * @module schemas/sessionEvent
8
8
  */
9
9
  import { z } from 'zod';
10
- import type { SessionEvent } from '../types/sessionEvent';
10
+ import type { SessionEvent, SummarySessionEvent } from '../types/sessionEvent';
11
11
  export declare const messageUsageSchema: z.ZodObject<{
12
12
  input_tokens: z.ZodNumber;
13
13
  output_tokens: z.ZodNumber;
@@ -29,6 +29,28 @@ export declare const sessionMessageSchema: z.ZodObject<{
29
29
  reported_cost: z.ZodOptional<z.ZodNumber>;
30
30
  reasoning_tokens: z.ZodOptional<z.ZodNumber>;
31
31
  }, z.core.$strip>>;
32
+ normalizedUsage: z.ZodOptional<z.ZodObject<{
33
+ uncachedInputTokens: z.ZodNumber;
34
+ cacheReadTokens: z.ZodNumber;
35
+ cacheWriteTokens: z.ZodNumber;
36
+ outputTokens: z.ZodNumber;
37
+ reasoningTokens: z.ZodNumber;
38
+ reasoningIncludedInOutput: z.ZodBoolean;
39
+ cacheInclusiveInputTokens: z.ZodNumber;
40
+ billableOutputTokens: z.ZodNumber;
41
+ totalTokens: z.ZodNumber;
42
+ model: z.ZodOptional<z.ZodString>;
43
+ reportedCostUsd: z.ZodOptional<z.ZodNumber>;
44
+ provenance: z.ZodObject<{
45
+ provider: z.ZodOptional<z.ZodString>;
46
+ semantics: z.ZodEnum<{
47
+ "anthropic-additive-cache": "anthropic-additive-cache";
48
+ "openai-inclusive-cache": "openai-inclusive-cache";
49
+ "sidekick-disjoint": "sidekick-disjoint";
50
+ }>;
51
+ source: z.ZodOptional<z.ZodString>;
52
+ }, z.core.$strip>;
53
+ }, z.core.$strip>>;
32
54
  content: z.ZodOptional<z.ZodUnknown>;
33
55
  }, z.core.$strip>;
34
56
  export declare const permissionModeSchema: z.ZodEnum<{
@@ -37,15 +59,126 @@ export declare const permissionModeSchema: z.ZodEnum<{
37
59
  bypassPermissions: "bypassPermissions";
38
60
  plan: "plan";
39
61
  }>;
40
- export declare const sessionEventSchema: z.ZodObject<{
41
- type: z.ZodEnum<{
42
- user: "user";
43
- assistant: "assistant";
44
- system: "system";
45
- tool_use: "tool_use";
46
- tool_result: "tool_result";
47
- summary: "summary";
48
- }>;
62
+ export declare const userSessionEventSchema: z.ZodObject<{
63
+ timestamp: z.ZodString;
64
+ entrypoint: z.ZodOptional<z.ZodString>;
65
+ isMeta: z.ZodOptional<z.ZodBoolean>;
66
+ isSidechain: z.ZodOptional<z.ZodBoolean>;
67
+ cwd: z.ZodOptional<z.ZodString>;
68
+ gitBranch: z.ZodOptional<z.ZodString>;
69
+ permissionMode: z.ZodOptional<z.ZodEnum<{
70
+ default: "default";
71
+ acceptEdits: "acceptEdits";
72
+ bypassPermissions: "bypassPermissions";
73
+ plan: "plan";
74
+ }>>;
75
+ rateLimits: z.ZodOptional<z.ZodObject<{
76
+ primary: z.ZodOptional<z.ZodObject<{
77
+ usedPercent: z.ZodNumber;
78
+ windowMinutes: z.ZodNumber;
79
+ resetsAt: z.ZodNumber;
80
+ }, z.core.$strip>>;
81
+ secondary: z.ZodOptional<z.ZodObject<{
82
+ usedPercent: z.ZodNumber;
83
+ windowMinutes: z.ZodNumber;
84
+ resetsAt: z.ZodNumber;
85
+ }, z.core.$strip>>;
86
+ }, z.core.$strip>>;
87
+ compaction: z.ZodOptional<z.ZodObject<{
88
+ tokensBefore: z.ZodNumber;
89
+ tokensAfter: z.ZodNumber;
90
+ }, z.core.$strip>>;
91
+ providerMetadata: z.ZodOptional<z.ZodObject<{
92
+ providerId: z.ZodOptional<z.ZodString>;
93
+ source: z.ZodOptional<z.ZodString>;
94
+ retryAttempts: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
95
+ finishReasons: z.ZodOptional<z.ZodArray<z.ZodString>>;
96
+ providerError: z.ZodOptional<z.ZodObject<{
97
+ type: z.ZodOptional<z.ZodString>;
98
+ message: z.ZodOptional<z.ZodString>;
99
+ code: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
100
+ }, z.core.$strip>>;
101
+ }, z.core.$strip>>;
102
+ type: z.ZodLiteral<"user">;
103
+ message: z.ZodObject<{
104
+ role: z.ZodString;
105
+ id: z.ZodOptional<z.ZodString>;
106
+ sourceLabel: z.ZodOptional<z.ZodString>;
107
+ model: z.ZodOptional<z.ZodString>;
108
+ usage: z.ZodOptional<z.ZodObject<{
109
+ input_tokens: z.ZodNumber;
110
+ output_tokens: z.ZodNumber;
111
+ cache_creation_input_tokens: z.ZodOptional<z.ZodNumber>;
112
+ cache_read_input_tokens: z.ZodOptional<z.ZodNumber>;
113
+ reported_cost: z.ZodOptional<z.ZodNumber>;
114
+ reasoning_tokens: z.ZodOptional<z.ZodNumber>;
115
+ }, z.core.$strip>>;
116
+ normalizedUsage: z.ZodOptional<z.ZodObject<{
117
+ uncachedInputTokens: z.ZodNumber;
118
+ cacheReadTokens: z.ZodNumber;
119
+ cacheWriteTokens: z.ZodNumber;
120
+ outputTokens: z.ZodNumber;
121
+ reasoningTokens: z.ZodNumber;
122
+ reasoningIncludedInOutput: z.ZodBoolean;
123
+ cacheInclusiveInputTokens: z.ZodNumber;
124
+ billableOutputTokens: z.ZodNumber;
125
+ totalTokens: z.ZodNumber;
126
+ model: z.ZodOptional<z.ZodString>;
127
+ reportedCostUsd: z.ZodOptional<z.ZodNumber>;
128
+ provenance: z.ZodObject<{
129
+ provider: z.ZodOptional<z.ZodString>;
130
+ semantics: z.ZodEnum<{
131
+ "anthropic-additive-cache": "anthropic-additive-cache";
132
+ "openai-inclusive-cache": "openai-inclusive-cache";
133
+ "sidekick-disjoint": "sidekick-disjoint";
134
+ }>;
135
+ source: z.ZodOptional<z.ZodString>;
136
+ }, z.core.$strip>;
137
+ }, z.core.$strip>>;
138
+ content: z.ZodOptional<z.ZodUnknown>;
139
+ }, z.core.$strip>;
140
+ }, z.core.$strip>;
141
+ export declare const assistantSessionEventSchema: z.ZodObject<{
142
+ timestamp: z.ZodString;
143
+ entrypoint: z.ZodOptional<z.ZodString>;
144
+ isMeta: z.ZodOptional<z.ZodBoolean>;
145
+ isSidechain: z.ZodOptional<z.ZodBoolean>;
146
+ cwd: z.ZodOptional<z.ZodString>;
147
+ gitBranch: z.ZodOptional<z.ZodString>;
148
+ permissionMode: z.ZodOptional<z.ZodEnum<{
149
+ default: "default";
150
+ acceptEdits: "acceptEdits";
151
+ bypassPermissions: "bypassPermissions";
152
+ plan: "plan";
153
+ }>>;
154
+ rateLimits: z.ZodOptional<z.ZodObject<{
155
+ primary: z.ZodOptional<z.ZodObject<{
156
+ usedPercent: z.ZodNumber;
157
+ windowMinutes: z.ZodNumber;
158
+ resetsAt: z.ZodNumber;
159
+ }, z.core.$strip>>;
160
+ secondary: z.ZodOptional<z.ZodObject<{
161
+ usedPercent: z.ZodNumber;
162
+ windowMinutes: z.ZodNumber;
163
+ resetsAt: z.ZodNumber;
164
+ }, z.core.$strip>>;
165
+ }, z.core.$strip>>;
166
+ compaction: z.ZodOptional<z.ZodObject<{
167
+ tokensBefore: z.ZodNumber;
168
+ tokensAfter: z.ZodNumber;
169
+ }, z.core.$strip>>;
170
+ providerMetadata: z.ZodOptional<z.ZodObject<{
171
+ providerId: z.ZodOptional<z.ZodString>;
172
+ source: z.ZodOptional<z.ZodString>;
173
+ retryAttempts: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
174
+ finishReasons: z.ZodOptional<z.ZodArray<z.ZodString>>;
175
+ providerError: z.ZodOptional<z.ZodObject<{
176
+ type: z.ZodOptional<z.ZodString>;
177
+ message: z.ZodOptional<z.ZodString>;
178
+ code: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
179
+ }, z.core.$strip>>;
180
+ }, z.core.$strip>>;
181
+ type: z.ZodLiteral<"assistant">;
49
182
  message: z.ZodObject<{
50
183
  role: z.ZodString;
51
184
  id: z.ZodOptional<z.ZodString>;
@@ -59,10 +192,39 @@ export declare const sessionEventSchema: z.ZodObject<{
59
192
  reported_cost: z.ZodOptional<z.ZodNumber>;
60
193
  reasoning_tokens: z.ZodOptional<z.ZodNumber>;
61
194
  }, z.core.$strip>>;
195
+ normalizedUsage: z.ZodOptional<z.ZodObject<{
196
+ uncachedInputTokens: z.ZodNumber;
197
+ cacheReadTokens: z.ZodNumber;
198
+ cacheWriteTokens: z.ZodNumber;
199
+ outputTokens: z.ZodNumber;
200
+ reasoningTokens: z.ZodNumber;
201
+ reasoningIncludedInOutput: z.ZodBoolean;
202
+ cacheInclusiveInputTokens: z.ZodNumber;
203
+ billableOutputTokens: z.ZodNumber;
204
+ totalTokens: z.ZodNumber;
205
+ model: z.ZodOptional<z.ZodString>;
206
+ reportedCostUsd: z.ZodOptional<z.ZodNumber>;
207
+ provenance: z.ZodObject<{
208
+ provider: z.ZodOptional<z.ZodString>;
209
+ semantics: z.ZodEnum<{
210
+ "anthropic-additive-cache": "anthropic-additive-cache";
211
+ "openai-inclusive-cache": "openai-inclusive-cache";
212
+ "sidekick-disjoint": "sidekick-disjoint";
213
+ }>;
214
+ source: z.ZodOptional<z.ZodString>;
215
+ }, z.core.$strip>;
216
+ }, z.core.$strip>>;
62
217
  content: z.ZodOptional<z.ZodUnknown>;
63
218
  }, z.core.$strip>;
219
+ }, z.core.$strip>;
220
+ export declare const summarySessionEventSchema: z.ZodType<SummarySessionEvent>;
221
+ export declare const systemSessionEventSchema: z.ZodObject<{
64
222
  timestamp: z.ZodString;
223
+ entrypoint: z.ZodOptional<z.ZodString>;
224
+ isMeta: z.ZodOptional<z.ZodBoolean>;
65
225
  isSidechain: z.ZodOptional<z.ZodBoolean>;
226
+ cwd: z.ZodOptional<z.ZodString>;
227
+ gitBranch: z.ZodOptional<z.ZodString>;
66
228
  permissionMode: z.ZodOptional<z.ZodEnum<{
67
229
  default: "default";
68
230
  acceptEdits: "acceptEdits";
@@ -86,6 +248,8 @@ export declare const sessionEventSchema: z.ZodObject<{
86
248
  tokensAfter: z.ZodNumber;
87
249
  }, z.core.$strip>>;
88
250
  providerMetadata: z.ZodOptional<z.ZodObject<{
251
+ providerId: z.ZodOptional<z.ZodString>;
252
+ source: z.ZodOptional<z.ZodString>;
89
253
  retryAttempts: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
90
254
  finishReasons: z.ZodOptional<z.ZodArray<z.ZodString>>;
91
255
  providerError: z.ZodOptional<z.ZodObject<{
@@ -94,16 +258,213 @@ export declare const sessionEventSchema: z.ZodObject<{
94
258
  code: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
95
259
  }, z.core.$strip>>;
96
260
  }, z.core.$strip>>;
97
- tool: z.ZodOptional<z.ZodObject<{
261
+ type: z.ZodLiteral<"system">;
262
+ message: z.ZodOptional<z.ZodObject<{
263
+ role: z.ZodString;
264
+ id: z.ZodOptional<z.ZodString>;
265
+ sourceLabel: z.ZodOptional<z.ZodString>;
266
+ model: z.ZodOptional<z.ZodString>;
267
+ usage: z.ZodOptional<z.ZodObject<{
268
+ input_tokens: z.ZodNumber;
269
+ output_tokens: z.ZodNumber;
270
+ cache_creation_input_tokens: z.ZodOptional<z.ZodNumber>;
271
+ cache_read_input_tokens: z.ZodOptional<z.ZodNumber>;
272
+ reported_cost: z.ZodOptional<z.ZodNumber>;
273
+ reasoning_tokens: z.ZodOptional<z.ZodNumber>;
274
+ }, z.core.$strip>>;
275
+ normalizedUsage: z.ZodOptional<z.ZodObject<{
276
+ uncachedInputTokens: z.ZodNumber;
277
+ cacheReadTokens: z.ZodNumber;
278
+ cacheWriteTokens: z.ZodNumber;
279
+ outputTokens: z.ZodNumber;
280
+ reasoningTokens: z.ZodNumber;
281
+ reasoningIncludedInOutput: z.ZodBoolean;
282
+ cacheInclusiveInputTokens: z.ZodNumber;
283
+ billableOutputTokens: z.ZodNumber;
284
+ totalTokens: z.ZodNumber;
285
+ model: z.ZodOptional<z.ZodString>;
286
+ reportedCostUsd: z.ZodOptional<z.ZodNumber>;
287
+ provenance: z.ZodObject<{
288
+ provider: z.ZodOptional<z.ZodString>;
289
+ semantics: z.ZodEnum<{
290
+ "anthropic-additive-cache": "anthropic-additive-cache";
291
+ "openai-inclusive-cache": "openai-inclusive-cache";
292
+ "sidekick-disjoint": "sidekick-disjoint";
293
+ }>;
294
+ source: z.ZodOptional<z.ZodString>;
295
+ }, z.core.$strip>;
296
+ }, z.core.$strip>>;
297
+ content: z.ZodOptional<z.ZodUnknown>;
298
+ }, z.core.$strip>>;
299
+ }, z.core.$strip>;
300
+ export declare const toolUseSessionEventSchema: z.ZodObject<{
301
+ tool: z.ZodObject<{
98
302
  name: z.ZodString;
99
303
  input: z.ZodRecord<z.ZodString, z.ZodUnknown>;
304
+ }, z.core.$strip>;
305
+ timestamp: z.ZodString;
306
+ entrypoint: z.ZodOptional<z.ZodString>;
307
+ isMeta: z.ZodOptional<z.ZodBoolean>;
308
+ isSidechain: z.ZodOptional<z.ZodBoolean>;
309
+ cwd: z.ZodOptional<z.ZodString>;
310
+ gitBranch: z.ZodOptional<z.ZodString>;
311
+ permissionMode: z.ZodOptional<z.ZodEnum<{
312
+ default: "default";
313
+ acceptEdits: "acceptEdits";
314
+ bypassPermissions: "bypassPermissions";
315
+ plan: "plan";
316
+ }>>;
317
+ rateLimits: z.ZodOptional<z.ZodObject<{
318
+ primary: z.ZodOptional<z.ZodObject<{
319
+ usedPercent: z.ZodNumber;
320
+ windowMinutes: z.ZodNumber;
321
+ resetsAt: z.ZodNumber;
322
+ }, z.core.$strip>>;
323
+ secondary: z.ZodOptional<z.ZodObject<{
324
+ usedPercent: z.ZodNumber;
325
+ windowMinutes: z.ZodNumber;
326
+ resetsAt: z.ZodNumber;
327
+ }, z.core.$strip>>;
328
+ }, z.core.$strip>>;
329
+ compaction: z.ZodOptional<z.ZodObject<{
330
+ tokensBefore: z.ZodNumber;
331
+ tokensAfter: z.ZodNumber;
332
+ }, z.core.$strip>>;
333
+ providerMetadata: z.ZodOptional<z.ZodObject<{
334
+ providerId: z.ZodOptional<z.ZodString>;
335
+ source: z.ZodOptional<z.ZodString>;
336
+ retryAttempts: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
337
+ finishReasons: z.ZodOptional<z.ZodArray<z.ZodString>>;
338
+ providerError: z.ZodOptional<z.ZodObject<{
339
+ type: z.ZodOptional<z.ZodString>;
340
+ message: z.ZodOptional<z.ZodString>;
341
+ code: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
342
+ }, z.core.$strip>>;
343
+ }, z.core.$strip>>;
344
+ type: z.ZodLiteral<"tool_use">;
345
+ message: z.ZodOptional<z.ZodObject<{
346
+ role: z.ZodString;
347
+ id: z.ZodOptional<z.ZodString>;
348
+ sourceLabel: z.ZodOptional<z.ZodString>;
349
+ model: z.ZodOptional<z.ZodString>;
350
+ usage: z.ZodOptional<z.ZodObject<{
351
+ input_tokens: z.ZodNumber;
352
+ output_tokens: z.ZodNumber;
353
+ cache_creation_input_tokens: z.ZodOptional<z.ZodNumber>;
354
+ cache_read_input_tokens: z.ZodOptional<z.ZodNumber>;
355
+ reported_cost: z.ZodOptional<z.ZodNumber>;
356
+ reasoning_tokens: z.ZodOptional<z.ZodNumber>;
357
+ }, z.core.$strip>>;
358
+ normalizedUsage: z.ZodOptional<z.ZodObject<{
359
+ uncachedInputTokens: z.ZodNumber;
360
+ cacheReadTokens: z.ZodNumber;
361
+ cacheWriteTokens: z.ZodNumber;
362
+ outputTokens: z.ZodNumber;
363
+ reasoningTokens: z.ZodNumber;
364
+ reasoningIncludedInOutput: z.ZodBoolean;
365
+ cacheInclusiveInputTokens: z.ZodNumber;
366
+ billableOutputTokens: z.ZodNumber;
367
+ totalTokens: z.ZodNumber;
368
+ model: z.ZodOptional<z.ZodString>;
369
+ reportedCostUsd: z.ZodOptional<z.ZodNumber>;
370
+ provenance: z.ZodObject<{
371
+ provider: z.ZodOptional<z.ZodString>;
372
+ semantics: z.ZodEnum<{
373
+ "anthropic-additive-cache": "anthropic-additive-cache";
374
+ "openai-inclusive-cache": "openai-inclusive-cache";
375
+ "sidekick-disjoint": "sidekick-disjoint";
376
+ }>;
377
+ source: z.ZodOptional<z.ZodString>;
378
+ }, z.core.$strip>;
379
+ }, z.core.$strip>>;
380
+ content: z.ZodOptional<z.ZodUnknown>;
100
381
  }, z.core.$strip>>;
101
- result: z.ZodOptional<z.ZodObject<{
382
+ }, z.core.$strip>;
383
+ export declare const toolResultSessionEventSchema: z.ZodObject<{
384
+ result: z.ZodObject<{
102
385
  tool_use_id: z.ZodString;
103
386
  output: z.ZodOptional<z.ZodUnknown>;
104
387
  is_error: z.ZodOptional<z.ZodBoolean>;
388
+ }, z.core.$strip>;
389
+ timestamp: z.ZodString;
390
+ entrypoint: z.ZodOptional<z.ZodString>;
391
+ isMeta: z.ZodOptional<z.ZodBoolean>;
392
+ isSidechain: z.ZodOptional<z.ZodBoolean>;
393
+ cwd: z.ZodOptional<z.ZodString>;
394
+ gitBranch: z.ZodOptional<z.ZodString>;
395
+ permissionMode: z.ZodOptional<z.ZodEnum<{
396
+ default: "default";
397
+ acceptEdits: "acceptEdits";
398
+ bypassPermissions: "bypassPermissions";
399
+ plan: "plan";
400
+ }>>;
401
+ rateLimits: z.ZodOptional<z.ZodObject<{
402
+ primary: z.ZodOptional<z.ZodObject<{
403
+ usedPercent: z.ZodNumber;
404
+ windowMinutes: z.ZodNumber;
405
+ resetsAt: z.ZodNumber;
406
+ }, z.core.$strip>>;
407
+ secondary: z.ZodOptional<z.ZodObject<{
408
+ usedPercent: z.ZodNumber;
409
+ windowMinutes: z.ZodNumber;
410
+ resetsAt: z.ZodNumber;
411
+ }, z.core.$strip>>;
412
+ }, z.core.$strip>>;
413
+ compaction: z.ZodOptional<z.ZodObject<{
414
+ tokensBefore: z.ZodNumber;
415
+ tokensAfter: z.ZodNumber;
416
+ }, z.core.$strip>>;
417
+ providerMetadata: z.ZodOptional<z.ZodObject<{
418
+ providerId: z.ZodOptional<z.ZodString>;
419
+ source: z.ZodOptional<z.ZodString>;
420
+ retryAttempts: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
421
+ finishReasons: z.ZodOptional<z.ZodArray<z.ZodString>>;
422
+ providerError: z.ZodOptional<z.ZodObject<{
423
+ type: z.ZodOptional<z.ZodString>;
424
+ message: z.ZodOptional<z.ZodString>;
425
+ code: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
426
+ }, z.core.$strip>>;
427
+ }, z.core.$strip>>;
428
+ type: z.ZodLiteral<"tool_result">;
429
+ message: z.ZodOptional<z.ZodObject<{
430
+ role: z.ZodString;
431
+ id: z.ZodOptional<z.ZodString>;
432
+ sourceLabel: z.ZodOptional<z.ZodString>;
433
+ model: z.ZodOptional<z.ZodString>;
434
+ usage: z.ZodOptional<z.ZodObject<{
435
+ input_tokens: z.ZodNumber;
436
+ output_tokens: z.ZodNumber;
437
+ cache_creation_input_tokens: z.ZodOptional<z.ZodNumber>;
438
+ cache_read_input_tokens: z.ZodOptional<z.ZodNumber>;
439
+ reported_cost: z.ZodOptional<z.ZodNumber>;
440
+ reasoning_tokens: z.ZodOptional<z.ZodNumber>;
441
+ }, z.core.$strip>>;
442
+ normalizedUsage: z.ZodOptional<z.ZodObject<{
443
+ uncachedInputTokens: z.ZodNumber;
444
+ cacheReadTokens: z.ZodNumber;
445
+ cacheWriteTokens: z.ZodNumber;
446
+ outputTokens: z.ZodNumber;
447
+ reasoningTokens: z.ZodNumber;
448
+ reasoningIncludedInOutput: z.ZodBoolean;
449
+ cacheInclusiveInputTokens: z.ZodNumber;
450
+ billableOutputTokens: z.ZodNumber;
451
+ totalTokens: z.ZodNumber;
452
+ model: z.ZodOptional<z.ZodString>;
453
+ reportedCostUsd: z.ZodOptional<z.ZodNumber>;
454
+ provenance: z.ZodObject<{
455
+ provider: z.ZodOptional<z.ZodString>;
456
+ semantics: z.ZodEnum<{
457
+ "anthropic-additive-cache": "anthropic-additive-cache";
458
+ "openai-inclusive-cache": "openai-inclusive-cache";
459
+ "sidekick-disjoint": "sidekick-disjoint";
460
+ }>;
461
+ source: z.ZodOptional<z.ZodString>;
462
+ }, z.core.$strip>;
463
+ }, z.core.$strip>>;
464
+ content: z.ZodOptional<z.ZodUnknown>;
105
465
  }, z.core.$strip>>;
106
466
  }, z.core.$strip>;
467
+ export declare const sessionEventSchema: z.ZodType<SessionEvent>;
107
468
  /**
108
469
  * Extracts canonical SessionEvents from a raw JSONL value.
109
470
  *
@@ -8,9 +8,10 @@
8
8
  * @module schemas/sessionEvent
9
9
  */
10
10
  Object.defineProperty(exports, "__esModule", { value: true });
11
- exports.sessionEventSchema = exports.permissionModeSchema = exports.sessionMessageSchema = exports.messageUsageSchema = void 0;
11
+ exports.sessionEventSchema = exports.toolResultSessionEventSchema = exports.toolUseSessionEventSchema = exports.systemSessionEventSchema = exports.summarySessionEventSchema = exports.assistantSessionEventSchema = exports.userSessionEventSchema = exports.permissionModeSchema = exports.sessionMessageSchema = exports.messageUsageSchema = void 0;
12
12
  exports.extractSessionEvents = extractSessionEvents;
13
13
  const zod_1 = require("zod");
14
+ const usageNormalization_1 = require("./usageNormalization");
14
15
  // ── MessageUsage ──
15
16
  exports.messageUsageSchema = zod_1.z.object({
16
17
  input_tokens: zod_1.z.number(),
@@ -27,6 +28,7 @@ exports.sessionMessageSchema = zod_1.z.object({
27
28
  sourceLabel: zod_1.z.string().optional(),
28
29
  model: zod_1.z.string().optional(),
29
30
  usage: exports.messageUsageSchema.optional(),
31
+ normalizedUsage: usageNormalization_1.normalizedUsageSchema.optional(),
30
32
  content: zod_1.z.unknown().optional(),
31
33
  });
32
34
  // ── PermissionMode ──
@@ -37,11 +39,13 @@ exports.permissionModeSchema = zod_1.z.enum([
37
39
  'plan',
38
40
  ]);
39
41
  // ── SessionEvent ──
40
- exports.sessionEventSchema = zod_1.z.object({
41
- type: zod_1.z.enum(['user', 'assistant', 'tool_use', 'tool_result', 'summary', 'system']),
42
- message: exports.sessionMessageSchema,
42
+ const eventBaseShape = {
43
43
  timestamp: zod_1.z.string(),
44
+ entrypoint: zod_1.z.string().optional(),
45
+ isMeta: zod_1.z.boolean().optional(),
44
46
  isSidechain: zod_1.z.boolean().optional(),
47
+ cwd: zod_1.z.string().optional(),
48
+ gitBranch: zod_1.z.string().optional(),
45
49
  permissionMode: exports.permissionModeSchema.optional(),
46
50
  rateLimits: zod_1.z
47
51
  .object({
@@ -69,6 +73,8 @@ exports.sessionEventSchema = zod_1.z.object({
69
73
  .optional(),
70
74
  providerMetadata: zod_1.z
71
75
  .object({
76
+ providerId: zod_1.z.string().optional(),
77
+ source: zod_1.z.string().optional(),
72
78
  retryAttempts: zod_1.z.array(zod_1.z.number()).optional(),
73
79
  finishReasons: zod_1.z.array(zod_1.z.string()).optional(),
74
80
  providerError: zod_1.z
@@ -80,20 +86,80 @@ exports.sessionEventSchema = zod_1.z.object({
80
86
  .optional(),
81
87
  })
82
88
  .optional(),
83
- tool: zod_1.z
84
- .object({
85
- name: zod_1.z.string(),
86
- input: zod_1.z.record(zod_1.z.string(), zod_1.z.unknown()),
87
- })
88
- .optional(),
89
- result: zod_1.z
90
- .object({
89
+ };
90
+ const compactionSchema = zod_1.z
91
+ .object({
92
+ tokensBefore: zod_1.z.number().finite().int().nonnegative(),
93
+ tokensAfter: zod_1.z.number().finite().int().nonnegative(),
94
+ })
95
+ .refine((value) => value.tokensAfter <= value.tokensBefore, {
96
+ message: 'tokensAfter must not exceed tokensBefore',
97
+ });
98
+ exports.userSessionEventSchema = zod_1.z.object({
99
+ type: zod_1.z.literal('user'),
100
+ message: exports.sessionMessageSchema,
101
+ ...eventBaseShape,
102
+ });
103
+ exports.assistantSessionEventSchema = zod_1.z.object({
104
+ type: zod_1.z.literal('assistant'),
105
+ message: exports.sessionMessageSchema,
106
+ ...eventBaseShape,
107
+ });
108
+ const summaryWithMessageSchema = zod_1.z.object({
109
+ type: zod_1.z.literal('summary'),
110
+ message: exports.sessionMessageSchema,
111
+ summary: zod_1.z.string().min(1).optional(),
112
+ ...eventBaseShape,
113
+ compaction: compactionSchema.optional(),
114
+ });
115
+ const summaryWithTextSchema = zod_1.z.object({
116
+ type: zod_1.z.literal('summary'),
117
+ message: exports.sessionMessageSchema.optional(),
118
+ summary: zod_1.z.string().min(1),
119
+ ...eventBaseShape,
120
+ compaction: compactionSchema.optional(),
121
+ });
122
+ const summaryWithCompactionSchema = zod_1.z.object({
123
+ type: zod_1.z.literal('summary'),
124
+ message: exports.sessionMessageSchema.optional(),
125
+ summary: zod_1.z.string().min(1).optional(),
126
+ ...eventBaseShape,
127
+ compaction: compactionSchema,
128
+ });
129
+ exports.summarySessionEventSchema = zod_1.z.union([
130
+ summaryWithMessageSchema,
131
+ summaryWithTextSchema,
132
+ summaryWithCompactionSchema,
133
+ ]);
134
+ exports.systemSessionEventSchema = zod_1.z.object({
135
+ type: zod_1.z.literal('system'),
136
+ message: exports.sessionMessageSchema.optional(),
137
+ ...eventBaseShape,
138
+ });
139
+ exports.toolUseSessionEventSchema = zod_1.z.object({
140
+ type: zod_1.z.literal('tool_use'),
141
+ message: exports.sessionMessageSchema.optional(),
142
+ ...eventBaseShape,
143
+ tool: zod_1.z.object({ name: zod_1.z.string(), input: zod_1.z.record(zod_1.z.string(), zod_1.z.unknown()) }),
144
+ });
145
+ exports.toolResultSessionEventSchema = zod_1.z.object({
146
+ type: zod_1.z.literal('tool_result'),
147
+ message: exports.sessionMessageSchema.optional(),
148
+ ...eventBaseShape,
149
+ result: zod_1.z.object({
91
150
  tool_use_id: zod_1.z.string(),
92
151
  output: zod_1.z.unknown().optional(),
93
152
  is_error: zod_1.z.boolean().optional(),
94
- })
95
- .optional(),
153
+ }),
96
154
  });
155
+ exports.sessionEventSchema = zod_1.z.union([
156
+ exports.userSessionEventSchema,
157
+ exports.assistantSessionEventSchema,
158
+ exports.summarySessionEventSchema,
159
+ exports.systemSessionEventSchema,
160
+ exports.toolUseSessionEventSchema,
161
+ exports.toolResultSessionEventSchema,
162
+ ]);
97
163
  // ── Progress unwrapping ──
98
164
  /** Recursion bound for nested progress envelopes; real data nests 1 level. */
99
165
  const MAX_PROGRESS_DEPTH = 8;
@@ -107,19 +173,38 @@ const MAX_PROGRESS_DEPTH = 8;
107
173
  * Returns zero events for unrecognized input — never throws.
108
174
  */
109
175
  function extractSessionEvents(raw, depth = 0) {
176
+ return extractSessionEventsWithProvenance(raw, depth, {});
177
+ }
178
+ function extractSessionEventsWithProvenance(raw, depth, inherited) {
110
179
  const direct = exports.sessionEventSchema.safeParse(raw);
111
180
  if (direct.success)
112
- return [direct.data];
181
+ return [{ ...inherited, ...direct.data }];
113
182
  if (depth >= MAX_PROGRESS_DEPTH)
114
183
  return [];
115
184
  if (typeof raw === 'object' && raw !== null && raw.type === 'progress') {
185
+ const provenance = { ...inherited, ...progressProvenance(raw) };
116
186
  const data = raw.data;
117
187
  if (typeof data === 'object' && data !== null) {
118
188
  const message = data.message;
119
189
  if (typeof message === 'object' && message !== null) {
120
- return extractSessionEvents(message, depth + 1);
190
+ return extractSessionEventsWithProvenance(message, depth + 1, provenance);
121
191
  }
122
192
  }
123
193
  }
124
194
  return [];
125
195
  }
196
+ function progressProvenance(raw) {
197
+ const value = raw;
198
+ const provenance = {};
199
+ if (typeof value.entrypoint === 'string')
200
+ provenance.entrypoint = value.entrypoint;
201
+ if (typeof value.isMeta === 'boolean')
202
+ provenance.isMeta = value.isMeta;
203
+ if (typeof value.isSidechain === 'boolean')
204
+ provenance.isSidechain = value.isSidechain;
205
+ if (typeof value.cwd === 'string')
206
+ provenance.cwd = value.cwd;
207
+ if (typeof value.gitBranch === 'string')
208
+ provenance.gitBranch = value.gitBranch;
209
+ return provenance;
210
+ }
@@ -0,0 +1,14 @@
1
+ import { z } from 'zod';
2
+ export declare const tokenEstimateSchema: z.ZodObject<{
3
+ count: z.ZodNumber;
4
+ method: z.ZodEnum<{
5
+ exact: "exact";
6
+ "sidekick-fallback-v1": "sidekick-fallback-v1";
7
+ }>;
8
+ confidence: z.ZodEnum<{
9
+ low: "low";
10
+ medium: "medium";
11
+ exact: "exact";
12
+ }>;
13
+ provenance: z.ZodString;
14
+ }, z.core.$strip>;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.tokenEstimateSchema = void 0;
4
+ const zod_1 = require("zod");
5
+ exports.tokenEstimateSchema = zod_1.z.object({
6
+ count: zod_1.z.number().finite().nonnegative(),
7
+ method: zod_1.z.enum(['exact', 'sidekick-fallback-v1']),
8
+ confidence: zod_1.z.enum(['exact', 'medium', 'low']),
9
+ provenance: zod_1.z.string(),
10
+ });
@@ -0,0 +1,25 @@
1
+ import { z } from 'zod';
2
+ import type { CanonicalSessionTranscript, CanonicalTranscriptMessage, CanonicalToolCall, TranscriptSourceProvenance } from '../transcript';
3
+ export declare const transcriptSourceProvenanceSchema: z.ZodType<TranscriptSourceProvenance>;
4
+ export declare const canonicalTranscriptBlockSchema: z.ZodObject<{
5
+ type: z.ZodEnum<{
6
+ unknown: "unknown";
7
+ text: "text";
8
+ tool_use: "tool_use";
9
+ tool_result: "tool_result";
10
+ thinking: "thinking";
11
+ image: "image";
12
+ }>;
13
+ text: z.ZodOptional<z.ZodString>;
14
+ toolName: z.ZodOptional<z.ZodString>;
15
+ toolUseId: z.ZodOptional<z.ZodString>;
16
+ input: z.ZodOptional<z.ZodUnknown>;
17
+ output: z.ZodOptional<z.ZodUnknown>;
18
+ isError: z.ZodOptional<z.ZodBoolean>;
19
+ command: z.ZodOptional<z.ZodString>;
20
+ truncated: z.ZodOptional<z.ZodBoolean>;
21
+ raw: z.ZodOptional<z.ZodUnknown>;
22
+ }, z.core.$strip>;
23
+ export declare const canonicalToolCallSchema: z.ZodType<CanonicalToolCall>;
24
+ export declare const canonicalTranscriptMessageSchema: z.ZodType<CanonicalTranscriptMessage>;
25
+ export declare const canonicalSessionTranscriptSchema: z.ZodType<CanonicalSessionTranscript>;