Fix token usage history gaps and add dev detail popup (#386)

Co-authored-by: zuolingxuan <zuolingxuan@bytedance.com>
This commit is contained in:
Lingxuan Zuo
2026-03-10 17:20:10 +08:00
committed by GitHub
Unverified
parent d3960a3d0f
commit 80e89ddc5c
12 changed files with 406 additions and 29 deletions

View File

@@ -81,6 +81,136 @@ describe('parseUsageEntriesFromJsonl', () => {
expect(parseUsageEntriesFromJsonl(jsonl, { sessionId: 'abc', agentId: 'default' })).toEqual([]);
});
it('skips tool result entries without positive token usage', () => {
const jsonl = [
JSON.stringify({
type: 'message',
timestamp: '2026-03-10T02:17:04.057Z',
message: {
role: 'toolResult',
toolName: 'web_search',
details: {
provider: 'kimi',
model: 'moonshot-v1-128k',
},
},
}),
].join('\n');
expect(parseUsageEntriesFromJsonl(jsonl, { sessionId: 'abc', agentId: 'default' })).toEqual([]);
});
it('uses tool result usage when provided', () => {
const jsonl = [
JSON.stringify({
type: 'message',
timestamp: '2026-03-10T02:17:04.057Z',
message: {
role: 'toolResult',
details: {
provider: 'kimi',
model: 'moonshot-v1-128k',
usage: {
promptTokens: 120,
completionTokens: 30,
cacheRead: 10,
totalTokens: 160,
cost: { total: 0.0009 },
},
},
},
}),
].join('\n');
expect(parseUsageEntriesFromJsonl(jsonl, { sessionId: 'abc', agentId: 'default' })).toEqual([
{
timestamp: '2026-03-10T02:17:04.057Z',
sessionId: 'abc',
agentId: 'default',
model: 'moonshot-v1-128k',
provider: 'kimi',
inputTokens: 120,
outputTokens: 30,
cacheReadTokens: 10,
cacheWriteTokens: 0,
totalTokens: 160,
costUsd: 0.0009,
},
]);
});
it('extracts assistant response text into content', () => {
const jsonl = [
JSON.stringify({
type: 'message',
timestamp: '2026-03-10T02:20:04.057Z',
message: {
role: 'assistant',
model: 'kimi-k2.5',
provider: 'moonshot',
content: [{ type: 'text', text: '这是一条测试回复内容。' }],
usage: {
totalTokens: 100,
},
},
}),
].join('\n');
expect(parseUsageEntriesFromJsonl(jsonl, { sessionId: 'abc', agentId: 'default' })).toEqual([
{
timestamp: '2026-03-10T02:20:04.057Z',
sessionId: 'abc',
agentId: 'default',
model: 'kimi-k2.5',
provider: 'moonshot',
content: '这是一条测试回复内容。',
inputTokens: 0,
outputTokens: 0,
cacheReadTokens: 0,
cacheWriteTokens: 0,
totalTokens: 100,
costUsd: undefined,
},
]);
});
it('extracts tool result details content into content', () => {
const jsonl = [
JSON.stringify({
type: 'message',
timestamp: '2026-03-10T02:21:04.057Z',
message: {
role: 'toolResult',
details: {
provider: 'kimi',
model: 'moonshot-v1-128k',
content: '外部搜索原文内容',
usage: {
totalTokens: 50,
},
},
},
}),
].join('\n');
expect(parseUsageEntriesFromJsonl(jsonl, { sessionId: 'abc', agentId: 'default' })).toEqual([
{
timestamp: '2026-03-10T02:21:04.057Z',
sessionId: 'abc',
agentId: 'default',
model: 'moonshot-v1-128k',
provider: 'kimi',
content: '外部搜索原文内容',
inputTokens: 0,
outputTokens: 0,
cacheReadTokens: 0,
cacheWriteTokens: 0,
totalTokens: 50,
costUsd: undefined,
},
]);
});
it('returns all matching entries when no limit is provided', () => {
const jsonl = [
JSON.stringify({