The SSE proxy was buffering the entire response body with a 30s read timeout, causing 504s on the OpenCode /global/event stream. Add a streaming path that detects SSE requests (by Accept header or /event path) and returns a StreamingResponse with no read timeout. Also fix the make try target to poll the health endpoint for Docker readiness and wait for the container to reach running status before opening the browser.
59 lines
1.8 KiB
Makefile
59 lines
1.8 KiB
Makefile
.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/session/$$SESSION_ID" && \
|
|
(xdg-open "http://localhost:8080/session/$$SESSION_ID" 2>/dev/null || \
|
|
open "http://localhost:8080/session/$$SESSION_ID" 2>/dev/null || \
|
|
echo "Visit: http://localhost:8080/session/$$SESSION_ID")
|