📎 Add minor changes to opencode setup

This commit is contained in:
Andrey Antukh 2026-06-05 11:30:58 +02:00
parent fc038e72fc
commit e2f96a6ba0
9 changed files with 1144 additions and 168 deletions

View File

@ -53,10 +53,8 @@ SHADOW_SERVER_URL=wss://localhost:3449
# dashboard 24282) are fixed by Serena and mapped to these in compose. # dashboard 24282) are fixed by Serena and mapped to these in compose.
SERENA_EXTERNAL_PORT=14181 SERENA_EXTERNAL_PORT=14181
SERENA_DASHBOARD_EXTERNAL_PORT=14182 SERENA_DASHBOARD_EXTERNAL_PORT=14182
MDTS_EXTERNAL_PORT=14179
# Backend worker (scheduled + async tasks). ws0 only; per-instance overlays OPENCODE_EXTERNAL_PORT=14180
# for ws1+ override this to false. See mem:devenv/core.
PENPOT_BACKEND_WORKER=true
# Tmux session inside the main container. # Tmux session inside the main container.
PENPOT_TMUX_ATTACH=true PENPOT_TMUX_ATTACH=true

View File

@ -35,6 +35,12 @@ services:
- ${SERENA_EXTERNAL_PORT}:14281 - ${SERENA_EXTERNAL_PORT}:14281
- ${SERENA_DASHBOARD_EXTERNAL_PORT}:24282 - ${SERENA_DASHBOARD_EXTERNAL_PORT}:24282
# OpenCode Server
- ${OPENCODE_EXTERNAL_PORT}:14180
# MDTS (Markdown Visualizer)
- ${MDTS_EXTERNAL_PORT}:14179
environment: environment:
- EXTERNAL_UID=${CURRENT_USER_ID} - EXTERNAL_UID=${CURRENT_USER_ID}
- COLORTERM=truecolor - COLORTERM=truecolor
@ -77,7 +83,6 @@ services:
- PENPOT_OBJECTS_STORAGE_S3_BUCKET=${PENPOT_OBJECTS_STORAGE_S3_BUCKET} - PENPOT_OBJECTS_STORAGE_S3_BUCKET=${PENPOT_OBJECTS_STORAGE_S3_BUCKET}
- AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID} - AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}
- AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY} - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}
- PENPOT_BACKEND_WORKER=${PENPOT_BACKEND_WORKER}
- PENPOT_TENANT=${PENPOT_TENANT} - PENPOT_TENANT=${PENPOT_TENANT}
- PENPOT_TMUX_ATTACH=${PENPOT_TMUX_ATTACH} - PENPOT_TMUX_ATTACH=${PENPOT_TMUX_ATTACH}

View File

@ -48,6 +48,8 @@ PENPOT_PORT_BASE_MCP=${PENPOT_MCP_SERVER_PORT:?missing in defaults.env}
PENPOT_PORT_BASE_MCP_REPL=${PENPOT_MCP_REPL_PORT:?missing in defaults.env} PENPOT_PORT_BASE_MCP_REPL=${PENPOT_MCP_REPL_PORT:?missing in defaults.env}
PENPOT_PORT_BASE_SERENA=${SERENA_EXTERNAL_PORT:?missing in defaults.env} PENPOT_PORT_BASE_SERENA=${SERENA_EXTERNAL_PORT:?missing in defaults.env}
PENPOT_PORT_BASE_SERENA_DASHBOARD=${SERENA_DASHBOARD_EXTERNAL_PORT:?missing in defaults.env} PENPOT_PORT_BASE_SERENA_DASHBOARD=${SERENA_DASHBOARD_EXTERNAL_PORT:?missing in defaults.env}
PENPOT_PORT_BASE_OPENCODE=${OPENCODE_EXTERNAL_PORT:?missing in defaults.env}
PENPOT_PORT_BASE_MDTS=${MDTS_EXTERNAL_PORT:?missing in defaults.env}
# Per-instance values like PENPOT_REDIS_URI are injected by # Per-instance values like PENPOT_REDIS_URI are injected by
# instance-env-overrides as shell env variables (not set in this shell), # instance-env-overrides as shell env variables (not set in this shell),
@ -310,6 +312,8 @@ function instance-env-overrides {
mcp_repl=$(instance-port "$instance" "$PENPOT_PORT_BASE_MCP_REPL") mcp_repl=$(instance-port "$instance" "$PENPOT_PORT_BASE_MCP_REPL")
serena=$(instance-port "$instance" "$PENPOT_PORT_BASE_SERENA") serena=$(instance-port "$instance" "$PENPOT_PORT_BASE_SERENA")
serena_dash=$(instance-port "$instance" "$PENPOT_PORT_BASE_SERENA_DASHBOARD") serena_dash=$(instance-port "$instance" "$PENPOT_PORT_BASE_SERENA_DASHBOARD")
opencode=$(instance-port "$instance" "$PENPOT_PORT_BASE_OPENCODE")
mdts=$(instance-port "$instance" "$PENPOT_PORT_BASE_MDTS")
printf '%s\n' \ printf '%s\n' \
"PENPOT_MAIN_CONTAINER_NAME=penpot-devenv-${instance}-main" \ "PENPOT_MAIN_CONTAINER_NAME=penpot-devenv-${instance}-main" \
"PENPOT_USER_DATA_VOLUME=penpotdev_${instance}_user_data" \ "PENPOT_USER_DATA_VOLUME=penpotdev_${instance}_user_data" \
@ -320,6 +324,8 @@ function instance-env-overrides {
"PENPOT_MCP_SERVER_PORT=${mcp}" \ "PENPOT_MCP_SERVER_PORT=${mcp}" \
"PENPOT_MCP_REPL_PORT=${mcp_repl}" \ "PENPOT_MCP_REPL_PORT=${mcp_repl}" \
"SERENA_EXTERNAL_PORT=${serena}" \ "SERENA_EXTERNAL_PORT=${serena}" \
"OPENCODE_EXTERNAL_PORT=${opencode}" \
"MDTS_EXTERNAL_PORT=${mdts}" \
"SERENA_DASHBOARD_EXTERNAL_PORT=${serena_dash}" \ "SERENA_DASHBOARD_EXTERNAL_PORT=${serena_dash}" \
"SHADOW_SERVER_URL=wss://localhost:${public_https}" \ "SHADOW_SERVER_URL=wss://localhost:${public_https}" \
"PENPOT_TENANT=devenv-${instance}" "PENPOT_TENANT=devenv-${instance}"
@ -690,6 +696,7 @@ function print-instance-info {
public_https=$(instance-port "$instance" "$PENPOT_PORT_BASE_PUBLIC_HTTPS") public_https=$(instance-port "$instance" "$PENPOT_PORT_BASE_PUBLIC_HTTPS")
mcp=$(instance-port "$instance" "$PENPOT_PORT_BASE_MCP") mcp=$(instance-port "$instance" "$PENPOT_PORT_BASE_MCP")
serena=$(instance-port "$instance" "$PENPOT_PORT_BASE_SERENA") serena=$(instance-port "$instance" "$PENPOT_PORT_BASE_SERENA")
opencode=$(instance-port "$instance" "$PENPOT_PORT_BASE_OPENCODE")
serena_dash=$(instance-port "$instance" "$PENPOT_PORT_BASE_SERENA_DASHBOARD") serena_dash=$(instance-port "$instance" "$PENPOT_PORT_BASE_SERENA_DASHBOARD")
# --ws takes a bare integer; ws0 is the default, so its flag is elided. # --ws takes a bare integer; ws0 is the default, so its flag is elided.
@ -702,6 +709,7 @@ function print-instance-info {
echo " Penpot UI: https://localhost:${public_https}" echo " Penpot UI: https://localhost:${public_https}"
echo " Penpot UI: http://localhost:${public}" echo " Penpot UI: http://localhost:${public}"
echo " MCP stream: http://localhost:${mcp}/mcp" echo " MCP stream: http://localhost:${mcp}/mcp"
echo " OpenCode Server: http://localhost:${opencode}"
echo " Serena MCP: http://localhost:${serena}" echo " Serena MCP: http://localhost:${serena}"
echo " Serena dashboard: http://localhost:${serena_dash}" echo " Serena dashboard: http://localhost:${serena_dash}"
echo " Attach: ./manage.sh attach-devenv${ws_flag}" echo " Attach: ./manage.sh attach-devenv${ws_flag}"

View File

@ -16,10 +16,10 @@
"fmt": "./scripts/fmt" "fmt": "./scripts/fmt"
}, },
"devDependencies": { "devDependencies": {
"@github/copilot": "^1.0.54", "@types/node": "^25.9.1",
"@types/node": "^25.6.2",
"esbuild": "^0.28.0", "esbuild": "^0.28.0",
"mdts": "^0.20.3",
"nrepl-client": "^0.3.0", "nrepl-client": "^0.3.0",
"opencode-ai": "^1.15.13" "opencode-ai": "^1.16.0"
} }
} }

1260
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

13
scripts/attach-opencode Executable file
View File

@ -0,0 +1,13 @@
#!/usr/bin/env bash
set -e;
PORT=14180
while [[ $# -gt 0 ]]; do
case "$1" in
--port|-p) PORT="$2"; shift 2 ;;
*) echo "Unknown option: $1"; exit 1 ;;
esac
done
pnpm exec opencode attach "http://localhost:${PORT}";

4
scripts/start-mdts-server Executable file
View File

@ -0,0 +1,4 @@
#!/usr/bin/env bash
set -e;
pnpm exec mdts --host 0.0.0.0 --port 14179

4
scripts/start-opencode Executable file
View File

@ -0,0 +1,4 @@
#!/usr/bin/env bash
set -e;
pnpm exec opencode;

4
scripts/start-opencode-server Executable file
View File

@ -0,0 +1,4 @@
#!/usr/bin/env bash
set -e;
pnpm exec opencode serve --hostname 0.0.0.0 --port 14180;