diff --git a/.env b/.env
index c789158..b7f9167 100644
--- a/.env
+++ b/.env
@@ -1,2 +1 @@
VITE_API_BASE=http://backend:8000
-VITE_WIZARD_PORT=8080
diff --git a/src/App.tsx b/src/App.tsx
index 335f93e..7b5b05f 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -22,8 +22,10 @@ import SupportDetailPage from '@/pages/SupportDetailPage'
import MeetingDetailPage from '@/pages/MeetingDetailPage'
import axios from 'axios'
-const WIZARD_PORT = Number(import.meta.env.VITE_WIZARD_PORT) || 18080
-const WIZARD_BASE = `http://127.0.0.1:${WIZARD_PORT}`
+const getStoredWizardPort = (): number | null => {
+ const stored = Number(localStorage.getItem('HF_WIZARD_PORT'))
+ return stored && stored > 0 ? stored : null
+}
const getApiBase = () => {
return localStorage.getItem('HF_BACKEND_BASE_URL') ?? undefined
@@ -55,24 +57,26 @@ export default function App() {
// Backend unreachable — fall through to wizard check
}
- // Fallback: try the wizard directly (needed during initial setup before backend starts)
- try {
- const res = await axios.get(`${WIZARD_BASE}/api/v1/config/harborforge.json`, {
- timeout: 5000,
- })
- const cfg = res.data || {}
- if (cfg.backend_url) {
- localStorage.setItem('HF_BACKEND_BASE_URL', cfg.backend_url)
+ // Fallback: if a wizard port was previously saved during setup, try it directly
+ const storedPort = getStoredWizardPort()
+ if (storedPort) {
+ try {
+ const res = await axios.get(`http://127.0.0.1:${storedPort}/api/v1/config/harborforge.json`, {
+ timeout: 5000,
+ })
+ const cfg = res.data || {}
+ if (cfg.backend_url) {
+ localStorage.setItem('HF_BACKEND_BASE_URL', cfg.backend_url)
+ }
+ if (cfg.initialized === true) {
+ setAppState('ready')
+ return
+ }
+ } catch {
+ // ignore — fall through to setup
}
- if (cfg.initialized === true) {
- setAppState('ready')
- } else {
- setAppState('setup')
- }
- } catch {
- // Neither backend nor wizard reachable → setup needed
- setAppState('setup')
}
+ setAppState('setup')
}
if (appState === 'checking') {
@@ -80,7 +84,7 @@ export default function App() {
}
if (appState === 'setup') {
- return
Agent/Human collaborative task management platform
+Enter the local port that forwards to AbstractWizard, then test the connection.
⚠️ The setup wizard connects to AbstractWizard via SSH tunnel. Ensure the port is forwarded:
+⚠️ AbstractWizard is reached over an SSH tunnel. Forward the port first:
ssh -L <wizard_port>:127.0.0.1:<wizard_port> user@your-server
Connection failed. Check the SSH tunnel.
- )} -Configure MySQL connection (docker-compose defaults are fine if using the bundled MySQL).
Create the first admin user
@@ -166,26 +151,26 @@ export default function SetupWizardPage({ wizardBase, onComplete }: Props) {Configure the HarborForge backend API URL
+Configure the HarborForge backend API URL (leave blank to use the frontend default).