feat(install): one-line zero-friction install + packaged tui bundle#8
Merged
Conversation
arelchan
force-pushed
the
chenweixiang/one-line-install
branch
2 times, most recently
from
June 29, 2026 16:01
36e239c to
03e3c0c
Compare
cyfyifanchen
requested review from
JasonJarvan
and removed request for
cyfyifanchen
June 30, 2026 06:07
arelchan
force-pushed
the
chenweixiang/one-line-install
branch
from
June 30, 2026 06:27
03e3c0c to
6b0a178
Compare
arelchan
force-pushed
the
chenweixiang/one-line-install
branch
from
June 30, 2026 06:31
6b0a178 to
cdc8138
Compare
Make `raven` / `raven tui` work from any directory after a single install
command, with no manual cd / uv run / npm build / Node setup -- for both
end users (curl | sh) and open-source developers (git clone && ./install.sh).
Why
---
Today `raven tui` only runs from a source checkout: the ui-tui bundle isn't
packaged into the wheel, the launcher locates it via a source-tree-relative
path, and there is no Node provisioning. A `pip`/`uv tool install` therefore
yields a broken `raven tui`.
What changed (all additive; no core/Spine/agent-loop changes)
-------------------------------------------------------------
1. pyproject.toml + hatch_build.py -- a custom build hook conditionally
packages ui-tui/dist into the wheel as raven/ui-tui/dist when the
bundle exists, so installs ship the prebuilt self-contained entry.js
(no node_modules, no src). A static force-include would hard-fail when
dist/ is absent (it's gitignored), breaking `git clone && uv sync`;
the hook degrades gracefully with a warning instead.
2. raven/cli/tui_commands.py
- new resolve_dist_entry(): locate entry.js packaged-first, then
source-tree; production launch uses it instead of a hardcoded path.
- find_node(): add Priority-4 fallback to a Raven-managed private Node
under ~/.raven/runtime (zero PATH config needed).
- --dev still requires the source tree; production no longer does.
3. install.sh (new) -- POSIX one-line installer: ensures uv, ensures
Node>=22 (downloads a private runtime if the system lacks it),
installs raven as a global uv tool. Idempotent; local + remote modes.
Hardened: verifies the Node tarball against the official SHASUMS256.txt
before extracting (supply-chain integrity); self-tests the downloaded
node (catches glibc/musl mismatch at install time); validates a cached
private node actually runs before reusing it; fails with a clear message
when HOME is unset; anchors the version regex.
4. .github/workflows/release.yml (new, DRAFT) -- on tag, build entry.js
then the wheel, with a sanity gate asserting the bundle is shipped and
node_modules/src are not. This keeps entry.js self-maintaining: every
release rebuilds it from current ui-tui source, so it can't drift.
Verified
--------
- wheel contains exactly raven/ui-tui/dist/entry.js (no node_modules/src)
- clean-venv install + `raven tui --check` exits 0 from an unrelated dir
(resolve_dist_entry picks the packaged copy; source tree absent)
- private-Node path: download + find_node Priority-4 discovery confirmed
with the system Node hidden
- existing 27 TUI tests pass
Not in this change (follow-ups for the remote one-liner to go live)
-------------------------------------------------------------------
- run the release workflow to publish a wheel that contains entry.js
- host install.sh at raven.evermind.ai
- README Install section update
- Windows install.ps1
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
arelchan
force-pushed
the
chenweixiang/one-line-install
branch
from
June 30, 2026 06:36
cdc8138 to
55bf4f4
Compare
Kendrick-Song
added a commit
that referenced
this pull request
Jul 22, 2026
- Move _everos_server.py from raven/cli/ to raven/plugin/memory/everos/ _server.py to fix plugin->cli layering violation (CR #1) - Split HTTP timeout: client default 60s (recall/health), memorize add/flush per-request 360s (CR #2) - Defer backend.start() to post-handshake background task in TUI so first render is not blocked by server startup (CR #3) - Remove unused app_id/project_id from ImportSession and scanner (CR #4) - Add note on per-source-unit checkpoint granularity (CR #5) - Add fcntl file lock to prevent concurrent server spawn race (CR #6) - Fix loguru %s format to {} in state.py (CR #7) - Fix docstring step numbering (CR #8) - Remove redundant Table import in status_cmd (CR #9) Co-authored-by: Claude (claude-opus-4-6) <noreply@anthropic.com>
Kendrick-Song
added a commit
that referenced
this pull request
Jul 22, 2026
- Move _everos_server.py from raven/cli/ to raven/plugin/memory/everos/ _server.py to fix plugin->cli layering violation (CR #1) - Split HTTP timeout: client default 60s (recall/health), memorize add/flush per-request 360s (CR #2) - Defer backend.start() to post-handshake background task in TUI so first render is not blocked by server startup (CR #3) - Remove unused app_id/project_id from ImportSession and scanner (CR #4) - Add note on per-source-unit checkpoint granularity (CR #5) - Add fcntl file lock to prevent concurrent server spawn race (CR #6) - Fix loguru %s format to {} in state.py (CR #7) - Fix docstring step numbering (CR #8) - Remove redundant Table import in status_cmd (CR #9) Co-authored-by: Claude (claude-opus-4-6) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Change description
Make
raven/raven tuirunnable from any directory after a single install — no manual cd / uv run / npm build / Node setup.ui-tui/distinto the wheel asraven/ui-tui/distwhen the bundle exists. A static force-include would hard-fail whendist/is absent (it's gitignored), breakinggit clone && uv sync; the hook degrades gracefully with a warning instead.resolve_dist_entry()locatesentry.jspackaged-first then source-tree;find_node()adds a Priority-4 fallback to a Raven-managed private Node under~/.raven/runtime;--devstill requires the source tree, production no longer does.SHASUMS256.txt, self-tests the downloaded node (glibc/musl), validates a cached node before reuse, guards unsetHOME.entry.jsthen the wheel, asserting the bundle ships andnode_modules/srcdo not.Verification
raven/ui-tui/dist/entry.js(no node_modules/src)raven tui --checkexits 0 from an unrelated dirfind_nodePriority-4 discovery confirmedType of change
Checklists
Development
Security
Code review