Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
04ad2f2
feat: OpenAI Codex OAuth via Dashboard + Nginx auto-config
claude Apr 11, 2026
b64c364
fix: remove @login_required from OAuth endpoints + setup flow
claude Apr 11, 2026
902dffa
fix: auto-install missing prerequisites instead of blocking setup
claude Apr 11, 2026
bec973e
fix: add ~/.local/bin to PATH before uv check so post-install detecti…
claude Apr 11, 2026
5a0877d
fix: check and auto-install both claude and openclaude as prerequisites
claude Apr 11, 2026
1cc8680
fix: handle empty owner_name in remote setup mode
claude Apr 11, 2026
1c66f6b
fix: show clear message to complete setup via dashboard URL in remote…
claude Apr 11, 2026
86f35dd
fix: auto-start dashboard services in remote mode before showing comp…
claude Apr 11, 2026
0c0f933
fix: route terminal-server via /terminal/ path + improve service startup
claude Apr 11, 2026
3b8e11c
fix: save auth.json in correct Codex/OpenClaude format
claude Apr 11, 2026
ad34dfa
fix(critical): remove OPENAI_API_KEY from process.env before spawn
claude Apr 11, 2026
32ff9aa
fix: always install terminal-server deps and start services in setup
claude Apr 11, 2026
48ea3ab
fix: use project logs/ dir instead of /tmp for service logs
claude Apr 11, 2026
c39c296
fix: remove 'make dashboard-app' from final message — services alread…
claude Apr 11, 2026
4c50c2f
fix: use absolute paths for service log files
claude Apr 11, 2026
5d8e54f
fix(critical): start services as SUDO_USER, not root
claude Apr 11, 2026
51ff3f5
fix(critical): whitelist env vars instead of spreading process.env
claude Apr 11, 2026
2cd3e53
fix(critical): add default OPENAI_MODEL when missing — root cause of …
claude Apr 11, 2026
f99b2b7
fix(critical): chown workspace BEFORE starting services + disable old…
claude Apr 11, 2026
453f1cd
feat: enforce agent persona for non-Anthropic providers
claude Apr 11, 2026
5ee1622
perf: optimize agent avatars — 271MB PNG → 1.7MB WebP (99.4% reduction)
claude Apr 11, 2026
6543e28
chore: default OpenAI model to gpt-5.4 instead of gpt-5.4-mini
claude Apr 11, 2026
64841cd
fix: use startup script for persistent background services
claude Apr 11, 2026
b076527
fix: chmod +x .venv/bin/ after chown to fix Permission denied
claude Apr 11, 2026
4e3a10d
fix(critical): run uv sync as SUDO_USER, not root
claude Apr 11, 2026
ec7414d
fix: skip --dangerously-skip-permissions when running as root
claude Apr 11, 2026
2f2b8d7
fix: ensure agent name from session is always passed to startSession
claude Apr 11, 2026
e6df10d
fix(critical): ...options spread was overwriting agent with undefined
claude Apr 11, 2026
f69c7b1
fix: clean stale sessions on service start to prevent agent issues
claude Apr 11, 2026
cc70472
fix(critical): use --system-prompt instead of --append-system-prompt
claude Apr 11, 2026
b0617b1
fix: add build-essential prereq + nginx SSL/IPv6/firewall improvements
claude Apr 12, 2026
b12633c
feat(setup): system update, Node.js 24.x LTS, certbot as default SSL
claude Apr 12, 2026
6f40ce5
fix: install uv for SUDO_USER, not root — .venv was not created
claude Apr 12, 2026
045e62f
feat: setup hardening, remove /chat, redirect to /providers, images t…
claude Apr 12, 2026
71d878e
fix: uv PATH resolution before verification + clean install output
claude Apr 12, 2026
4ad21d7
fix: restore onboarding when owner is empty + clean setup output
claude Apr 12, 2026
ae522c6
docs: use --depth 1 for clone to avoid downloading 286MB of history
claude Apr 12, 2026
5f05d99
feat(ui): premium dark glassmorphism redesign for Setup + Login
claude Apr 12, 2026
240afe1
feat(ui): professional redesign — canvas network bg, no AI cliches
claude Apr 12, 2026
bd57cb2
feat: provider toggle switch + session blocking when none active
claude Apr 12, 2026
f715809
merge: resolve develop conflict — EVO_NEXUS logo to WebP
claude Apr 12, 2026
cef1bd4
chore: remove EVO_NEXUS.png (replaced by .webp in merge)
claude Apr 12, 2026
0e2d5c3
fix: address all 4 Sourcery AI review findings
claude Apr 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<p align="center">
<a href="https://evolutionfoundation.com.br">
<img src="public/cover.png" alt="Evolution Foundation" height="60"/>
<img src="public/cover.webp" alt="Evolution Foundation" height="60"/>
</a>
</p>

Expand Down Expand Up @@ -61,12 +61,12 @@ It turns a single CLI installation into a team of **38 specialized agents** orga
## Screenshots

<p align="center">
<img src="public/print-overview.png" alt="Overview" width="49%" />
<img src="public/print-agents.png" alt="Agents" width="49%" />
<img src="public/print-overview.webp" alt="Overview" width="49%" />
<img src="public/print-agents.webp" alt="Agents" width="49%" />
</p>
<p align="center">
<img src="public/print-integrations.png" alt="Integrations" width="49%" />
<img src="public/print-costs.png" alt="Costs" width="49%" />
<img src="public/print-integrations.webp" alt="Integrations" width="49%" />
<img src="public/print-costs.webp" alt="Costs" width="49%" />
</p>

---
Expand Down Expand Up @@ -155,7 +155,7 @@ This downloads and runs the interactive setup wizard automatically.
### Method 2 — Manual clone

```bash
git clone https://github.com/EvolutionAPI/evo-nexus.git
git clone --depth 1 https://github.com/EvolutionAPI/evo-nexus.git
cd evo-nexus

# Interactive setup wizard — checks prerequisites, creates config files
Expand Down
28 changes: 10 additions & 18 deletions config/providers.example.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,18 +24,18 @@
},
"openai": {
"name": "OpenAI",
"description": "GPT-4o, GPT-4.1, o3 via OpenAI API",
"description": "GPT-4.x via API Key ou GPT-5.x via Codex OAuth",
"cli_command": "openclaude",
"env_vars": {
"CLAUDE_CODE_USE_OPENAI": "1",
"OPENAI_API_KEY": "",
"OPENAI_MODEL": ""
"OPENAI_MODEL": "gpt-5.4"
},
"default_model": "gpt-4.1",
"requires_logout": true
},
"gemini": {
"name": "Google Gemini",
"name": "Google Gemini (em breve)",
"description": "Gemini 2.5 Pro/Flash via Google AI",
"cli_command": "openclaude",
"env_vars": {
Expand All @@ -44,32 +44,23 @@
"GEMINI_MODEL": ""
},
"default_model": "gemini-2.5-pro",
"requires_logout": true
},
"codex_auth": {
"name": "Codex Auth (OpenAI via OAuth)",
"description": "Usa autenticacao do Codex CLI para acessar modelos OpenAI",
"cli_command": "openclaude",
"env_vars": {
"CLAUDE_CODE_USE_OPENAI": "1",
"OPENAI_API_KEY": ""
},
"requires_logout": true,
"setup_hint": "Run 'codex login' first, then copy the API key"
"coming_soon": true
},
"bedrock": {
"name": "AWS Bedrock",
"name": "AWS Bedrock (em breve)",
"description": "Claude via AWS Bedrock",
"cli_command": "openclaude",
"env_vars": {
"CLAUDE_CODE_USE_BEDROCK": "1",
"AWS_REGION": "",
"AWS_BEARER_TOKEN_BEDROCK": ""
},
"requires_logout": true
"requires_logout": true,
"coming_soon": true
},
"vertex": {
"name": "Google Vertex AI",
"name": "Google Vertex AI (em breve)",
"description": "Claude via Google Cloud Vertex AI",
"cli_command": "openclaude",
"env_vars": {
Expand All @@ -78,7 +69,8 @@
"CLOUD_ML_REGION": ""
},
"default_region": "us-east5",
"requires_logout": true
"requires_logout": true,
"coming_soon": true
}
}
}
15 changes: 13 additions & 2 deletions dashboard/backend/routes/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,20 @@

@bp.route("/api/config/workspace-status")
def workspace_status():
"""Check if workspace.yaml exists (CLI setup was done)."""
"""Check if workspace.yaml exists AND has owner configured."""
config_path = WORKSPACE / "config" / "workspace.yaml"
return jsonify({"configured": config_path.is_file()})
if not config_path.is_file():
return jsonify({"configured": False})
# File exists but check if owner is actually filled in
try:
content = config_path.read_text(encoding="utf-8")
import yaml
data = yaml.safe_load(content) or {}
ws = data.get("workspace", data)
owner = (ws.get("owner") or ws.get("owner_name") or "").strip()
return jsonify({"configured": bool(owner)})
except Exception:
return jsonify({"configured": False})


@bp.route("/api/config/claude-md")
Expand Down
Loading