Skip to content

Commit 3182ec6

Browse files
fix: add OpenCode web and repair desktop launcher
1 parent 667e544 commit 3182ec6

13 files changed

Lines changed: 330 additions & 0 deletions

File tree

Docker-Images/Designer/Dockerfile

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,17 @@ apt-get install -y --no-install-recommends libwebkit2gtk-4.1-0
129129
apt-get install -y --no-install-recommends /tmp/visicut.deb /tmp/opencode-desktop.deb
130130
rm /tmp/visicut.deb
131131
rm /tmp/opencode-desktop.deb
132+
# Normalizar el lanzador que instala el .deb de OpenCode Desktop.
133+
set -e; \
134+
if [ -x /opt/OpenCode/ai.opencode.desktop ]; then \
135+
mv /opt/OpenCode/ai.opencode.desktop /opt/OpenCode/ai.opencode.desktop.real; \
136+
printf "%s\n" "#!/bin/sh" "exec /opt/OpenCode/ai.opencode.desktop.real --no-sandbox --disable-gpu-sandbox --disable-setuid-sandbox --disable-seccomp-filter-sandbox --no-zygote --disable-gpu \"\$@\"" > /opt/OpenCode/ai.opencode.desktop; \
137+
chmod +x /opt/OpenCode/ai.opencode.desktop; \
138+
fi; \
139+
if [ -f /usr/share/applications/ai.opencode.desktop.desktop ]; then \
140+
ln -sf /usr/share/applications/ai.opencode.desktop.desktop /usr/share/applications/OpenCode.desktop; \
141+
fi
142+
132143
rm -rf /var/lib/apt/lists/*
133144
EOSH
134145

Docker-Images/Developer/Dockerfile

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,18 @@ RUN set -e; \
193193
apt-get install -y --no-install-recommends /tmp/github-desktop.deb /tmp/opencode-desktop.deb; \
194194
rm -rf /var/lib/apt/lists/* /tmp/github-desktop.deb /tmp/opencode-desktop.deb
195195

196+
# Normalizar el lanzador que instala el .deb de OpenCode Desktop.
197+
RUN set -e; \
198+
if [ -x /opt/OpenCode/ai.opencode.desktop ]; then \
199+
mv /opt/OpenCode/ai.opencode.desktop /opt/OpenCode/ai.opencode.desktop.real; \
200+
printf "%s\n" "#!/bin/sh" "exec /opt/OpenCode/ai.opencode.desktop.real --no-sandbox --disable-gpu-sandbox --disable-setuid-sandbox --disable-seccomp-filter-sandbox --no-zygote --disable-gpu \"\$@\"" > /opt/OpenCode/ai.opencode.desktop; \
201+
chmod +x /opt/OpenCode/ai.opencode.desktop; \
202+
fi; \
203+
if [ -f /usr/share/applications/ai.opencode.desktop.desktop ]; then \
204+
ln -sf /usr/share/applications/ai.opencode.desktop.desktop /usr/share/applications/OpenCode.desktop; \
205+
fi
206+
207+
196208
# Claude Desktop desde el repo APT oficial de Anthropic (downloads.claude.ai).
197209
# Se mantiene el source list para recibir actualizaciones vía `apt upgrade`.
198210
# No hace falta wrapper --no-sandbox: ELECTRON_DISABLE_SANDBOX / OZONE / COWORK_VM_BACKEND

Docker-Images/DeveloperAndroid/Dockerfile

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,18 @@ RUN set -e; \
142142
apt-get install -y --no-install-recommends /tmp/opencode-desktop.deb; \
143143
rm -rf /var/lib/apt/lists/* /tmp/opencode-desktop.deb
144144

145+
# Normalizar el lanzador que instala el .deb de OpenCode Desktop.
146+
RUN set -e; \
147+
if [ -x /opt/OpenCode/ai.opencode.desktop ]; then \
148+
mv /opt/OpenCode/ai.opencode.desktop /opt/OpenCode/ai.opencode.desktop.real; \
149+
printf "%s\n" "#!/bin/sh" "exec /opt/OpenCode/ai.opencode.desktop.real --no-sandbox --disable-gpu-sandbox --disable-setuid-sandbox --disable-seccomp-filter-sandbox --no-zygote --disable-gpu \"\$@\"" > /opt/OpenCode/ai.opencode.desktop; \
150+
chmod +x /opt/OpenCode/ai.opencode.desktop; \
151+
fi; \
152+
if [ -f /usr/share/applications/ai.opencode.desktop.desktop ]; then \
153+
ln -sf /usr/share/applications/ai.opencode.desktop.desktop /usr/share/applications/OpenCode.desktop; \
154+
fi
155+
156+
145157
# Android SDK commandline tools + componentes principales
146158
ENV ANDROID_HOME=/home/coder/Android/Sdk \
147159
ANDROID_SDK_ROOT=/home/coder/Android/Sdk \

workspaces/AdvancedHostDANGER/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ tags: [docker, workspace, host, danger, makespace]
1818
- Python listo para venvs (`python3-venv`) + venv base en `~/.venvs/base`.
1919
- Accesos directos precreados en el escritorio y módulos KasmVNC, Filebrowser, OpenCode. RDP es solo para workspaces Windows según [la guía de Coder](https://coder.com/docs/user-guides/workspace-access/remote-desktops); esta imagen Linux usa KasmVNC.
2020
- Antigravity auto-updater (`antigravity`) preinstalado.
21+
- `OpenCode Web` se inicia automáticamente y aparece como app privada del propietario en Coder.
2122

2223
## Uso recomendado
2324
- Pruebas que requieran Docker/Network del host, diagnósticos de red, acceso a GPUs del host.

workspaces/AdvancedHostDANGER/main.tf

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -435,6 +435,9 @@ JSONCFG
435435
436436
# Refrescar accesos directos en el escritorio (si faltan)
437437
mkdir -p ~/Desktop
438+
if [ -f /usr/share/applications/ai.opencode.desktop.desktop ]; then
439+
ln -sfn /usr/share/applications/ai.opencode.desktop.desktop "$HOME/Desktop/OpenCode.desktop"
440+
fi
438441
for f in code.desktop github-desktop.desktop claude-desktop.desktop OpenCode.desktop firefox.desktop google-chrome.desktop geany.desktop appimagepool.desktop; do
439442
src="/usr/share/applications/$f"
440443
if [ -f "$src" ] && [ ! -e "$HOME/Desktop/$f" ]; then
@@ -1150,6 +1153,62 @@ module "opencode" {
11501153
workdir = "/home/coder/"
11511154
}
11521155

1156+
# UI web nativa de OpenCode, además de la integración AgentAPI del módulo.
1157+
resource "coder_script" "opencode_web" {
1158+
count = local.install_claude ? 0 : 1
1159+
agent_id = coder_agent.main.id
1160+
display_name = "Start OpenCode Web"
1161+
icon = "/icon/opencode.svg"
1162+
run_on_start = true
1163+
start_blocks_login = false
1164+
script = <<-EOT
1165+
#!/usr/bin/env bash
1166+
set -euo pipefail
1167+
port=4096
1168+
health_url="http://127.0.0.1:$port/global/health"
1169+
log_dir="$HOME/.opencode"
1170+
log_file="$log_dir/opencode-web.log"
1171+
export PATH="$HOME/.opencode/bin:$HOME/.local/bin:$PATH"
1172+
for _ in $(seq 1 120); do
1173+
if command -v opencode >/dev/null 2>&1; then break; fi
1174+
sleep 1
1175+
done
1176+
opencode_bin="$(command -v opencode || true)"
1177+
if [ -z "$opencode_bin" ]; then
1178+
echo "OpenCode no se instaló en dos minutos; consulta ~/.opencode-module" >&2
1179+
exit 1
1180+
fi
1181+
if curl --fail --silent --max-time 2 "$health_url" >/dev/null; then exit 0; fi
1182+
mkdir -p "$log_dir"
1183+
nohup "$opencode_bin" web --hostname 127.0.0.1 --port "$port" >>"$log_file" 2>&1 &
1184+
for _ in $(seq 1 30); do
1185+
if curl --fail --silent --max-time 2 "$health_url" >/dev/null; then exit 0; fi
1186+
sleep 1
1187+
done
1188+
echo "OpenCode Web no respondió en $health_url; consulta $log_file" >&2
1189+
exit 1
1190+
EOT
1191+
depends_on = [module.opencode]
1192+
}
1193+
1194+
resource "coder_app" "opencode_web" {
1195+
count = local.install_claude ? 0 : 1
1196+
agent_id = coder_agent.main.id
1197+
slug = "opencode-web"
1198+
display_name = "OpenCode Web"
1199+
icon = "/icon/opencode.svg"
1200+
url = "http://127.0.0.1:4096"
1201+
share = "owner"
1202+
subdomain = false
1203+
open_in = "tab"
1204+
healthcheck {
1205+
url = "http://127.0.0.1:4096/global/health"
1206+
interval = 5
1207+
threshold = 6
1208+
}
1209+
depends_on = [coder_script.opencode_web]
1210+
}
1211+
11531212
module "claude-code" {
11541213
count = local.install_claude ? 1 : 0
11551214
source = "registry.coder.com/coder/claude-code/coder"

workspaces/Developer/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ Workspace de desarrollo general, con **Docker in Docker (DinD)**, escritorio XFC
4040
- Code-server abre por defecto la carpeta clonada en `~/Projects/<repo>`.
4141
- [AI/OpenCode] Provisionar API_KEY de MakeSpace automáticamente: viene activo por defecto, genera la key MakeSpace (30 días), configura OpenCode (base URL por entorno si no pones URL) y exporta `MKS_BASE_URL`/`MKS_API_KEY`.
4242
- [AI/OpenAI] Base URL / API key (opcionales): rellénalas para usar tu proveedor o desactiva la casilla anterior si no quieres la llave preprovisionada. La autoprovisión requiere `TF_VAR_opencode_default_base_url` y `TF_VAR_mks_key_endpoint`.
43+
- `OpenCode Web`: app web nativa de OpenCode, arrancada automáticamente y accesible solo por el propietario desde las apps de Coder.
4344
- [AI/Claude] Token: si lo rellenas se instalará Claude Code (subdomain=false) y las tareas de Coder usarán Claude; OpenCode no instala módulo (solo CLI via script) para evitar conflictos.
4445

4546
## Notas de uso

workspaces/Developer/main.tf

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -478,6 +478,9 @@ JSONCFG
478478
479479
# Refrescar accesos directos en el escritorio (si faltan)
480480
mkdir -p ~/Desktop
481+
if [ -f /usr/share/applications/ai.opencode.desktop.desktop ]; then
482+
ln -sfn /usr/share/applications/ai.opencode.desktop.desktop "$HOME/Desktop/OpenCode.desktop"
483+
fi
481484
for f in code.desktop github-desktop.desktop claude-desktop.desktop OpenCode.desktop firefox.desktop google-chrome.desktop geany.desktop appimagepool.desktop; do
482485
src="/usr/share/applications/$f"
483486
if [ -f "$src" ] && [ ! -e "$HOME/Desktop/$f" ]; then
@@ -1340,6 +1343,62 @@ module "opencode" {
13401343
cli_app = false
13411344
}
13421345

1346+
# UI web nativa de OpenCode, además de la integración AgentAPI del módulo.
1347+
resource "coder_script" "opencode_web" {
1348+
count = local.install_claude ? 0 : 1
1349+
agent_id = coder_agent.main.id
1350+
display_name = "Start OpenCode Web"
1351+
icon = "/icon/opencode.svg"
1352+
run_on_start = true
1353+
start_blocks_login = false
1354+
script = <<-EOT
1355+
#!/usr/bin/env bash
1356+
set -euo pipefail
1357+
port=4096
1358+
health_url="http://127.0.0.1:$port/global/health"
1359+
log_dir="$HOME/.opencode"
1360+
log_file="$log_dir/opencode-web.log"
1361+
export PATH="$HOME/.opencode/bin:$HOME/.local/bin:$PATH"
1362+
for _ in $(seq 1 120); do
1363+
if command -v opencode >/dev/null 2>&1; then break; fi
1364+
sleep 1
1365+
done
1366+
opencode_bin="$(command -v opencode || true)"
1367+
if [ -z "$opencode_bin" ]; then
1368+
echo "OpenCode no se instaló en dos minutos; consulta ~/.opencode-module" >&2
1369+
exit 1
1370+
fi
1371+
if curl --fail --silent --max-time 2 "$health_url" >/dev/null; then exit 0; fi
1372+
mkdir -p "$log_dir"
1373+
nohup "$opencode_bin" web --hostname 127.0.0.1 --port "$port" >>"$log_file" 2>&1 &
1374+
for _ in $(seq 1 30); do
1375+
if curl --fail --silent --max-time 2 "$health_url" >/dev/null; then exit 0; fi
1376+
sleep 1
1377+
done
1378+
echo "OpenCode Web no respondió en $health_url; consulta $log_file" >&2
1379+
exit 1
1380+
EOT
1381+
depends_on = [module.opencode]
1382+
}
1383+
1384+
resource "coder_app" "opencode_web" {
1385+
count = local.install_claude ? 0 : 1
1386+
agent_id = coder_agent.main.id
1387+
slug = "opencode-web"
1388+
display_name = "OpenCode Web"
1389+
icon = "/icon/opencode.svg"
1390+
url = "http://127.0.0.1:4096"
1391+
share = "owner"
1392+
subdomain = false
1393+
open_in = "tab"
1394+
healthcheck {
1395+
url = "http://127.0.0.1:4096/global/health"
1396+
interval = 5
1397+
threshold = 6
1398+
}
1399+
depends_on = [coder_script.opencode_web]
1400+
}
1401+
13431402
module "claude-code" {
13441403
count = local.install_claude ? 1 : 0
13451404
source = "registry.coder.com/coder/claude-code/coder"

workspaces/DeveloperAndroid/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ Workspace gráfico KDE/KasmVNC con toolchain Android preinstalado. Usa la imagen
1919
- Google Chrome, Firefox y OpenCode Desktop preinstalados.
2020
- Módulos Coder: KasmVNC (KDE), code-server, Filebrowser, OpenCode, git-config, tmux.
2121
- Autoprovisiona una key de IA MakeSpace (30 días) si dejas activa la casilla `[AI/OpenCode] Provisionar API key MakeSpace automáticamente` y el endpoint está configurado por entorno.
22+
- `OpenCode Web` se inicia automáticamente y aparece como app privada del propietario en Coder.
2223
- Antigravity auto-updater (`antigravity`) preinstalado.
2324

2425
## Creación rápida en Coder

workspaces/DeveloperAndroid/main.tf

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -456,6 +456,9 @@ JSONCFG
456456
457457
# Refrescar accesos directos en el escritorio (si faltan)
458458
mkdir -p ~/Desktop
459+
if [ -f /usr/share/applications/ai.opencode.desktop.desktop ]; then
460+
ln -sfn /usr/share/applications/ai.opencode.desktop.desktop "$HOME/Desktop/OpenCode.desktop"
461+
fi
459462
for f in android-studio.desktop code.desktop OpenCode.desktop firefox.desktop google-chrome.desktop; do
460463
src="/usr/share/applications/$f"
461464
if [ -f "$src" ] && [ ! -e "$HOME/Desktop/$f" ]; then
@@ -1089,6 +1092,62 @@ module "opencode" {
10891092
cli_app = false
10901093
}
10911094

1095+
# UI web nativa de OpenCode, además de la integración AgentAPI del módulo.
1096+
resource "coder_script" "opencode_web" {
1097+
count = local.install_claude ? 0 : 1
1098+
agent_id = coder_agent.main.id
1099+
display_name = "Start OpenCode Web"
1100+
icon = "/icon/opencode.svg"
1101+
run_on_start = true
1102+
start_blocks_login = false
1103+
script = <<-EOT
1104+
#!/usr/bin/env bash
1105+
set -euo pipefail
1106+
port=4096
1107+
health_url="http://127.0.0.1:$port/global/health"
1108+
log_dir="$HOME/.opencode"
1109+
log_file="$log_dir/opencode-web.log"
1110+
export PATH="$HOME/.opencode/bin:$HOME/.local/bin:$PATH"
1111+
for _ in $(seq 1 120); do
1112+
if command -v opencode >/dev/null 2>&1; then break; fi
1113+
sleep 1
1114+
done
1115+
opencode_bin="$(command -v opencode || true)"
1116+
if [ -z "$opencode_bin" ]; then
1117+
echo "OpenCode no se instaló en dos minutos; consulta ~/.opencode-module" >&2
1118+
exit 1
1119+
fi
1120+
if curl --fail --silent --max-time 2 "$health_url" >/dev/null; then exit 0; fi
1121+
mkdir -p "$log_dir"
1122+
nohup "$opencode_bin" web --hostname 127.0.0.1 --port "$port" >>"$log_file" 2>&1 &
1123+
for _ in $(seq 1 30); do
1124+
if curl --fail --silent --max-time 2 "$health_url" >/dev/null; then exit 0; fi
1125+
sleep 1
1126+
done
1127+
echo "OpenCode Web no respondió en $health_url; consulta $log_file" >&2
1128+
exit 1
1129+
EOT
1130+
depends_on = [module.opencode]
1131+
}
1132+
1133+
resource "coder_app" "opencode_web" {
1134+
count = local.install_claude ? 0 : 1
1135+
agent_id = coder_agent.main.id
1136+
slug = "opencode-web"
1137+
display_name = "OpenCode Web"
1138+
icon = "/icon/opencode.svg"
1139+
url = "http://127.0.0.1:4096"
1140+
share = "owner"
1141+
subdomain = false
1142+
open_in = "tab"
1143+
healthcheck {
1144+
url = "http://127.0.0.1:4096/global/health"
1145+
interval = 5
1146+
threshold = 6
1147+
}
1148+
depends_on = [coder_script.opencode_web]
1149+
}
1150+
10921151
module "claude-code" {
10931152
count = local.install_claude ? 1 : 0
10941153
source = "registry.coder.com/coder/claude-code/coder"

workspaces/Maker/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ Template con escritorio KDE/KasmVNC y herramientas de diseño 2D/3D + electróni
2121
- Docs/tipografía: Pandoc, FontForge
2222
- Módulos Coder: KasmVNC, Filebrowser, OpenCode. RDP aplica solo a workspaces Windows según [las docs de Coder](https://coder.com/docs/user-guides/workspace-access/remote-desktops); esta imagen Linux usa KasmVNC.
2323

24+
- `OpenCode Web` se inicia automáticamente y aparece como app privada del propietario en Coder.
2425
## Creación rápida en Coder
2526
- `Habilitar GPUs`: actívalo si lo necesitas.
2627
- `Persistir home en el host`: monta `/home/coder` en `TF_VAR_users_storage/<usuario>/<workspace>`.

0 commit comments

Comments
 (0)