5bf787eb2b
apple / swift (push) Successful in 1m1s
android / android (push) Successful in 4m13s
ci / rust (push) Successful in 4m42s
ci / web (push) Successful in 50s
ci / docs-site (push) Successful in 53s
windows-host / package (push) Successful in 5m51s
apple / screenshots (push) Successful in 5m1s
deb / build-publish (push) Successful in 2m29s
decky / build-publish (push) Successful in 12s
docker / build-push (--build-arg FEDORA_VERSION=44, ci, ci/fedora-rpm.Dockerfile, punktfunk-fedora44-rpm) (push) Successful in 5s
docker / build-push (., web/Dockerfile, punktfunk-web) (push) Successful in 33s
docker / build-push (ci, ci/fedora-rpm.Dockerfile, punktfunk-fedora-rpm) (push) Successful in 4s
docker / build-push (ci, ci/rust-ci.Dockerfile, punktfunk-rust-ci) (push) Successful in 4s
docker / build-push (docs-site, docs-site/Dockerfile, punktfunk-docs) (push) Successful in 5s
ci / bench (push) Successful in 4m35s
rpm / build-publish (bazzite, punktfunk-fedora-rpm) (push) Successful in 9m9s
docker / deploy-docs (push) Successful in 18s
rpm / build-publish (fedora-44, punktfunk-fedora44-rpm) (push) Successful in 9m10s
Arm streaming-perf-stats capture from the web console, play, stop, and review the run as graphs; finished captures are saved to disk as browsable/exportable recordings. Covers both the native punktfunk/1 path and GameStream. - stats_recorder.rs: one shared Arc<StatsRecorder> ring (created in gamestream::serve, shared with the mgmt API + both streaming loops, mirroring NativePairing). The hot-path gate is a runtime AtomicBool that replaces the startup-only PUNKTFUNK_PERF for *recording* (PERF stdout logging unchanged); bounded ring (~3 h); atomic temp+rename writes to ~/.config/punktfunk/captures/*.json; path-traversal-safe ids; poison-resilient locks. - native (punktfunk1.rs) + GameStream (stream.rs) emit a StatsSample at their existing ~2 s / ~1 s aggregation boundary — per-stage latency p50/p99, fps new/repeat, goodput, loss/FEC deltas — with no new per-frame work beyond the cheap atomic check. FrameMsg.was_measured keeps pre-arm in-flight frames out of the first window's percentiles (without zeroing the Windows-relay path's fps/encode). - mgmt.rs: 7 bearer-only /api/v1/stats/* endpoints (capture start/stop/status/live; recordings list/get/delete); api/openapi.json regenerated, in sync. - web: new "Performance" page (recharts, rendered SSR-safe) — capture control, live graphs while armed, recordings table (view / download-JSON / delete), and a detail view with the latency stacked-area bottleneck breakdown (p50/p99 toggle) + throughput + health. Charts adapt to either path's stage set. Design: design/stats-capture-plan.md. Built and adversarially reviewed via a multi-agent workflow; workspace build/clippy(-D warnings)/fmt/tests green, OpenAPI no-drift. Not yet on-glass validated against a live session. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
56 lines
1.7 KiB
JSON
56 lines
1.7 KiB
JSON
{
|
|
"name": "punktfunk-web",
|
|
"private": true,
|
|
"type": "module",
|
|
"description": "punktfunk management console — TanStack Start + React Query (orval) + @unom/ui + Paraglide i18n",
|
|
"scripts": {
|
|
"prepare": "bun run codegen",
|
|
"codegen": "orval --config orval.config.ts && paraglide-js compile --project ./project.inlang --outdir ./src/paraglide",
|
|
"predev": "orval --config orval.config.ts",
|
|
"dev": "vite dev --port 3000",
|
|
"prebuild": "orval --config orval.config.ts",
|
|
"build": "vite build",
|
|
"start": "bun run .output/server/index.mjs",
|
|
"api:gen": "orval --config orval.config.ts",
|
|
"lint": "tsc --noEmit",
|
|
"storybook": "storybook dev -p 6006",
|
|
"build-storybook": "storybook build"
|
|
},
|
|
"dependencies": {
|
|
"@fontsource-variable/geist": "^5.2.9",
|
|
"@tanstack/react-query": "^5.62.0",
|
|
"@tanstack/react-router": "^1.121.0",
|
|
"@tanstack/react-start": "^1.121.0",
|
|
"@unom/style": "^0.4.4",
|
|
"@unom/ui": "^0.8.16",
|
|
"class-variance-authority": "^0.7.1",
|
|
"clsx": "^2.1.1",
|
|
"lucide-react": "^0.469.0",
|
|
"motion": "^12.40.0",
|
|
"radix-ui": "^1.6.0",
|
|
"react": "^19.0.0",
|
|
"react-dom": "^19.0.0",
|
|
"recharts": "^3.9.0",
|
|
"tailwind-merge": "^2.6.0",
|
|
"zod": "^4.4.3"
|
|
},
|
|
"devDependencies": {
|
|
"@biomejs/biome": "^2.5.1",
|
|
"@inlang/paraglide-js": "^2.0.0",
|
|
"@storybook/react-vite": "^10.4.6",
|
|
"@tailwindcss/vite": "^4.0.0",
|
|
"@tanstack/nitro-v2-vite-plugin": "^1.155.0",
|
|
"@types/node": "^22.10.0",
|
|
"@types/react": "^19.0.0",
|
|
"@types/react-dom": "^19.0.0",
|
|
"@vitejs/plugin-react": "^5",
|
|
"orval": "^8.16.0",
|
|
"storybook": "^10.4.6",
|
|
"tailwindcss": "^4.0.0",
|
|
"tw-animate-css": "^1.2.0",
|
|
"typescript": "^5.7.0",
|
|
"vite": "^7.3.5",
|
|
"vite-tsconfig-paths": "^5.1.0"
|
|
}
|
|
}
|