sidekick-shared 0.23.0 → 0.24.0

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