rjweb-server path.http() second argument is the FULL path, not relative to prefix.
Changed all routes from server.path('/prefix', path => path.http(method, '/suffix', ...))
to server.path('/', path => path.http(method, '/prefix/suffix', ...)).
Also fixed:
- Duplicate createContext import in useAuth.ts
- notFound handler now excludes /webhook paths from SPA fallback
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Prefix all nvm-dependent commands with NVM source via withNvm() helper
- Fix .env file writing using printf instead of heredoc (which does not work over SSH exec)
- Fix git clone URL encoding using URL class for proper credential encoding
- Add DEBIAN_FRONTEND=noninteractive to apt-get for non-interactive installs
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
AWS CreateKeyPair generates the RSA key pair server-side and returns the private key,
avoiding the need to manually format RSA public keys in OpenSSH wire format.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- On startup, scan for EC2 instances with pp:managed=true and terminate any orphans
- SetupWizard now renders as full-page (no Layout wrapper)
- Fixed SSH RSA key generation (generateKeyPairSync with spki format)
- Removed unused import in orphanCleanup.ts
- Frontend rebuild with App.tsx routing fix
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>