From a52876cd667f55f13d4cff6c9b6b685eeebf5757 Mon Sep 17 00:00:00 2001 From: felix Date: Thu, 2 Jul 2026 12:54:55 +0200 Subject: [PATCH] initial commit --- .gitignore | 3 +++ README.md | 35 +++++++++++++++++++++++++++++++++++ config/opencode/Dockerfile | 19 +++++++++++++++++++ config/opencode/opencode.json | 31 +++++++++++++++++++++++++++++++ data/.gitkeep | 0 docker-compose.yml | 7 +++++++ 6 files changed, 95 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 config/opencode/Dockerfile create mode 100644 config/opencode/opencode.json create mode 100644 data/.gitkeep create mode 100644 docker-compose.yml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..bf8c9a8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +data/* +!data/.gitkeep +docker-compose.override.yml diff --git a/README.md b/README.md new file mode 100644 index 0000000..126c591 --- /dev/null +++ b/README.md @@ -0,0 +1,35 @@ +# app-open-code-experiment + +[opencode](https://opencode.ai/) in a Docker container, wired to [weave](https://weave.redpencil.io) as the model provider. Default model `weave/glm-5.2`. LSP baked in for TypeScript/JS and Python. + +## Setup + +Create a `docker-compose.override.yml` (gitignored) with your weave key and repo mount: + +```yaml +services: + opencode: + environment: + WEAVE_API_KEY: "..." + volumes: + - /path/to/your/repo:/workspace/repo +``` + +Then: + +``` +docker compose up -d +docker compose exec opencode opencode +``` + +Or a one-shot against a registered model: + +``` +docker compose exec opencode opencode run --model weave/glm-5.2 "..." +``` + +## Layout + +- `config/opencode/` - image: Dockerfile + baked `opencode.json` +- `data/` - persisted opencode state (gitignored) +- `docker-compose.yml` - opencode service diff --git a/config/opencode/Dockerfile b/config/opencode/Dockerfile new file mode 100644 index 0000000..df66017 --- /dev/null +++ b/config/opencode/Dockerfile @@ -0,0 +1,19 @@ +FROM node:22-slim + +RUN apt-get update && apt-get install -y --no-install-recommends \ + git curl ca-certificates python3 \ + && rm -rf /var/lib/apt/lists/* + +RUN npm install -g \ + opencode-ai@1.17.9 \ + typescript \ + typescript-language-server \ + pyright + +ENV NODE_PATH=/usr/local/lib/node_modules + +COPY opencode.json /root/.config/opencode/opencode.json + +WORKDIR /workspace + +CMD ["sleep", "infinity"] diff --git a/config/opencode/opencode.json b/config/opencode/opencode.json new file mode 100644 index 0000000..7e4cb10 --- /dev/null +++ b/config/opencode/opencode.json @@ -0,0 +1,31 @@ +{ + "$schema": "https://opencode.ai/config.json", + "model": "weave/glm-5.2", + "small_model": "weave/glm-5.2", + "lsp": { + "typescript": { + "command": ["typescript-language-server", "--stdio"], + "extensions": [".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs", ".mts", ".cts"] + }, + "pyright": { + "command": ["pyright-langserver", "--stdio"], + "extensions": [".py", ".pyi"] + } + }, + "provider": { + "weave": { + "npm": "@ai-sdk/openai-compatible", + "options": { "baseURL": "https://weave.redpencil.io/v1", "apiKey": "{env:WEAVE_API_KEY}" }, + "models": { + "deepinfra/anthropic/claude-4-opus": { "tools": true }, + "glm-5.2": { "tools": true } + } + } + }, + "permission": { + "read": "allow", + "edit": "allow", + "bash": "allow", + "external_directory": "allow" + } +} diff --git a/data/.gitkeep b/data/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..7ab8b14 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,7 @@ +version: '3.7' + +services: + opencode: + build: ./config/opencode/ + volumes: + - ./data/opencode/share:/root/.local/share/opencode