feat: support non-Docker development environment - #176
Draft
Simpleyyt wants to merge 2 commits into
Draft
Conversation
- Add dev-local.sh to run the full dev stack (mongodb, redis, mockserver, sandbox, backend, frontend) as plain host processes without Docker - Sandbox: fall back to standalone mode when supervisord is unavailable (synthetic RUNNING status; shell/file APIs work, supervisord actions error) - Document non-Docker development in READMEs, AGENTS.md, CLAUDE.md, starter skill, and .env.example (synced to docs via update_doc.sh) Co-authored-by: Simpleyyt <simpleyyt@gmail.com>
- Record the session-leader pid from inside the setsid wrapper so 'down' kills the full process tree (uv/npm/uvicorn reloader children) - Background the nohup command as a standalone statement to avoid a lingering subshell that keeps the script's stdout pipe open - Isolate Python venvs under .dev-local/venvs to avoid clashing with root-owned .venv dirs left by the Docker dev stack; detect unwritable node_modules leftovers with a helpful error Co-authored-by: Simpleyyt <simpleyyt@gmail.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.
Summary
Adds first-class support for developing AI Manus without Docker.
dev-local.sh— orchestrates the whole dev stack as plain host processes:mongodb,redis,mockserver,sandbox,backend,frontend. Supportsup [service...],down,status,logs <service>. Reads.envand automatically rewrites Docker Compose hostnames (mongodb/redis/mockserver/backend) tolocalhost, so the same.envworks for both./dev.shand./dev-local.sh. Reuses MongoDB/Redis instances already listening on standard ports. Runtime state (PIDs, logs, data, isolated Python venvs) lives in.dev-local/(gitignored), so it never clashes with root-owned.venv/node_modulesleftovers from the Docker dev stack.SupervisorServiceno longer crashes on import when supervisord is absent; it falls back to standalone mode:GET /api/v1/supervisor/statusreturns a synthetic RUNNING status (so the backend readiness check passes), shell/file APIs operate on the host, and supervisord-backed actions (stop/restart/shutdown) return a clear error.README.md/README_zh.md,AGENTS.md,CLAUDE.md,.cursor/skills/starter.md, sandbox READMEs, and.env.example(synced intodocs/*/quick_start.mdvia./update_doc.sh).Limitations of the non-Docker mode (documented): sandbox shell/file tools run directly on the host (no isolation); browser tools are unavailable (no Chrome/CDP/VNC); Claw is not started.
Testing
Verified end-to-end on a machine without using Docker for any service:
./dev-local.sh upstarted all six services;status/logs/downwork, anddowncleanly kills the full process trees.ls -aterminal panel) → browser_navigate (fails as expected without Chrome, flow continues) → Task Completed with attachments. Files really appeared on the host (/home/ubuntu/example.{txt,md,py}).non_docker_stack_agent_session_demo.mp4
Completed session with attachments
cd sandbox && uv run pytestagainst the standalone sandbox: 3 passed.cd backend && uv run pytestagainst the non-Docker backend: identical results to the Docker-compose baseline (auth-suite failures are pre-existing onmainwithAUTH_PROVIDER=password: 5 failed / 17 passed on both stacks).To show artifacts inline, enable in settings.