703edbe4a1
Added: - generate-config.py registers mempalace as a remote MCP endpoint when MEMPALACE_REMOTE_URL is set (MEMPALACE_REMOTE_TOKEN -> Bearer), else the local stdio command as before. Same env contract as pi-devbox's bridge. - docker-compose.mempalace.yml: optional shared server (mempalace-mcp --transport http), loopback-bound by default. - compose (both) + .env.example(.shared): MEMPALACE_REMOTE_URL/TOKEN + local-vs-external docs. Fixed: - validate.yml: skip validate-base/validate-omos on base-changing commits (base-change-warning now exports base_changed). Previously a commit that changed the base AND tightened smoke-test.sh in lockstep (v2.4.0 nano/micro) hard-failed against the stale base-latest until the release rebuilt it. actionlint clean. README + CHANGELOG (Unreleased).
100 lines
3.9 KiB
YAML
100 lines
3.9 KiB
YAML
# opencode-devbox docker-compose for shared machines
|
|
#
|
|
# For machines where multiple users share one OS account (e.g. 'garage').
|
|
# Each user gets isolated config, data, and named volumes by setting
|
|
# SIGNUM in their .env file.
|
|
#
|
|
# Setup per user:
|
|
# 1. mkdir -p ~/<signum>/opencode-devbox && cd ~/<signum>/opencode-devbox
|
|
# 2. cp docker-compose.shared.yml docker-compose.yml
|
|
# 3. cp .env.shared.example .env
|
|
# 4. Edit .env with your signum, provider, keys, etc.
|
|
# 5. mkdir -p ~/<signum>/.config/opencode
|
|
# 6. docker compose up -d
|
|
#
|
|
# Volume isolation: the top-level 'name:' field derives a unique project
|
|
# name per user, which Docker Compose uses as the prefix for all named
|
|
# volumes. Without this, two users whose compose file lives in a directory
|
|
# with the same basename would share volumes — the Docker daemon is
|
|
# system-wide and doesn't scope by OS user.
|
|
#
|
|
# Two modes:
|
|
# Own-account mode (each user has their own OS login):
|
|
# Leave SIGNUM unset in .env — it defaults to $USER automatically.
|
|
# Shared-account mode (everyone logs in as the same OS user):
|
|
# Set SIGNUM=<unique-id> in .env so each person gets isolated volumes.
|
|
|
|
name: devbox-${SIGNUM:-${USER}}
|
|
|
|
services:
|
|
devbox:
|
|
image: joakimp/opencode-devbox:latest
|
|
container_name: devbox-${SIGNUM:-${USER}}
|
|
stdin_open: true
|
|
tty: true
|
|
env_file:
|
|
- .env
|
|
environment:
|
|
- TERM=xterm-256color
|
|
- GITEA_ACCESS_TOKEN=${GITEA_ACCESS_TOKEN:-}
|
|
- GITEA_HOST=${GITEA_HOST:-}
|
|
# MemPalace transport: empty = LOCAL per-container palace (default);
|
|
# set MEMPALACE_REMOTE_URL to share one external palace. See .env.example.
|
|
- MEMPALACE_REMOTE_URL=${MEMPALACE_REMOTE_URL:-}
|
|
- MEMPALACE_REMOTE_TOKEN=${MEMPALACE_REMOTE_TOKEN:-}
|
|
volumes:
|
|
# Host workspace — user's project directory
|
|
- ${WORKSPACE_PATH:-~/src}:/workspace
|
|
|
|
# SSH keys — user-specific if available, else shared
|
|
- ${SSH_KEY_PATH:-~/.ssh}:/home/developer/.ssh:ro
|
|
|
|
# Optional: mount skillset repo for automatic skill/instruction deployment.
|
|
# The entrypoint runs deploy-skills.sh --bootstrap on start, creating
|
|
# relative symlinks that resolve inside the container regardless of
|
|
# where the repo lives on the host. Set SKILLSET_PATH in .env.
|
|
# - ${SKILLSET_PATH}:/home/developer/skillset
|
|
|
|
# Persist opencode config (opencode.jsonc, oh-my-opencode-slim.json,
|
|
# instructions, etc.) across container recreations. Auto-generated on
|
|
# first start from env vars by generate-config.py and the skillset
|
|
# deploy script. Using a named volume keeps the container's symlinks
|
|
# independent from the host.
|
|
- devbox-opencode-config:/home/developer/.config/opencode
|
|
|
|
# Persist opencode data (auth, memory, session history)
|
|
- devbox-data:/home/developer/.local/share/opencode
|
|
|
|
# Persist bash history across container recreations
|
|
- devbox-shell-history:/home/developer/.cache/bash
|
|
|
|
# Persist zoxide directory history ('z <fragment>' to jump)
|
|
- devbox-zoxide:/home/developer/.local/share/zoxide
|
|
|
|
# Persist neovim plugin/Mason data (avoids re-downloading on every recreate)
|
|
- devbox-nvim-data:/home/developer/.local/share/nvim
|
|
|
|
# Persist uv data (Python installs)
|
|
- devbox-uv:/home/developer/.local/share/uv
|
|
|
|
# Optional: persist MemPalace data (conversation memory, knowledge graph).
|
|
# LOCAL palace only (default). In EXTERNAL mode (MEMPALACE_REMOTE_URL set)
|
|
# the shared server owns the data, so this volume is irrelevant.
|
|
# - devbox-palace:/home/developer/.mempalace
|
|
|
|
# Optional: persist ChromaDB embedding model cache (~79 MB)
|
|
# - devbox-chroma-cache:/home/developer/.cache/chroma
|
|
|
|
# Optional: AWS credentials (per-user if available)
|
|
# - ${HOME}/${SIGNUM}/.aws:/home/developer/.aws
|
|
|
|
volumes:
|
|
devbox-opencode-config:
|
|
devbox-data:
|
|
devbox-shell-history:
|
|
devbox-zoxide:
|
|
devbox-nvim-data:
|
|
devbox-uv:
|
|
# devbox-palace:
|
|
# devbox-chroma-cache:
|