diff --git a/admin/slices/agent/agent/components/agent/chat/Tab.vue b/admin/slices/agent/agent/components/agent/chat/Tab.vue index 73dcefe..0c8f9bd 100644 --- a/admin/slices/agent/agent/components/agent/chat/Tab.vue +++ b/admin/slices/agent/agent/components/agent/chat/Tab.vue @@ -22,12 +22,9 @@ const emit = defineEmits<{ restart: []; toggleRunning: [] }>(); const authStore = useAuthStore(); -// Side stack next to the chat: logs on top, usage panel below, each -// independently collapsible into a compact button. Logs stay the primary -// operational surface (open by default); collapsing one hands its height to -// the other via flex. The logs panel is only mounted while open, so its 5s -// polling stops the moment it's collapsed. The usage panel manages its own -// collapsed state (`collapsible` prop). +// Side column next to the chat: logs fill the full height (usage lives in +// the page-level header strip). The logs panel is only mounted while open, +// so its 5s polling stops the moment it's collapsed. const showSideLogs = ref(true); // One "restart is underway" signal for every surface (bridle header status, @@ -151,7 +148,7 @@ watch(
Logs - -
diff --git a/admin/slices/agent/agent/components/agent/item/Provider.vue b/admin/slices/agent/agent/components/agent/item/Provider.vue index 4ee7d2f..b434d19 100644 --- a/admin/slices/agent/agent/components/agent/item/Provider.vue +++ b/admin/slices/agent/agent/components/agent/item/Provider.vue @@ -170,6 +170,16 @@ watch(activeTab, (tab) => { + + + (), - { title: 'Usage · 30d', collapsible: false, agentOnly: false }, + { title: 'Usage · 30d', collapsible: false, agentOnly: false, variant: 'panel' }, ); type UsageView = 'total' | 'calls' | 'agent'; @@ -122,6 +128,17 @@ const viewHint = computed(() => view.value === 'agent' ? 'this agent only' : 'all agents', ); +// Strip mode: the host page decides where "Details" leads (agent page → +// the Overview tab with the full usage card). +const emit = defineEmits<{ details: [] }>(); + +const todayTitle = computed(() => { + const today = agentUsage.value?.today; + if (!today) return undefined; + const model = today.model ? ` · ${today.model}` : ''; + return `Today · in ${count.format(today.inputTokens)} / out ${count.format(today.outputTokens)}${model}`; +}); + const cost = new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD', @@ -145,8 +162,67 @@ defineExpose({ refresh });