Conversation
The slow python suite (~16min on GitHub's shared runners) now runs on two self-hosted runners labelled taos-ci: the always-on VPS (primary) and the Fedora box (secondary + GPU). Sharing the label lets the 3.12/3.13 matrix run in parallel and gives redundancy if one box is offline. lint and spa-build stay on ubuntu-latest as a free, always-available fallback. This PR self-validates: its own test job runs on the new runners.
actions/setup-python only ships prebuilt CPython for GitHub's ubuntu image,
so it fails on the self-hosted Fedora runner ('version 3.12 not found for
Fedora 43'). Drop it and let uv provision Python from its distro-agnostic
standalone builds, which works on Fedora, the Ubuntu VPS, and GitHub-hosted.
Also add a pick-runner job that selects the highest-priority available tier:
the always-on VPS first, then Fedora, then ubuntu-latest as a never-hang
fallback (needs secret RUNNER_ADMIN_PAT with administration:read to read
runner status; without it, defaults to the self-hosted pool).
…oth down Benchmarked the two boxes: they are ~tied per core (Fedora i5-10600 ~2.0s, VPS EPYC-Milan ~2.2s on the same single-thread microbench). So the fastest run is the two matrix legs in parallel across both boxes, not pinning the matrix to one 'primary' runner (which would serialise the legs). Route to the taos-ci pool and only fall back to ubuntu-latest when both self-hosted runners are offline.
ci: run test job on self-hosted runners (VPS + Fedora)
… kilo lane pending
Adds a vitest run to the spa-build job so the ~1,900 desktop tests are gated on every PR (they were never run in CI before). To make that green: - Fix two stale tests: userspace app ids are namespaced 'userspace:<id>' (#89), and the projectsApi.subscribeEvents mock must be constructable (the code uses 'new EventSource', and an arrow function can't be a constructor). - Quarantine 9 suites in vite.config.ts test.exclude: the AgentsApp (#59) and Browser/AddressBar (#66) suites drift against those in-progress redesigns, and EmojiPicker is order-dependent (passes alone, fails under the full suite). Each is tagged #114 to un-exclude as its owning work lands. 223 files / 1829 tests pass locally; 0 failures.
ci: gate the desktop vitest suite (#114)
Adds an opt-in Reduce effects toggle (Settings -> Accessibility) that strips the GPU-heavy compositing which tanks framerate on weak hardware: the ~90 backdrop blur surfaces, the large soft shadows, and the continuously-running animations. A reduceEffects flag in the theme store persists the choice and App.tsx applies a data-perf=reduced attribute on the root; tokens.css keys the strip-down off that attribute, so layout, colour and contrast are untouched and the default (effects on) path is byte-for-byte unchanged. Surfaces that leaned on the blur get an opaque glass background so they stay legible. Reported by a user on an older laptop (GTX 1060, Edge) seeing UI lag. Auto-enable on detected low-end GPUs is a planned fast-follow.
#58, in review); WSL lag context
feat(perf): reduce-effects mode for low-end devices (#58)
…ally (#117) End users were building the SPA locally on every install/upgrade (the bundle is gitignored, releases shipped no prebuilt asset). The vite build needs ~2-4GB and OOMs on small machines (e.g. an 8GB WSL); install-server.sh did 'npm run build || die' AFTER the git source update, so a killed build left the install silently serving the OLD UI -- exactly the 'ran the installer, still on the old version' report. - CI (spa-build, master only) publishes the freshly-built static/desktop as a rolling 'bundle-latest' prerelease, keyed by the git tree SHA of desktop/ so the bundle stays valid across every commit that doesn't touch the frontend. - install-server.sh downloads + stage-swaps that bundle when the tree SHA matches, skipping the local build entirely. Local build is now the fallback only, and it fails LOUDLY (memory cause + the .wslconfig fix + 'your UI was NOT updated') instead of half-updating. Activates once this reaches master (the publish step + the curl-fetched installer both read master). In-app update path (desktop_rebuild.py) gets the same prebuilt preference as a fast-follow.
feat(install): prebuilt SPA bundle, no local build on install (#117)
The in-app / auto update path (desktop_rebuild.py) still ran npm run build locally, so it would OOM on the same small machines the install script now spares. Mirror the install-server.sh logic: before the local build, try the CI-published prebuilt bundle (keyed by the git tree SHA of desktop/), download + stage + swap it into static/desktop/, and skip npm entirely on a match. Tar is extracted with the path-safe data filter. Falls back to the local build on any mismatch, missing git, or network/extract failure. Tests: 3 new cases (match installs the bundle, mismatch never downloads it, missing git falls back); reworked the build-failure test to dispatch by args since the prebuilt check now makes a git call first. 21 pass.
feat(update): in-app update prefers the prebuilt bundle (#117)
Qodo reviews are paused for this user.Troubleshooting steps vary by plan Learn more → On a Teams plan? Using GitHub Enterprise Server, GitLab Self-Managed, or Bitbucket Data Center? |
|
Warning Review limit reached
More reviews will be available in 8 minutes and 28 seconds. Learn how PR review limits work. Your organization has used up its prepaid credits, and credit purchases are no longer available. Enable the review add-on in the billing tab to keep reviews running — you're only billed for reviews past your plan's rate limits ($0.25/file). ⌛ How to resolve this issue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based credits. 🚦 How do rate limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan refill rate. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, the refill rate gradually slows as usage increases. The highest same-day bursts are limited more strictly. Please see our Fair Usage Limits Policy for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (14)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
👋 Thanks for the PR! This one targets See CONTRIBUTING.md for the branch model. |
So each published version (e.g. v1.0.0-beta.4) is a self-contained packaged download carrying its own desktop-bundle.tar.gz + desktop-tree.txt, in addition to the rolling bundle-latest the installer fetches by default.
|
Note Your trial team has used its Gitar budget, so automatic reviews are paused. Upgrade now to unlock full capacity. Comment "Gitar review" to trigger a review manually. Code Review 👍 Approved with suggestions 0 resolved / 5 findingsIntroduces prebuilt SPA bundles and a low-end device performance mode to improve installation reliability. Address several security and robustness concerns regarding prebuilt bundle integrity, insecure temporary file paths, and potential race conditions during the installation swap. 💡 Security: Prebuilt bundle installed with no content integrity verification📄 tinyagentos/desktop_rebuild.py:101-115 📄 scripts/install-server.sh:1170-1184 📄 .github/workflows/ci.yml:152-166
Suggested hardening: after extraction, recompute a git-tree-style hash of the staged 💡 Security: tar extracted without path-safe filter on older Python📄 tinyagentos/desktop_rebuild.py:152-156 🔗 CWE-22 In Suggested fix: on the Fall back to local build instead of unsafe extraction on old Python.💡 Edge Case: Prebuilt helper errors abort rebuild instead of falling back to build📄 tinyagentos/desktop_rebuild.py:112-122 The docstring states Suggested fix: broaden the probe's exception handling to return False on any exception, so the prebuilt path can never harden into a failure that blocks the local build. Catch any exception from the git probe and fall back.💡 Security: install-server.sh uses predictable /tmp paths during root install📄 scripts/install-server.sh:1177-1191 The installer stages the prebuilt bundle in fixed, world-predictable paths. Since the installer commonly runs as root, on a multi-user host a local attacker can pre-create these as symlinks or pre-seed files: removing the symlink itself, but the subsequent directory creation, download, and extraction operate on attacker-influenceable predictable names, enabling symlink/redirection style attacks. Use a randomized directory instead (e.g. Replace fixed /tmp paths with mktemp-created locations.💡 Bug: Prebuilt install deletes existing bundle before move can fail📄 tinyagentos/desktop_rebuild.py:161-171 In 🤖 Prompt for agentsOptionsDisplay: compact → Showing less information. Comment with these commands to change:
Important Your trial ends in 7 days — upgrade now to keep code review, CI analysis, auto-apply, custom automations, and more. Was this helpful? React with 👍 / 👎 | Gitar |
Promotes this session's work to master and cuts beta.4.
User-facing
Infra
NOTE: the first master CI run after merge publishes the rolling
bundle-latestprebuilt bundle for the first time -- watching it. The beta.4 GitHub release is cut from master tip after that's verified.