(value: unknown)
| 325 | } as const; |
| 326 | |
| 327 | export function decodeUsageQueryInput(value: unknown): UsageQueryInput { |
| 328 | const input = requireRecord(value, 'usage query input'); |
| 329 | if (input.kind === 'summary') { |
| 330 | const exact = requireExactRecord(input, 'usage summary input', ['kind', 'query']); |
| 331 | return { kind: 'summary', query: decodeLlmUsageQuery(exact.query) }; |
| 332 | } |
| 333 | if (input.kind === 'buckets') { |
| 334 | assertOptionalExactKeys( |
| 335 | input, |
| 336 | 'usage buckets input', |
| 337 | ['kind', 'query', 'groupBy'], |
| 338 | ['offset', 'limit'], |
| 339 | ); |
| 340 | const groupBy = decodeUsageGroupBy(input.groupBy); |
| 341 | const page = { offset: decodeOffset(input.offset), limit: decodeLimit(input.limit) }; |
| 342 | return groupBy === 'tool' |
| 343 | ? { kind: 'buckets', query: decodeToolUsageQuery(input.query), groupBy, ...page } |
| 344 | : { kind: 'buckets', query: decodeLlmUsageQuery(input.query), groupBy, ...page }; |
| 345 | } |
| 346 | if (input.kind === 'logs') { |
| 347 | assertOptionalExactKeys( |
| 348 | input, |
| 349 | 'usage logs input', |
| 350 | ['kind', 'source', 'query'], |
| 351 | ['offset', 'limit'], |
| 352 | ); |
| 353 | const page = { offset: decodeOffset(input.offset), limit: decodeLimit(input.limit) }; |
| 354 | if (input.source === 'llm') { |
| 355 | return { |
| 356 | kind: 'logs', |
| 357 | source: 'llm', |
| 358 | query: decodeLlmUsageQuery(input.query), |
| 359 | ...page, |
| 360 | }; |
| 361 | } |
| 362 | if (input.source === 'tool') { |
| 363 | return { |
| 364 | kind: 'logs', |
| 365 | source: 'tool', |
| 366 | query: decodeToolUsageQuery(input.query), |
| 367 | ...page, |
| 368 | }; |
| 369 | } |
| 370 | throw invalidProtocolFrame('Invalid usage log source'); |
| 371 | } |
| 372 | throw invalidProtocolFrame('Invalid usage query kind'); |
| 373 | } |
| 374 | |
| 375 | export function decodeUsageQueryResult(value: unknown): UsageQueryResult { |
| 376 | const result = requireRecord(value, 'usage query result'); |
no test coverage detected