.PHONY: build run clean up down session try logs IMAGE_NAME := opencode IMAGE_TAG := latest MCP_SERVER := http://localhost:8080 build: docker build --build-arg MCP_SERVER=$(MCP_SERVER) -t $(IMAGE_NAME):$(IMAGE_TAG) . run: docker run -it --rm $(IMAGE_NAME):$(IMAGE_TAG) bash clean: docker rmi $(IMAGE_NAME):$(IMAGE_TAG) || true # Start the full stack (session-manager, docker-daemon, caddy) up: docker-compose up -d --build @echo "Stack started. Create a session with: make session" # Stop the stack down: docker-compose down # View logs logs: docker-compose logs -f session-manager # Create a new session and display its info session: @echo "Creating new session..." @curl -s -X POST http://localhost:8080/api/sessions | jq . # Try the web interface - starts stack, creates a session and opens it try: up @echo "Waiting for services to be ready (Docker daemon can take ~30s)..." @for i in $$(seq 1 60); do \ STATUS=$$(curl -sf http://localhost:8080/api/health 2>/dev/null | jq -r '.docker // false') && \ [ "$$STATUS" = "true" ] && break; \ printf '.'; \ sleep 1; \ done @echo "" @echo "Creating session..." @SESSION_ID=$$(curl -s -X POST http://localhost:8080/api/sessions | jq -r '.session_id') && \ echo "Session $$SESSION_ID created, waiting for container to start..." && \ for i in $$(seq 1 30); do \ S=$$(curl -sf http://localhost:8080/api/sessions/$$SESSION_ID 2>/dev/null | jq -r '.status // "unknown"') && \ [ "$$S" = "running" ] && break; \ [ "$$S" = "error" ] && echo "Container failed to start" && exit 1; \ printf '.'; \ sleep 1; \ done && \ echo "" && \ echo "Opening http://localhost:8080/c/$$SESSION_ID" && \ (xdg-open "http://localhost:8080/c/$$SESSION_ID" 2>/dev/null || \ open "http://localhost:8080/c/$$SESSION_ID" 2>/dev/null || \ echo "Visit: http://localhost:8080/c/$$SESSION_ID")