claude-code-rust 0.5.1 → 0.7.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.
@@ -1,95 +0,0 @@
1
- import { asRecordOrNull } from "./shared.js";
2
- function numberField(record, ...keys) {
3
- for (const key of keys) {
4
- const value = record[key];
5
- if (typeof value === "number" && Number.isFinite(value)) {
6
- return value;
7
- }
8
- }
9
- return undefined;
10
- }
11
- function selectModelUsageRecord(session, message) {
12
- const modelUsageRaw = asRecordOrNull(message.modelUsage);
13
- if (!modelUsageRaw) {
14
- return null;
15
- }
16
- const sortedKeys = Object.keys(modelUsageRaw).sort();
17
- if (sortedKeys.length === 0) {
18
- return null;
19
- }
20
- const preferredKeys = new Set();
21
- if (session?.model) {
22
- preferredKeys.add(session.model);
23
- }
24
- if (typeof message.model === "string") {
25
- preferredKeys.add(message.model);
26
- }
27
- for (const key of preferredKeys) {
28
- const value = asRecordOrNull(modelUsageRaw[key]);
29
- if (value) {
30
- return value;
31
- }
32
- }
33
- for (const key of sortedKeys) {
34
- const value = asRecordOrNull(modelUsageRaw[key]);
35
- if (value) {
36
- return value;
37
- }
38
- }
39
- return null;
40
- }
41
- export function buildUsageUpdateFromResultForSession(session, message) {
42
- const usage = asRecordOrNull(message.usage);
43
- const inputTokens = usage ? numberField(usage, "inputTokens", "input_tokens") : undefined;
44
- const outputTokens = usage ? numberField(usage, "outputTokens", "output_tokens") : undefined;
45
- const cacheReadTokens = usage
46
- ? numberField(usage, "cacheReadInputTokens", "cache_read_input_tokens", "cache_read_tokens")
47
- : undefined;
48
- const cacheWriteTokens = usage
49
- ? numberField(usage, "cacheCreationInputTokens", "cache_creation_input_tokens", "cache_write_tokens")
50
- : undefined;
51
- const totalCostUsd = numberField(message, "total_cost_usd", "totalCostUsd");
52
- let turnCostUsd;
53
- if (totalCostUsd !== undefined && session) {
54
- if (session.lastTotalCostUsd === undefined) {
55
- turnCostUsd = totalCostUsd;
56
- }
57
- else {
58
- turnCostUsd = Math.max(0, totalCostUsd - session.lastTotalCostUsd);
59
- }
60
- session.lastTotalCostUsd = totalCostUsd;
61
- }
62
- const modelUsage = selectModelUsageRecord(session, message);
63
- const contextWindow = modelUsage
64
- ? numberField(modelUsage, "contextWindow", "context_window")
65
- : undefined;
66
- const maxOutputTokens = modelUsage
67
- ? numberField(modelUsage, "maxOutputTokens", "max_output_tokens")
68
- : undefined;
69
- if (inputTokens === undefined &&
70
- outputTokens === undefined &&
71
- cacheReadTokens === undefined &&
72
- cacheWriteTokens === undefined &&
73
- totalCostUsd === undefined &&
74
- turnCostUsd === undefined &&
75
- contextWindow === undefined &&
76
- maxOutputTokens === undefined) {
77
- return null;
78
- }
79
- return {
80
- type: "usage_update",
81
- usage: {
82
- ...(inputTokens !== undefined ? { input_tokens: inputTokens } : {}),
83
- ...(outputTokens !== undefined ? { output_tokens: outputTokens } : {}),
84
- ...(cacheReadTokens !== undefined ? { cache_read_tokens: cacheReadTokens } : {}),
85
- ...(cacheWriteTokens !== undefined ? { cache_write_tokens: cacheWriteTokens } : {}),
86
- ...(totalCostUsd !== undefined ? { total_cost_usd: totalCostUsd } : {}),
87
- ...(turnCostUsd !== undefined ? { turn_cost_usd: turnCostUsd } : {}),
88
- ...(contextWindow !== undefined ? { context_window: contextWindow } : {}),
89
- ...(maxOutputTokens !== undefined ? { max_output_tokens: maxOutputTokens } : {}),
90
- },
91
- };
92
- }
93
- export function buildUsageUpdateFromResult(message) {
94
- return buildUsageUpdateFromResultForSession(undefined, message);
95
- }