Fix telemetry shutdown noise and improve token usage diagnostics (#444)
Co-authored-by: zuolingxuan <zuolingxuan@bytedance.com>
This commit is contained in:
committed by
GitHub
Unverified
parent
01adc828b5
commit
995a7f070d
89
tests/unit/token-usage-scan.test.ts
Normal file
89
tests/unit/token-usage-scan.test.ts
Normal file
@@ -0,0 +1,89 @@
|
||||
import { mkdir, rm, writeFile } from 'fs/promises';
|
||||
import { join } from 'path';
|
||||
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
|
||||
const { testHome, testUserData } = vi.hoisted(() => {
|
||||
const suffix = Math.random().toString(36).slice(2);
|
||||
return {
|
||||
testHome: `/tmp/clawx-token-usage-${suffix}`,
|
||||
testUserData: `/tmp/clawx-token-usage-user-data-${suffix}`,
|
||||
};
|
||||
});
|
||||
|
||||
vi.mock('os', async () => {
|
||||
const actual = await vi.importActual<typeof import('os')>('os');
|
||||
const mocked = {
|
||||
...actual,
|
||||
homedir: () => testHome,
|
||||
};
|
||||
return {
|
||||
...mocked,
|
||||
default: mocked,
|
||||
};
|
||||
});
|
||||
|
||||
vi.mock('electron', () => ({
|
||||
app: {
|
||||
isPackaged: false,
|
||||
getPath: () => testUserData,
|
||||
getVersion: () => '0.0.0-test',
|
||||
},
|
||||
}));
|
||||
|
||||
describe('token usage session scan', () => {
|
||||
beforeEach(async () => {
|
||||
vi.resetModules();
|
||||
vi.restoreAllMocks();
|
||||
await rm(testHome, { recursive: true, force: true });
|
||||
await rm(testUserData, { recursive: true, force: true });
|
||||
});
|
||||
|
||||
it('includes transcripts from agent directories that exist on disk but are not configured', async () => {
|
||||
const openclawDir = join(testHome, '.openclaw');
|
||||
await mkdir(openclawDir, { recursive: true });
|
||||
await writeFile(join(openclawDir, 'openclaw.json'), JSON.stringify({
|
||||
agents: {
|
||||
list: [
|
||||
{ id: 'main', name: 'Main', default: true },
|
||||
],
|
||||
},
|
||||
}, null, 2), 'utf8');
|
||||
|
||||
const diskOnlySessionsDir = join(openclawDir, 'agents', 'custom-custom25', 'sessions');
|
||||
await mkdir(diskOnlySessionsDir, { recursive: true });
|
||||
await writeFile(
|
||||
join(diskOnlySessionsDir, 'f8e66f77-0125-4e2f-b750-9c4de01e8f5a.jsonl'),
|
||||
[
|
||||
JSON.stringify({
|
||||
type: 'message',
|
||||
timestamp: '2026-03-12T12:19:00.000Z',
|
||||
message: {
|
||||
role: 'assistant',
|
||||
model: 'gpt-5.2-2025-12-11',
|
||||
provider: 'openai',
|
||||
usage: {
|
||||
input: 17649,
|
||||
output: 107,
|
||||
total: 17756,
|
||||
},
|
||||
},
|
||||
}),
|
||||
].join('\n'),
|
||||
'utf8',
|
||||
);
|
||||
|
||||
const { getRecentTokenUsageHistory } = await import('@electron/utils/token-usage');
|
||||
const entries = await getRecentTokenUsageHistory();
|
||||
|
||||
expect(entries).toEqual(
|
||||
expect.arrayContaining([
|
||||
expect.objectContaining({
|
||||
agentId: 'custom-custom25',
|
||||
sessionId: 'f8e66f77-0125-4e2f-b750-9c4de01e8f5a',
|
||||
model: 'gpt-5.2-2025-12-11',
|
||||
totalTokens: 17756,
|
||||
}),
|
||||
]),
|
||||
);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user