diff --git a/package-lock.json b/package-lock.json index 288f723..3e011fa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,6 +23,7 @@ "@tailwindcss/postcss": "^4.1.18", "@vitejs/plugin-vue": "^6.0.3", "autoprefixer": "^10.4.24", + "baseline-browser-mapping": "^2.9.19", "postcss": "^8.5.6", "tailwindcss": "^4.1.18", "vite": "^7.3.1", diff --git a/package.json b/package.json index 4a80fe5..022792e 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "@tailwindcss/postcss": "^4.1.18", "@vitejs/plugin-vue": "^6.0.3", "autoprefixer": "^10.4.24", + "baseline-browser-mapping": "^2.9.19", "postcss": "^8.5.6", "tailwindcss": "^4.1.18", "vite": "^7.3.1", diff --git a/src/components/AppSidebar.vue b/src/components/AppSidebar.vue index 6a2e6b8..7c7c45f 100644 --- a/src/components/AppSidebar.vue +++ b/src/components/AppSidebar.vue @@ -3,6 +3,7 @@ import { computed, onMounted, ref, watch } from 'vue' import { useRouter, useRoute } from 'vue-router' import { useAuthStore } from '@/stores/auth' import { useProjectsStore } from '@/stores/projectsStore' +import { aiService } from '@/services/aiService' import { storeToRefs } from 'pinia' @@ -13,6 +14,17 @@ const projectsStore = useProjectsStore() const { projects, currentProject } = storeToRefs(projectsStore) const selectedProject = ref(null) +const usageCost = ref(0) + +const fetchUsage = async () => { + try { + // Fetch current context usage (user or project depending on header) + const report = await aiService.getUsageReport() + usageCost.value = report.summary?.total_cost || 0 + } catch (e) { + console.error("Failed to fetch sidebar usage", e) + } +} onMounted(async () => { // Ensure we have projects @@ -23,6 +35,7 @@ onMounted(async () => { if (currentProject.value) { selectedProject.value = currentProject.value.id } + fetchUsage() }) // Watch for external changes (like selecting from the list view) @@ -160,6 +173,12 @@ const navItems = computed(() => {
+ + +
diff --git a/src/services/aiService.js b/src/services/aiService.js index 2a6ead9..bc7c969 100644 --- a/src/services/aiService.js +++ b/src/services/aiService.js @@ -66,5 +66,22 @@ export const aiService = { linked_assets: linkedAssets }) return response.data + }, + + // Get usage statistics (runs, tokens, cost) + async getUsageReport(breakdown = null, projectId = null) { + const params = {} + if (breakdown) params.breakdown = breakdown + + const config = { params, headers: {} } + if (projectId) { + config.headers['X-Project-ID'] = projectId + } else if (projectId === false) { + // Explicitly ignore current active project header + config.headers['X-Project-ID'] = '' + } + + const response = await api.get('/generations/usage', config) + return response.data } } diff --git a/src/views/CharacterDetailView.vue b/src/views/CharacterDetailView.vue index 389bbe1..5ea5aff 100644 --- a/src/views/CharacterDetailView.vue +++ b/src/views/CharacterDetailView.vue @@ -1,15 +1,13 @@ @@ -124,11 +133,14 @@ const copyToClipboard = () => {
-
+
+