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.
- package/README.md +8 -8
- package/agent-sdk/dist/bridge/agents.js +75 -0
- package/agent-sdk/dist/bridge/commands.js +45 -14
- package/agent-sdk/dist/bridge/error_classification.js +55 -0
- package/agent-sdk/dist/bridge/events.js +83 -0
- package/agent-sdk/dist/bridge/history.js +49 -258
- package/agent-sdk/dist/bridge/message_handlers.js +428 -0
- package/agent-sdk/dist/bridge/permissions.js +15 -3
- package/agent-sdk/dist/bridge/session_lifecycle.js +368 -0
- package/agent-sdk/dist/bridge/shared.js +49 -0
- package/agent-sdk/dist/bridge/state_parsing.js +66 -0
- package/agent-sdk/dist/bridge/tool_calls.js +168 -0
- package/agent-sdk/dist/bridge/tooling.js +27 -5
- package/agent-sdk/dist/bridge/user_interaction.js +175 -0
- package/agent-sdk/dist/bridge.js +37 -1106
- package/agent-sdk/dist/bridge.test.js +304 -150
- package/bin/claude-rs.js +1 -1
- package/package.json +6 -7
- package/scripts/postinstall.js +2 -2
- package/agent-sdk/README.md +0 -13
- package/agent-sdk/dist/bridge/usage.js +0 -95
|
@@ -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
|
-
}
|