diff --git a/.claude/skills/lich-changelog-i18n/SKILL.md b/.claude/skills/lich-changelog-i18n/SKILL.md index 1ea368b6..93313142 100644 --- a/.claude/skills/lich-changelog-i18n/SKILL.md +++ b/.claude/skills/lich-changelog-i18n/SKILL.md @@ -1,14 +1,15 @@ --- name: lich-changelog-i18n -description: Translate the latest release's CHANGELOG.md section into every interface language lich ships, writing changelog/.md, the files the What's new popup reads. Use when cutting a release (right after its section moves out of [Unreleased]), when TestTranslations in internal/patchnotes fails, or when a language is added. +description: Translate the latest release's CHANGELOG.md section into every interface language lich ships, adding it to changelog/.md, the files the What's new popup and the site's changelog pages read. Use when cutting a release (right after its section moves out of [Unreleased]), when TestTranslations in internal/patchnotes fails, or when a language is added. --- # lich changelog translations The What's new popup shows the running build's `CHANGELOG.md` section (`internal/patchnotes`). A user whose interface language is not English reads it from `changelog/.md` instead, embedded in the binary -next to `CHANGELOG.md`. Each file holds **only the latest release**: a build only ever reads its own version, -and git keeps the old translations. `CHANGELOG.md` stays English and canonical; the release page reads it. +next to `CHANGELOG.md`. Each file holds **every translated release, newest first**: a build only reads its own +version, but the site's changelog page in that language lists them all and sends the reader to the English page +where they stop. `CHANGELOG.md` stays English and canonical; the release page reads it. ## When @@ -23,8 +24,9 @@ means running it again. 2. **One file per locale, except English.** The locales are `prompt.Langs` (`internal/prompt/prompt.go`), file names are their tags as written there: `pt-BR.md`, `es.md`, `zh-CN.md`, `ja.md`, `ko.md`, `ru.md`. A language added to lich gets its file in the same PR. -3. **Overwrite each file** with the translated section and nothing else: no `# Changelog` title, no - `[Unreleased]`, no older release, no compare links. +3. **Add the translated section at the top of each file**, above the previous release, with a blank line + between them, and nothing else: no `# Changelog` title, no `[Unreleased]`, no compare links. Running it again + for the same release replaces that release's section, never adds a second one. 4. **Translate from the English**, never from another translation. The locales are independent, so each one can go to its own subagent in parallel, on a cheap model (Sonnet); hand each the English section and the rules below. @@ -61,7 +63,8 @@ The parser and both windows read these, so `TestTranslations` fails when one is ## If the check fails -- `version headings = …`: the file holds another release, or more than one. Rewrite it from step 1. +- `version headings = …`: the file does not open with the latest release, skips one, or holds one twice. + Put the latest release's section at the top, once, from step 1. - `N groups` / `N items`: an item was merged, split or lost, often a blank line inside an item. - `group N is "…"`: a `### ` heading was translated. - `code spans …` or `bold markers …`: a code span was changed or a `**` was lost; the message prints the diff --git a/changelog/es.md b/changelog/es.md index a3e0f44c..d1e98087 100644 --- a/changelog/es.md +++ b/changelog/es.md @@ -13,3 +13,337 @@ - Las teclas muertas componen en el terminal de una sesión: en macOS, ~ y luego a escribe ã, y ' y luego c escribe ç, cuando antes el acento llegaba solo antes de la letra. El texto que un método de entrada aún está componiendo, como el de un IME japonés o chino, tampoco llega ya al programa antes de confirmarse. - Tras cambiar de modelo en una sesión de Claude Code con `/model`, el pie y el tooltip de la tarjeta de la sesión nombran el nuevo modelo en cuanto termina su primer turno. Antes conservaban el anterior hasta un turno posterior o una reconexión, porque lich leía el transcript antes de que Claude Code hubiera escrito la última línea de ese turno. - En macOS, los botones de cerrar, minimizar y zoom se mantienen centrados en la barra de título. macOS los devolvía a la parte superior de la barra al abrirse la ventana, al cambiar a otra app y volver, y cuando el sistema alternaba entre claro y oscuro, hasta que se redimensionaba la ventana. + +## [0.75.0] - 2026-10-21 + +### Added + +- Un archivo Markdown en la pestaña Revisión tiene un botón de vista previa junto a "Añadir archivo como contexto" que muestra el archivo renderizado, con tablas y enlaces, en lugar de su diff. Púlsalo de nuevo para volver al diff. En la pantalla Pull requests, solo los archivos que añade el pull request lo tienen. +- Ctrl+F (Cmd+F en macOS) en un archivo abierto en la pestaña Código busca texto en él. Una barra bajo el nombre del archivo resalta cada coincidencia, las recorre con Enter y Shift+Enter, y puede distinguir mayúsculas, buscar palabras completas o usar una expresión regular. Su botón de lista muestra bajo la barra cada línea con una coincidencia, y al hacer clic en una el código se desplaza hasta allí. Escape la cierra. +- El tooltip de la tarjeta de una sesión nombra el modelo que la sesión está ejecutando, en Claude Code, Codex y Kiro CLI. Cuando ya no es el modelo con el que se abrió la sesión, tras un `/model` por ejemplo, la línea dice "Abierta con …, ejecutando …". +- La pantalla Pull requests edita el título y la descripción de un pull request y los envía a GitHub. El lápiz tras el título lo renombra en el sitio: Enter o hacer clic fuera guarda, Escape cancela. Editar junto a la Descripción del Resumen la abre como Markdown, y se guarda con Guardar o Ctrl+Enter (Cmd+Enter en macOS). Una descripción larga se desplaza dentro del campo, con una barra de desplazamiento, para que Guardar siga en pantalla. Cada una envía solo lo que cambió, así que guardar la descripción nunca deshace un cambio de nombre hecho mientras tanto en GitHub. +- Un perfil puede tener su propio color e imagen. En Ajustes › Proveedores, el menú ⋯ de un perfil tiene Color, con los mismos ocho colores que una tarjeta de sesión, y Elegir imagen…, que acepta un PNG, JPEG, GIF o WebP de hasta 10 MB y conserva su cuadrado centrado. La imagen o el color se muestra dondequiera que aparezca el perfil: la lista y el selector de perfiles, el pie de la barra lateral y Continuar en. Quitar imagen vuelve a la inicial sobre el color del perfil. + +### Changed + +- Un bloque de tarjetas en la barra lateral, una worktree, una carpeta o el bloque fijado, ahora crece al abrirse su primera tarjeta y se encoge con la última, cuando antes aparecía y desaparecía de golpe. Los encabezados que se muestran cuando la lista se divide en bloques se despliegan igual, y se pliegan cuando queda uno solo. +- Las comprobaciones de un pull request que siguen en ejecución ahora muestran un spinner girando, en su pestaña Comprobaciones y en la línea de estado sobre las pestañas, donde antes había un reloj detenido. +- Los botones ya no se hunden un píxel mientras se pulsan, así que todos los botones de la ventana se comportan igual: los que tenían este movimiento ahora coinciden con los que nunca lo tuvieron. + +### Removed + +- **Breaking:** lich ya no ejecuta `.lich/setup-worktree.sh` cuando `lich open --worktree` o el `open_session` de un agente inicia una sesión en una worktree nueva. El archivo de tu repositorio no se toca. Si tus worktrees dependían de él para instalar dependencias, ejecútalo tú mismo en la terminal de la nueva worktree (`sh .lich/setup-worktree.sh`), o pídeselo al agente. La copia de tus archivos `.env*` ignorados por git (o de lo que nombre `.worktreeinclude`) y el puerto de servidor de desarrollo `LICH_WORKTREE_PORT` siguen igual. + +### Fixed + +- El `git commit`, `rebase` o `stash` de un agente ya no falla de vez en cuando con "Unable to create '.git/index.lock': File exists" porque lich estaba leyendo el estado o el diff de ese checkout en el mismo momento. Las lecturas de lich dejan el índice en paz. +- La tarjeta de una sesión cerrada vuelve a encogerse fuera de la barra lateral, cuando antes desaparecía de golpe. +- Ctrl+Z en una sesión ya no congela a su agente para siempre. Antes suspendía al agente, y nada en lich podía devolverlo a la vida; ahora lich mantiene la tecla fuera de la sesión. +- Las barras del tooltip de uso del plan, en el pie, vuelven a mostrar su pista vacía en los temas cuyos colores de popover y muted son iguales, como Everforest, donde solo se dibujaba la parte rellena. +- Abrir o cerrar la lista de pull requests en la pantalla Pull requests ya no hace que la pestaña del proyecto activo suelte el panel que tiene debajo y lo agarre de nuevo. La pestaña permanece conectada todo el tiempo y pasa a la lista cuando esta se desliza por debajo. + +## [0.74.0] - 2026-10-20 + +### Added + +- F11 pone la ventana en pantalla completa y la devuelve a su tamaño, sin los botones de minimizar, maximizar y cerrar mientras está así. El atajo se puede cambiar en Ajustes › Atajos. + +### Changed + +- Un pull request que tiene conflictos con su base ya no lista los archivos en conflicto bajo su título. El estado "Conflictos con" los cuenta, y al hacer clic en él se abre un panel sobre la pantalla que nombra cada uno. +- **Resolver conflictos** y **Corregir errores de CI** en un pull request, y una worktree iniciada desde una issue `#123`, ahora envían su mensaje a la sesión que abren, en lugar de dejarlo en el prompt esperando a que pulses Enter. A una tarjeta de terminal de ese checkout nunca se le envía nada. + +### Fixed + +- La pestaña del proyecto activo ahora se separa de la isla del terminal cuando abrir o redimensionar el panel Código o Revisión hace que se superponga al panel, y vuelve a conectarse cuando cabe de nuevo. +- En macOS, los botones de cerrar, minimizar y zoom quedan centrados en la barra de título de la ventana nativa, en lugar de pegados a su borde superior, y siguen el zoom de la interfaz. +- La ventana se puede arrastrar por su barra superior: pasada la última pestaña y en los huecos alrededor de la marca y de los botones. Antes, ninguna parte de la barra la movía. +- La pantalla Pull requests mantiene al día lo que muestra sin pulsar Actualizar. Vuelve a leer un pull request cada pocos segundos mientras GitHub aún calcula si se puede fusionar, una vez por minuto mientras la pantalla está abierta y cuando vuelves a la ventana, de modo que un push, una fusión o un conflicto hechos fuera de lich aparecen solos. + +## [0.73.0] - 2026-10-20 + +> [!IMPORTANT] +> **Todos: la ventana nativa es ahora la única ventana de lich.** lich la abre en cada +> inicio; la ventana web y su Chromium integrado desaparecen. + +### Added + +- **Notificaciones de escritorio en las que puedes hacer clic, en la ventana nativa de Windows y macOS.** Como en Linux, una sesión que necesita tu intervención o terminó su turno muestra una notificación con Abrir y Descartar: Abrir lleva lich a la tarjeta de esa sesión, y la notificación desaparece cuando respondes o abres la sesión. En macOS requiere ejecutar lich desde Lich.app y pide permiso una sola vez; en Windows, una sesión que te espera mantiene su notificación en pantalla hasta que actúes sobre ella. +- Ajustes › Proveedores avisa bajo Perfil cuando las sesiones arrancan con un binario personalizado, con su ruta y botones para mostrarlo o volver al predeterminado. Un script que define su propio inicio de sesión o directorio de configuración se impone al perfil, y el ajuste Binario queda plegado al final de la pantalla. + +### Changed + +- Cuando el proceso de una sesión termina, ahora un aviso en la esquina inferior derecha pregunta qué hacer, en lugar de la banda al pie del terminal. Una tarjeta con una conversación ofrece Retomar, que vuelve a abrir esa misma conversación (en el perfil en que empezó), Empezar otra, que inicia una nueva en la tarjeta como hacía Reiniciar, y Cerrar sesión. Un shell, o un agente que terminó antes de su primer prompt, ofrece Reiniciar y Cerrar sesión. Descartar el aviso deja la tarjeta como está, y enfocar la tarjeta lo trae de vuelta. +- **El perfil del proyecto vive al pie de la barra lateral, no en cada tarjeta.** Con más de un inicio de sesión para un proveedor, la última línea de la barra lateral indica el perfil en que arrancan las nuevas sesiones de este proyecto: el proveedor de la tarjeta en pantalla, o el predeterminado para un terminal. Haz clic para elegir otro inicio de sesión, con el uso de cinco horas de cada uno, o para volver al de Global; Otros proveedores cambia el resto desde el mismo menú. Las tarjetas ya no llevan la etiqueta del perfil junto a su rama. + +### Removed + +- La ventana web. lich abre la ventana nativa, y una versión ya no incluye Chromium. La opción Ventana en Ajustes (web o nativa) y el elemento de la bandeja que abría la otra ventana desaparecen, igual que `lich -- `, `lich --shell` y `LICH_SHELL`. Si la ventana nativa no puede arrancar, lich dice por qué y dónde está su log. + +### Fixed + +- Iniciar sesión en un perfil de Claude Code o Codex ahora muestra que está autenticando cuando terminas en el navegador, o cuando envías un código pegado, mientras que antes el diálogo seguía esperando el inicio de sesión hasta el final y el campo del código solo se vaciaba. +- En portugués de Brasil, todos los mensajes llaman ahora a un worktree "a worktree", donde algunos decían "o worktree". +- En macOS la ventana nativa vuelve a tener sus botones de cerrar, minimizar y zoom; desde 0.72.0 la barra superior dejaba su espacio vacío. +- En Windows, actualizar lich desde la ventana nativa ya no se revierte con "Setup was unable to automatically close all applications": la ventana seguía abierta sobre `lich-native.exe`, que el instalador debe reemplazar. Ahora se cierra antes de que corra el instalador y se abre de nuevo cuando lich regresa. Actualizar desde 0.72.0 o anterior todavía lo sufre una vez: finaliza `lich-native.exe` en el Administrador de tareas cuando aparezca el mensaje, elige Reintentar y abre lich desde el menú Inicio después. +- Cerrar la ventana nativa mientras lich no está, tras salir o mientras se reinicia, la cierra, sea cual sea el valor de "Al cerrar la ventana". Con Preguntar o Salir seguía abierta y solo mostraba un error de que no se pudieron contar las sesiones. +- En una ventana de Ajustes estrecha, un ajuste cuyo control es demasiado ancho para compartir la línea, como el selector de Perfil de un proveedor, ahora coloca el control bajo su título y descripción, donde el texto quedaba apretado en una franja y se partía letra por letra. El enlace de Documentación de un proveedor también pasa bajo su nombre en lugar de chocar con el interruptor Activado. +- Continuar en puede mover una conversación de Claude Code de vuelta al perfil que acaba de dejar, donde un hook de plugin que siguió corriendo después de terminar la sesión (el de WakaTime, por ejemplo) dejaba un archivo y el traslado se rechazaba con "already holds". + +## [0.72.0] - 2026-10-19 + +### Changed + +- La barra superior de la ventana nativa es ahora su barra de título: la barra del sistema desaparece, y minimizar, maximizar y cerrar quedan junto a Ajustes, dibujados como los dibujan Windows, GNOME y KDE y en el lado donde los pone tu escritorio; en macOS los semáforos quedan en la barra superior. Arrastra la parte vacía de la barra superior para mover la ventana y haz doble clic en ella para maximizarla. Los gestores de ventanas en mosaico conservan sus propias decoraciones. + +### Fixed + +- `lich quit` ya no falla con "EOF" cuando lich se cierra antes de responder: espera a que el puerto se cierre en lugar de tomar la respuesta perdida como un rechazo. +- En Wayland, la ventana nativa muestra el cursor del propio escritorio, con su tema y su tamaño, donde podía mostrar otro tema. En un monitor con una escala menor que la del más grande, el cursor ya no salta al entrar en la ventana. +- En Linux, la ventana nativa se agrupa bajo el icono propio de lich en el dock, donde aparecía como una app aparte con un icono genérico. +- En la Revisión de la ventana nativa y en los Archivos de un pull request, la barra de desplazamiento mantiene su tamaño mientras te desplazas, donde crecía y se encogía según el archivo que llenaba la vista. Arrastrarla ahora recorre el diff de forma uniforme, no archivo por archivo. + +## [0.71.2] - 2026-10-19 + +### Fixed + +- La ventana nativa vuelve a abrirse en Windows y macOS, donde se cerraba al + instante buscando fontconfig para dibujar las vistas de código y de diff. +- Los emojis en la terminal de la ventana nativa se dibujan en color en Windows, + donde salían solo como contornos. +- El comando de actualización que se ofrece a una instalación en macOS ahora hace tap de `lichdotdev/tap` antes de actualizar. Una instalación desde el antiguo `omartelo/tap` fallaba con "Cask 'lichdotdev/tap/lich' is unavailable", ya que Homebrew no sigue por sí solo un tap que se movió; haz el tap una vez con `brew tap lichdotdev/tap` para actualizar desde un lich anterior. +- En la ventana nativa, "Desplegar pegados largos" ahora despliega los pegados de Claude Code y Kiro CLI: el portapapeles, un lote de comentarios de revisión, el prompt con el que un pull request o issue abre una sesión y las rutas de archivo soltadas o adjuntadas. + +## [0.71.1] - 2026-10-18 + +### Fixed + +- La ventana nativa en Linux ya no se cierra con una instrucción ilegal al abrir un terminal en una CPU sin AVX-512. + +## [0.71.0] - 2026-10-17 + +### Added + +- **Diseños divididos en la ventana nativa (experimental).** Coloca lado a lado + sesiones de cualquier proyecto abierto y divídelas como quieras: + Ctrl+Shift+G divide la sesión enfocada hacia la derecha, Ctrl+Shift+I hacia + abajo, y cada una pregunta qué sesión va ahí; también puedes arrastrar una + tarjeta de la barra lateral al borde de un panel. Reorganiza un diseño + arrastrando un panel por su cabecera hasta el borde de otro panel, o hasta su + centro para intercambiar los dos, y alterna una pareja entre lado a lado y + apilada con Ctrl+Shift+R. Cada diseño es una pestaña después de los + proyectos, con el estado de sus paneles, y se renombra con doble clic; + arrastra el espacio entre dos paneles para redimensionarlos, amplía uno con + Ctrl+Shift+M, muévete entre ellos con Ctrl+Shift+F y saca uno con + Ctrl+Shift+W; un diseño que se queda en un solo panel se cierra. Si dejas + una sesión arrastrada sobre otra pestaña, esa pestaña se abre, como hace un + navegador con un archivo arrastrado. La barra lateral y el pie de ventana + siguen al panel enfocado. +- **Muestra al lado los delegados de una sesión.** En la ventana nativa, una + sesión que abrió otras, en cualquier proyecto, las ofrece en el pie de + ventana: Mostrar al lado la coloca con sus delegados apilados a su derecha, + todos los que quepan. En un diseño, la cabecera de su panel cuenta cuántos + hay y añade el resto, preguntando antes de sacar uno de otro diseño. Una + tarjeta en un diseño lo indica con su nombre. +- **Las comprobaciones obligatorias están etiquetadas.** En la ventana nativa, + la pestaña Comprobaciones de un pull request marca con Obligatorio las + comprobaciones que condicionan su merge, como hace GitHub. + +### Changed + +- **lich vive en `lichdotdev/lich`.** El repositorio se mudó a la organización + [lichdotdev](https://github.com/lichdotdev) y el sitio a + [lichdotdev.github.io/lich](https://lichdotdev.github.io/lich/). Los enlaces + antiguos de GitHub, los clones y las comprobaciones de actualización + redirigen; los marcadores del sitio antiguo no. + +### Fixed + +- **Novedades sigue el idioma al que cambias.** En la ventana nativa, las notas + de la versión seguían en el idioma en que se leyeron por primera vez después + de cambiar el idioma de la interfaz, bajo nombres de grupo en el nuevo. +- **Los diffs ya no se quedan colgados con texto CJK ni acumulan memoria por + archivo.** En la ventana nativa, una Revisión o los Archivos de un pull + request con texto chino, japonés o coreano podían congelarse durante segundos + al buscar cada carácter nuevo, y el diff de cada archivo guardaba su propia + copia de las fuentes, de modo que un pull request grande ocupaba cientos de + megabytes. + +## [0.70.0] - 2026-10-17 + +### Added + +- **Novedades habla tu idioma.** El diálogo que se abre tras una actualización + muestra las notas de la versión, y los nombres de sus grupos, en el idioma + de la interfaz que elegiste, en ambas ventanas. Una versión cuyas notas aún + no tienen traducción las muestra en inglés. +- **Bifurca una sesión en la ventana nativa.** Haz clic derecho en una tarjeta + y elige Bifurcar › Aquí para continuar su conversación en una tarjeta nueva + justo debajo, en el mismo checkout, o Bifurcar › Worktree… para llevarla a + una worktree nueva junto con tus cambios sin confirmar. La copia lleva el + nombre del original ("auth-refactor 2") y una marca de bifurcación. Solo + Claude Code, Codex y opencode: los demás proveedores solo reanudan. +- **La ventana nativa avisa cuando dos tarjetas ejecutan una misma + conversación.** Reanudar, desde la TUI de un agente, una conversación que + otra tarjeta ya tiene abierta muestra un aviso en la esquina inferior + derecha; Cambiar cierra la tarjeta que reanudó y trae la que la tenía. +- **La ventana nativa muestra imágenes.** Un PNG, JPEG, GIF, WebP o BMP se + abre en la vista previa de la pestaña Archivos sobre un tablero de ajedrez, + con su tamaño y dimensiones, y una imagen modificada en la Revisión se + muestra antes y después lado a lado. Un PDF, o cualquier otro archivo sin + vista previa, ofrece Abrir en la app predeterminada y Mostrar en la carpeta + en lugar de un error; en un pull request, un archivo binario enlaza a sí + mismo en GitHub. +- **La ventana nativa en tu idioma.** Cada pantalla de la ventana nativa se + lee en portugués, español y chino, y Ajustes › General tiene el idioma de la + interfaz y el idioma de los prompts, como los tiene la ventana web en + Apariencia. Antes de que elijas uno, la interfaz sigue el idioma de tu + sistema. Elegir chino en un equipo sin fuente china ofrece descargar Noto + Sans SC (unos 25 MB) en la propia carpeta de lich. +- **Japonés.** Ambas ventanas se leen en japonés, y el japonés es un idioma de + prompts, así que lich habla con tus agentes en él. La ventana nativa dibuja + japonés, chino y coreano cada uno con la fuente de su región cuando hay una + instalada (Noto Sans CJK, Yu Gothic, Hiragino, Malgun Gothic y similares), + de modo que los kanji ya no toman formas chinas, y ofrece descargar Noto + Sans JP o KR cuando no hay ninguna, igual que hace con Noto Sans SC para el + chino. El README también está en japonés. +- **Coreano.** Ambas ventanas se leen en coreano, que se elige en Ajustes › + Apariencia en la web y en Ajustes › General en la ventana nativa, y el + coreano es un idioma de prompts: los briefings, los mensajes retransmitidos + y los avisos llegan a tus agentes en coreano. +- **lich habla ruso.** Elige Русский como idioma de la interfaz, en la ventana + web en Ajustes › Apariencia o en la ventana nativa en Ajustes › General, y + como idioma de los prompts, de modo que el briefing, las notas de relevo y + los traspasos que lich escribe en tus agentes también se lean en ruso. Los + recuentos siguen las formas singular, paucal y plural del ruso (1 файл, + 2 файла, 5 файлов). +- **Perfiles de opencode en macOS y Windows, y perfiles de Cursor CLI en + Windows.** Ajustes › Proveedores en la ventana nativa los lista como en + Linux. Cursor CLI en macOS y Kiro CLI en macOS y Windows siguen sin ellos: + allí guardan el inicio de sesión en el llavero o en una carpeta que ningún + ajuste puede mover, así que todos los perfiles compartirían una misma + cuenta. + +### Changed + +- **Cada actualización abre la ventana nativa.** El primer inicio de cada + versión cambia lich a la ventana nativa, recurriendo a la web donde no puede + arrancar; vuelve a cambiar en Ajustes y lich se queda en la ventana web + hasta la siguiente versión. La primera vez que se abre la ventana nativa, + avisa de que es experimental y enlaza a un informe de errores. +- **Un anillo de estado más ligero en la ventana nativa.** El anillo alrededor + del icono de una tarjeta de sesión se dibuja más fino, para leerse con el + peso que le da la ventana web. +- **Teclas de atajo más espaciosas en la ventana nativa.** Las teclas de la + paleta de comandos, la superposición de atajos y Ajustes › Atajos tienen más + espacio alrededor del texto, que queda centrado. +- **Ajustes en la ventana nativa se abre en Global.** El engranaje de la barra + superior siempre abre Ajustes en Global en lugar del ámbito en el que lo + dejaste; la pestaña de un proyecto sigue abriendo sus propios ajustes desde + Ajustes del proyecto…. +- **Una paleta de comandos más tranquila en la ventana nativa.** Cada sesión, + proyecto y mensaje ocupa una línea, con su ruta después del nombre; la ruta + de una worktree muestra sus últimas tres partes. Las sesiones que esperan + por ti van primero y lo indican, y las pestañas de filtro cambian sus + píldoras por un subrayado. Una sesión cerrada en Historial muestra a la + derecha su rama y su antigüedad, y una segunda línea solo cuando una + búsqueda coincidió con su conversación, con las palabras marcadas. + +### Fixed + +- **Una sesión reiniciada ya no aparece como ocupada para siempre.** Una + sesión cuyo agente murió a mitad de un turno, o que se cerró a mitad de un + turno, volvía bajo la misma tarjeta todavía listada como ocupada para las + demás sesiones: una tarea enviada a ella esperaba un turno que nunca + terminaría. Ahora arranca sin estado, como una nueva. +- **Codex, Cursor CLI, Antigravity y Crush dejan de preguntar donde ya + respondiste.** Una sesión en sandbox de cualquiera de ellos se abre + directamente en su prompt. Cursor CLI y Antigravity ya no vuelven a + preguntar en una worktree de una carpeta en la que confiaste, ni Antigravity + en sus subcarpetas, y Crush ya no pide inicializar cada worktree nueva. Una + sesión de oh-my-pi en sandbox ya no se abre en su asistente de + configuración. +- **Claude Code deja de preguntar "¿confiar en esta carpeta?" donde ya + respondiste.** Una carpeta en la que confiaste en tu cuenta principal es de + confianza en todos los demás perfiles de Claude Code desde su siguiente + sesión allí, y una sesión de Claude Code en sandbox se abre sin la pregunta. + Una sesión que lich abrió por ti ya no se queda en esa pantalla, donde Enter + sale. +- **Una ventana nativa reabierta sabe adónde fue cada sesión.** Una sesión que + se había movido con `cd`, o dentro de tmux o ssh, volvía mostrando la ruta, + la rama y los cambios de su checkout hasta su siguiente `cd`; ahora la + ventana lee dónde estuvo cada una por última vez al conectarse. +- **La ventana nativa escribe los prompts de los agentes en tu idioma de + prompts.** Los traspasos de pull requests e issues y un lote de comentarios + de revisión se escribían siempre en inglés. +- **Un cambio de tema durante una reconexión ya no cuelga la ventana nativa.** + Cambiar el tema, o que el sistema alternara entre claro y oscuro, mientras + la ventana se reconectaba a un lich reiniciado podía pintar terminales que + la reconexión acababa de liberar y derribar la ventana. +- **El texto en chino, japonés y coreano ya no congela la ventana nativa en + Linux.** Una sesión, una Revisión o un pull request llenos de texto CJK + podían colgar la ventana durante segundos, lo bastante para "no responde", y + un zoom traía el congelamiento de vuelta. +- **La ventana nativa usa menos memoria.** El terminal de cada sesión y la + Revisión cargaban su propia copia de las fuentes de reserva, decenas de + megabytes cada una para una fuente CJK o de emoji: seis sesiones abiertas + ahora ocupan cerca de la mitad de la memoria que antes. También arranca más + rápido en un equipo con fuentes CJK instaladas. +- **Reabrir una sesión cuya conversación ya está abierta enfoca esa + tarjeta.** Una sesión cerrada desde Historial, un cierre deshecho o una + worktree existente podían volver como una segunda tarjeta sobre una + conversación que otra tarjeta seguía ejecutando, y las dos escribían en la + misma transcripción. Historial lista una conversación así una sola vez, por + su último cierre, y Olvidar elimina todas sus copias. + +## [0.69.0] - 2026-10-16 + +### Added + +- **La ventana nativa en macOS, experimental.** Lich.app la incluye junto a lich + en Apple Silicon e Intel, y Ajustes › Apariencia › Ventana la ofrece igual + que en Linux y Windows. Option escribe caracteres en su terminal, como en + Terminal.app, así que los atajos Option+letra de un agente no llegan hasta + ella. Por ahora solo se ha ejecutado en las máquinas macOS de GitHub: las + notificaciones son simples y no se puede hacer clic en ellas, y no hay + elemento en la barra de menús. +- **El árbol de archivos reconoce muchos más tipos de archivo.** Java, Gradle, + C y C++, C#, PHP, Ruby, Swift, SQL, Vue, Svelte, Terraform, Dockerfile, + .gitignore y unos treinta más ahora muestran su propio icono en el árbol de + archivos y en los resultados de búsqueda, donde antes mostraban un glifo de + archivo genérico. + +### Fixed + +- **`lich quit` cierra la ventana nativa.** Se quedaba abierta mostrando lich + como perdido una vez que el backend había terminado; Salir de lich en la + bandeja y una señal de parada también la cierran, mientras que un reinicio + tras una actualización sigue conservándola. +- **La ventana nativa ofrece eliminar una worktree cuando se cierra su última sesión.** El + aviso Se cerró gana Eliminar worktree junto a Deshacer; una worktree que lich no creó, + o una con cambios sin confirmar, se nombra en un diálogo antes de eliminarla. +- **El terminal de la ventana nativa toma la celda bajo el puntero.** Un clic, + una selección con arrastre, un enlace y un programa que sigue el ratón leían + todos el puntero desplazado por el relleno del terminal, así que la celda + que tomaban quedaba por debajo y a la derecha de la señalada, por casi una + celda entera en una pantalla escalada. +- **El terminal de la ventana nativa dibuja emoji.** Una fuente de emoji a + color como Noto Color Emoji guarda cada emoji como una imagen y no como un + contorno, y el terminal solo dibujaba contornos, así que cada emoji aparecía + como un hueco en blanco; ahora se dibujan a color, ocupando dos celdas. +- **El árbol de archivos de la ventana nativa muestra el icono de lenguaje de cada archivo.** + Todos los archivos dibujaban el mismo glifo de archivo genérico; ahora cada + uno lleva el icono que le da la ventana del navegador. +- **Un pull request que abre un agente aparece en su tarjeta al terminar el turno.** + La insignia solo volvía a consultarse cuando cambiaba la rama o su último + commit, y abrir un pull request no cambia ninguno de los dos, así que + esperaba a que la ventana perdiera y recuperara el foco. +- **La ventana nativa se abre en Windows.** Buscaba las fuentes mediante + fontconfig, que Windows no incluye, así que se cerraba al iniciar y lich + recurría a la ventana web. Ahora, en Windows, encuentra por sí misma las + fuentes instaladas, con Cascadia Mono o Consolas para el terminal por + defecto, y los selectores de fuente de Ajustes las listan. +- **Cambiar entre un tema claro y uno oscuro ya no congela la ventana + nativa.** A una sesión que sigue el esquema de color del terminal, como hace + Claude Code, se le avisaba del cambio mientras la ventana todavía conservaba + sus terminales, así que la ventana se colgaba y se cerraba. diff --git a/changelog/ja.md b/changelog/ja.md index 7d7508d2..dd0250ec 100644 --- a/changelog/ja.md +++ b/changelog/ja.md @@ -13,3 +13,178 @@ - セッションのターミナルでデッドキーが合成されるようになりました。macOS では ~ に続けて a で ã、' に続けて c で ç が入力されます。以前はアクセント記号が文字より先に単独で届いていました。日本語や中国語の IME など、入力メソッドが変換中のテキストも、確定される前にプログラムへ届くことはなくなりました。 - Claude Code セッションで `/model` によってモデルを切り替えたあと、フッターとセッションカードのツールチップには、最初のターンが終わった時点で新しいモデルが表示されます。以前は、Claude Code がそのターンの最後の行を書き込む前に lich がトランスクリプトを読んでいたため、後のターンか再接続まで古いモデルのままでした。 - macOS で、閉じる・最小化・ズームのボタンがタイトルバーの中央に保たれます。以前は、ウィンドウを開いたとき、別のアプリに切り替えて戻ったとき、システムがライトとダークを切り替えたときに、macOS がボタンをバーの上端に戻し、ウィンドウをリサイズするまでそのままでした。 + +## [0.75.0] - 2026-10-21 + +### Added + +- レビュータブの Markdown ファイルには、「ファイルをコンテキストとして追加」の横にプレビューボタンがあり、差分の代わりにレンダリングしたファイルを、表やリンクも含めて表示します。もう一度クリックすると差分に戻ります。プルリクエスト画面では、そのプルリクエストが追加したファイルにだけ表示されます。 +- コードタブで開いているファイルで Ctrl+F(macOS では Cmd+F)を押すと、ファイル内のテキストを検索できます。ファイル名の下に表示されるバーが一致箇所をすべて強調し、Enter と Shift+Enter で順に移動でき、大文字と小文字の区別、単語単位、正規表現にも対応します。バーの一覧ボタンは、一致のある行をバーの下にすべて表示し、クリックするとコードのその位置へ移動します。Escape で閉じます。 +- セッションカードのツールチップに、セッションが実行しているモデルが表示されます。対象は Claude Code、Codex、Kiro CLI です。たとえば `/model` の後などで、セッションを開いたときのモデルと異なる場合は、「…で開始、…で実行中」と表示されます。 +- プルリクエスト画面で、プルリクエストのタイトルと説明を編集して GitHub に送信できます。タイトルの後ろの鉛筆アイコンでその場で名前を変更でき、Enter か別の場所のクリックで保存、Escape でキャンセルします。概要の説明の横の編集を押すと Markdown として開き、保存か Ctrl+Enter(macOS では Cmd+Enter)で保存します。長い説明はスクロールバーつきでフィールド内をスクロールするので、保存ボタンは画面に残ります。どちらも変更した内容だけを送信するため、説明を保存しても、その間に GitHub で行った名前変更が元に戻ることはありません。 +- プロファイルに独自の色と画像を設定できます。設定 › プロバイダーで、プロファイルの ⋯ メニューに、セッションカードと同じ 8 色から選べる「色」と、10 MB までの PNG、JPEG、GIF、WebP を受け付け、中央の正方形を使う「画像を選択…」が加わりました。画像または色は、プロファイルが表示される場所すべてに反映されます。プロファイルの一覧と選択画面、サイドバーのフッター、「次で続ける」です。「画像を削除」を選ぶと、プロファイルの色の上にイニシャルを表示する状態に戻ります。 + +### Changed + +- サイドバーのカードのまとまり(worktree、フォルダー、ピン留めのブロック)は、最初のカードが開くと徐々に広がり、最後のカードが閉じると徐々に縮むようになりました。以前は一瞬で現れて消えていました。リストがブロックに分かれたときに表示される見出しも同じように開き、1 つだけになると畳まれます。 +- 実行中のチェックがあるプルリクエストでは、チェックタブと、タブの上のステータス行で、止まった時計の代わりにスピナーが回ります。 +- ボタンを押している間に 1 ピクセル沈むことがなくなり、ウィンドウ内のすべてのボタンが同じ動作になりました。この動きがあったボタンを、なかったボタンに合わせています。 + +### Removed + +- **互換性を損なう変更:** `lich open --worktree` やエージェントの `open_session` が新しい worktree でセッションを開始するとき、lich は `.lich/setup-worktree.sh` を実行しなくなりました。リポジトリ内のファイルはそのままです。worktree が依存関係のインストールにこのファイルを使っていた場合は、新しい worktree のターミナルで自分で実行する(`sh .lich/setup-worktree.sh`)か、エージェントに頼んでください。gitignore 対象の `.env*` ファイル(または `.worktreeinclude` が指定するもの)のコピーと、`LICH_WORKTREE_PORT` の開発サーバーポートは変わりません。 + +### Fixed + +- lich がちょうど同じ時にそのチェックアウトのステータスや差分を読んでいたせいで、エージェントの `git commit`、`rebase`、`stash` が「Unable to create '.git/index.lock': File exists」で時々失敗する問題を修正しました。lich の読み取りはインデックスに触れません。 +- 閉じたセッションのカードが、一瞬で消えるのではなく、サイドバーから再び徐々に縮んで消えるようになりました。 +- セッションで Ctrl+Z を押しても、エージェントが永久に固まらなくなりました。以前はエージェントが一時停止され、lich からは元に戻せませんでした。lich はこのキーをセッションに渡さないようにしました。 +- フッターのプラン使用量ツールチップのバーが、Everforest のようにポップオーバーとミュートの色が同じテーマでも、空のトラックを再び表示するようになりました。以前は塗りつぶされた部分だけが描かれていました。 +- プルリクエスト画面でプルリクエストの一覧を開閉しても、アクティブなプロジェクトタブがすぐ下のパネルから離れて再び接続することがなくなりました。タブはずっと接続されたままで、一覧が下にスライドしてきた時点でその上に移ります。 + +## [0.74.0] - 2026-10-20 + +### Added + +- F11 でウィンドウを全画面表示にしたり元に戻したりできます。全画面表示中は、最小化・最大化・閉じるボタンは表示されません。キーの割り当ては設定 › ショートカットで変更できます。 + +### Changed + +- ベースとコンフリクトしているプルリクエストで、コンフリクトしているファイルがタイトルの下に並ばなくなりました。「… とコンフリクト」のステータスがその数を表し、クリックすると各ファイルを挙げたパネルが画面の上に開きます。 +- プルリクエストの **コンフリクトを解決** と **CI のエラーを修正**、および `#123` の issue から始めた worktree は、メッセージを、開いたセッションへ送るようになりました。以前はプロンプトに置かれたまま、Enter を押すのを待っていました。そのチェックアウトにあるターミナルカードには何も送られません。 + +### Fixed + +- コードまたはレビューのドックを開いたりサイズを変更したりして、アクティブなプロジェクトのタブがドックに重なると、タブがターミナルアイランドから離れるようになりました。再び収まるようになると、元どおりにつながります。 +- macOS で、ネイティブウィンドウのタイトルバーの閉じる・最小化・ズームのボタンが、上端に押しつけられず中央に配置され、インターフェースのズームにも追従します。 +- ウィンドウをトップバーでドラッグして動かせるようになりました。最後のタブより右や、ブランドとボタンの周りの隙間も対象です。以前は、バーのどこをドラッグしても動きませんでした。 +- プルリクエスト画面は、更新を押さなくても表示を最新に保ちます。GitHub がマージできるかどうかをまだ判定している間は数秒ごとに、画面を開いている間は 1 分ごとに、ウィンドウに戻ったときにもプルリクエストを読み直すので、lich の外で行われたプッシュ、マージ、コンフリクトが自動的に反映されます。 + +## [0.73.0] - 2026-10-20 + +> [!IMPORTANT] +> **全員へ: ネイティブウィンドウが lich 唯一のウィンドウになりました。** lich は起動のたびにネイティブウィンドウを開きます。Web ウィンドウと組み込みの Chromium はなくなりました。 + +### Added + +- **Windows と macOS のネイティブウィンドウで、クリックできるデスクトップ通知。** Linux と同様に、入力を待っているセッションやターンを終えたセッションが、開く・閉じるボタン付きの通知を出します。開くを押すとそのセッションのカードで lich が前面に出て、セッションに応答するか開くと通知は消えます。macOS では Lich.app から lich を起動する必要があり、初回に一度だけ許可を求められます。Windows では、あなたを待っているセッションの通知は操作するまで画面に残ります。 +- 独自のバイナリ経由でセッションを起動している場合、設定 › プロバイダーのプロファイルの下に警告を表示します。バイナリのパスと、それを表示するボタン、既定に戻すボタンも並びます。独自のログインや設定ディレクトリを指定するラッパーはプロファイルより優先され、バイナリの設定は画面の下部に折りたたまれています。 + +### Changed + +- セッションのプロセスが終了すると、ターミナル下部の帯の代わりに、右下のトースト通知で次の操作を尋ねるようになりました。会話のあるカードには、同じ会話をもう一度開く再開(開始時のプロファイルで開きます)、再起動と同じようにカード内で別の会話を始める新しく始める、セッションを閉じるが表示されます。シェルや、最初のプロンプトの前に終了したエージェントには、再起動とセッションを閉じるが表示されます。トーストを閉じるとカードはそのままになり、カードにフォーカスするとトーストが再表示されます。 +- **プロジェクトのプロファイルは、各カードではなくサイドバーの下部に表示されます。** プロバイダーに複数のログインがある場合、サイドバーの最終行に、このプロジェクトでそのプロバイダーの新しいセッションが起動するプロファイルが表示されます。画面に表示中のカードのプロバイダー、ターミナルの場合は既定のものです。クリックすると、5 時間の使用量付きで別のログインを選べ、グローバルのものに戻すこともできます。その他のプロバイダーは同じメニューから変更できます。カードのブランチの横にプロファイルのチップは表示されなくなりました。 + +### Removed + +- Web ウィンドウ。lich はネイティブウィンドウを開き、リリースに Chromium は含まれなくなりました。設定のウィンドウの選択(Web かネイティブ)と、もう一方のウィンドウを開いていたトレイ項目はなくなり、`lich -- `、`lich --shell`、`LICH_SHELL` も使えなくなりました。ネイティブウィンドウを起動できない場合、lich は理由とログの場所を表示します。 + +### Fixed + +- Claude Code や Codex のプロファイルでログインするとき、ブラウザでの操作が終わった時点、または貼り付けたコードを送信した時点で、認証中であることが表示されるようになりました。以前はダイアログが最後までログインを待ち続け、コード欄が空になるだけでした。 +- ブラジルポルトガル語で、すべてのメッセージが worktree を "a worktree" と呼ぶようになりました。一部は "o worktree" になっていました。 +- macOS で、ネイティブウィンドウに閉じる・最小化・ズームのボタンが戻りました。0.72.0 以降、トップバーにその場所が空いたままになっていました。 +- Windows で、ネイティブウィンドウからの lich のアップデートが "Setup was unable to automatically close all applications" でロールバックしなくなりました。ウィンドウが、インストーラーが置き換える必要のある `lich-native.exe` の上で開いたままになっていたためです。今はインストーラーの実行前に閉じ、lich が戻ると再び開きます。0.72.0 以前からのアップデートでは一度だけ発生します。メッセージが出たらタスクマネージャーで `lich-native.exe` を終了し、Retry を選び、その後スタートメニューから lich を開いてください。 +- lich が終了した後や再起動中など、lich が不在のときにネイティブウィンドウを閉じると、ウィンドウを閉じたときの設定にかかわらず閉じるようになりました。確認するや終了のときは、ウィンドウが開いたままで、セッションを数えられなかったというエラーだけが表示されていました。 +- 幅の狭い設定ウィンドウで、プロバイダーのプロファイルの選択のように、コントロールが広すぎて同じ行に収まらない設定は、コントロールをタイトルと説明の下に置くようになりました。以前は文章が細く押しつぶされ、1 文字ずつ折り返されていました。プロバイダーのドキュメントのリンクも、有効のスイッチに食い込まず、名前の下に移動します。 +- セッション終了後も動き続けたプラグインのフック(たとえば WakaTime のもの)がファイルを残し、移動が "already holds" で拒否されることがありましたが、次で続けるで Claude Code の会話を直前に離れたプロファイルへ戻せるようになりました。 + +## [0.72.0] - 2026-10-19 + +### Changed + +- ネイティブウィンドウのトップバーがタイトルバーになりました。システムのタイトルバーはなくなり、最小化・最大化・閉じるボタンは設定の隣に、Windows、GNOME、KDE と同じ見た目で、デスクトップが配置する側に表示されます。macOS ではトラフィックライトがトップバーに収まります。トップバーの空いている部分をドラッグするとウィンドウを移動でき、ダブルクリックすると最大化します。タイル型ウィンドウマネージャーでは独自の装飾がそのまま使われます。 + +### Fixed + +- lich が応答前に終了したとき、`lich quit` が "EOF" で失敗しなくなりました。失われた応答を拒否とみなさず、ポートが閉じるのを待ちます。 +- Wayland で、ネイティブウィンドウが別のテーマのカーソルを表示することがありましたが、デスクトップ自身のカーソルをそのテーマとサイズで表示するようになりました。最大のモニターよりスケールの小さいモニターで、ウィンドウに入ったときにカーソルが跳ねなくなりました。 +- Linux で、ネイティブウィンドウが汎用アイコンの別アプリとしてドックに表示されていましたが、lich 自身のアイコンの下にまとまるようになりました。 +- ネイティブウィンドウのレビューと pull request のファイルで、スクロールバーが表示中のファイルに合わせて伸び縮みしていましたが、スクロールしてもサイズが変わらなくなりました。ドラッグするとファイル単位ではなく diff 全体を均等に移動します。 + +## [0.71.2] - 2026-10-19 + +### Fixed + +- ネイティブウィンドウが Windows と macOS で再び開くようになりました。コードと差分の + ビューを描画するために fontconfig を探して、すぐに閉じていました。 +- ネイティブウィンドウのターミナルの絵文字が Windows でカラーで描画されるようになりました。 + これまでは輪郭だけで表示されていました。 +- macOS のインストールに提示される更新コマンドは、アップグレードの前に `lichdotdev/tap` を tap するようになりました。旧 `omartelo/tap` からのインストールは "Cask 'lichdotdev/tap/lich' is unavailable" で失敗していました。Homebrew は移動した tap を自動では追わないためです。古い lich からアップグレードするには、一度 `brew tap lichdotdev/tap` を実行してください。 +- ネイティブウィンドウで「長い貼り付けを展開」が Claude Code と Kiro CLI の貼り付けを展開するようになりました。対象はクリップボード、まとめて送るレビューコメント、プルリクエストや issue からセッションを開くときのプロンプト、ドロップまたは添付したファイルパスです。 + +## [0.71.1] - 2026-10-18 + +### Fixed + +- Linux のネイティブウィンドウが、AVX-512 非対応の CPU でターミナルを開いたときに不正命令でクラッシュしなくなりました。 + +## [0.71.0] - 2026-10-17 + +### Added + +- **ネイティブウィンドウの分割レイアウト(試験的機能)。** 開いている任意のプロジェクトのセッションを並べて、好きなように分割できます。Ctrl+Shift+G でフォーカス中のセッションを右に、Ctrl+Shift+I で下に分割し、どちらもそこに置くセッションを尋ねます。サイドバーのカードをペインの端にドラッグしても配置できます。レイアウトを組み替えるには、ペインのヘッダーを別のペインの端へドラッグします。真ん中へドラッグすると 2 つが入れ替わります。Ctrl+Shift+R で、並んだ 2 つのペインの横並びと縦積みを切り替えられます。レイアウトはそれぞれプロジェクトの後ろのタブになり、各ペインの状態が表示され、ダブルクリックで名前を変更できます。2 つのペインの間をドラッグするとサイズを変えられ、Ctrl+Shift+M で 1 つを拡大し、Ctrl+Shift+F でペイン間を移動し、Ctrl+Shift+W で 1 つを外せます。ペインが 1 つだけになったレイアウトは閉じます。ドラッグ中のセッションを別のタブの上に置いたままにすると、ブラウザーでファイルをドラッグしたときのように、そのタブが前面に出ます。サイドバーとフッターは、フォーカス中のペインに追従します。 +- **セッションの委任先を横に表示できます。** ネイティブウィンドウで、任意のプロジェクトで他のセッションを開いたセッションは、フッターにそれらを表示するボタンを出します。「横に表示」を押すと、そのセッションの右側に、入る限りの委任先を縦に積んで配置します。レイアウト内では、ペインのヘッダーに委任先がいくつ並んでいるかが表示され、残りを追加できます。別のレイアウトから外すことになる場合は、先に確認します。レイアウト内のカードには、そのレイアウトの名前が表示されます。 +- **必須のチェックにラベルが付きます。** ネイティブウィンドウで、プルリクエストの「チェック」タブが、マージの条件になっているチェックを、GitHub と同じように「必須」で示します。 + +### Changed + +- **lich のリポジトリは `lichdotdev/lich` になりました。** リポジトリは [lichdotdev](https://github.com/lichdotdev) organization に、サイトは [lichdotdev.github.io/lich](https://lichdotdev.github.io/lich/) に移りました。古い GitHub のリンク、クローン、アップデートの確認はリダイレクトされます。古いサイトのブックマークはリダイレクトされません。 + +### Fixed + +- **「新機能」が、切り替えた言語に追従します。** ネイティブウィンドウで、インターフェースの言語を変更したあとも、リリースノートが最初に読んだときの言語のまま表示され、グループ名だけが新しい言語になっていました。 +- **差分が CJK のテキストで固まらなくなり、ファイルごとにメモリが増えなくなりました。** ネイティブウィンドウで、中国語・日本語・韓国語のテキストを含む「レビュー」やプルリクエストの「ファイル」は、新しい文字を引くたびに数秒フリーズすることがありました。また、各ファイルの差分がフォントの独自のコピーを保持していたため、大きなプルリクエストでは数百メガバイトを占有していました。 + +## [0.70.0] - 2026-10-17 + +### Added + +- **「新機能」があなたの言語で表示されます。** アップデート後に開くダイアログが、リリースノートとそのグループ名を、選択したインターフェースの言語で表示します。両方のウィンドウで対応しています。リリースノートの翻訳がまだないビルドでは、英語で表示されます。 +- **ネイティブウィンドウでセッションをフォークできます。** カードを右クリックして「フォーク › ここで」を選ぶと、同じチェックアウトのまま、そのすぐ下の新しいカードで会話を続けられます。「フォーク › ワークツリー…」を選ぶと、未コミットの変更ごと新しいワークツリーに移せます。コピーには元の名前が付き(「auth-refactor 2」)、フォークのマークが表示されます。対応するのは Claude Code、Codex、opencode のみで、それ以外のプロバイダーでは再開のみです。 +- **ネイティブウィンドウが、2 枚のカードで 1 つの会話が動いていることを警告します。** エージェント自身の TUI の中から、すでに別のカードで開いている会話を再開すると、右下に警告が表示されます。「切り替える」を押すと、再開したカードが閉じ、その会話を開いていたカードが前面に表示されます。 +- **ネイティブウィンドウで画像を表示できます。** PNG、JPEG、GIF、WebP、BMP は、ファイルタブのプレビューに市松模様の背景で表示され、サイズと寸法も確認できます。レビューでは、変更された画像が変更前と変更後を並べて表示されます。PDF など、プレビューのないファイルではエラーの代わりに「既定のアプリで開く」と「フォルダーに表示」が表示されます。プルリクエストでは、バイナリファイルは GitHub 上の該当ファイルへのリンクになります。 +- **ネイティブウィンドウがあなたの言語に対応しました。** ネイティブウィンドウのすべての画面が、ポルトガル語、スペイン語、中国語で表示されます。設定 › 一般にはインターフェースの言語とプロンプトの言語があり、ウェブウィンドウでは外観の下にあるものと同じです。選択するまでは、インターフェースはシステムの言語に従います。中国語のフォントがないマシンで中国語を選ぶと、Noto Sans SC(約 25 MB)を lich 専用のフォルダーにダウンロードするかどうかを尋ねます。 +- **日本語。** 両方のウィンドウが日本語で表示され、日本語はプロンプトの言語にもなるため、lich はエージェントに日本語で話しかけます。ネイティブウィンドウは、日本語・中国語・韓国語をそれぞれの地域のフォントで描画します(インストールされていれば。Noto Sans CJK、Yu Gothic、Hiragino、Malgun Gothic など)。そのため漢字が中国語の字形になることはなくなりました。該当するフォントがない場合は、中国語の Noto Sans SC と同様に、Noto Sans JP または KR をダウンロードするかどうかを尋ねます。README も日本語になりました。 +- **韓国語。** 両方のウィンドウが韓国語で表示されます。ウェブでは設定 › 外観、ネイティブウィンドウでは設定 › 一般で選べます。韓国語はプロンプトの言語にもなり、ブリーフィング、中継されたメッセージ、通知がエージェントに韓国語で届きます。 +- **lich がロシア語に対応しました。** Русский をインターフェースの言語として選べます。ウェブウィンドウでは設定 › 外観、ネイティブウィンドウでは設定 › 一般にあります。プロンプトの言語としても選べるため、lich がエージェントに入力するブリーフィング、中継メモ、引き継ぎもロシア語になります。数はロシア語の one、few、many の 3 つの形に従います(1 файл、2 файла、5 файлов)。 +- **macOS と Windows での opencode プロファイル、Windows での Cursor CLI プロファイル。** ネイティブウィンドウの設定 › プロバイダーに、Linux と同様に一覧表示されます。macOS の Cursor CLI と、macOS および Windows の Kiro CLI には、引き続きありません。これらではログイン情報が Keychain、または設定では移せないフォルダーに保存されるため、どのプロファイルも 1 つのアカウントを共有することになります。 + +### Changed + +- **アップデートのたびにネイティブウィンドウが開きます。** 各リリースの初回起動で lich はネイティブウィンドウに切り替わり、起動できない場合はウェブウィンドウにフォールバックします。設定で切り替え直すと、次のリリースまで lich はウェブウィンドウのままです。ネイティブウィンドウが初めて開くときは、実験的であることを知らせ、バグ報告へのリンクを表示します。 +- **ネイティブウィンドウのステータスリングが細くなりました。** セッションカードのアイコンを囲むリングがより細く描画され、ウェブウィンドウと同じ太さで表示されます。 +- **ネイティブウィンドウのショートカットキーの余白が広くなりました。** コマンドパレット、ショートカットの一覧、設定 › ショートカットのキーキャップは、文字の周りの余白が広くなり、文字は中央に配置されます。 +- **ネイティブウィンドウの設定は「グローバル」で開きます。** 上部バーの歯車は、最後に開いていたスコープではなく、常に「グローバル」で設定を開きます。プロジェクトのタブから「プロジェクト設定…」を選ぶと、引き続きそのプロジェクトの設定が開きます。 +- **ネイティブウィンドウのコマンドパレットがすっきりしました。** セッション、プロジェクト、メッセージは 1 行で表示され、名前の後にパスが付きます。ワークツリーのパスは最後の 3 つの要素を表示します。あなたの応答を待っているセッションが先頭に並び、その旨が表示されます。フィルタータブはピルをやめて下線になりました。履歴の閉じたセッションは、右側にブランチと経過時間を表示し、検索が会話に一致したときだけ 2 行目を追加して、該当する語を強調します。 + +### Fixed + +- **再起動したセッションが、ずっと処理中のままに見えなくなりました。** ターンの途中でエージェントが終了したセッションや、ターンの途中で閉じられたセッションは、同じカードのまま戻ってきても、ほかのセッションからは処理中と表示されていました。そのセッションに送ったタスクは、終わることのないターンを待ち続けていました。現在は新しいセッションと同じく、状態のない状態で開始します。 +- **Codex、Cursor CLI、Antigravity、Crush が、すでに答えた質問を繰り返さなくなりました。** これらのいずれかのサンドボックス化されたセッションは、そのままプロンプトで開きます。Cursor CLI と Antigravity は、信頼済みのフォルダーのワークツリーで再度尋ねなくなり、Antigravity はそのサブフォルダーでも尋ねなくなりました。Crush も新しいワークツリーごとに初期化を尋ねなくなりました。サンドボックス化された oh-my-pi のセッションも、セットアップウィザードで開かなくなりました。 +- **Claude Code が、すでに答えた「このフォルダーを信頼しますか?」を尋ねなくなりました。** メインのアカウントで信頼したフォルダーは、ほかのすべての Claude Code プロファイルでも、そこでの次のセッションから信頼されます。サンドボックス化された Claude Code のセッションは、この質問なしで開きます。lich が開いたセッションが、Enter で終了してしまうこの画面で止まることもなくなりました。 +- **再び開いたネイティブウィンドウが、各セッションの移動先を把握するようになりました。** `cd` や tmux、ssh で移動していたセッションが、次の `cd` までチェックアウトのパス、ブランチ、変更を表示したまま戻ってくることがありました。現在はウィンドウが接続時に、各セッションの最後の場所を読み取ります。 +- **ネイティブウィンドウが、エージェントへのプロンプトをプロンプトの言語で書くようになりました。** プルリクエストと issue の引き継ぎ、およびレビューコメントのまとめが、常に英語で入力されていました。 +- **再接続中にテーマを変更してもネイティブウィンドウがクラッシュしなくなりました。** ウィンドウが再起動した lich に再接続している間にテーマを切り替えたり、システムがライトとダークを切り替えたりすると、再接続で解放されたばかりのターミナルを描画してしまい、ウィンドウが落ちることがありました。 +- **中国語・日本語・韓国語のテキストで、Linux のネイティブウィンドウがフリーズしなくなりました。** CJK のテキストが大量にあるセッション、レビュー、プルリクエストでは、ウィンドウが数秒間ハングして「応答なし」になることがあり、ズームするとフリーズが再発していました。 +- **ネイティブウィンドウのメモリ使用量が減りました。** 各セッションのターミナルとレビューが、フォールバック先のフォントをそれぞれ独自に読み込んでいました。CJK や絵文字のフォントでは 1 つにつき数十 MB です。現在は 6 つのセッションを開いたときのメモリ使用量が約半分になりました。CJK フォントがインストールされているマシンでは、起動も速くなりました。 +- **会話がすでに開いているセッションを再び開くと、そのカードにフォーカスします。** 履歴から閉じたセッションを開いたとき、閉じる操作を元に戻したとき、既存のワークツリーを開いたときに、別のカードがまだ実行している会話に 2 枚目のカードが作られ、2 つが同じトランスクリプトに書き込むことがありました。履歴にはそのような会話が最新の終了分だけ 1 件表示され、「履歴から削除」はそのすべてのコピーを削除します。 + +## [0.69.0] - 2026-10-16 + +### Added + +- **macOS でネイティブウィンドウを利用可能に(実験的)。** Lich.app は Apple Silicon と Intel の両方で lich と並べてネイティブウィンドウを同梱しており、Linux や Windows と同じく設定 › 外観 › ウィンドウから選べます。ターミナルでは Option キーが文字入力に使われます(Terminal.app と同じ動作)。そのため、エージェントの Option+文字 のショートカットは届きません。これまでのところ GitHub の macOS マシンでしか動作しておらず、通知はクリックできない通常の通知で、メニューバー項目もありません。 +- **ファイルツリーが対応するファイル形式が大幅に増えました。** Java、Gradle、C と C++、C#、PHP、Ruby、Swift、SQL、Vue、Svelte、Terraform、Dockerfile、.gitignore のほか約 30 種類が、これまでの無地のファイルアイコンに代わって、ファイルツリーと検索結果で専用のアイコンで表示されます。 + +### Fixed + +- **`lich quit` がネイティブウィンドウを閉じるようになりました。** バックエンドが終了したあとも、ウィンドウは lich を接続切れとして表示したまま開いたままでした。トレイの終了や停止シグナルでも閉じます。一方、アップデート後の再起動ではウィンドウは維持されます。 +- **ネイティブウィンドウで、最後のセッションを閉じたときにワークツリーを削除できるようになりました。** 「閉じました」トーストに「元に戻す」と並んで「ワークツリーを削除」が加わります。lich が作成していないワークツリーや未コミットの変更があるワークツリーは、削除する前にダイアログで知らされます。 + +- **ネイティブウィンドウのターミナルが、ポインターの下のセルを正しく扱うようになりました。** クリック、ドラッグ選択、リンク、マウスを追跡するプログラムのいずれも、ターミナルのパディング分ずれた位置のポインターを読み取っていたため、実際に指しているセルの右下のセルが対象になっていました。スケーリングされたディスプレイでは、そのずれはほぼセル 1 つ分でした。 +- **ネイティブウィンドウのターミナルが絵文字を描画するようになりました。** Noto Color Emoji などのカラー絵文字フォントは、各絵文字をアウトラインではなく画像として保持しています。ターミナルはアウトラインしか描画しなかったため、すべての絵文字が空白になっていました。現在は 2 セル幅のカラーで描画されます。 +- **ネイティブウィンドウのファイルツリーが、ファイルごとの言語アイコンを表示するようになりました。** これまではどのファイルも同じ無地のファイルアイコンでしたが、ブラウザウィンドウと同じアイコンが付きます。 +- **エージェントが開いたプルリクエストが、ターンの終了時にカードへ表示されるようになりました。** バッジはブランチまたは最後のコミットが動いたときにしか再確認されず、プルリクエストを開いてもどちらも動かないため、ウィンドウのフォーカスが外れて戻るまで待たされていました。 +- **Windows でネイティブウィンドウが開くようになりました。** フォントの検索に Windows には含まれない fontconfig を使っていたため、起動時に閉じてしまい、lich はウェブウィンドウに切り替わっていました。Windows ではインストール済みのフォントを自前で見つけるようになり、ターミナルの既定は Cascadia Mono または Consolas、設定のフォントピッカーにも一覧表示されます。 +- **ライトテーマとダークテーマを切り替えてもネイティブウィンドウがフリーズしなくなりました。** Claude Code のように、ターミナルの配色に追従するセッションへ、ウィンドウがまだターミナルを保持している間に変更が通知されていたため、ウィンドウがハングして閉じていました。 diff --git a/changelog/ko.md b/changelog/ko.md index a8589bad..c7c6c8fa 100644 --- a/changelog/ko.md +++ b/changelog/ko.md @@ -13,3 +13,279 @@ - 세션 터미널에서 데드 키가 조합됩니다. macOS에서 ~ 다음에 a를 누르면 ã, ' 다음에 c를 누르면 ç가 입력됩니다. 이전에는 악센트 기호가 글자보다 먼저 혼자 도착했습니다. 일본어나 중국어 IME처럼 입력기가 아직 조합 중인 텍스트도 확정되기 전에는 프로그램에 전달되지 않습니다. - Claude Code 세션에서 `/model`로 모델을 바꾼 뒤, 푸터와 세션 카드의 툴팁에는 첫 턴이 끝나는 즉시 새 모델이 표시됩니다. 이전에는 Claude Code가 그 턴의 마지막 줄을 쓰기 전에 lich가 트랜스크립트를 읽어서, 이후 턴이나 재연결 때까지 이전 모델이 남아 있었습니다. - macOS에서 닫기, 최소화, 확대/축소 버튼이 제목 표시줄 가운데에 유지됩니다. 이전에는 창이 열릴 때, 다른 앱으로 전환했다가 돌아올 때, 시스템이 라이트와 다크 사이를 전환할 때 macOS가 버튼을 표시줄 위쪽으로 되돌렸고, 창 크기를 조절할 때까지 그대로였습니다. + +## [0.75.0] - 2026-10-21 + +### Added + +- 리뷰 탭의 Markdown 파일에는 "파일을 컨텍스트로 추가" 옆에 미리보기 버튼이 있어, diff 대신 표와 링크를 포함해 렌더링된 파일을 보여 줍니다. 다시 누르면 diff로 돌아갑니다. 풀 리퀘스트 화면에서는 해당 풀 리퀘스트가 추가한 파일에만 이 버튼이 있습니다. +- 코드 탭에서 열어 둔 파일에서 Ctrl+F(macOS는 Cmd+F)를 누르면 파일 안의 텍스트를 찾을 수 있습니다. 파일 이름 아래에 나타나는 바가 일치하는 부분을 모두 강조하고, Enter와 Shift+Enter로 차례로 이동하며, 대/소문자, 단어 단위, 정규식 일치를 지원합니다. 바의 목록 버튼은 일치하는 줄을 모두 바 아래에 보여 주고, 하나를 누르면 코드의 해당 위치로 이동합니다. Escape로 닫습니다. +- 세션 카드의 툴팁에 세션이 실행 중인 모델이 표시됩니다. Claude Code, Codex, Kiro CLI에서 지원합니다. 예를 들어 `/model` 이후처럼 세션을 연 모델과 달라지면 "…(으)로 시작, … 실행 중"으로 표시됩니다. +- 풀 리퀘스트 화면에서 풀 리퀘스트의 제목과 설명을 편집해 GitHub로 보낼 수 있습니다. 제목 뒤의 연필 아이콘으로 그 자리에서 이름을 바꾸며, Enter를 누르거나 다른 곳을 누르면 저장되고 Escape를 누르면 취소됩니다. 개요의 설명 옆 편집을 누르면 Markdown으로 열리고, 저장 또는 Ctrl+Enter(macOS는 Cmd+Enter)로 저장합니다. 긴 설명은 스크롤바와 함께 필드 안에서 스크롤되어 저장 버튼이 화면에 남아 있습니다. 각각 바뀐 부분만 보내므로, 설명을 저장해도 그사이 GitHub에서 한 이름 변경이 되돌려지지 않습니다. +- 프로필에 고유한 색상과 이미지를 지정할 수 있습니다. 설정 › 프로바이더에서 프로필의 ⋯ 메뉴에 세션 카드와 같은 8가지 색상을 고르는 색상과, 최대 10 MB의 PNG, JPEG, GIF, WebP를 받아 가운데 정사각형을 사용하는 이미지 선택…이 생겼습니다. 이미지나 색상은 프로필이 표시되는 모든 곳에 나타납니다. 프로필 목록과 선택기, 사이드바 하단, 다음에서 계속입니다. 이미지 제거를 누르면 프로필 색상 위의 이니셜로 돌아갑니다. + +### Changed + +- 사이드바의 카드 묶음(worktree, 폴더, 고정 묶음)이 이제 첫 카드가 열릴 때 서서히 커지고 마지막 카드가 닫힐 때 서서히 줄어듭니다. 이전에는 한꺼번에 나타나고 사라졌습니다. 목록이 묶음으로 나뉠 때 표시되는 헤더도 같은 방식으로 펼쳐지고, 하나만 남으면 접힙니다. +- 체크가 아직 실행 중인 풀 리퀘스트는 체크 탭과 탭 위의 상태 줄에서 멈춰 있던 시계 대신 스피너가 돕니다. +- 버튼을 누르는 동안 1픽셀 가라앉지 않으므로 창의 모든 버튼이 같게 동작합니다. 이 움직임이 있던 버튼을 없던 버튼에 맞췄습니다. + +### Removed + +- **호환성 변경:** `lich open --worktree`나 에이전트의 `open_session`이 새 worktree에서 세션을 시작할 때 lich가 더 이상 `.lich/setup-worktree.sh`를 실행하지 않습니다. 저장소에 있는 파일은 그대로 둡니다. worktree가 의존성 설치에 이 파일을 사용했다면 새 worktree의 터미널에서 직접 실행하거나(`sh .lich/setup-worktree.sh`) 에이전트에게 요청하세요. gitignore 대상인 `.env*` 파일(또는 `.worktreeinclude`가 지정한 파일)의 복사와 `LICH_WORKTREE_PORT` 개발 서버 포트는 그대로입니다. + +### Fixed + +- lich가 같은 순간에 해당 체크아웃의 상태나 diff를 읽고 있다는 이유로 에이전트의 `git commit`, `rebase`, `stash`가 가끔 "Unable to create '.git/index.lock': File exists"로 실패하던 문제를 고쳤습니다. lich의 읽기는 인덱스를 건드리지 않습니다. +- 닫은 세션의 카드가 한꺼번에 사라지지 않고 다시 사이드바에서 서서히 줄어들며 사라집니다. +- 세션에서 Ctrl+Z를 눌러도 에이전트가 영영 멈추지 않습니다. 이전에는 에이전트가 일시 중단되었고 lich에서는 되살릴 방법이 없었습니다. 이제 lich가 이 키를 세션에 전달하지 않습니다. +- 하단 바의 플랜 사용량 툴팁에 있는 막대가, Everforest처럼 팝오버와 음소거 색상이 같은 테마에서도 빈 트랙을 다시 표시합니다. 이전에는 채워진 부분만 그려졌습니다. +- 풀 리퀘스트 화면에서 풀 리퀘스트 목록을 열거나 닫아도 활성 프로젝트 탭이 아래 패널에서 떨어졌다가 다시 붙지 않습니다. 탭은 내내 붙어 있다가 목록이 그 아래로 밀려 들어오면 목록 위로 옮겨 갑니다. + +## [0.74.0] - 2026-10-20 + +### Added + +- F11을 누르면 창이 전체 화면으로 전환되고 다시 누르면 돌아오며, 전체 화면인 동안에는 최소화, 최대화, 닫기 버튼이 표시되지 않습니다. 이 단축키는 설정 › 단축키에서 바꿀 수 있습니다. + +### Changed + +- 베이스와 충돌하는 풀 리퀘스트는 더 이상 제목 아래에 충돌하는 파일을 나열하지 않습니다. 충돌 파일 수는 "…와(과) 충돌" 상태에 표시되며, 이를 누르면 화면 위에 패널이 열려 각 파일의 이름을 보여 줍니다. +- 풀 리퀘스트의 **충돌 해결**과 **CI 오류 고치기**, 그리고 `#123` 이슈에서 시작한 worktree는 이제 메시지를 자신이 여는 세션으로 보냅니다. 이전에는 메시지가 프롬프트에 입력된 채 Enter를 누르기를 기다렸습니다. 해당 체크아웃의 터미널 카드에는 아무것도 전송되지 않습니다. + +### Fixed + +- 코드 또는 리뷰 도크를 열거나 크기를 조절해 활성 프로젝트 탭이 도크 영역을 침범하면, 이제 탭이 터미널 아일랜드에서 분리되고 공간이 다시 충분해지면 연결됩니다. +- macOS에서 닫기, 최소화, 확대 버튼이 네이티브 창 제목 표시줄의 위쪽 가장자리에 붙지 않고 가운데에 놓이며, 인터페이스 확대/축소를 따릅니다. +- 상단 바를 끌어 창을 움직일 수 있습니다. 마지막 탭 뒤쪽과 브랜드 및 버튼 주변의 빈 곳에서도 됩니다. 이전에는 상단 바의 어느 부분으로도 창을 움직일 수 없었습니다. +- 풀 리퀘스트 화면이 새로 고침을 누르지 않아도 표시 내용을 최신으로 유지합니다. GitHub가 병합 가능 여부를 계산하는 중에는 몇 초마다, 화면이 열려 있는 동안에는 1분마다, 그리고 창으로 돌아올 때 풀 리퀘스트를 다시 읽으므로, lich 밖에서 한 푸시, 병합, 충돌도 저절로 나타납니다. + +## [0.73.0] - 2026-10-20 + +> [!IMPORTANT] +> **모든 사용자: 이제 네이티브 창이 lich의 유일한 창입니다.** lich는 실행할 때마다 네이티브 창을 열며, 웹 창과 내장 Chromium은 없어졌습니다. + +### Added + +- **Windows와 macOS의 네이티브 창에서 클릭할 수 있는 데스크톱 알림.** Linux와 마찬가지로, 입력이 필요하거나 턴을 마친 세션이 열기와 닫기 버튼이 있는 알림을 띄웁니다. 열기를 누르면 lich가 해당 세션의 카드로 이동하고, 응답하거나 세션을 열면 알림이 사라집니다. macOS에서는 Lich.app으로 lich를 실행해야 하며 권한을 한 번 요청합니다. Windows에서는 사용자를 기다리는 세션의 알림이 조작할 때까지 화면에 남습니다. +- 사용자 지정 바이너리로 세션을 시작하면 설정 › 프로바이더의 프로필 아래에 경고가 표시되며, 바이너리 경로와 그 위치를 보여 주는 버튼, 기본값으로 되돌리는 버튼이 함께 나옵니다. 자체 로그인 또는 설정 디렉터리를 지정하는 래퍼는 프로필보다 우선하며, 바이너리 설정은 화면 맨 아래에 접혀 있습니다. + +### Changed + +- 세션의 프로세스가 종료되면 터미널 하단의 띠 대신 오른쪽 아래의 토스트가 어떻게 할지 묻습니다. 대화가 있는 카드는 같은 대화를 다시 여는 재개(처음 시작한 프로필에서), 재시작처럼 카드에서 새 대화를 시작하는 새로 시작, 세션 닫기를 제공합니다. 셸이나 첫 프롬프트 전에 끝난 에이전트는 다시 시작과 세션 닫기를 제공합니다. 토스트를 닫으면 카드는 그대로 남고, 카드에 포커스하면 토스트가 다시 나타납니다. +- **프로젝트의 프로필이 모든 카드가 아니라 사이드바 맨 아래에 표시됩니다.** 한 프로바이더에 로그인이 둘 이상이면, 사이드바의 마지막 줄에 이 프로젝트의 새 세션이 시작되는 프로필이 표시됩니다. 화면에 보이는 카드의 프로바이더, 터미널이면 기본 프로바이더 기준입니다. 눌러서 다른 로그인을 고르거나(각 로그인의 5시간 사용량이 함께 표시됩니다) 전역의 로그인으로 되돌릴 수 있고, 다른 프로바이더는 같은 메뉴에서 바꿉니다. 카드에는 더 이상 브랜치 옆에 프로필 칩이 붙지 않습니다. + +### Removed + +- 웹 창. lich는 네이티브 창을 열며, 릴리스에 더 이상 Chromium이 포함되지 않습니다. 설정의 창 선택(웹 또는 네이티브)과 다른 창을 여는 트레이 항목이 없어졌고, `lich -- `, `lich --shell`, `LICH_SHELL`도 없어졌습니다. 네이티브 창을 시작할 수 없으면 lich가 이유와 로그 위치를 알려 줍니다. + +### Fixed + +- Claude Code 또는 Codex 프로필로 로그인할 때, 브라우저에서 마치거나 붙여 넣은 코드를 제출하면 인증 중이라고 표시됩니다. 이전에는 대화 상자가 끝까지 로그인을 기다리기만 했고 코드 입력란은 그냥 비워졌습니다. +- 브라질 포르투갈어에서 모든 메시지가 worktree를 "a worktree"로 부릅니다. 일부 메시지는 "o worktree"라고 했습니다. +- macOS에서 네이티브 창의 닫기, 최소화, 확대 버튼이 다시 나타납니다. 0.72.0부터 상단 바에 그 자리가 비어 있었습니다. +- Windows에서 네이티브 창으로 lich를 업데이트할 때 "Setup was unable to automatically close all applications"와 함께 롤백되던 문제를 고쳤습니다. 설치 프로그램이 교체해야 하는 `lich-native.exe`에서 창이 열린 채 남아 있었습니다. 이제 설치 프로그램이 실행되기 전에 창이 닫히고, lich가 돌아오면 다시 열립니다. 0.72.0 이하에서 업데이트할 때는 한 번 더 발생합니다. 메시지가 나오면 작업 관리자에서 `lich-native.exe`를 종료하고 다시 시도를 선택한 뒤, 시작 메뉴에서 lich를 여세요. +- lich가 종료되었거나 다시 시작 중이어서 없는 동안 네이티브 창을 닫으면, "창을 닫을 때" 설정과 관계없이 창이 닫힙니다. 묻기나 종료로 설정하면 창이 열린 채 세션을 셀 수 없다는 오류만 표시되었습니다. +- 좁은 설정 창에서 컨트롤이 너무 넓어 한 줄에 함께 들어가지 않는 설정(예: 프로바이더의 프로필 선택기)은 이제 제목과 설명 아래에 컨트롤을 놓습니다. 이전에는 텍스트가 좁은 틈으로 찌그러져 글자 단위로 줄바꿈되었습니다. 프로바이더의 문서 링크도 켜짐 스위치와 겹치지 않고 이름 아래로 이동합니다. +- 세션이 끝난 뒤에도 계속 실행되던 플러그인 훅(예: WakaTime)이 파일을 남겨 "already holds"로 거부되던 문제를 고쳐, 다음에서 계속으로 Claude Code 대화를 방금 떠난 프로필로 되돌릴 수 있습니다. + +## [0.72.0] - 2026-10-19 + +### Changed + +- 네이티브 창의 상단 바가 이제 제목 표시줄입니다. 시스템 제목 표시줄은 사라지고, 최소화·최대화·닫기 버튼은 설정 옆에 Windows, GNOME, KDE가 그리는 모양 그대로, 데스크톱이 두는 쪽에 놓입니다. macOS에서는 신호등 버튼이 상단 바에 들어갑니다. 상단 바의 빈 부분을 끌어 창을 옮기고, 더블 클릭하면 최대화됩니다. 타일링 창 관리자는 자체 장식을 그대로 유지합니다. + +### Fixed + +- lich가 응답하기 전에 종료되어도 `lich quit`가 더 이상 "EOF"로 실패하지 않습니다. 잃어버린 응답을 거부로 보지 않고 포트가 닫히기를 기다립니다. +- Wayland에서 네이티브 창이 다른 테마의 커서를 보여 줄 수 있던 문제를 고쳐, 데스크톱 자체의 커서를 그 테마와 크기로 보여 줍니다. 가장 큰 모니터보다 배율이 작은 모니터에서 커서가 창에 들어올 때 더 이상 튀지 않습니다. +- Linux에서 네이티브 창이 일반 아이콘을 단 별도 앱으로 독에 나타나던 문제를 고쳐, lich 자체 아이콘 아래로 묶입니다. +- 네이티브 창의 리뷰와 pull request의 파일에서 스크롤바가 화면을 채운 파일에 따라 늘었다 줄었다 하던 문제를 고쳐, 스크롤해도 크기가 유지됩니다. 이제 스크롤바를 끌면 파일 단위가 아니라 diff 전체를 고르게 이동합니다. + +## [0.71.2] - 2026-10-19 + +### Fixed + +- 네이티브 창이 Windows와 macOS에서 다시 열립니다. 코드와 diff 뷰를 그리려고 + fontconfig를 찾다가 바로 닫히던 문제입니다. +- 네이티브 창 터미널의 이모지가 Windows에서 컬러로 그려집니다. 이전에는 윤곽선으로만 + 나왔습니다. +- macOS 설치에 제안되는 업데이트 명령이 이제 업그레이드 전에 `lichdotdev/tap`을 tap합니다. 예전 `omartelo/tap`에서 설치한 경우 "Cask 'lichdotdev/tap/lich' is unavailable" 오류로 실패했는데, Homebrew가 옮겨진 tap을 스스로 따라가지 않기 때문입니다. 이전 lich에서 업그레이드하려면 `brew tap lichdotdev/tap`으로 한 번 tap하세요. +- 네이티브 창에서 "긴 붙여넣기 펼치기"가 이제 Claude Code와 Kiro CLI의 붙여넣기를 펼칩니다. 클립보드, 리뷰 코멘트 묶음, pull request나 issue가 세션을 열 때 쓰는 프롬프트, 드롭하거나 첨부한 파일 경로가 대상입니다. + +## [0.71.1] - 2026-10-18 + +### Fixed + +- Linux의 네이티브 창이 AVX-512를 지원하지 않는 CPU에서 터미널을 열 때 잘못된 명령어로 충돌하던 문제를 수정했습니다. + +## [0.71.0] - 2026-10-17 + +### Added + +- **네이티브 창의 분할 레이아웃(실험적).** 열려 있는 어느 프로젝트의 세션이든 나란히 놓고 원하는 대로 + 분할할 수 있습니다. Ctrl+Shift+G는 포커스된 세션을 오른쪽으로, Ctrl+Shift+I는 아래로 분할하며 + 각각 그 자리에 놓을 세션을 묻습니다. 사이드바의 카드를 창 가장자리로 끌어다 놓아도 됩니다. + 레이아웃을 재배치하려면 창 헤더를 끌어 다른 창의 가장자리에 놓거나, 가운데에 놓아 두 창을 서로 + 바꾸세요. Ctrl+Shift+R은 한 쌍을 나란히 배치와 위아래 배치 사이에서 전환합니다. 모든 레이아웃은 + 프로젝트 뒤에 탭으로 나타나 각 창의 상태를 보여 주며, 더블 클릭해서 이름을 바꿉니다. 두 창 사이의 + 경계를 끌어 크기를 조절하고, Ctrl+Shift+M으로 하나를 확대하고, Ctrl+Shift+F로 창 사이를 이동하고, + Ctrl+Shift+W로 하나를 빼냅니다. 창이 하나만 남은 레이아웃은 닫힙니다. 끌고 있는 세션을 다른 탭 + 위에 잠시 두면 브라우저가 끌고 있는 파일에 하는 것처럼 그 탭이 열립니다. 사이드바와 푸터는 포커스된 + 창을 따라갑니다. +- **세션의 위임을 옆에 표시합니다.** 네이티브 창에서 다른 세션을 연 세션은, 어느 프로젝트의 + 것이든, 푸터에서 그 세션들을 보여 줍니다. 옆에 보기를 누르면 그 세션을 왼쪽에 두고 위임들을 오른쪽에 + 쌓아, 들어가는 만큼 배치합니다. 레이아웃 안에서는 창 헤더가 그곳에 있는 위임의 수를 세고 나머지를 + 추가하며, 다른 레이아웃에 있는 것을 빼 오기 전에 먼저 묻습니다. 레이아웃 안의 카드에는 그 이름이 + 표시됩니다. +- **필수 체크가 표시됩니다.** 네이티브 창에서 풀 리퀘스트의 체크 탭은 GitHub처럼, 병합을 가로막는 + 체크에 필수 표시를 붙입니다. + +### Changed + +- **lich는 `lichdotdev/lich`에 있습니다.** 저장소는 [lichdotdev](https://github.com/lichdotdev) + 조직으로, 사이트는 [lichdotdev.github.io/lich](https://lichdotdev.github.io/lich/)로 + 옮겨졌습니다. 예전 GitHub 링크, 클론, 업데이트 확인은 리다이렉트되지만, 예전 사이트의 북마크는 + 그렇지 않습니다. + +### Fixed + +- **새로운 기능 안내가 전환한 언어를 따릅니다.** 네이티브 창에서 인터페이스 언어를 바꾼 뒤에도 + 릴리스 노트가 처음 읽었던 언어로 남아 있었고, 그룹 이름만 새 언어로 표시되었습니다. +- **diff가 CJK 텍스트에서 멈추거나 파일마다 메모리가 쌓이는 문제를 고쳤습니다.** 네이티브 창에서 + 중국어, 일본어, 한국어 텍스트가 있는 리뷰나 풀 리퀘스트의 파일은 새 문자를 찾을 때마다 몇 초씩 + 멈출 수 있었고, 모든 파일의 diff가 글꼴 사본을 따로 가지고 있어 큰 풀 리퀘스트는 수백 메가바이트를 + 차지했습니다. + +## [0.70.0] - 2026-10-17 + +### Added + +- **새로운 기능 안내가 사용자의 언어로 표시됩니다.** 업데이트 후 열리는 대화상자가 릴리스 노트와 + 그 그룹 이름을 선택한 인터페이스 언어로, 두 창 모두에서 보여 줍니다. 아직 번역이 없는 빌드의 + 노트는 영어로 표시됩니다. +- **네이티브 창에서 세션을 포크할 수 있습니다.** 카드를 오른쪽 클릭해 포크 › 여기서를 고르면 + 같은 체크아웃의 바로 아래 새 카드에서 대화를 이어 가고, 포크 › worktree…를 고르면 커밋하지 않은 + 변경 사항과 함께 새 worktree로 옮깁니다. 복사본은 원본의 이름("auth-refactor 2")을 따르고 + 포크 표시가 붙습니다. Claude Code, Codex, opencode에서만 가능하며, 다른 프로바이더는 재개만 + 할 수 있습니다. +- **네이티브 창이 두 카드가 같은 대화를 실행하면 경고합니다.** 에이전트 자체 TUI 안에서, 이미 다른 + 카드에 열려 있는 대화를 재개하면 오른쪽 아래에 경고가 뜨며, 전환을 누르면 재개한 카드가 닫히고 + 그 대화를 가지고 있던 카드가 나타납니다. +- **네이티브 창이 이미지를 표시합니다.** PNG, JPEG, GIF, WebP, BMP는 파일 탭의 미리 보기에서 체커보드 + 위에 크기 및 해상도와 함께 열리고, 리뷰에서는 변경된 이미지의 이전과 이후가 나란히 표시됩니다. + PDF나 미리 볼 수 없는 다른 파일은 오류 대신 기본 앱에서 열기와 폴더에서 보기를 제공하며, 풀 + 리퀘스트의 바이너리 파일은 GitHub의 해당 파일로 연결됩니다. +- **네이티브 창이 사용자의 언어로 표시됩니다.** 네이티브 창의 모든 화면이 포르투갈어, 스페인어, + 중국어로 표시되며, 설정 › 일반에서 웹 창의 모양 아래에 있는 것과 같은 인터페이스 언어와 프롬프트 + 언어를 고를 수 있습니다. 고르기 전에는 시스템 언어를 따릅니다. 중국어 글꼴이 없는 컴퓨터에서 + 중국어를 고르면 Noto Sans SC(약 25MB)를 lich 자체 폴더로 다운로드할지 묻습니다. +- **일본어를 지원합니다.** 두 창 모두 일본어로 표시되며, 일본어는 프롬프트 언어이기도 해서 lich가 + 에이전트에게 일본어로 말합니다. 네이티브 창은 일본어, 중국어, 한국어를 각자 지역의 글꼴(Noto Sans + CJK, Yu Gothic, Hiragino, Malgun Gothic 등)이 설치되어 있으면 그 글꼴로 그리므로 한자가 더 이상 + 중국어 자형으로 나오지 않으며, 글꼴이 없으면 중국어의 Noto Sans SC처럼 Noto Sans JP나 KR을 + 다운로드할지 묻습니다. README도 일본어로 제공됩니다. +- **한국어를 지원합니다.** 두 창 모두 한국어로 표시되며, 웹에서는 설정 › 모양, 네이티브 창에서는 설정 + › 일반에서 고릅니다. 한국어는 프롬프트 언어이기도 해서 브리핑, 전달 메시지, 알림이 에이전트에게 + 한국어로 전달됩니다. +- **lich가 러시아어를 지원합니다.** 웹 창에서는 설정 › 모양, 네이티브 창에서는 설정 › 일반의 + 인터페이스 언어로 Русский를 고를 수 있고, 프롬프트 언어로도 고를 수 있어 lich가 에이전트에게 + 입력하는 브리핑, 전달 메모, 인계도 러시아어로 표시됩니다. 개수는 러시아어의 one, few, many 형태를 + 따릅니다(1 файл, 2 файла, 5 файлов). +- **macOS와 Windows의 opencode 프로필, Windows의 Cursor CLI 프로필을 지원합니다.** 네이티브 창의 + 설정 › 프로바이더에 Linux와 같은 방식으로 표시됩니다. macOS의 Cursor CLI와 macOS 및 Windows의 Kiro + CLI에는 아직 없습니다. 이들은 로그인 정보를 키체인이나 어떤 설정으로도 옮길 수 없는 폴더에 + 보관하므로, 프로필을 만들어도 모두 하나의 계정을 공유하게 됩니다. + +### Changed + +- **업데이트할 때마다 네이티브 창이 열립니다.** 각 릴리스의 첫 실행은 lich를 네이티브 창으로 + 전환하며, 시작할 수 없으면 웹 창으로 대체합니다. 설정에서 다시 전환하면 다음 릴리스까지 lich는 + 웹 창에 머뭅니다. 네이티브 창이 처음 열릴 때는 실험 단계라는 안내와 버그 신고 링크가 표시됩니다. +- **네이티브 창의 상태 링이 더 가벼워졌습니다.** 세션 카드 아이콘 둘레의 링이 더 가늘게 그려져, + 웹 창과 같은 굵기로 보입니다. + +- **네이티브 창의 단축키 키캡이 더 넉넉해졌습니다.** 명령 팔레트, 단축키 오버레이, 설정 › 단축키의 + 키캡에서 글자 둘레의 여백이 늘었고 글자는 가운데에 놓입니다. + +- **네이티브 창의 설정이 전역에서 열립니다.** 상단 바의 톱니바퀴는 마지막으로 보던 범위 대신 항상 + 설정을 전역에서 열며, 프로젝트 탭은 여전히 프로젝트 설정…에서 해당 프로젝트의 설정을 엽니다. + +- **네이티브 창의 명령 팔레트가 더 차분해졌습니다.** 세션, 프로젝트, 메시지는 각각 한 줄을 + 차지하고 이름 뒤에 경로가 붙으며, worktree의 경로는 마지막 세 부분을 보여 줍니다. 사용자를 + 기다리는 세션이 먼저 나오고 그렇게 표시되며, 필터 탭은 알약 모양 대신 밑줄로 바뀝니다. 기록의 + 닫힌 세션은 오른쪽에 브랜치와 경과 시간을 보여 주고, 검색어가 대화와 일치했을 때만 단어를 강조해 + 둘째 줄을 보여 줍니다. + +### Fixed + +- **재시작된 세션이 더 이상 영원히 바쁜 것으로 표시되지 않습니다.** 턴 도중 에이전트가 죽었거나 턴 + 도중 닫힌 세션이 같은 카드로 돌아왔을 때 다른 세션에는 여전히 바쁜 것으로 나타나, 그 세션에 보낸 + 작업이 끝나지 않을 턴을 기다렸습니다. 이제 새 세션처럼 상태 없이 시작합니다. +- **Codex, Cursor CLI, Antigravity, Crush가 이미 답한 것을 다시 묻지 않습니다.** 이들 중 어느 + 프로바이더든 샌드박스 세션은 바로 프롬프트에서 열립니다. Cursor CLI와 Antigravity는 신뢰한 + 폴더의 worktree에서 다시 묻지 않고, Antigravity는 그 하위 폴더에서도 묻지 않으며, Crush는 새 + worktree마다 초기화할지 묻지 않습니다. 샌드박스 oh-my-pi 세션은 더 이상 설정 마법사에서 열리지 + 않습니다. +- **Claude Code가 이미 답한 곳에서 "이 폴더를 신뢰하나요?"를 다시 묻지 않습니다.** 메인 계정에서 + 신뢰한 폴더는 다른 모든 Claude Code 프로필에서도 그곳의 다음 세션부터 신뢰되고, 샌드박스 Claude + Code 세션은 질문 없이 열립니다. lich가 대신 연 세션이 더 이상 Enter를 누르면 종료되는 그 화면에 + 머물지 않습니다. +- **다시 연 네이티브 창이 각 세션이 어디로 갔는지 알아냅니다.** `cd`로, 또는 tmux나 ssh로 이동한 + 세션이 다음 `cd`까지 체크아웃의 경로, 브랜치, 변경 사항을 표시한 채 돌아왔는데, 이제 창이 연결될 + 때 각 세션이 마지막으로 있던 곳을 읽어 옵니다. +- **네이티브 창이 에이전트 프롬프트를 프롬프트 언어로 작성합니다.** 풀 리퀘스트와 이슈 인계, 그리고 + 리뷰 코멘트 묶음이 항상 영어로 입력되었습니다. +- **재연결 중 테마를 바꿔도 네이티브 창이 더 이상 충돌하지 않습니다.** 창이 재시작된 lich에 다시 + 연결되는 동안 테마를 바꾸거나 시스템이 밝은 테마와 어두운 테마를 전환하면, 재연결이 방금 해제한 + 터미널을 그려 창이 종료될 수 있었습니다. +- **중국어, 일본어, 한국어 텍스트가 더 이상 Linux의 네이티브 창을 멈추지 않습니다.** CJK 텍스트로 + 가득한 세션, 리뷰, 풀 리퀘스트가 창을 몇 초간 멈춰 "응답 없음"이 뜰 정도였고, 확대하면 멈춤이 + 다시 나타났습니다. +- **네이티브 창이 메모리를 덜 사용합니다.** 각 세션의 터미널과 리뷰가 대체 글꼴을 각자 따로 + 불러왔고, CJK나 이모지 글꼴은 하나에 수십 MB였습니다. 이제 세션 여섯 개를 열었을 때 메모리 + 사용량이 이전의 약 절반입니다. CJK 글꼴이 설치된 컴퓨터에서는 시작도 더 빠릅니다. +- **대화가 이미 열려 있는 세션을 다시 열면 그 카드로 포커스가 이동합니다.** 기록의 닫힌 세션, 실행 + 취소한 닫기, 기존 worktree가 다른 카드가 아직 실행 중인 대화의 두 번째 카드로 돌아와 둘이 같은 + 대화 기록에 썼습니다. 이제 기록은 그런 대화를 마지막으로 닫은 시점 기준으로 한 번만 보여 주고, + 지우기는 그 대화의 모든 사본을 제거합니다. + +## [0.69.0] - 2026-10-16 + +### Added + +- **macOS에서 네이티브 창을 사용할 수 있습니다(실험).** Lich.app이 Apple Silicon과 Intel 모두에서 + lich와 함께 네이티브 창을 제공하며, 설정 › 모양 › 창에서 Linux, Windows와 같이 선택할 수 + 있습니다. 터미널에서는 Option 키가 Terminal.app처럼 문자를 입력하므로, 에이전트의 Option+글자 + 단축키는 터미널에 전달되지 않습니다. 지금까지는 GitHub의 macOS 머신에서만 실행해 보았습니다. + 알림은 클릭할 수 없는 일반 알림이며, 메뉴 막대 항목은 없습니다. +- **파일 트리가 훨씬 더 많은 파일 형식을 인식합니다.** Java, Gradle, C와 C++, C#, PHP, Ruby, + Swift, SQL, Vue, Svelte, Terraform, Dockerfile, .gitignore를 비롯해 약 서른 가지가 더 이제 + 파일 트리와 검색 결과에서 일반 파일 아이콘 대신 각자의 아이콘으로 표시됩니다. + +### Fixed + +- **`lich quit`이 네이티브 창을 닫습니다.** 백엔드가 사라진 뒤에도 창이 열린 채 lich를 연결이 + 끊긴 것으로 표시했습니다. 이제 트레이의 종료와 중지 신호도 창을 닫으며, 업데이트 후 재시작할 + 때는 창이 그대로 유지됩니다. +- **네이티브 창이 마지막 세션을 닫을 때 worktree 삭제를 제안합니다.** 닫힘 토스트에 실행 취소 + 옆으로 worktree 삭제 버튼이 생겼으며, lich가 만들지 않은 worktree나 커밋하지 않은 변경 사항이 + 있는 worktree는 삭제하기 전에 대화상자에서 알려 줍니다. + +- **네이티브 창의 터미널이 포인터 아래의 셀을 선택합니다.** 클릭, 드래그 선택, 링크, 마우스를 + 추적하는 프로그램이 모두 터미널 패딩만큼 어긋난 포인터 위치를 읽었기 때문에, 가리킨 셀이 아니라 + 오른쪽 아래의 셀이 선택되었습니다. 배율이 적용된 디스플레이에서는 어긋남이 셀 하나에 가까웠습니다. +- **네이티브 창의 터미널이 이모지를 그립니다.** Noto Color Emoji 같은 컬러 이모지 글꼴은 각 + 이모지를 윤곽선이 아니라 그림으로 저장하는데, 터미널은 윤곽선만 그릴 수 있어서 모든 이모지가 + 빈 칸으로 보였습니다. 이제 컬러로, 두 셀 너비로 그려집니다. +- **네이티브 창의 파일 트리가 파일마다 언어 아이콘을 표시합니다.** 모든 파일이 똑같은 일반 파일 + 아이콘으로 그려졌는데, 이제 웹 창이 붙여 주는 것과 같은 아이콘이 붙습니다. +- **에이전트가 연 풀 리퀘스트가 턴이 끝나면 카드에 표시됩니다.** 배지는 브랜치나 마지막 커밋이 + 바뀔 때만 다시 확인했는데, 풀 리퀘스트를 열어도 둘 다 바뀌지 않아서 창이 포커스를 잃었다가 + 되찾을 때까지 기다려야 했습니다. +- **Windows에서 네이티브 창이 열립니다.** 글꼴을 Windows에 없는 fontconfig로 찾으려다 시작할 때 + 창이 닫혔고, lich는 웹 창으로 대체되었습니다. 이제 Windows에서는 설치된 글꼴을 직접 찾으며, + 터미널 기본 글꼴은 Cascadia Mono 또는 Consolas이고 설정의 글꼴 선택기에도 목록이 표시됩니다. +- **밝은 테마와 어두운 테마를 전환해도 네이티브 창이 더 이상 멈추지 않습니다.** Claude Code처럼 + 터미널의 색 구성표를 따르는 세션이, 창이 아직 터미널을 붙잡고 있는 동안 변경 사실을 전달받아 + 창이 멈춘 뒤 닫혔습니다. diff --git a/changelog/pt-BR.md b/changelog/pt-BR.md index 9ea1e5a0..e4c68ea6 100644 --- a/changelog/pt-BR.md +++ b/changelog/pt-BR.md @@ -13,3 +13,332 @@ - Teclas mortas compõem no terminal de uma sessão: no macOS, ~ e depois a digita ã, e ' e depois c digita ç, onde antes o acento chegava sozinho antes da letra. O texto que um método de entrada ainda está compondo, como o de um IME japonês ou chinês, também não chega mais ao programa antes de ser confirmado. - Depois de trocar de modelo em uma sessão do Claude Code com `/model`, o rodapé e o tooltip do card da sessão mostram o novo modelo assim que o primeiro turno dele termina. Antes mantinham o antigo até um turno posterior ou uma reconexão, porque o lich lia o transcript antes de o Claude Code ter escrito a última linha daquele turno. - No macOS, os botões de fechar, minimizar e zoom continuam centralizados na barra de título. O macOS os devolvia ao topo da barra quando a janela abria, quando você trocava para outro app e voltava, e quando o sistema alternava entre claro e escuro, até a janela ser redimensionada. + +## [0.75.0] - 2026-10-21 + +### Added + +- Um arquivo Markdown na aba Revisão tem um botão de prévia ao lado de "Adicionar arquivo como contexto" que mostra o arquivo renderizado, com tabelas e links, no lugar do diff. Clique de novo para voltar ao diff. Na tela Pull requests, só os arquivos que o pull request adiciona têm o botão. +- Ctrl+F (Cmd+F no macOS) em um arquivo aberto na aba Código procura texto nele. Uma barra sob o nome do arquivo destaca cada ocorrência, percorre-as com Enter e Shift+Enter e pode diferenciar maiúsculas de minúsculas, buscar palavras inteiras ou usar uma expressão regular. O botão de lista dela mostra sob a barra cada linha com uma ocorrência, e clicar em uma leva o código até lá. Escape a fecha. +- O tooltip do card de uma sessão informa o modelo que a sessão está rodando, no Claude Code, no Codex e no Kiro CLI. Quando já não é o modelo com que a sessão foi aberta, depois de um `/model`, por exemplo, a linha diz "Aberta com …, rodando …". +- A tela Pull requests edita o título e a descrição de um pull request e os envia ao GitHub. O lápis depois do título o renomeia ali mesmo: Enter ou clicar fora salva, Escape cancela. Editar ao lado da Descrição da Visão geral a abre como Markdown, salva com Salvar ou Ctrl+Enter (Cmd+Enter no macOS). Uma descrição longa rola dentro do campo, com barra de rolagem, para que Salvar continue na tela. Cada uma envia só o que mudou, então salvar a descrição nunca desfaz uma renomeação feita no GitHub nesse meio tempo. +- Um perfil pode ter cor e imagem próprias. Em Configurações › Provedores, o menu ⋯ de um perfil tem Cor, com as mesmas oito cores de um card de sessão, e Escolher imagem…, que aceita um PNG, JPEG, GIF ou WebP de até 10 MB e mantém o quadrado central dele. A imagem ou a cor aparece onde quer que o perfil apareça: a lista e o seletor de perfis, o rodapé da barra lateral e Continuar em. Remover imagem volta para a inicial na cor do perfil. + +### Changed + +- Um bloco de cards na barra lateral, uma worktree, uma pasta ou o bloco fixado, agora cresce quando o primeiro card abre e encolhe com o último, onde antes aparecia e sumia de uma vez. Os cabeçalhos que aparecem quando a lista se divide em blocos se abrem do mesmo jeito e se recolhem quando sobra um só. +- As verificações de um pull request ainda em execução agora mostram um spinner girando, na aba Verificações e na linha de status acima das abas, onde antes havia um relógio parado. +- Os botões não afundam mais um pixel enquanto são pressionados, então todos os botões da janela se comportam do mesmo jeito: os que tinham esse movimento agora combinam com os que nunca tiveram. + +### Removed + +- **Breaking:** o lich não executa mais o `.lich/setup-worktree.sh` quando `lich open --worktree` ou o `open_session` de um agente inicia uma sessão em uma worktree nova. O arquivo no seu repositório não é tocado. Se as suas worktrees dependiam dele para instalar dependências, execute-o você mesmo no terminal da nova worktree (`sh .lich/setup-worktree.sh`), ou peça ao agente. A cópia dos seus arquivos `.env*` ignorados pelo git (ou do que o `.worktreeinclude` nomeia) e a porta de servidor de desenvolvimento `LICH_WORKTREE_PORT` continuam iguais. + +### Fixed + +- O `git commit`, `rebase` ou `stash` de um agente não falha mais de vez em quando com "Unable to create '.git/index.lock': File exists" porque o lich estava lendo o status ou o diff daquele checkout no mesmo instante. As leituras do lich deixam o índice em paz. +- O card de uma sessão fechada volta a encolher para fora da barra lateral, onde antes sumia de uma vez. +- Ctrl+Z em uma sessão não congela mais o agente para sempre. Antes ele suspendia o agente, e nada no lich conseguia trazê-lo de volta; agora o lich mantém a tecla longe da sessão. +- As barras do tooltip de uso do plano, no rodapé, voltam a mostrar a trilha vazia em temas cujas cores de popover e muted são iguais, como o Everforest, onde só a parte preenchida era desenhada. +- Abrir ou fechar a lista de pull requests na tela Pull requests não faz mais a aba do projeto ativo soltar o painel abaixo dela e agarrá-lo de novo. A aba continua conectada durante todo o movimento e passa para a lista quando ela desliza por baixo. + +## [0.74.0] - 2026-10-20 + +### Added + +- F11 coloca a janela em tela cheia e a tira de lá, sem os botões de minimizar, maximizar e fechar enquanto ela está assim. O atalho pode ser alterado em Configurações › Atalhos. + +### Changed + +- Um pull request que conflita com a base não lista mais os arquivos em conflito sob o título. O status "Conflita com" os conta, e clicar nele abre um painel sobre a tela que nomeia cada um. +- **Resolver conflitos** e **Corrigir erros de CI** em um pull request, e uma worktree iniciada a partir de uma issue `#123`, agora enviam a mensagem para a sessão que abrem, onde antes ela ficava no prompt esperando você apertar Enter. Um card de terminal nesse checkout nunca recebe nada. + +### Fixed + +- A aba do projeto ativo agora se separa da ilha do terminal quando abrir ou redimensionar o painel Código ou Revisão faz com que ela invada o painel, e se reconecta quando volta a caber. +- No macOS, os botões de fechar, minimizar e zoom ficam centralizados na barra de título da janela nativa, e não colados na borda superior, e acompanham o zoom da interface. +- A janela pode ser arrastada pela barra superior: depois da última aba e nos espaços ao redor da marca e dos botões. Antes, nenhuma parte da barra a movia. +- A tela Pull requests mantém o que mostra atualizado sem apertar Atualizar. Ela lê um pull request de novo a cada poucos segundos enquanto o GitHub ainda decide se ele pode ser mergeado, uma vez por minuto enquanto a tela está aberta e quando você volta para a janela, então um push, um merge ou um conflito feito fora do lich aparece sozinho. + +## [0.73.0] - 2026-10-20 + +> [!IMPORTANT] +> **Todos: a janela nativa agora é a única janela do lich.** O lich a abre em toda +> inicialização; a janela web e o Chromium embutido acabaram. + +### Added + +- **Notificações de desktop em que você pode clicar, na janela nativa no Windows e no macOS.** Como no Linux, uma sessão que precisa da sua resposta ou terminou o turno gera uma notificação com Abrir e Dispensar: Abrir leva o lich ao card dessa sessão, e a notificação some quando você responde ou abre a sessão. No macOS ela exige que o lich rode a partir do Lich.app e pede permissão uma vez; no Windows, uma sessão esperando por você mantém a notificação na tela até você agir sobre ela. +- Configurações › Provedores avisa em Perfil quando as sessões iniciam por um binário personalizado, com o caminho dele e botões para mostrá-lo ou voltar ao padrão. Um wrapper que define o próprio diretório de login ou de configuração sobrepõe o perfil, e a configuração Binário fica recolhida no fim da tela. + +### Changed + +- Quando o processo de uma sessão termina, um toast no canto inferior direito agora pergunta o que fazer, no lugar da faixa na parte de baixo do terminal. Um card com conversa oferece Retomar, que abre de novo essa mesma conversa (no perfil em que ela começou), Começar outra, que inicia uma nova no card como o Reiniciar fazia, e Fechar sessão. Um shell, ou um agente que terminou antes do primeiro prompt, oferece Reiniciar e Fechar sessão. Dispensar o toast deixa o card como está, e focar o card traz o toast de volta. +- **O perfil do projeto fica no pé da barra lateral, não em cada card.** Com mais de um login para um provedor, a última linha da barra lateral mostra o perfil em que as novas sessões desse provedor neste projeto começam: o provedor do card na tela, ou o padrão para um terminal. Clique nela para escolher outro login, com o uso de cinco horas de cada um, ou para voltar ao Global; Outros provedores altera os demais pelo mesmo menu. Os cards não trazem mais o chip de perfil ao lado da branch. + +### Removed + +- A janela web. O lich abre a janela nativa, e uma release não inclui mais o Chromium. A escolha Janela nas Configurações (web ou nativa) e o item da bandeja que abria a outra janela acabaram, assim como `lich -- `, `lich --shell` e `LICH_SHELL`. Se a janela nativa não consegue iniciar, o lich diz o motivo e onde está o log. + +### Fixed + +- Fazer login de um perfil do Claude Code ou do Codex agora mostra que está autenticando assim que você termina no navegador, ou envia um código colado, onde o diálogo ficava esperando o login até o fim e o campo do código apenas esvaziava. +- Em português do Brasil, toda mensagem agora chama a worktree de "a worktree", onde algumas diziam "o worktree". +- No macOS a janela nativa voltou a ter os botões de fechar, minimizar e zoom; desde a 0.72.0 a barra superior deixava o espaço deles vazio. +- No Windows, atualizar o lich pela janela nativa não faz mais rollback com "Setup was unable to automatically close all applications": a janela ficava aberta em `lich-native.exe`, que o instalador precisa substituir. Agora ela fecha antes de o instalador rodar e abre de novo quando o lich volta. Atualizar da 0.72.0 ou anterior ainda cai nisso uma vez: encerre `lich-native.exe` no Gerenciador de Tarefas quando a mensagem aparecer, escolha Retry e abra o lich pelo menu Iniciar depois. +- Fechar a janela nativa enquanto o lich está ausente, depois de ele encerrar ou enquanto reinicia, a fecha, seja qual for o valor de "Ao fechar a janela". Com Perguntar ou Encerrar ela ficava aberta e só mostrava um erro de que as sessões não puderam ser contadas. +- Numa janela de Configurações estreita, uma configuração cujo controle é largo demais para dividir a linha, como o seletor de Perfil de um provedor, agora põe o controle abaixo do título e da descrição, onde o texto era espremido numa faixa mínima e quebrava letra por letra. O link de Documentação de um provedor também passa para baixo do nome, em vez de bater no interruptor Ativado. +- Continuar em pode mover uma conversa do Claude Code de volta ao perfil que ela acabou de deixar, onde um hook de plugin que continuou rodando depois do fim da sessão (o do WakaTime, por exemplo) deixava um arquivo para trás e a movimentação era recusada com "already holds". + +## [0.72.0] - 2026-10-19 + +### Changed + +- A barra superior da janela nativa agora é a barra de título: a barra do sistema sumiu, e minimizar, maximizar e fechar ficam ao lado de Configurações, desenhados como o Windows, o GNOME e o KDE os desenham e no lado em que o seu desktop os coloca; no macOS os semáforos ficam na barra superior. Arraste a parte vazia da barra superior para mover a janela e dê um duplo clique nela para maximizar. Gerenciadores de janela tiling mantêm as próprias decorações. + +### Fixed + +- `lich quit` não falha mais com "EOF" quando o lich fecha antes de responder: ele espera a porta fechar em vez de tratar a resposta perdida como recusa. +- No Wayland, a janela nativa mostra o cursor do próprio desktop, no tema e no tamanho dele, onde podia mostrar outro tema. Num monitor com escala menor que a do maior, o cursor não pula mais ao entrar na janela. +- No Linux, a janela nativa se agrupa sob o ícone do próprio lich no dock, onde aparecia como um app separado com um ícone genérico. +- Na Revisão da janela nativa e nos Arquivos de um pull request, a barra de rolagem mantém o tamanho enquanto você rola, onde crescia e encolhia conforme o arquivo que ocupava a tela. Arrastá-la agora percorre o diff por igual, não arquivo por arquivo. + +## [0.71.2] - 2026-10-19 + +### Fixed + +- A janela nativa volta a abrir no Windows e no macOS, onde fechava logo em + seguida procurando o fontconfig para desenhar as visões de código e de diff. +- Emojis no terminal da janela nativa são desenhados em cores no Windows, onde + apareciam só como contornos. +- O comando de atualização oferecido a uma instalação no macOS agora faz o tap de `lichdotdev/tap` antes de atualizar. Uma instalação vinda do antigo `omartelo/tap` falhava com "Cask 'lichdotdev/tap/lich' is unavailable", já que o Homebrew não segue um tap que mudou de lugar; faça o tap uma vez com `brew tap lichdotdev/tap` para atualizar a partir de um lich mais antigo. +- Na janela nativa, "Expandir pastes longos" agora expande os pastes do Claude Code e do Kiro CLI: a área de transferência, um lote de comentários de revisão, o prompt com que um pull request ou issue abre uma sessão e caminhos de arquivo soltos ou anexados. + +## [0.71.1] - 2026-10-18 + +### Fixed + +- A janela nativa no Linux não trava mais com uma instrução ilegal ao abrir um terminal numa CPU sem AVX-512. + +## [0.71.0] - 2026-10-17 + +### Added + +- **Layouts divididos na janela nativa (experimental).** Coloque sessões de + qualquer projeto aberto lado a lado e divida-as como quiser: Ctrl+Shift+G + divide a sessão em foco para a direita, Ctrl+Shift+I para baixo, e cada um + pergunta qual sessão vai ali; ou arraste um card da barra lateral até a borda + de um painel. Reorganize um layout arrastando um painel pelo cabeçalho até a + borda de outro painel, ou até o meio dele para trocar os dois de lugar, e + alterne um par entre lado a lado e empilhado com Ctrl+Shift+R. Cada layout é + uma aba depois dos projetos, com o status dos seus painéis, e é renomeado com + um clique duplo; arraste o vão entre dois painéis para redimensioná-los, + amplie um com Ctrl+Shift+M, alterne entre eles com Ctrl+Shift+F e tire um do + layout com Ctrl+Shift+W; um layout reduzido a um painel é fechado. Deixe uma + sessão arrastada sobre outra aba e essa aba abre, como um navegador faz com um + arquivo arrastado. A barra lateral e o rodapé acompanham o painel em foco. +- **Mostre os delegados de uma sessão ao lado dela.** Na janela nativa, uma + sessão que abriu outras, em qualquer projeto, oferece essas sessões no + rodapé: Mostrar ao lado organiza a sessão com os delegados empilhados à + direita, quantos couberem. Em um layout, o cabeçalho do painel conta quantos + estão ali e adiciona os restantes, perguntando antes de tirar algum de outro + layout. Um card em um layout o indica pelo nome. +- **Verificações obrigatórias têm rótulo.** Na janela nativa, a aba + Verificações de um pull request marca com Obrigatório as verificações que + condicionam o merge, como faz o GitHub. + +### Changed + +- **O lich agora fica em `lichdotdev/lich`.** O repositório foi movido para a + organização [lichdotdev](https://github.com/lichdotdev) e o site para + [lichdotdev.github.io/lich](https://lichdotdev.github.io/lich/). Links + antigos do GitHub, clones e verificações de atualização são redirecionados; + favoritos do site antigo não. + +### Fixed + +- **Novidades acompanha o idioma para o qual você troca.** Na janela nativa, as + notas da versão continuavam no idioma em que foram lidas pela primeira vez + depois que você mudava o idioma da interface, sob nomes de grupo no idioma + novo. +- **Diffs não travam mais com texto CJK nem acumulam memória por arquivo.** Na + janela nativa, uma Revisão ou os Arquivos de um pull request com texto em + chinês, japonês ou coreano podia congelar por segundos enquanto cada + caractere novo era buscado, e o diff de cada arquivo mantinha a sua própria + cópia das fontes, de modo que um pull request grande ocupava centenas de + megabytes. + +## [0.70.0] - 2026-10-17 + +### Added + +- **O Novidades fala a sua língua.** O diálogo que abre depois de uma atualização + mostra as notas da versão, e os nomes dos grupos delas, no idioma da interface + que você escolheu, nas duas janelas. Uma versão cujas notas ainda não têm + tradução as mostra em inglês. +- **Fork de uma sessão na janela nativa.** Clique com o botão direito em um card e + escolha Fork › Aqui para continuar a conversa dele em um novo card logo abaixo, + no mesmo checkout, ou Fork › Worktree… para levá-la a uma nova worktree junto + com as suas alterações não commitadas. A cópia recebe o nome do original + ("auth-refactor 2") e leva uma marca de fork. Só Claude Code, Codex e opencode: + os outros provedores só retomam. +- **A janela nativa avisa quando dois cards rodam uma só conversa.** Retomar, de + dentro da TUI do próprio agente, uma conversa que outro card já tem aberta + mostra um aviso no canto inferior direito; Trocar fecha o card que retomou e + traz à frente o que já a tinha. +- **A janela nativa mostra imagens.** Um PNG, JPEG, GIF, WebP ou BMP abre na + prévia da aba Arquivos sobre um xadrez, com seu tamanho e dimensões, e uma + imagem alterada na Revisão aparece antes e depois lado a lado. Um PDF, ou + qualquer outro arquivo sem prévia, oferece Abrir no app padrão e Mostrar na + pasta em vez de um erro; em um pull request, um arquivo binário leva um link + para ele mesmo no GitHub. +- **A janela nativa no seu idioma.** Todas as telas da janela nativa aparecem em + português, espanhol e chinês, e Configurações › Geral tem o idioma da interface + e o idioma dos prompts, como a janela web os tem em Aparência. Antes de você + escolher um, a interface segue o idioma do seu sistema. Escolher chinês em uma + máquina sem fonte chinesa oferece baixar a Noto Sans SC (cerca de 25 MB) para a + pasta própria do lich. +- **Japonês.** As duas janelas aparecem em japonês, e o japonês é um idioma de + prompt, então o lich fala com os seus agentes nele. A janela nativa desenha + japonês, chinês e coreano cada um na fonte da sua própria região quando há uma + instalada (Noto Sans CJK, Yu Gothic, Hiragino, Malgun Gothic e semelhantes), + então os kanji não tomam mais formas chinesas, e oferece baixar a Noto Sans JP + ou KR quando não há, como faz com a Noto Sans SC para o chinês. O README também + está em japonês. +- **Coreano.** As duas janelas aparecem em coreano, escolhido em Configurações › + Aparência na web e em Configurações › Geral na janela nativa, e o coreano é um + idioma de prompt: briefings, mensagens repassadas e avisos chegam aos seus + agentes em coreano. +- **O lich fala russo.** Escolha Русский como idioma da interface, na janela web + em Configurações › Aparência ou na janela nativa em Configurações › Geral, e + como idioma dos prompts, para que o briefing, as notas de relay e os handoffs + que o lich digita nos seus agentes também apareçam em russo. As contagens + seguem as formas um, poucos e muitos do russo (1 файл, 2 файла, 5 файлов). +- **Perfis do opencode no macOS e no Windows, e perfis do Cursor CLI no + Windows.** Configurações › Provedores na janela nativa os lista como faz no + Linux. O Cursor CLI no macOS e o Kiro CLI no macOS e no Windows continuam sem + eles: ali guardam o login no Keychain ou em uma pasta que nenhuma configuração + consegue mover, então todo perfil compartilharia uma só conta. + +### Changed + +- **Toda atualização abre a janela nativa.** A primeira execução de cada versão + muda o lich para a janela nativa, recorrendo à web onde ela não consegue + iniciar; volte nas Configurações e o lich fica na janela web até a próxima + versão. Na primeira vez que a janela nativa abre, ela diz que é experimental e + leva a um relato de bug. +- **Um anel de status mais leve na janela nativa.** O anel em volta do ícone do + card de uma sessão é desenhado mais fino, para ter o peso que a janela web lhe + dá. + +- **Teclas de atalho mais folgadas na janela nativa.** As teclas na paleta de + comandos, na janela de atalhos e em Configurações › Atalhos têm mais espaço em + volta do texto, que fica centralizado. + +- **As Configurações da janela nativa abrem em Global.** A engrenagem na barra + superior sempre abre as Configurações em Global, em vez do escopo em que você + as deixou por último; a aba de um projeto continua abrindo as configurações + dele em Configurações do projeto…. + +- **Uma paleta de comandos mais calma na janela nativa.** Cada sessão, projeto e + mensagem ocupa uma linha, com o caminho depois do nome; o caminho de uma + worktree mostra as suas três últimas partes. As sessões que esperam por você + vêm primeiro e dizem isso, e as abas de filtro trocam as pílulas por um + sublinhado. Uma sessão fechada no Histórico mostra a branch e a idade à + direita, e uma segunda linha só quando uma busca encontrou a conversa dela, + com as palavras marcadas. + +### Fixed + +- **Uma sessão reiniciada não aparece mais como ocupada para sempre.** Uma sessão + cujo agente morreu no meio de um turno, ou que foi fechada no meio de um turno, + voltava no mesmo card ainda listada como ocupada para as outras sessões: uma + tarefa enviada a ela esperava por um turno que nunca terminaria. Agora ela + começa sem estado, como uma nova. +- **Codex, Cursor CLI, Antigravity e Crush deixam de perguntar o que você já + respondeu.** Uma sessão em sandbox de qualquer um deles abre direto no prompt. + O Cursor CLI e o Antigravity não perguntam mais de novo em uma worktree de uma + pasta em que você confiou, nem o Antigravity nas subpastas dela, e o Crush não + pede mais para inicializar cada nova worktree. Uma sessão do oh-my-pi em + sandbox não abre mais no assistente de configuração. +- **O Claude Code deixa de perguntar "confiar nesta pasta?" onde você já + respondeu.** Uma pasta em que você confiou na sua conta principal passa a ser + confiável em todos os outros perfis do Claude Code a partir da próxima sessão + ali, e uma sessão do Claude Code em sandbox abre sem a pergunta. Uma sessão que + o lich abriu para você não fica mais parada nessa tela, onde Enter sai. +- **Uma janela nativa reaberta sabe para onde cada sessão foi.** Uma sessão que + tinha se movido com `cd`, ou para dentro do tmux ou do ssh, voltava mostrando o + caminho, a branch e as alterações do checkout dela até o próximo `cd`; agora a + janela lê onde cada uma esteve por último ao se conectar. +- **A janela nativa escreve os prompts dos agentes no idioma dos seus prompts.** + Os handoffs de pull request e de issue e um lote de comentários de revisão + eram sempre digitados em inglês. +- **Trocar o tema durante uma reconexão não derruba mais a janela nativa.** + Trocar o tema, ou o sistema alternar entre claro e escuro, enquanto a janela se + reconectava a um lich reiniciado podia pintar terminais que a reconexão tinha + acabado de liberar e derrubar a janela. +- **Texto em chinês, japonês e coreano não congela mais a janela nativa no + Linux.** Uma sessão, uma Revisão ou um pull request cheio de texto CJK podia + travar a janela por segundos, o bastante para o "não está respondendo", e um + zoom trazia o congelamento de volta. +- **A janela nativa usa menos memória.** O terminal de cada sessão e a Revisão + carregavam a própria cópia das fontes de reserva, dezenas de megabytes cada + uma para uma fonte CJK ou de emoji: seis sessões abertas agora ocupam cerca da + metade da memória de antes. Ela também inicia mais rápido em uma máquina com + fontes CJK instaladas. +- **Reabrir uma sessão cuja conversa já está aberta foca esse card.** Uma sessão + fechada vinda do Histórico, um fechamento desfeito ou uma worktree existente + podiam voltar como um segundo card em uma conversa que outro card ainda + rodava, e os dois escreviam no mesmo transcript. O Histórico lista essa + conversa uma só vez, pelo fechamento mais recente, e Esquecer remove todas as + cópias dela. + +## [0.69.0] - 2026-10-16 + +### Added + +- **A janela nativa no macOS, experimental.** O Lich.app a traz junto com o lich + no Apple Silicon e no Intel, e Configurações › Aparência › Janela a oferece como + no Linux e no Windows. A tecla Option digita caracteres no terminal dela, como + no Terminal.app, então atalhos Option+letra de um agente não chegam a ele. Até + agora ela só rodou nas máquinas macOS do GitHub: as notificações são simples e + não dá para clicar nelas, e não há item na barra de menus. +- **A árvore de arquivos reconhece muito mais tipos de arquivo.** Java, Gradle, C e C++, + C#, PHP, Ruby, Swift, SQL, Vue, Svelte, Terraform, Dockerfile, .gitignore e + mais umas trinta extensões agora mostram o próprio ícone na árvore de arquivos e + nos resultados de busca, onde antes mostravam um glifo de arquivo genérico. + +### Fixed + +- **`lich quit` fecha a janela nativa.** Ela continuava aberta mostrando o lich como + perdido depois que o backend se fora; o Encerrar o lich da bandeja e um sinal de parada + também a fecham, enquanto um reinício depois de uma atualização ainda a mantém. +- **A janela nativa oferece remover o worktree quando a última sessão dele fecha.** O + toast de sessão fechada ganha Remover worktree ao lado de Desfazer; um worktree que o lich não criou, ou + um com alterações não commitadas, é citado em um diálogo antes de ser removido. + +- **O terminal da janela nativa pega a célula sob o ponteiro.** Um clique, + uma seleção por arrasto, um link e um programa que rastreia o mouse liam o + ponteiro deslocado pelo padding do terminal, então a célula captada ficava abaixo + e à direita da apontada, por quase uma célula inteira em uma tela + escalada. +- **O terminal da janela nativa desenha emoji.** Uma fonte de emoji colorido como a + Noto Color Emoji guarda cada emoji como imagem em vez de contorno, e o + terminal só desenhava contornos, então todo emoji aparecia como um espaço vazio; agora + eles são desenhados em cores, ocupando duas células. +- **A árvore de arquivos da janela nativa mostra o ícone de linguagem de cada arquivo.** Todo + arquivo desenhava o mesmo glifo de arquivo genérico; cada um agora leva o ícone que a janela + do navegador lhe dá. +- **Um pull request aberto por um agente aparece no card quando o turno termina.** O + badge só consultava de novo quando a branch ou o último commit dela mudava, e abrir + um pull request não muda nenhum dos dois, então ele esperava a janela perder e recuperar o + foco. +- **A janela nativa abre no Windows.** Ela buscava as fontes pelo + fontconfig, que o Windows não traz, então fechava na inicialização e o lich + recorria à janela web. No Windows ela agora encontra as fontes instaladas + por conta própria, Cascadia Mono ou Consolas para o terminal por padrão, e os + seletores de fonte em Configurações as listam. +- **Alternar entre um tema claro e um escuro não trava mais a janela nativa.** Uma sessão que segue o esquema de cores do terminal, como o Claude Code + faz, era avisada da mudança enquanto a janela ainda segurava seus terminais, então + a janela travava e fechava. + diff --git a/changelog/ru.md b/changelog/ru.md index 457444e7..e48a1d56 100644 --- a/changelog/ru.md +++ b/changelog/ru.md @@ -13,3 +13,332 @@ - Мёртвые клавиши теперь работают в терминале сессии: в macOS ~ и затем a вводит ã, а ' и затем c вводит ç, тогда как раньше акцент приходил сам по себе до буквы. Текст, который метод ввода ещё набирает, например в японском или китайском IME, тоже больше не доходит до программы до подтверждения. - После смены модели в сессии Claude Code командой `/model` нижняя панель и подсказка карточки сессии называют новую модель, как только завершается её первый ход. Раньше они сохраняли старую до одного из следующих ходов или переподключения, потому что lich читал транскрипт до того, как Claude Code записал последнюю строку этого хода. - В macOS кнопки закрытия, сворачивания и зума остаются по центру заголовка окна. macOS возвращала их к верхнему краю заголовка при открытии окна, при переключении на другое приложение и обратно и при смене системной темы между светлой и тёмной, пока размер окна не изменялся. + +## [0.75.0] - 2026-10-21 + +### Added + +- У Markdown-файла на вкладке «Ревью» рядом с «Добавить файл как контекст» появилась кнопка предпросмотра: она показывает файл в отрендеренном виде, с таблицами и ссылками, вместо его диффа. Повторное нажатие возвращает дифф. На экране Pull requests она есть только у файлов, которые добавляет сам pull request. +- Ctrl+F (Cmd+F в macOS) в файле, открытом на вкладке «Код», ищет в нём текст. Панель под названием файла подсвечивает все совпадения, переходит между ними по Enter и Shift+Enter и умеет учитывать регистр, искать слово целиком или по регулярному выражению. Кнопка со списком показывает под панелью все строки с совпадениями, а щелчок по строке переносит код к ней. Escape закрывает панель. +- Подсказка карточки сессии называет модель, на которой работает сессия, для Claude Code, Codex и Kiro CLI. Если это уже не та модель, на которой сессия была открыта, например после `/model`, строка читается как «Открыта на …, работает на …». +- Экран Pull requests редактирует название и описание pull request и отправляет их в GitHub. Карандаш после названия переименовывает его на месте: Enter или щелчок в сторону сохраняет, Escape отменяет. «Изменить» рядом с «Описанием» на вкладке «Обзор» открывает описание как Markdown, сохраняется кнопкой «Сохранить» или Ctrl+Enter (Cmd+Enter в macOS). Длинное описание прокручивается внутри поля, с полосой прокрутки, так что «Сохранить» остаётся на экране. Каждое из них отправляет только то, что изменило, поэтому сохранение описания никогда не отменяет переименование, сделанное тем временем на GitHub. +- У профиля может быть свой цвет и своя картинка. В Настройки › Провайдеры меню ⋯ профиля содержит «Цвет», с теми же восемью цветами, что и у карточки сессии, и «Выбрать изображение…», которое принимает PNG, JPEG, GIF или WebP до 10 МБ и сохраняет его квадрат по центру. Картинка или цвет показываются везде, где показан профиль: в списке и выборе профилей, в нижней части боковой панели и в «Продолжить в». «Удалить изображение» возвращает инициал на цвете профиля. + +### Changed + +- Блок карточек в боковой панели, будь то worktree, папка или закреплённый блок, теперь плавно вырастает, когда открывается его первая карточка, и сворачивается вместе с последней, тогда как раньше он появлялся и исчезал мгновенно. Заголовки, которые показываются, когда список делится на блоки, раскрываются так же и сворачиваются, когда остаётся один блок. +- Проверки pull request, которые ещё выполняются, теперь показывают вращающийся индикатор на вкладке «Проверки» и в строке состояния над вкладками, где раньше стояли неподвижные часы. +- Кнопки больше не проседают на пиксель при нажатии, так что все кнопки в окне ведут себя одинаково: те, у которых было это движение, теперь совпадают с теми, у которых его никогда не было. + +### Removed + +- **Breaking:** lich больше не запускает `.lich/setup-worktree.sh`, когда `lich open --worktree` или `open_session` агента начинает сессию в новом worktree. Файл в вашем репозитории остаётся нетронутым. Если ваши worktree полагались на него для установки зависимостей, запустите его сами в терминале нового worktree (`sh .lich/setup-worktree.sh`) или попросите об этом агента. Копирование ваших `.env*` файлов из gitignore (или того, что названо в `.worktreeinclude`) и порт dev-сервера `LICH_WORKTREE_PORT` остаются без изменений. + +### Fixed + +- `git commit`, `rebase` или `stash` агента больше не падают время от времени с ошибкой «Unable to create '.git/index.lock': File exists» из-за того, что lich в тот же момент читал статус или дифф этого checkout. Чтение в lich не трогает индекс. +- Карточка закрытой сессии снова плавно сворачивается в боковой панели, тогда как раньше она исчезала мгновенно. +- Ctrl+Z в сессии больше не замораживает её агента навсегда. Раньше он приостанавливал агента, и ничто в lich не могло его вернуть; теперь lich не передаёт эту клавишу сессии. +- Полосы в подсказке об использовании тарифа, в нижней части окна, снова показывают пустую дорожку в темах, где цвета popover и muted совпадают, например в Everforest, где рисовалась только заполненная часть. +- Открытие или закрытие списка pull request на экране Pull requests больше не заставляет вкладку активного проекта отпускать панель под ней и снова захватывать её. Вкладка остаётся прикреплённой на всём пути и переходит на список, когда тот заезжает под неё. + +## [0.74.0] - 2026-10-20 + +### Added + +- F11 переключает окно в полноэкранный режим и обратно; пока он включён, кнопки «свернуть», «развернуть» и «закрыть» скрыты. Сочетание можно изменить в Настройки › Сочетания клавиш. + +### Changed + +- Pull request, конфликтующий со своей базовой веткой, больше не перечисляет конфликтующие файлы под заголовком. Статус «Конфликты с» их считает, а щелчок по нему открывает поверх экрана панель, называющую каждый из них. +- **Разрешить конфликты** и **Исправить ошибки CI** в pull request, а также worktree, запущенный из issue `#123`, теперь отправляют своё сообщение в открываемую ими сессию, тогда как раньше оно оставалось в строке ввода и ждало, пока вы нажмёте Enter. Терминальной карточке в этом checkout никогда ничего не отправляется. + +### Fixed + +- Вкладка активного проекта теперь отделяется от острова терминала, если при открытии или изменении размера панели «Код» или «Ревью» она заходит на панель, и присоединяется обратно, когда снова помещается. +- В macOS кнопки «закрыть», «свернуть» и «развернуть» расположены по центру строки заголовка нативного окна, а не прижаты к её верхнему краю, и следуют масштабу интерфейса. +- Окно можно перетаскивать за верхнюю панель: за последней вкладкой и в промежутках вокруг названия и кнопок. Раньше ни одна часть панели его не двигала. +- Экран Pull requests поддерживает показанное актуальным без нажатия «Обновить». Он заново читает pull request каждые несколько секунд, пока GitHub ещё выясняет, можно ли его слить, раз в минуту, пока экран открыт, и когда вы возвращаетесь в окно, поэтому push, слияние или конфликт, сделанные вне lich, появляются сами. + +## [0.73.0] - 2026-10-20 + +> [!IMPORTANT] +> **Для всех: нативное окно теперь единственное окно lich.** lich открывает его при каждом +> запуске; веб-окно и встроенный Chromium удалены. + +### Added + +- **Настольные уведомления, по которым можно щёлкнуть, в нативном окне в Windows и macOS.** Как и в Linux, сессия, которой нужен ваш ввод или которая завершила ход, показывает уведомление с кнопками «Открыть» и «Закрыть»: «Открыть» выводит lich на карточку этой сессии, а уведомление исчезает, когда вы ответили или открыли сессию. В macOS для этого lich нужно запускать из Lich.app, и он один раз запрашивает разрешение; в Windows уведомление о сессии, ожидающей вас, остаётся на экране, пока вы не отреагируете на него. +- Настройки › Провайдеры предупреждают под полем «Профиль», когда сессии запускаются через пользовательский исполняемый файл, показывают путь к нему и кнопки, чтобы показать его или вернуться к стандартному. Обёртка, которая задаёт собственный каталог входа или конфигурации, переопределяет профиль, а настройка «Исполняемый файл» свёрнута внизу экрана. + +### Changed + +- Когда процесс сессии завершается, теперь в правом нижнем углу появляется уведомление с вопросом, что делать, вместо полосы внизу терминала. Для карточки с разговором предлагаются «Продолжить», которое снова открывает тот же разговор (в профиле, в котором он был запущен), «Начать новую», которая запускает в карточке другой разговор, как раньше «Перезапустить», и «Закрыть сессию». Для оболочки или агента, завершившегося до первого запроса, предлагаются «Перезапустить» и «Закрыть сессию». Закрытие уведомления оставляет карточку как есть, а фокус на карточке возвращает уведомление. +- **Профиль проекта теперь внизу боковой панели, а не на каждой карточке.** Если у провайдера больше одного входа, последняя строка боковой панели называет профиль, в котором запускаются новые сессии этого провайдера в данном проекте: провайдера карточки на экране или провайдера по умолчанию для терминала. Щёлкните по ней, чтобы выбрать другой вход, видя расход за пять часов для каждого, или вернуться к входу из «Глобальные»; «Другие провайдеры» меняет остальных из того же меню. Карточки больше не показывают метку профиля рядом с веткой. + +### Removed + +- Веб-окно. lich открывает нативное окно, и релиз больше не поставляется с Chromium. Выбор «Окно» в Настройках (веб или нативное) и пункт в трее, открывавший другое окно, удалены, как и `lich -- `, `lich --shell` и `LICH_SHELL`. Если нативное окно не удаётся запустить, lich сообщает причину и где находится его журнал. + +### Fixed + +- При входе в профиль Claude Code или Codex теперь показывается, что идёт аутентификация, как только вы завершили вход в браузере или отправили вставленный код; раньше диалог продолжал ждать входа до самого конца, а поле кода просто очищалось. +- В бразильском португальском все сообщения теперь называют worktree "a worktree", тогда как в некоторых было "o worktree". +- В macOS у нативного окна снова есть кнопки «закрыть», «свернуть» и «развернуть»; начиная с 0.72.0 верхняя панель оставляла для них пустое место. +- В Windows обновление lich из нативного окна больше не откатывается с сообщением "Setup was unable to automatically close all applications": окно оставалось открытым на `lich-native.exe`, который установщик должен заменить. Теперь оно закрывается перед запуском установщика и открывается снова, когда lich возвращается. Обновление с 0.72.0 и старее всё ещё один раз натыкается на это: завершите `lich-native.exe` в Диспетчере задач, когда появится сообщение, выберите «Повторить», а затем откройте lich из меню «Пуск». +- Закрытие нативного окна, когда lich недоступен (после выхода или во время перезапуска), закрывает его, независимо от значения «При закрытии окна». При значениях «Спрашивать» или «Выйти» оно оставалось открытым и лишь показывало ошибку о том, что сессии не удалось подсчитать. +- В узком окне Настроек настройка, чей элемент управления слишком широк, чтобы делить строку, например выбор «Профиль» у провайдера, теперь размещает его под заголовком и описанием, тогда как раньше текст сжимался в узкую полоску и ломался по буквам. Ссылка «Документация» провайдера также перемещается под его название, а не налезает на переключатель «Включён». +- «Продолжить в» может перенести разговор Claude Code обратно в профиль, который он только что покинул; раньше хук плагина, продолжавший работать после завершения сессии (например, WakaTime), оставлял файл, и перенос отклонялся с сообщением "already holds". + +## [0.72.0] - 2026-10-19 + +### Changed + +- Верхняя панель нативного окна теперь служит его заголовком: системного заголовка больше нет, а кнопки «свернуть», «развернуть» и «закрыть» стоят рядом с Настройками, нарисованные так, как их рисуют Windows, GNOME и KDE, и с той стороны, где их размещает ваш рабочий стол; в macOS «светофор» находится в верхней панели. Перетащите пустую часть верхней панели, чтобы переместить окно, и дважды щёлкните по ней, чтобы развернуть его. Тайловые оконные менеджеры сохраняют собственные декорации. + +### Fixed + +- `lich quit` больше не завершается ошибкой "EOF", когда lich закрывается, не успев ответить: команда ждёт закрытия порта, а не считает потерянный ответ отказом. +- В Wayland нативное окно показывает курсор самого рабочего стола, в его теме и размере, там, где мог отображаться курсор другой темы. На мониторе с масштабом меньше, чем у самого крупного, курсор больше не прыгает при входе в окно. +- В Linux нативное окно группируется под собственным значком lich в доке, а не отображается отдельным приложением с обычным значком. +- В Ревью нативного окна и в Файлах pull request полоса прокрутки сохраняет размер при прокрутке, а не растёт и сжимается вместе с файлом, который заполняет экран. Перетаскивание теперь перемещает по diff равномерно, а не пофайлово. + +## [0.71.2] - 2026-10-19 + +### Fixed + +- Нативное окно снова открывается в Windows и macOS, где оно сразу закрывалось, + ища fontconfig для отрисовки просмотра кода и изменений. +- Эмодзи в терминале нативного окна в Windows рисуются в цвете, а не одними + контурами. +- Команда обновления, которую lich предлагает для установки на macOS, теперь перед обновлением выполняет tap `lichdotdev/tap`. Установка из старого `omartelo/tap` падала с "Cask 'lichdotdev/tap/lich' is unavailable", потому что Homebrew сам не следует за переехавшим tap; чтобы обновить старый lich, выполните один раз `brew tap lichdotdev/tap`. +- В нативном окне «Раскрывать длинные вставки» теперь раскрывает вставки в Claude Code и Kiro CLI: буфер обмена, пакет комментариев ревью, промпт, с которым pull request или issue открывает сессию, и перетащенные или прикреплённые пути к файлам. + +## [0.71.1] - 2026-10-18 + +### Fixed + +- Нативное окно в Linux больше не падает с ошибкой недопустимой инструкции при открытии терминала на процессоре без AVX-512. + +## [0.71.0] - 2026-10-17 + +### Added + +- **Раскладки с разделением в нативном окне (экспериментально).** Размещайте + рядом сессии из любых открытых проектов и делите окно как угодно: + Ctrl+Shift+G делит сессию в фокусе вправо, Ctrl+Shift+I — вниз, и каждый раз + спрашивает, какая сессия встанет рядом; либо перетащите карточку из боковой + панели на край панели. Перестраивайте раскладку, перетаскивая панель за + заголовок на край другой панели, а на её середину — чтобы поменять две + панели местами, и переключайте пару между «рядом» и «друг над другом» по + Ctrl+Shift+R. Каждая раскладка — вкладка после проектов, со статусом её + панелей; переименовать её можно двойным щелчком. Тяните промежуток между + двумя панелями, чтобы изменить их размер, разворачивайте одну по + Ctrl+Shift+M, переходите между ними по Ctrl+Shift+F и убирайте одну по + Ctrl+Shift+W; раскладка, в которой осталась одна панель, закрывается. + Задержите перетаскиваемую сессию над другой вкладкой, и она откроется, как + в браузере при перетаскивании файла. Боковая панель и футер следуют за + панелью в фокусе. +- **Показать делегатов сессии рядом с ней.** В нативном окне сессия, которая + открыла другие, в любом проекте, предлагает их в футере: Показать рядом + раскладывает её с делегатами, сложенными стопкой справа от неё, сколько + поместится. В раскладке заголовок её панели показывает, сколько их здесь, и + добавляет остальных, предварительно спрашивая, прежде чем забрать + делегата из другой раскладки. Карточка в раскладке называет её. +- **Обязательные проверки помечены.** В нативном окне на вкладке «Проверки» + pull request проверки, от которых зависит слияние, помечены как + «Обязательный», как это делает GitHub. + +### Changed + +- **lich теперь живёт в `lichdotdev/lich`.** Репозиторий переехал в организацию + [lichdotdev](https://github.com/lichdotdev), а сайт — на + [lichdotdev.github.io/lich](https://lichdotdev.github.io/lich/). Старые + ссылки GitHub, клоны и проверки обновлений перенаправляются; закладки на + старый сайт — нет. + +### Fixed + +- **«Что нового» следует за языком, на который вы переключились.** В нативном + окне после смены языка интерфейса примечания к релизу оставались на языке, на + котором их впервые прочли, под названиями групп на новом языке. +- **Диффы больше не зависают на CJK-тексте и не копят память на каждый файл.** + В нативном окне «Ревью» или «Файлы» pull request с китайским, японским или + корейским текстом могли замирать на секунды из-за поиска каждого нового + символа, а diff каждого файла держал собственную копию шрифтов, из-за чего + большой pull request занимал сотни мегабайт. + +## [0.70.0] - 2026-10-17 + +### Added + +- **«Что нового» на вашем языке.** Диалог, который открывается после обновления, + показывает примечания к релизу и названия их групп на выбранном вами языке + интерфейса, в обоих окнах. Если у сборки ещё нет перевода примечаний, они + показываются на английском. +- **Форк сессии в нативном окне.** Щёлкните карточку правой кнопкой и выберите + Форк › Здесь, чтобы продолжить её разговор в новой карточке прямо под ней, в том + же checkout, или Форк › Worktree…, чтобы перенести его в новый worktree вместе + с незакоммиченными изменениями. Копия называется по оригиналу + («auth-refactor 2») и помечена значком форка. Только Claude Code, Codex и + opencode: остальные провайдеры умеют лишь возобновлять. +- **Нативное окно предупреждает, когда две карточки ведут один разговор.** + Если из TUI самого агента возобновить разговор, который уже открыт в другой + карточке, в правом нижнем углу появляется предупреждение; «Переключиться» + закрывает карточку, возобновившую разговор, и открывает ту, где он уже был. +- **Нативное окно показывает изображения.** PNG, JPEG, GIF, WebP или BMP + открывается в предпросмотре на вкладке «Файлы» поверх шахматного фона, с + размером и габаритами, а изменённое изображение в «Ревью» показывается «до» и + «после» рядом. PDF или любой другой файл без предпросмотра вместо ошибки + предлагает «Открыть в приложении» и «Показать в папке»; в pull request + бинарный файл ведёт ссылкой на самого себя на GitHub. +- **Нативное окно на вашем языке.** Все экраны нативного окна читаются на + португальском, испанском и китайском, а в Настройки › Общие есть язык + интерфейса и язык промптов, как в веб-окне в разделе «Оформление». Пока вы + не выбрали язык, интерфейс следует языку системы. Если выбрать китайский на + машине без китайского шрифта, lich предложит скачать Noto Sans SC (около + 25 МБ) в собственную папку. +- **Японский.** Оба окна читаются на японском, и японский стал языком + промптов, так что lich общается с вашими агентами на нём. Нативное окно + рисует японский, китайский и корейский каждый шрифтом своего региона, если + он установлен (Noto Sans CJK, Yu Gothic, Hiragino, Malgun Gothic и подобные), + поэтому иероглифы больше не получают китайские начертания, и предлагает + скачать Noto Sans JP или KR, если их нет, как делает с Noto Sans SC для + китайского. README тоже есть на японском. +- **Корейский.** Оба окна читаются на корейском: язык выбирается в Настройки › + Оформление в веб-окне и в Настройки › Общие в нативном, а корейский стал + языком промптов: вводные инструкции, пересылаемые сообщения и уведомления + доходят до ваших агентов на корейском. +- **lich говорит по-русски.** Выберите Русский как язык интерфейса, в веб-окне + в Настройки › Оформление или в нативном в Настройки › Общие, и как язык + промптов, чтобы вводные инструкции, пересылаемые сообщения и передачи, которые + lich вводит вашим агентам, тоже читались по-русски. Числа склоняются по + русским формам one, few и many (1 файл, 2 файла, 5 файлов). +- **Профили opencode на macOS и Windows и профили Cursor CLI на Windows.** + Настройки › Провайдеры в нативном окне показывает их так же, как на Linux. + У Cursor CLI на macOS и у Kiro CLI на macOS и Windows профилей по-прежнему + нет: там вход хранится в Keychain или в папке, которую никакая настройка не + переносит, поэтому все профили делили бы один аккаунт. + +### Changed + +- **Каждое обновление открывает нативное окно.** Первый запуск каждого + релиза переключает lich на нативное окно, а если оно не запускается, на + веб-окно; переключитесь обратно в Настройках, и lich останется на веб-окне до + следующего релиза. При первом открытии нативное окно сообщает, что оно + экспериментальное, и даёт ссылку на отчёт об ошибке. + +- **Более тонкое кольцо статуса в нативном окне.** Кольцо вокруг иконки + карточки сессии теперь тоньше, чтобы выглядеть так же, как в веб-окне. + +- **Более просторные клавиши сочетаний в нативном окне.** У клавиш в палитре + команд, окне сочетаний и Настройки › Сочетания клавиш больше места вокруг + текста, который теперь выровнен по центру. + +- **Настройки в нативном окне открываются на «Глобальные».** Шестерёнка в + верхней панели всегда открывает Настройки на «Глобальные», а не на области, в + которой вы их оставили; вкладка проекта по-прежнему открывает его + собственные настройки через «Настройки проекта…». + +- **Более спокойная палитра команд в нативном окне.** Каждая сессия, проект и + сообщение занимают одну строку, а путь стоит после названия; у worktree в + пути видны три последние части. Сессии, ожидающие вас, идут первыми и + помечены, а у вкладок-фильтров вместо плашек теперь подчёркивание. Закрытая + сессия в «Истории» показывает справа ветку и возраст, а вторую строку только + если поиск совпал с её разговором, с выделенными словами. + +### Fixed + +- **Перезапущенная сессия больше не выглядит занятой навсегда.** Сессия, чей + агент умер посреди хода или которую закрыли посреди хода, возвращалась под той + же карточкой, по-прежнему числясь занятой для других сессий: отправленная ей + задача ждала хода, который никогда не закончится. Теперь она стартует без + состояния, как новая. +- **Codex, Cursor CLI, Antigravity и Crush перестали спрашивать там, где вы уже + ответили.** Сессия любого из них в песочнице открывается сразу на своём + промпте. Cursor CLI и Antigravity больше не спрашивают снова в worktree папки, + которой вы доверяли, а Antigravity ещё и в её подпапках, и Crush больше не + просит инициализировать каждый новый worktree. Сессия oh-my-pi в песочнице + больше не открывается на мастере настройки. +- **Claude Code перестал спрашивать «доверять этой папке?» там, где вы уже + ответили.** Папка, которой вы доверили в основном аккаунте, считается + доверенной во всех остальных профилях Claude Code со следующей сессии в них, а + сессия Claude Code в песочнице открывается вообще без вопроса. Сессия, + которую lich открыл за вас, больше не застревает на этом экране, где Enter + выходит. +- **Заново открытое нативное окно знает, куда ушла каждая сессия.** Сессия, + перешедшая с помощью `cd`, в tmux или по ssh, возвращалась с путём, веткой и + изменениями своего checkout до следующего `cd`; теперь окно при подключении + считывает, где каждая была в последний раз. +- **Нативное окно пишет промпты агентам на вашем языке промптов.** Передачи + pull request и issue и пакет комментариев ревью всегда вводились по-английски. +- **Смена темы во время переподключения больше не роняет нативное окно.** + Переключение темы или переключение системой светлой и тёмной, пока окно + заново подключалось к перезапущенному lich, могло нарисовать терминалы, + которые переподключение только что освободило, и уронить окно. +- **Китайский, японский и корейский текст больше не вешает нативное окно на + Linux.** Сессия, Ревью или pull request, полные CJK-текста, могли подвесить + окно на секунды, достаточно долго для «не отвечает», а масштабирование + возвращало зависание. +- **Нативное окно занимает меньше памяти.** Терминал каждой сессии и Ревью + загружали собственную копию запасных шрифтов, по десятку мегабайт и больше на + каждый CJK- или эмодзи-шрифт: шесть открытых сессий теперь занимают примерно + вдвое меньше памяти. На машине с установленными CJK-шрифтами оно ещё и + стартует быстрее. +- **Повторное открытие сессии, чей разговор уже открыт, переходит на эту + карточку.** Закрытая сессия из «Истории», отменённое закрытие или + существующий worktree могли вернуться второй карточкой на разговоре, который + другая карточка ещё вела, и обе писали в один транскрипт. «История» теперь + показывает такой разговор один раз, по последнему закрытию, а «Забыть» + удаляет все его копии. + + +## [0.69.0] - 2026-10-16 + +### Added + +- **Нативное окно на macOS, экспериментально.** Lich.app поставляет его вместе + с lich на Apple Silicon и Intel, а Настройки › Оформление › Окно предлагает его + так же, как на Linux и Windows. Клавиша Option вводит символы в его терминале, + как в Terminal.app, поэтому сочетания Option+буква агента до него не доходят. + Пока оно запускалось только на macOS-машинах GitHub: уведомления простые, по + ним нельзя щёлкнуть, а пункта в строке меню нет. +- **Дерево файлов знает гораздо больше типов файлов.** Java, Gradle, C и C++, + C#, PHP, Ruby, Swift, SQL, Vue, Svelte, Terraform, Dockerfile, .gitignore и + ещё около тридцати типов теперь показывают собственную иконку в дереве файлов + и в результатах поиска, где раньше был обычный значок файла. + +### Fixed + +- **`lich quit` закрывает нативное окно.** Оно оставалось открытым и показывало + lich как потерянный после остановки бэкенда; Quit в трее и сигнал остановки + тоже его закрывают, а перезапуск после обновления по-прежнему его сохраняет. +- **Нативное окно предлагает удалить worktree, когда закрывается его последняя сессия.** В + уведомлении «Закрыто» рядом с «Отменить» появляется «Удалить worktree»; worktree, созданный + не lich, или с незакоммиченными изменениями, называется в диалоге до удаления. + +- **Терминал нативного окна берёт ячейку под указателем.** Щелчок, выделение + перетаскиванием, ссылка и программа, отслеживающая мышь, считывали положение + указателя со сдвигом на отступ терминала, поэтому выбранная ячейка оказывалась + ниже и правее той, на которую указывали, почти на целую ячейку на дисплее с + масштабированием. +- **Терминал нативного окна рисует эмодзи.** Шрифт цветных эмодзи, например + Noto Color Emoji, хранит каждое эмодзи как картинку, а не как контур, а + терминал рисовал только контуры, поэтому каждое эмодзи выглядело пустым + местом; теперь они рисуются цветными, шириной в две ячейки. +- **Дерево файлов нативного окна показывает иконку языка каждого файла.** Каждый + файл рисовался одним и тем же обычным значком; теперь у каждого та иконка, + которую ему даёт веб-окно. +- **Pull request, который открывает агент, появляется на его карточке в конце хода.** + Значок перепроверялся только при смене ветки или её последнего коммита, а + открытие pull request не меняет ни то, ни другое, поэтому он ждал, пока окно + потеряет и вернёт фокус. +- **Нативное окно открывается на Windows.** Оно искало шрифты через fontconfig, + которого в Windows нет, поэтому закрывалось при запуске, и lich переходил на + веб-окно. Теперь на Windows оно само находит установленные шрифты, по умолчанию + Cascadia Mono или Consolas для терминала, и списки шрифтов в Настройках их + показывают. +- **Переключение между светлой и тёмной темой больше не зависает в нативном + окне.** Сессию, которая следует цветовой схеме терминала, как Claude Code, + уведомляли об изменении, пока окно ещё держало свои терминалы, поэтому окно + зависало и закрывалось. diff --git a/changelog/zh-CN.md b/changelog/zh-CN.md index 0453e54a..8751b106 100644 --- a/changelog/zh-CN.md +++ b/changelog/zh-CN.md @@ -13,3 +13,176 @@ - 会话终端中的死键现在可以正常组合:在 macOS 上,~ 再按 a 会输入 ã,' 再按 c 会输入 ç,而此前重音符号会先于字母单独出现。输入法仍在组合中的文本,例如日语或中文输入法的,在提交之前也不再传给程序。 - 在 Claude Code 会话中用 `/model` 切换模型后,页脚和会话卡片的提示会在新模型的第一轮结束时就显示新模型。此前它们会一直显示旧模型,直到之后的某一轮或重新连接,原因是 lich 在 Claude Code 写入该轮最后一行之前就读取了转录。 - 在 macOS 上,关闭、最小化和缩放按钮在标题栏中保持居中。此前窗口打开时、切换到其他应用再切回时,以及系统在浅色和深色之间切换时,macOS 会把它们放回标题栏顶部,直到窗口被调整大小。 + +## [0.75.0] - 2026-10-21 + +### Added + +- 审查标签页中的 Markdown 文件,在“将文件添加为上下文”旁边有一个预览按钮,点击后以渲染后的样式(包括表格和链接)显示该文件,取代其差异视图。再次点击即可回到差异视图。在拉取请求屏幕上,只有该拉取请求新增的文件才有这个按钮。 +- 在代码标签页中打开的文件里按 Ctrl+F(macOS 上为 Cmd+F)可以查找文本。文件名下方的搜索栏会高亮所有匹配项,用 Enter 和 Shift+Enter 在匹配项之间跳转,并支持区分大小写、全字匹配或正则表达式。其列表按钮会在搜索栏下方列出所有含匹配项的行,点击某一行即可跳转到对应代码。按 Escape 关闭搜索栏。 +- 会话卡片的提示会显示该会话正在运行的模型,支持 Claude Code、Codex 和 Kiro CLI。当它不再是会话打开时所用的模型时,例如执行过 `/model` 之后,该行会显示为“以 … 打开,正在运行 …”。 +- 拉取请求屏幕可以编辑拉取请求的标题和描述,并将其发送到 GitHub。标题后面的铅笔图标可以就地重命名:按 Enter 或点击其他位置保存,按 Escape 取消。概览中“描述”旁边的“编辑”会以 Markdown 形式打开描述,可通过“保存”或 Ctrl+Enter(macOS 上为 Cmd+Enter)保存。较长的描述会在输入框内滚动并带有滚动条,因此“保存”始终留在屏幕上。两者都只发送自己修改过的内容,所以保存描述不会撤销期间在 GitHub 上进行的重命名。 +- 配置文件可以有自己的颜色和图片。在设置 › 提供商中,配置文件的 ⋯ 菜单里有“颜色”(与会话卡片相同的八种颜色)和“选择图片…”,后者接受最大 10 MB 的 PNG、JPEG、GIF 或 WebP,并保留其居中的正方形区域。图片或颜色会显示在所有出现该配置文件的地方:配置文件列表和选择器、侧边栏底部以及“转到”。“移除图片”会回到配置文件颜色上的首字母。 + +### Changed + +- 侧边栏中的卡片块,无论是工作树、文件夹还是置顶块,现在会在第一张卡片打开时渐渐展开,并随最后一张卡片关闭而渐渐收起,而此前它们是瞬间出现和消失的。列表分成多个块时显示的标题也以同样方式展开,在只剩一个块时收起。 +- 拉取请求中仍在运行的检查,现在在其“检查”标签页和标签页上方的状态行中显示旋转的指示器,而此前是一个静止的时钟。 +- 按钮在按下时不再下沉一个像素,因此窗口中的所有按钮行为一致:原先有这种动效的按钮现在与一直没有这种动效的按钮保持一致。 + +### Removed + +- **Breaking:** 当 `lich open --worktree` 或智能体的 `open_session` 在新工作树中启动会话时,lich 不再运行 `.lich/setup-worktree.sh`。你仓库中的该文件不受影响。如果你的工作树依赖它来安装依赖项,请自行在新工作树的终端中运行它(`sh .lich/setup-worktree.sh`),或者让智能体来运行。复制被 gitignore 忽略的 `.env*` 文件(或 `.worktreeinclude` 中列出的内容)以及开发服务器端口 `LICH_WORKTREE_PORT` 保持不变。 + +### Fixed + +- 智能体的 `git commit`、`rebase` 或 `stash` 不再因为 lich 恰好在同一时刻读取该检出目录的状态或差异,而偶尔失败并提示“Unable to create '.git/index.lock': File exists”。lich 的读取不会触碰索引。 +- 已关闭会话的卡片重新会从侧边栏渐渐收起,而此前它是瞬间消失的。 +- 在会话中按 Ctrl+Z 不再让其智能体永久冻结。此前它会挂起智能体,而 lich 中没有任何办法将其恢复;现在 lich 不会再把这个按键交给会话。 +- 页脚中计划用量提示里的进度条,在 popover 与 muted 颜色相同的主题(例如 Everforest)上重新显示空轨道,此前只绘制了已填充的部分。 +- 在拉取请求屏幕上打开或关闭拉取请求列表,不再让当前项目标签页松开其下方的面板后又重新抓住它。标签页全程保持连接,并在列表滑到其下方时移到列表上。 + +## [0.74.0] - 2026-10-20 + +### Added + +- 按 F11 可让窗口进入全屏并再次退出,全屏期间不显示最小化、最大化和关闭按钮。该快捷键可在设置 › 快捷键中修改。 + +### Changed + +- 与基础分支存在冲突的拉取请求,不再在标题下方列出冲突的文件。“与 … 存在冲突”状态会统计这些文件的数量,点击它会在屏幕上方打开一个面板,逐一列出每个文件。 +- 拉取请求上的**解决冲突**和**修复 CI 错误**,以及从 `#123` 议题启动的工作树,现在会把消息直接发送到它们所打开的会话,而不是停在提示符处等你按 Enter。该检出目录中的终端卡片不会收到任何内容。 + +### Fixed + +- 打开代码或审查面板,或调整其大小,导致当前项目标签页越过边界覆盖面板时,标签页现在会与终端岛分离;空间再次足够时则会重新连接。 +- 在 macOS 上,原生窗口标题栏中的关闭、最小化和缩放按钮现在垂直居中,不再紧贴标题栏顶部边缘,并会跟随界面缩放。 +- 现在可以通过顶部栏拖动窗口:最后一个标签页之后,以及品牌标识和按钮周围的空隙都可以。此前栏的任何部分都无法拖动窗口。 +- 拉取请求屏幕无需按刷新就能保持内容最新。GitHub 仍在判断能否合并时,它每隔几秒重新读取一次拉取请求;屏幕打开期间每分钟读取一次;你回到窗口时也会读取,因此在 lich 之外进行的推送、合并或产生的冲突会自行显示出来。 + +## [0.73.0] - 2026-10-20 + +> [!IMPORTANT] +> **所有用户:原生窗口现在是 lich 唯一的窗口。** lich 每次启动都会打开它;网页窗口及其内嵌的 Chromium 已移除。 + +### Added + +- **在 Windows 和 macOS 的原生窗口中,桌面通知现在可以点击。** 与 Linux 一样,会话需要你输入或完成了一轮后,会弹出带有“打开”和“忽略”的通知:“打开”会把 lich 带到该会话的卡片上,你回复或打开该会话后,通知随即消失。在 macOS 上,lich 需要从 Lich.app 运行,并会请求一次权限;在 Windows 上,等待你操作的会话会让通知一直留在屏幕上,直到你处理。 +- 当会话通过自定义可执行文件启动时,设置 › 提供商会在配置文件下方给出警告,显示其路径,并提供显示该文件或恢复默认值的按钮。自行设置登录或配置目录的包装脚本会覆盖配置文件,而“可执行文件”设置折叠在界面底部。 + +### Changed + +- 会话进程退出时,现在由右下角的提示框询问如何处理,取代终端底部的横条。有对话的卡片提供“继续”(在其启动时所用的配置文件中重新打开同一段对话)、“新建对话”(像之前的“重新启动”一样在卡片中开始另一段对话)和“关闭会话”。Shell,或在第一条提示之前就结束的智能体,则提供“重新启动”和“关闭会话”。忽略提示框会保持卡片原样,聚焦该卡片会让提示框重新出现。 +- **项目的配置文件现在位于侧边栏底部,而不是每张卡片上。** 当一个提供商有多个登录时,侧边栏最后一行会显示该项目中此提供商的新会话所使用的配置文件:取决于屏幕上卡片的提供商,终端则取默认的那个。点击它可以选择另一个登录(每个登录都显示五小时用量),或回到“全局”的设置;“其他提供商”可在同一菜单中修改其余的。卡片不再在分支旁显示配置文件标签。 + +### Removed + +- 网页窗口。lich 会打开原生窗口,发布包也不再附带 Chromium。设置中的“窗口”选项(网页或原生)以及用于打开另一个窗口的托盘项均已移除,`lich -- `、`lich --shell` 和 `LICH_SHELL` 同样移除。如果原生窗口无法启动,lich 会说明原因以及日志的位置。 + +### Fixed + +- 登录 Claude Code 或 Codex 配置文件时,在你于浏览器中完成登录或提交粘贴的代码后,现在会显示正在验证;此前对话框会一直等待登录直到最后,代码输入框只是被清空。 +- 在巴西葡萄牙语中,所有消息现在都称 worktree 为“a worktree”,此前有几处写成“o worktree”。 +- 在 macOS 上,原生窗口重新有了关闭、最小化和缩放按钮;自 0.72.0 起,顶栏为它们留出的位置是空的。 +- 在 Windows 上,从原生窗口更新 lich 不再因“Setup was unable to automatically close all applications”而回滚:窗口一直占用着安装程序必须替换的 `lich-native.exe`。现在它会在安装程序运行前关闭,并在 lich 恢复后重新打开。从 0.72.0 或更早版本更新仍会遇到一次:出现该消息时,在任务管理器中结束 `lich-native.exe`,选择“重试”,之后从开始菜单打开 lich。 +- 当 lich 不在运行(已退出或正在重启)时关闭原生窗口,无论“关闭窗口时”设为何值,窗口都会关闭。设为“询问”或“退出”时,窗口此前会一直开着,只显示无法统计会话数的错误。 +- 在较窄的设置窗口中,如果某项设置的控件太宽、无法与文字同行(例如提供商的配置文件选择器),控件现在会放在标题和说明下方,此前文字被挤成一条窄缝,逐字换行。提供商的“文档”链接同样移到其名称下方,不再与“已启用”开关挤在一起。 +- “转到”现在可以把 Claude Code 对话移回它刚离开的配置文件;此前在会话结束后仍在运行的插件钩子(例如 WakaTime 的)会留下一个文件,导致移动被以 "already holds" 拒绝。 + +## [0.72.0] - 2026-10-19 + +### Changed + +- 原生窗口的顶栏现在就是它的标题栏:系统标题栏不再显示,最小化、最大化和关闭按钮位于设置旁边,外观与 Windows、GNOME 和 KDE 的绘制方式一致,并放在你的桌面环境所放置的那一侧;在 macOS 上,红绿灯按钮位于顶栏中。拖动顶栏的空白处即可移动窗口,双击即可最大化。平铺式窗口管理器保留各自的窗口装饰。 + +### Fixed + +- 当 lich 在回复前就退出时,`lich quit` 不再以 "EOF" 失败:它会等待端口关闭,而不是把丢失的回复当作拒绝。 +- 在 Wayland 上,原生窗口会以桌面自身的主题和大小显示其光标,此前可能显示为另一套主题。在缩放比例小于最大显示器的显示器上,光标进入窗口时不再跳动。 +- 在 Linux 上,原生窗口会归入 dock 中 lich 自己的图标下,此前它显示为一个使用通用图标的独立应用。 +- 在原生窗口的审查和 pull request 的文件中,滚动条在滚动时保持大小不变,此前它会随占满视图的文件而伸缩。现在拖动滚动条会均匀地浏览整个 diff,而不是逐个文件跳转。 + +## [0.71.2] - 2026-10-19 + +### Fixed + +- 原生窗口在 Windows 和 macOS 上可以正常打开了,此前它会为绘制代码和差异视图去查找 + fontconfig 而立即关闭。 +- 原生窗口终端中的 emoji 在 Windows 上以彩色绘制,此前只显示为轮廓。 +- 向 macOS 安装提供的更新命令现在会在升级前先 tap `lichdotdev/tap`。从旧的 `omartelo/tap` 安装的版本会失败并提示 "Cask 'lichdotdev/tap/lich' is unavailable",因为 Homebrew 不会自动跟随迁移的 tap;要从较旧的 lich 升级,请先执行一次 `brew tap lichdotdev/tap`。 +- 在原生窗口中,“展开长粘贴”现在会展开 Claude Code 和 Kiro CLI 的粘贴内容:剪贴板、一批评审评论、拉取请求或 issue 打开会话时使用的提示词,以及拖放或附加的文件路径。 + +## [0.71.1] - 2026-10-18 + +### Fixed + +- Linux 上的原生窗口在不支持 AVX-512 的 CPU 上打开终端时,不再因非法指令而崩溃。 + +## [0.71.0] - 2026-10-17 + +### Added + +- **原生窗口中的分屏布局(实验性)。** 可以把任意已打开项目的会话并排放在一起,并按需要自由分割:Ctrl+Shift+G 把当前聚焦的会话向右分割,Ctrl+Shift+I 向下分割,两者都会询问放入哪个会话;也可以把侧边栏中的卡片拖到某个窗格的边缘。要调整布局,可以拖动窗格标题到另一个窗格的边缘,或拖到其中间以交换两者,并用 Ctrl+Shift+R 在并排和上下堆叠之间切换一对窗格。每个布局都是项目之后的一个标签页,显示其各窗格的状态,双击即可重命名;拖动两个窗格之间的间隙可调整大小,用 Ctrl+Shift+M 放大一个窗格,用 Ctrl+Shift+F 在窗格之间切换,用 Ctrl+Shift+W 移出一个窗格;只剩一个窗格的布局会关闭。把拖动中的会话停在另一个标签页上,该标签页就会弹出,就像浏览器拖动文件时那样。侧边栏和页脚会跟随当前聚焦的窗格。 +- **把会话的委派并排显示。** 在原生窗口中,如果一个会话打开了其他会话(不论属于哪个项目),页脚会提供这些会话:并排显示 会把它与其委派一起排布,委派堆叠在它的右侧,能放多少放多少。在布局中,其窗格标题会显示有多少个委派在场,并可添加其余的;若要把某个委派从另一个布局中移出,会先询问。布局中的卡片会标明所在布局。 +- **必需的检查会被标出。** 在原生窗口中,拉取请求的 检查 标签页会像 GitHub 一样,用 必需 标出那些控制其合并的检查。 + +### Changed + +- **lich 迁到 `lichdotdev/lich`。** 仓库已迁至 [lichdotdev](https://github.com/lichdotdev) 组织,网站迁至 [lichdotdev.github.io/lich](https://lichdotdev.github.io/lich/)。旧的 GitHub 链接、克隆和更新检查都会重定向;旧网站的书签则不会。 + +### Fixed + +- **“新功能”会跟随你切换的语言。** 在原生窗口中,更改界面语言后,发布说明仍停留在最初阅读时的语言,只有分组名称变成了新语言。 +- **差异视图不再因中日韩文本而卡顿,也不再为每个文件堆积内存。** 在原生窗口中,包含中文、日文或韩文的 审查 或拉取请求的 文件,会因为每个新字符都要查找字体而可能卡住数秒;而且每个文件的差异都各自保留一份字体副本,因此大型拉取请求会占用数百兆内存。 + +## [0.70.0] - 2026-10-17 + +### Added + +- **“新功能”对话框使用你的语言。** 更新后弹出的对话框会用你所选的界面语言显示发布说明及其分组名称,两个窗口都是如此。如果某个版本的说明尚无译文,则以英文显示。 +- **在原生窗口中分叉会话。** 右键点击卡片并选择 分叉 › 在此处,可在同一个检出中、紧挨着它的下方,用一张新卡片延续它的对话;选择 分叉 › Worktree…,则会连同你未提交的更改一起带到新的工作树。副本以原名命名(“auth-refactor 2”),并带有分叉标记。仅支持 Claude Code、Codex 和 opencode:其他提供商只能恢复。 +- **两张卡片运行同一段对话时,原生窗口会发出警告。** 在智能体自己的 TUI 中恢复一段已被另一张卡片打开的对话,会在右下角弹出警告;点击 切换 会关闭执行恢复的那张卡片,并切到原本打开该对话的卡片。 +- **原生窗口可以显示图片。** PNG、JPEG、GIF、WebP 或 BMP 会在文件标签页的预览中以棋盘格为底打开,并显示大小和尺寸;审查中发生更改的图片会并排显示更改前后的样子。PDF 或其他无法预览的文件不再报错,而是提供 用默认应用打开 和 在文件夹中显示;在拉取请求中,二进制文件会链接到它在 GitHub 上的页面。 +- **原生窗口支持你的语言。** 原生窗口的每个界面都可以用葡萄牙语、西班牙语和中文显示,设置 › 常规 中提供界面语言和提示词语言,与网页窗口在外观下的做法一致。在你选择之前,界面跟随系统语言。在没有中文字体的机器上选择中文时,会提示将 Noto Sans SC(约 25 MB)下载到 lich 自己的文件夹中。 +- **日语。** 两个窗口都支持日语,日语同时也是一种提示词语言,因此 lich 会用日语与你的智能体交流。只要安装了对应字体(Noto Sans CJK、Yu Gothic、Hiragino、Malgun Gothic 等),原生窗口就会让日语、中文和韩语各自使用所属地区的字体绘制,汉字不再呈现中文字形;若没有安装,则会提示下载 Noto Sans JP 或 KR,与中文下载 Noto Sans SC 的方式相同。README 也提供了日语版本。 +- **韩语。** 两个窗口都支持韩语,在网页窗口的 设置 › 外观 和原生窗口的 设置 › 常规 中选择;韩语同时也是一种提示词语言:简报、转发的消息和通知都会以韩语送达你的智能体。 +- **lich 会说俄语。** 在网页窗口的 设置 › 外观 或原生窗口的 设置 › 常规 中,可以选择 Русский 作为界面语言,也可以选作提示词语言,这样 lich 输入到智能体中的简报、转发说明和交接内容也都以俄语呈现。计数遵循俄语的 one、few 和 many 三种形式(1 файл、2 файла、5 файлов)。 +- **macOS 和 Windows 上的 opencode 配置文件,以及 Windows 上的 Cursor CLI 配置文件。** 原生窗口的 设置 › 提供商 会像在 Linux 上一样列出它们。macOS 上的 Cursor CLI,以及 macOS 和 Windows 上的 Kiro CLI 仍然没有:它们把登录信息保存在钥匙串中,或保存在任何设置都无法移动的文件夹里,因此每个配置文件都会共用同一个账户。 + +### Changed + +- **每次更新都会打开原生窗口。** 每个版本首次启动时,lich 会切换到原生窗口,无法启动时则回退到网页窗口;你在设置中切回后,lich 会一直停留在网页窗口,直到下一个版本。原生窗口首次打开时,会说明它是实验性的,并附上提交 bug 报告的链接。 +- **原生窗口中的状态环更细了。** 会话卡片图标外的圆环画得更细,与网页窗口的粗细一致。 +- **原生窗口中的快捷键按键更宽松。** 命令面板、快捷键叠层和 设置 › 快捷键 中的按键帽,文字周围留白更多,文字居中。 +- **原生窗口的设置默认打开全局。** 顶栏的齿轮始终打开 全局 设置,而不是你上次离开时所在的范围;项目的标签页仍可通过 项目设置… 打开它自己的设置。 +- **原生窗口中的命令面板更清爽。** 每个会话、项目和消息只占一行,路径跟在名称之后;工作树的路径显示最后三段。等待你处理的会话排在最前并有所标注,筛选标签页去掉了药丸样式,改用下划线。历史 中已关闭的会话在右侧显示分支和时长,只有搜索匹配到其对话时才多出第二行,并标出匹配的词。 + +### Fixed + +- **重启的会话不再一直显示为忙碌。** 智能体在一轮中途死亡,或会话在一轮中途被关闭后,会话会回到同一张卡片上,但对其他会话仍显示为忙碌:发给它的任务会等待一个永远不会结束的轮次。现在它和新会话一样,以无状态启动。 +- **Codex、Cursor CLI、Antigravity 和 Crush 不再重复询问你已回答过的问题。** 其中任何一个的沙盒会话都会直接停在提示符处。Cursor CLI 和 Antigravity 不再在你信任过的文件夹的工作树中再次询问,Antigravity 在其子文件夹中也不再询问,Crush 也不再要求初始化每个新的工作树。沙盒中的 oh-my-pi 会话不再打开设置向导。 +- **Claude Code 不再在你已回答过的地方询问“信任此文件夹?”。** 你在主账户中信任过的文件夹,从下一次会话起在其他所有 Claude Code 配置文件中也被信任,沙盒中的 Claude Code 会话则完全不会出现这个问题。lich 为你打开的会话不再停留在那个界面上,在那里按 Enter 会退出。 +- **重新打开的原生窗口知道每个会话去了哪里。** 通过 `cd` 移动过,或进入了 tmux 或 ssh 的会话,回来时会一直显示它检出的路径、分支和更改,直到下一次 `cd`;现在窗口在连接时会读取每个会话最后所在的位置。 +- **原生窗口用你的提示词语言编写智能体提示词。** 拉取请求和 issue 的交接,以及一批审查评论,此前一直以英文输入。 +- **重连期间更改主题不再导致原生窗口崩溃。** 在窗口重新连接到已重启的 lich 时切换主题,或系统切换浅色和深色,可能会绘制重连刚刚释放的终端,并使窗口崩溃。 +- **中文、日文和韩文文本不再让 Linux 上的原生窗口卡死。** 满是 CJK 文本的会话、审查或拉取请求可能使窗口挂起数秒,长到出现“未响应”,缩放还会让卡死再次出现。 +- **原生窗口占用的内存更少。** 每个会话的终端和审查都加载了各自的回退字体副本,CJK 或 emoji 字体每份就有数十 MB:现在打开六个会话,内存占用约为原来的一半。在安装了 CJK 字体的机器上,启动也更快。 +- **重新打开对话已处于打开状态的会话时,会聚焦到那张卡片。** 从 历史 中打开已关闭的会话、撤销关闭或已有的工作树,可能会作为第二张卡片回到另一张卡片仍在运行的对话上,两者会写入同一份对话记录。历史 现在按最近一次关闭只列出这样的对话一次,忘记 会删除它的所有副本。 + +## [0.69.0] - 2026-10-16 + +### Added + +- **macOS 上的原生窗口(实验性)。** Lich.app 在 Apple Silicon 和 Intel 上随 lich 一同提供它,设置 › 外观 › 窗口与 Linux 和 Windows 上一样可以选择它。Option 键在其终端中用于输入字符,和 Terminal.app 一样,因此智能体的 Option+字母快捷键无法到达终端。目前它只在 GitHub 的 macOS 机器上运行过:通知是无法点击的普通通知,也没有菜单栏图标。 +- **文件树认识更多的文件类型。** Java、Gradle、C 和 C++、C#、PHP、Ruby、Swift、SQL、Vue、Svelte、Terraform、Dockerfile、.gitignore 以及约三十种其他类型,现在在文件树和搜索结果中都有各自的图标,此前它们显示的是普通文件图标。 + +### Fixed + +- **`lich quit` 会关闭原生窗口。** 后端退出后,窗口原本仍然开着,并显示 lich 已丢失;托盘中的退出和停止信号现在也会关闭它,而更新后的重启仍会保留它。 +- **最后一个会话关闭时,原生窗口会提示删除工作树。** 已关闭提示中,撤销旁边新增了删除工作树;对于不是 lich 创建的工作树,或带有未提交更改的工作树,删除前会在对话框中点明。 +- **原生窗口的终端会选中指针下方的单元格。** 点击、拖动选择、链接以及跟踪鼠标的程序,读取到的指针位置都偏移了终端的内边距,导致它们选中的单元格位于所指单元格的右下方,在缩放显示器上偏差接近一个单元格。 +- **原生窗口的终端会绘制 emoji。** Noto Color Emoji 等彩色 emoji 字体把每个 emoji 存为图片而非轮廓,而终端只会绘制轮廓,所以每个 emoji 都显示为空白;现在它们以彩色绘制,占两个单元格宽。 +- **原生窗口的文件树显示每个文件的语言图标。** 此前每个文件都画成同一个普通文件图标;现在每个文件都带有网页窗口为它提供的图标。 +- **智能体打开的拉取请求会在这一轮结束时显示在它的卡片上。** 徽章原本只在分支或其最新提交变化时才会重新检查,而打开拉取请求两者都不会变,所以它要等到窗口失去焦点再重新获得焦点后才出现。 +- **原生窗口可以在 Windows 上打开。** 它原本通过 fontconfig 查找字体,而 Windows 并不提供,因此启动时就关闭了,lich 随后回退到网页窗口。在 Windows 上,它现在自己查找已安装的字体,终端默认使用 Cascadia Mono 或 Consolas,设置中的字体选择器也会列出它们。 +- **在浅色和深色主题之间切换不再冻结原生窗口。** 像 Claude Code 那样跟随终端配色方案的会话,会在窗口仍持有其终端时收到变化通知,导致窗口卡死并关闭。 diff --git a/docs/changelog.es.html b/docs/changelog.es.html index fc0921fc..6669e777 100644 --- a/docs/changelog.es.html +++ b/docs/changelog.es.html @@ -53,7 +53,7 @@

Changelog

Novedades, cambios y correcciones de cada versión de lich.

-

Leyendo el changelog…

+

Leyendo el changelog…

diff --git a/docs/changelog.ja.html b/docs/changelog.ja.html index 882fbbaa..4387eaf2 100644 --- a/docs/changelog.ja.html +++ b/docs/changelog.ja.html @@ -53,7 +53,7 @@

変更履歴

lich の各リリースの追加・変更・修正。

-

変更履歴を読み込んでいます…

+

変更履歴を読み込んでいます…

diff --git a/docs/changelog.js b/docs/changelog.js index d16abae3..918a2629 100644 --- a/docs/changelog.js +++ b/docs/changelog.js @@ -1,7 +1,7 @@ // Renders the changelog from main, so this page never needs editing: each "## [X.Y.Z] - date" section becomes a // release, its GitHub alert blocks become the headline and callouts, its "###" groups keep their order. A page in -// another language reads changelog/.md too and shows each release it translates in place of the English -// one; older releases, which only CHANGELOG.md holds, stay in English under a note that says so. +// another language shows only the releases changelog/.md translates, then a link to the English page for +// the older ones, so a page never mixes languages; with no translation to read it falls back to the English list. // The file only uses headings, "- " items with indented continuation lines, alert blocks and inline // **bold**, `code` and [links](url), which is all this reads. (function () { @@ -13,7 +13,7 @@ var locale = list.getAttribute("data-locale") || "en"; var groups = JSON.parse(list.getAttribute("data-groups") || "{}"); var releaseLink = list.getAttribute("data-release") || "Release on GitHub"; - var englishNote = list.getAttribute("data-english"); + var olderInEnglish = list.getAttribute("data-english"); function escape(text) { return text.replace(/&/g, "&").replace(//g, ">"); @@ -59,8 +59,7 @@ } function render(r) { var important = r.alerts.filter(function (a) { return a.kind === "important"; })[0]; - var note = r.firstEnglish ? '

' + escape(englishNote) + "

" : ""; - var html = note + '
' + date(r.date) + "
" + + var html = '"; } - var releases = [], shown = 0; + var releases = [], shown = 0, untranslated = false; function show() { list.insertAdjacentHTML("beforeend", releases.slice(shown, shown + PAGE).map(render).join("")); shown += PAGE; more.hidden = shown >= releases.length; + if (more.hidden && untranslated) { + list.insertAdjacentHTML("beforeend", '

' + escape(olderInEnglish) + " →

"); + } } more.addEventListener("click", show); function read(path) { @@ -89,14 +91,13 @@ .then(function (got) { var local = {}; parse(got[1]).forEach(function (r) { local[r.version] = r; }); - var shownEnglish = false; - releases = parse(got[0]).map(function (r) { - if (local[r.version]) return local[r.version]; - r.english = locale !== "en"; - r.firstEnglish = r.english && !shownEnglish && Boolean(englishNote); - if (r.english) shownEnglish = true; - return r; - }); + var english = parse(got[0]); + releases = english.filter(function (r) { return local[r.version]; }).map(function (r) { return local[r.version]; }); + untranslated = releases.length > 0 && releases.length < english.length; + if (!releases.length) { + releases = english; + releases.forEach(function (r) { r.english = locale !== "en"; }); + } list.innerHTML = ""; show(); }) diff --git a/docs/changelog.ko.html b/docs/changelog.ko.html index 245a5c89..e5337c52 100644 --- a/docs/changelog.ko.html +++ b/docs/changelog.ko.html @@ -53,7 +53,7 @@

변경 내역

lich 각 릴리스의 추가, 변경, 수정 사항입니다.

-

변경 내역을 읽는 중…

+

변경 내역을 읽는 중…

diff --git a/docs/changelog.pt-BR.html b/docs/changelog.pt-BR.html index 3bd6c729..9c492b25 100644 --- a/docs/changelog.pt-BR.html +++ b/docs/changelog.pt-BR.html @@ -53,7 +53,7 @@

Changelog

Novidades, mudanças e correções de cada versão do lich.

-

Lendo o changelog…

+

Lendo o changelog…

diff --git a/docs/changelog.ru.html b/docs/changelog.ru.html index 1dc56024..4c5009b2 100644 --- a/docs/changelog.ru.html +++ b/docs/changelog.ru.html @@ -53,7 +53,7 @@

Журнал изменений

Новое, изменения и исправления в каждом релизе lich.

-

Читаем журнал изменений…

+

Читаем журнал изменений…

diff --git a/docs/changelog.zh-CN.html b/docs/changelog.zh-CN.html index f7339072..5760b2cc 100644 --- a/docs/changelog.zh-CN.html +++ b/docs/changelog.zh-CN.html @@ -53,7 +53,7 @@

更新日志

lich 每个版本的新增、变更与修复。

-

正在读取更新日志…

+

正在读取更新日志…

diff --git a/docs/style.css b/docs/style.css index 2fc973b4..0492738d 100644 --- a/docs/style.css +++ b/docs/style.css @@ -724,6 +724,9 @@ footer nav { display: flex; flex-direction: column; gap: .6rem; } .rel li code, .rel-note code, .rel-lead code { font-size: .86em; color: var(--fg); } .rel a:not(.rel-ver):not(.rel-more) { color: var(--fg); } .rel-english { margin: 0 0 2rem; padding: .75rem 1rem; border-radius: .6rem; background: var(--island); color: var(--muted); font-size: .9rem; } +.rel-english a { color: inherit; text-decoration: none; } +.rel-english a:hover { color: var(--fg); } .rel-more { display: inline-block; margin-top: 1.2rem; color: var(--muted); font: .8rem var(--mono); text-decoration: none; } .rel-more:hover { color: var(--fg); } .cl-older { display: flex; margin: 0 auto; } +.cl-older[hidden] { display: none; } diff --git a/internal/patchnotes/patchnotes.go b/internal/patchnotes/patchnotes.go index be7127c5..aec2d9fa 100644 --- a/internal/patchnotes/patchnotes.go +++ b/internal/patchnotes/patchnotes.go @@ -20,10 +20,10 @@ // title, "warning" is something the reader must do or avoid, "note" a detail // worth a line. The window decides how each kind looks. // -// A translation of the latest release lives in changelog/.md, written +// Translations live in changelog/.md, newest release first, each added // by the lich-changelog-i18n skill when a release is cut: the same section, // headings, alert openers and code spans left in English. TestTranslations -// holds each file to the release it translates. +// holds each file to the releases it translates. package patchnotes import ( diff --git a/internal/patchnotes/translations_test.go b/internal/patchnotes/translations_test.go index 1ef962b7..b19b5259 100644 --- a/internal/patchnotes/translations_test.go +++ b/internal/patchnotes/translations_test.go @@ -18,25 +18,31 @@ const repoRoot = "../.." var codeSpan = regexp.MustCompile("`[^`]+`") -// TestTranslations holds every changelog/.md to the latest release in -// CHANGELOG.md: the one section, under the same heading, with the same groups, -// item counts, alert kinds, code spans and bold lead-ins. A release cut without -// running the lich-changelog-i18n skill fails here. +// TestTranslations holds every changelog/.md to CHANGELOG.md: its +// releases are the newest ones there, latest first and none skipped, each under +// the same heading, with the same groups, item counts, alert kinds, code spans +// and bold lead-ins. A release cut without running the lich-changelog-i18n +// skill fails here. func TestTranslations(t *testing.T) { english := readRepoFile(t, "CHANGELOG.md") - heading := latestReleaseHeading(t, english) - version := heading[len("## ["):strings.Index(heading, "]")] + released := releaseHeadings(t, english) for _, lang := range prompt.Langs { if lang == prompt.English { continue } t.Run(string(lang), func(t *testing.T) { translated := readRepoFile(t, filepath.Join("changelog", string(lang)+".md")) - if got := versionHeadings(translated); !reflect.DeepEqual(got, []string{heading}) { - t.Fatalf("version headings = %q, want only %q", got, heading) + headings := versionHeadings(translated) + if len(headings) == 0 || len(headings) > len(released) || !reflect.DeepEqual(headings, released[:len(headings)]) { + t.Fatalf("version headings = %q, want the newest releases of CHANGELOG.md in order, starting at %q", headings, released[0]) + } + for _, heading := range headings { + version := heading[len("## ["):strings.Index(heading, "]")] + t.Run(version, func(t *testing.T) { + assertSameShape(t, Section(english, version), Section(translated, version)) + assertSameHighlights(t, Highlights(english, version), Highlights(translated, version)) + }) } - assertSameShape(t, Section(english, version), Section(translated, version)) - assertSameHighlights(t, Highlights(english, version), Highlights(translated, version)) }) } } @@ -60,15 +66,18 @@ func versionHeadings(changelog string) []string { return out } -func latestReleaseHeading(t *testing.T, changelog string) string { +func releaseHeadings(t *testing.T, changelog string) []string { t.Helper() + var out []string for _, heading := range versionHeadings(changelog) { if !strings.HasPrefix(heading, "## [Unreleased]") { - return heading + out = append(out, heading) } } - t.Fatal("CHANGELOG.md has no released version") - return "" + if len(out) == 0 { + t.Fatal("CHANGELOG.md has no released version") + } + return out } func assertSameShape(t *testing.T, english, translated []Group) {