Merged
Conversation
- serviceHome: system-scoped dir for service config/data - Linux system: /var/lib/routerly - macOS system: /Library/Application Support/Routerly - Windows system: C:\ProgramData\Routerly - user scope: ~/.routerly (same as before) - cliHome: always per-user (~/.routerly), never system-wide - cli wrapper uses $HOME/.routerly dynamically on system installs so each user gets their own config regardless of install scope - system dirs (APP_DIR, BIN_DIR, serviceHome) created via sudo on unix - settings.json written to serviceHome via sudo when needed - ROUTERLY_HOME shell export skipped for system scope (not needed)
when running via 'curl | bash' the shell is non-interactive and shell profiles are not sourced. add try_load_node_paths() to probe all common node installation locations (nvm, homebrew intel/apple-silicon, volta, fnm, system paths) before calling check_node, so an existing node install is reliably detected without requiring a new login shell.
the function was called at line 55, before its definition at line 70, causing 'command not found' when running via curl | bash.
copyDir was using fs.mkdir/copyFile directly, failing with EACCES when APP_DIR is a system path (/opt/routerly). now: - copyDir accepts useSudo flag, uses mkdirP + sudo cp for system paths - after copy, sudo chown -R transfers ownership to current user so npm install and build steps run without sudo
- Change npm install from --omit=dev to keep devDependencies for builds - Keep --ignore-scripts to skip husky prepare script (fixes 'husky: not found') - Add comprehensive Docker-based CI/CD test suite (8 tests: P1+P2) - Test system/user scope, Debian+Node20, nvm, custom config, sudo permissions - Manually validated: all P1 critical tests pass
- Write service files to /tmp first, then move with sudo - Use sudo for systemctl daemon-reload and enable commands - Use sudo for launchctl in system scope - Fixes EACCES permission errors when installing in system scope
- Step 1: Create admin user (was step 3) - Step 2: Add LLM model (was step 1) - Step 3: Create project (was step 2) - Update wizard description to reflect new order
…avoid permission issues
… is not installed
…assword confirmation
…ify node detection in ps1
- Whitelist common bind addresses (0.0.0.0, 127.0.0.1, localhost, ::, ::1) - IPv4: validate 4 octets with digits only, range 0-255 per octet - IPv6: require at least 2 colons, only hex digits and colons - Hostname: require dot separator, proper format (no leading/trailing hyphens) - Rejects invalid inputs like '4f', 'abc', single words without dots
- Removed duplicate warn/die statements in host validation - Fixed SyntaxError: Unexpected token '}' at line 533 - Script now passes node --check validation
- Removed requirement for dot in email domain part - Now accepts both 'admin@localhost' and 'user@example.com' - Fixes validation rejecting the default email 'admin@localhost' - Regex changed from /^[^\s@]+@[^\s@]+\.[^\s@]+$/ to /^[^\s@]+@[^\s@]+$/
- Display error message and stderr output - Helps users diagnose why user creation is failing - Previously showed generic error without details
- Changed from CLI command to /api/setup/first-admin endpoint - Fixes 'Not logged in' error during initial setup - The setup endpoint is public and doesn't require authentication - Removed unused parameters (routerlyHome, APP_DIR, installCli) - Simplified function signature to only required params
- Fixed 404 error when accessing /dashboard/ directly - The wildcard /dashboard/* only matches paths with content after slash - Now /dashboard/ explicitly serves index.html before falling back to wildcard - Routes: /dashboard → redirect, /dashboard/ → index, /dashboard/* → spa fallback
…er for spa fallback
… token
- shared: add refreshTokenHash to UserConfig
- service: createSessionToken default hours 1h; POST /api/auth/login returns
refreshToken; POST /api/auth/refresh accepts body {refreshToken} (public endpoint)
- cli/store: add refreshToken to AccountEntry; requireAccount allows expired
token when refreshToken exists (trySilentRefresh handles renewal)
- cli/api: trySilentRefresh uses bare fetch with {refreshToken} body, triggers
on expiry or < 5 min remaining
- cli/auth: login saves refreshToken; auth refresh uses refresh token flow
- dashboard/api: proactive refresh < 5 min; retry on 401 via refresh token;
trySilentRefresh deduped with shared promise
- dashboard/AuthContext: persist lr_refresh_token + lr_expires_at; logout clears all
- docs: update management API (login response, new /auth/refresh section);
rewrite commands.md (auth subcommands, project subgroups routing/model/token/member)
…hain anthropic param
…ier), fix marimo configure
…tom provider config)
…ration - Remove redundant /guides/client-integration page (content already covered by /examples and /integrations) - Add /docs/service/ section (overview, endpoints, routing-engine, providers) - Add /docs/integrations/librechat.md (was only inline in client-integration) - Update integrations/overview.md: add LibreChat in Chat UI table - Update sidebars.ts: add Service category, add librechat, remove client-integration - Fix broken link in examples/overview.md - Update README.md doc table
feat: add docker hub pre-built image and ci pipeline
refactor: rename token prefix from sk-lr- to sk-rt-
chore: bump version to 0.1.5
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.
Changelog
Features
Fixes
Refactor
Chore