From 435ed2644b3438a907c2f0e34353f3e6741ad827 Mon Sep 17 00:00:00 2001 From: brettheap Date: Sun, 26 Jul 2026 03:09:38 -0400 Subject: [PATCH 1/2] feat: show app version in header --- Cargo.lock | 4 ++-- README.md | 2 +- crates/open-profiler-core/Cargo.toml | 2 +- package.json | 2 +- src-tauri/Cargo.toml | 2 +- src-tauri/tauri.conf.json | 2 +- src/App.tsx | 29 +++++++++++++++++++++++++++- src/styles.css | 20 ++++++++++++++++++- 8 files changed, 54 insertions(+), 9 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index fcc6cd8..2b4f8aa 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2028,7 +2028,7 @@ checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50" [[package]] name = "opensoft-open-profiler" -version = "0.1.3" +version = "0.1.4" dependencies = [ "opensoft-open-profiler-core", "serde", @@ -2039,7 +2039,7 @@ dependencies = [ [[package]] name = "opensoft-open-profiler-core" -version = "0.1.3" +version = "0.1.4" dependencies = [ "dirs", "libc", diff --git a/README.md b/README.md index 413ed3e..37e201f 100644 --- a/README.md +++ b/README.md @@ -141,7 +141,7 @@ cross-platform icons, CI, Dependabot, security policy, and contribution guide. Version tags publish Windows installers through the [`Windows Release`](.github/workflows/windows-release.yml) GitHub Actions workflow. The tag must match the version in `src-tauri/tauri.conf.json`; for -example, version `0.1.3` is released with tag `v0.1.3`. +example, version `0.1.4` is released with tag `v0.1.4`. The tagged GitHub prerelease contains: diff --git a/crates/open-profiler-core/Cargo.toml b/crates/open-profiler-core/Cargo.toml index 5a288f3..26297a2 100644 --- a/crates/open-profiler-core/Cargo.toml +++ b/crates/open-profiler-core/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "opensoft-open-profiler-core" -version = "0.1.3" +version = "0.1.4" description = "Secure LLM profile discovery and activation for openProfiler" edition.workspace = true license.workspace = true diff --git a/package.json b/package.json index 658f271..2ff5ca7 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@opensoft/open-profiler", "private": true, - "version": "0.1.3", + "version": "0.1.4", "description": "A full LLM profile manager", "license": "Apache-2.0", "type": "module", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 334bd79..5b19934 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "opensoft-open-profiler" -version = "0.1.3" +version = "0.1.4" description = "A full LLM profile manager" edition.workspace = true license.workspace = true diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index b3fb70a..0945490 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -1,7 +1,7 @@ { "$schema": "https://schema.tauri.app/config/2", "productName": "openProfiler", - "version": "0.1.3", + "version": "0.1.4", "identifier": "com.opensoft.openprofiler", "build": { "beforeDevCommand": "pnpm dev", diff --git a/src/App.tsx b/src/App.tsx index 4bd4dac..da3863a 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,6 +1,8 @@ import { invoke } from "@tauri-apps/api/core"; +import { getVersion } from "@tauri-apps/api/app"; import { useCallback, useEffect, useMemo, useState } from "react"; +import packageMetadata from "../package.json"; import { devFixtureDesktopStatus, devFixtureInventory } from "./dev-fixture"; import { activationPayload, @@ -329,6 +331,7 @@ function ProfileResults({ } export default function App() { + const [appVersion, setAppVersion] = useState(packageMetadata.version); const [inventory, setInventory] = useState(null); const [desktop, setDesktop] = useState(null); const [provider, setProvider] = useState( @@ -372,6 +375,22 @@ export default function App() { void loadProfiles(); }, [loadProfiles]); + useEffect(() => { + let active = true; + void getVersion() + .then((version) => { + if (active) { + setAppVersion(version); + } + }) + .catch(() => { + // The package version remains a reliable fallback in browser previews. + }); + return () => { + active = false; + }; + }, []); + const showToast = useCallback((message: string) => { setToast(message); window.setTimeout(() => setToast(""), 3600); @@ -479,7 +498,15 @@ export default function App() {

Local profiles ยท Codex + Claude

-

openProfiler

+
+

openProfiler

+ + v{appVersion} + +

Manage local LLM profiles and choose the identity each provider uses next. diff --git a/src/styles.css b/src/styles.css index 7d9062c..eb0f7f3 100644 --- a/src/styles.css +++ b/src/styles.css @@ -93,14 +93,32 @@ code { transform: translateY(-5px); } -.hero__copy h1 { +.hero__title { + display: flex; + gap: 10px; + align-items: center; margin: 3px 0 5px; +} + +.hero__copy h1 { + margin: 0; color: #f7fbff; font-size: clamp(1.8rem, 3vw, 2.55rem); letter-spacing: -0.045em; line-height: 1; } +.version-badge { + padding: 4px 7px; + border: 1px solid rgb(89 184 255 / 24%); + border-radius: 999px; + color: #80bfe8; + background: rgb(18 49 70 / 72%); + font-family: "SFMono-Regular", Consolas, monospace; + font-size: 0.66rem; + letter-spacing: 0.02em; +} + .hero__copy > p:last-child { margin: 0; color: #91a9bd; From 36e983d365507e8660316cd42061006090fbe9ba Mon Sep 17 00:00:00 2001 From: brettheap Date: Sun, 26 Jul 2026 03:21:44 -0400 Subject: [PATCH 2/2] fix: import only package version --- src/App.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index da3863a..08d4073 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -2,7 +2,7 @@ import { invoke } from "@tauri-apps/api/core"; import { getVersion } from "@tauri-apps/api/app"; import { useCallback, useEffect, useMemo, useState } from "react"; -import packageMetadata from "../package.json"; +import { version as packageVersion } from "../package.json"; import { devFixtureDesktopStatus, devFixtureInventory } from "./dev-fixture"; import { activationPayload, @@ -331,7 +331,7 @@ function ProfileResults({ } export default function App() { - const [appVersion, setAppVersion] = useState(packageMetadata.version); + const [appVersion, setAppVersion] = useState(packageVersion); const [inventory, setInventory] = useState(null); const [desktop, setDesktop] = useState(null); const [provider, setProvider] = useState(