Push261105 — Reparación de web UI archive en v2 (2.0.25→2.0.31) + v1 1.19.5 native restaurado
GitHub Release · 中文版 · English · Español · 日本語 · 繁體中文
Resumen
Dos reparaciones en la línea native: una regresión silenciosa del web
UI archive que afectó a todas las versiones v2 de 2.0.25 a 2.0.31, y la
restauración de v1 native 1.19.5, retirado en el lote
anterior.
- v2 native
2.0.25–2.0.31(7 versiones) —/_assets/del web UI reparado - v1 native
1.19.5— revivido y de nuevo en servicio
16 paquetes en total: 14 de v2 + 2 de v1 (deb + pacman por versión), más un manifiesto SHA256SUMS.
v2: regresión del web UI archive
El upstream reescribió en 2.0.25 la guarda skipBuild de
app-assets.ts. El ancla exacta anterior dejó de coincidir
en silencio, el parche se omitió y el binario resultante salió con
cero entradas /_assets/ embebidas.
serve y pair respondían 404 a todas las
peticiones /_assets/* — el web UI mostraba una pantalla en
blanco tras el login. Todo lo demás funcionaba y la TUI seguía
operativa, que es justamente por lo que pasó desapercibido.
La corrección tiene tres capas:
- ancla por expresión regular en lugar de coincidencia exacta, para que los cambios de formato del upstream no rompan el parche;
- fallo duro si falta el ancla — se elimina la omisión silenciosa;
- aserción
stringstras la compilación que verifica que el binario realmente embebe los assets.
Auto-verificación en una instalación v2 native:
strings -a $PREFIX/bin/opencode | grep -c '/_assets/'
# debe ser > 0 — en este lote todas las versiones traen 7v1: 1.19.5 restaurado
v1 native 1.19.5 fue retirado en el lote anterior. Causa
raíz: bun ≥1.4.1 escribe grafos de módulos con cuerpos UTF-16
(encoding=2) y 38 módulos Text loader, y la base bun 1.4.0
no entiende ninguno de los dos — el primero cae con
Invalid character '\0', el segundo con
Unexpected identifier.
La corrección es un posprocesador del grafo,
tools/transplant/fix_graph_for_bun140.py: los cuerpos
UTF-16 se convierten a UTF-8, los módulos Text se reescriben como
export default "...", los puntos de consumo reciben un
namespace shim y los módulos reubicados se aparcan en una zona muerta.
Sin recompilar bun y sin depender del bun#47906 del upstream (el issue
sigue abierto).
splice de PTY en v1
Los paquetes v1 native ahora incluyen el splice de PTY
(lib/opencode1/pty/{librust_pty_arm64_musl_patched.so, shim.so}),
por lo que POST /api/pty funciona. Los paquetes native sin
el splice devolvían 500 en ese endpoint.
Compatibilidad
- Dentro de una misma generación, native / wrapper / compressed son mutuamente excluyentes — instale solo una forma.
- Entre generaciones,
opencode1*(v1) yopencode*(v2) pueden coexistir. - Todos los paquetes v1 tienen versiones inferiores a
2.0.0.
Verificación
| Comprobación | Resultado |
|---|---|
strings -a <runtime> | grep -c '/_assets/' en v2
2.0.25–2.0.31 |
7 por versión |
serve responde 200 para /_assets/* |
pasa |
v1 1.19.5 TUI se dibuja en pantalla |
pasa |
v1 1.19.5 POST /api/pty devuelve un
proceso en ejecución |
pasa |
Instalación
curl -fsSL https://hope2333.github.io/repo/install.sh | sh -s -- --install opencode
pacman -S opencode # línea principal v2
pacman -S opencode1 # línea principal v1 (coexiste con v2)Problemas conocidos
- Primer pintado de v1
1.19.5en dispositivos antiguos: el bootstrap puede esperar ~75 s; provocar un redimensionamiento fuerza un redibujado y después todo funciona con normalidad. - v1
1.19.5y1.19.4son intercambiables para hacer rollback. - El bun#47906 del upstream sigue abierto; esta compilación no depende de él.