diff --git a/src/pages/agent-office/components/TokenTab.jsx b/src/pages/agent-office/components/TokenTab.jsx
new file mode 100644
index 0000000..fade7dd
--- /dev/null
+++ b/src/pages/agent-office/components/TokenTab.jsx
@@ -0,0 +1,86 @@
+// src/pages/agent-office/components/TokenTab.jsx
+import { useState, useEffect } from 'react';
+import { getAgentTokenUsage } from '../../../api';
+
+export default function TokenTab({ agentId }) {
+ const [usage, setUsage] = useState(null);
+ const [days, setDays] = useState(1);
+
+ useEffect(() => {
+ let cancelled = false;
+ getAgentTokenUsage(agentId, days).then(data => {
+ if (!cancelled) setUsage(data);
+ });
+ return () => { cancelled = true; };
+ }, [agentId, days]);
+
+ if (!usage) return
Loading...
;
+
+ const inputTokens = usage.input_tokens || 0;
+ const outputTokens = usage.output_tokens || 0;
+ const cacheRead = usage.cache_read || 0;
+ const cacheWrite = usage.cache_write || 0;
+ const total = inputTokens + outputTokens;
+ const cacheHitRate = inputTokens > 0 ? Math.round((cacheRead / inputTokens) * 100) : 0;
+
+ return (
+
+
+ {[1, 7, 30].map(d => (
+
+ ))}
+
+
+
+
+
Input Tokens
+
{inputTokens.toLocaleString()}
+
+
+
Output Tokens
+
{outputTokens.toLocaleString()}
+
+
+
Total
+
{total.toLocaleString()}
+
+
+
Cache Hit Rate
+
{cacheHitRate}%
+
+
+
+ {/* Simple bar chart */}
+
+
Input vs Output
+
+
0 ? `${(inputTokens / total) * 100}%` : '0%' }}
+ />
+
0 ? `${(outputTokens / total) * 100}%` : '0%' }}
+ />
+
+
+ Input
+ Output
+
+
+
+ {cacheRead > 0 && (
+
+ Cache Read: {cacheRead.toLocaleString()}
+ Cache Write: {cacheWrite.toLocaleString()}
+
+ )}
+
+ );
+}