diff --git a/CHANGELOG.md b/CHANGELOG.md
index 247e724..b9b7316 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,88 @@ Every release entry is provided in English and Simplified Chinese.
每个版本条目均同时提供英文和简体中文说明。
+## 1.9.0 - 2026-09-21
+
+### English
+
+#### Added
+
+- Added live Markdown editing: focus a paragraph or inline expression to edit its source while retaining the document view, selection and undo history.
+- Added Kimi Code recognition, session commands and managed notification hooks.
+- Added cloud backup controls with saved preferences, connection feedback and access to configuration backups.
+- Added a persistent font-ligature setting that applies to open terminal sessions.
+
+#### Fixed
+
+- Fixed Codex cold restoration using a Hook group identifier instead of the native conversation identity. Saved sessions with an older or unrecognized transcript filename retain their existing valid conversation ID.
+- Fixed file-editor selections and search matches blending into light and dark backgrounds. Ordinary text/code files now reveal the configured workspace background image, and the caret row follows the active theme.
+- Fixed copying the terminal working directory: menu and command-palette actions copy the directory reported by the shell, including guest paths, while normal selection copying retains the original text.
+- Fixed AI failure and cancellation events being presented as successful completion; Pi retry-aware outcomes and Claude failure events use the shared notification result handling.
+- Fixed WSL hook installation and event delivery using the distribution's own user configuration. Updated command completions include the distribution and user options.
+- Fixed inherited Ctrl+C suppression preventing interruption of CMD child commands, while keeping selection copying available.
+- Fixed native CMD command activity and multiline/pending-wrap input tracking.
+- Fixed application 256-color blocks being overwritten by terminal prompt colors. Explicit custom color overrides remain supported.
+- Fixed SSH automatic authentication ignoring the available system agent.
+- Fixed long Markdown outline headings overlapping neighboring rows.
+
+#### Improved
+
+- Added direct responses for supported AI confirmation notifications, with stale-request checks before sending a response; Windows notification activation restores the corresponding application window.
+- Made notification duration configurable and preserved the selected duration when replacing a pane's result.
+- Reduced repeated Git/SVN drawer work by reusing repository snapshots and rendering visible rows.
+- Improved settings search, SSH connection cards and terminal file-link opening.
+
+Windows packages include an installer and portable ZIP. Linux and macOS packages retain their Preview designation. This candidate is intended for installation testing; visual acceptance and live cold restoration with every external CLI remain separate from automated checks.
+
+### 中文
+
+#### 新增
+
+- 新增 Markdown 即时编辑:聚焦段落或行内表达式即可编辑对应源码,同时保留文档视图、选区和撤销历史。
+- 新增 Kimi Code 识别、会话命令和受管理的通知 Hook。
+- 新增云端备份入口,支持保存偏好、连接反馈和访问配置备份。
+- 新增可持久保存的字体连字设置,并可应用于已打开的终端会话。
+
+#### 修复
+
+- 修复 Codex 冷恢复误用 Hook 分组标识而非原生对话身份的问题。旧快照中的会话文件名无法识别时,保留原有有效对话 ID。
+- 修复文件编辑器选区与查找命中融入浅色、深色背景的问题;普通文本和代码文件可透出已配置的工作区背景图,光标所在行跟随当前主题。
+- 修复终端工作目录复制:菜单和命令面板复制 Shell 上报的目录,包括访客环境路径;普通选区复制保留原始文字。
+- 修复 AI 失败和取消事件被显示为成功完成的问题;Pi 重试后的结果及 Claude 失败事件统一进入通知结果处理。
+- 修复 WSL Hook 安装与事件传递,使用发行版自身的用户配置;命令补全同步包含发行版和用户选项。
+- 修复继承的 Ctrl+C 忽略状态导致 CMD 子命令无法中断的问题,同时保留选区复制。
+- 修复原生 CMD 命令活动、多行输入和等待折行边界的输入跟踪。
+- 修复应用的 256 色块被终端提示符颜色覆盖的问题,保留明确配置的自定义颜色覆盖。
+- 修复 SSH 自动认证忽略可用系统代理的问题。
+- 修复 Markdown 目录长标题与相邻行重叠的问题。
+
+#### 改进
+
+- 支持从部分 AI 确认通知直接回答,发送前检查请求是否过期;Windows 通知激活时恢复对应的应用窗口。
+- 支持配置通知停留时长,并在替换窗格结果时保留选定时长。
+- 复用仓库快照、仅渲染可见行,减少 Git/SVN 抽屉的重复工作。
+- 改进设置搜索、SSH 连接卡片和终端文件链接打开。
+
+Windows 提供安装器和 ZIP 便携包,Linux 和 macOS 包继续标记为 Preview。本候选用于安装测试;视觉验收和所有外部 CLI 的实际关窗恢复仍需单独验证。
+
+### Contributors
+
+

+
+- **[@Traveritas](https://github.com/Traveritas)** — Kimi Code integration. / Kimi Code 集成。([#197](https://github.com/Kuddev/pebrel/pull/197))
+- **[@galact-byte](https://github.com/galact-byte)** — CMD interrupts and activity, application colors and Pi notification outcomes. / CMD 中断与活动、应用配色及 Pi 通知结果。([#206](https://github.com/Kuddev/pebrel/pull/206), [#207](https://github.com/Kuddev/pebrel/pull/207), [#208](https://github.com/Kuddev/pebrel/pull/208), [#215](https://github.com/Kuddev/pebrel/pull/215), [#216](https://github.com/Kuddev/pebrel/pull/216))
+- **[@Kuddev](https://github.com/Kuddev)** — Desktop integration, notifications, restoration and editor fixes. / 桌面集成、通知、恢复及编辑器修复。([#221](https://github.com/Kuddev/pebrel/pull/221), [#225](https://github.com/Kuddev/pebrel/pull/225), [#227](https://github.com/Kuddev/pebrel/pull/227), [#231](https://github.com/Kuddev/pebrel/pull/231))
+
+### SHA256
+
+- `Pebrel-v1.9.0-linux-x64-preview.AppImage`: `PENDING FINAL BUILD`
+- `Pebrel-v1.9.0-linux-x64-preview.deb`: `PENDING FINAL BUILD`
+- `Pebrel-v1.9.0-linux-x64-preview.tar.gz`: `PENDING FINAL BUILD`
+- `Pebrel-v1.9.0-macos-arm64-preview.dmg`: `PENDING FINAL BUILD`
+- `Pebrel-v1.9.0-macos-x64-preview.dmg`: `PENDING FINAL BUILD`
+- `Pebrel-v1.9.0-windows-x64.zip`: `PENDING FINAL BUILD`
+- `Pebrel-v1.9.0-windows-x64-setup.exe`: `PENDING FINAL BUILD`
+
## 1.8.2 - 2026-09-17
### English
diff --git a/Cargo.lock b/Cargo.lock
index 5082a43..1353492 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -4984,7 +4984,7 @@ dependencies = [
[[package]]
name = "nebula"
-version = "1.8.2"
+version = "1.9.0"
dependencies = [
"ab_glyph_rasterizer",
"aes-gcm",
@@ -5069,7 +5069,7 @@ dependencies = [
[[package]]
name = "nebula-completions"
-version = "1.8.2"
+version = "1.9.0"
dependencies = [
"lscolors",
"nu-ansi-term",
@@ -5090,15 +5090,15 @@ dependencies = [
[[package]]
name = "nebula-settings"
-version = "1.8.2"
+version = "1.9.0"
[[package]]
name = "nebula-split"
-version = "1.8.2"
+version = "1.9.0"
[[package]]
name = "nebula_config"
-version = "1.8.2"
+version = "1.9.0"
dependencies = [
"log",
"nebula_config_derive",
@@ -5108,7 +5108,7 @@ dependencies = [
[[package]]
name = "nebula_config_derive"
-version = "1.8.2"
+version = "1.9.0"
dependencies = [
"log",
"nebula_config",
@@ -5125,7 +5125,7 @@ version = "0.6.0"
[[package]]
name = "nebula_terminal"
-version = "1.8.2"
+version = "1.9.0"
dependencies = [
"base64",
"bitflags 2.13.0",
diff --git a/docs/release-notes/v1.9.0.md b/docs/release-notes/v1.9.0.md
new file mode 100644
index 0000000..7cf8f66
--- /dev/null
+++ b/docs/release-notes/v1.9.0.md
@@ -0,0 +1,81 @@
+# Pebrel 1.9.0
+
+## English
+
+### Added
+
+- Added live Markdown editing: focus a paragraph or inline expression to edit its source while retaining the document view, selection and undo history.
+- Added Kimi Code recognition, session commands and managed notification hooks.
+- Added cloud backup controls with saved preferences, connection feedback and access to configuration backups.
+- Added a persistent font-ligature setting that applies to open terminal sessions.
+
+### Fixed
+
+- Fixed Codex cold restoration using a Hook group identifier instead of the native conversation identity. Saved sessions with an older or unrecognized transcript filename retain their existing valid conversation ID.
+- Fixed file-editor selections and search matches blending into light and dark backgrounds. Ordinary text/code files now reveal the configured workspace background image, and the caret row follows the active theme.
+- Fixed copying the terminal working directory: menu and command-palette actions copy the directory reported by the shell, including guest paths, while normal selection copying retains the original text.
+- Fixed AI failure and cancellation events being presented as successful completion; Pi retry-aware outcomes and Claude failure events use the shared notification result handling.
+- Fixed WSL hook installation and event delivery using the distribution's own user configuration. Updated command completions include the distribution and user options.
+- Fixed inherited Ctrl+C suppression preventing interruption of CMD child commands, while keeping selection copying available.
+- Fixed native CMD command activity and multiline/pending-wrap input tracking.
+- Fixed application 256-color blocks being overwritten by terminal prompt colors. Explicit custom color overrides remain supported.
+- Fixed SSH automatic authentication ignoring the available system agent.
+- Fixed long Markdown outline headings overlapping neighboring rows.
+
+### Improved
+
+- Added direct responses for supported AI confirmation notifications, with stale-request checks before sending a response; Windows notification activation restores the corresponding application window.
+- Made notification duration configurable and preserved the selected duration when replacing a pane's result.
+- Reduced repeated Git/SVN drawer work by reusing repository snapshots and rendering visible rows.
+- Improved settings search, SSH connection cards and terminal file-link opening.
+
+Windows packages include an installer and portable ZIP. Linux and macOS packages retain their Preview designation. This candidate is intended for installation testing; visual acceptance and live cold restoration with every external CLI remain separate from automated checks.
+
+## 中文
+
+### 新增
+
+- 新增 Markdown 即时编辑:聚焦段落或行内表达式即可编辑对应源码,同时保留文档视图、选区和撤销历史。
+- 新增 Kimi Code 识别、会话命令和受管理的通知 Hook。
+- 新增云端备份入口,支持保存偏好、连接反馈和访问配置备份。
+- 新增可持久保存的字体连字设置,并可应用于已打开的终端会话。
+
+### 修复
+
+- 修复 Codex 冷恢复误用 Hook 分组标识而非原生对话身份的问题。旧快照中的会话文件名无法识别时,保留原有有效对话 ID。
+- 修复文件编辑器选区与查找命中融入浅色、深色背景的问题;普通文本和代码文件可透出已配置的工作区背景图,光标所在行跟随当前主题。
+- 修复终端工作目录复制:菜单和命令面板复制 Shell 上报的目录,包括访客环境路径;普通选区复制保留原始文字。
+- 修复 AI 失败和取消事件被显示为成功完成的问题;Pi 重试后的结果及 Claude 失败事件统一进入通知结果处理。
+- 修复 WSL Hook 安装与事件传递,使用发行版自身的用户配置;命令补全同步包含发行版和用户选项。
+- 修复继承的 Ctrl+C 忽略状态导致 CMD 子命令无法中断的问题,同时保留选区复制。
+- 修复原生 CMD 命令活动、多行输入和等待折行边界的输入跟踪。
+- 修复应用的 256 色块被终端提示符颜色覆盖的问题,保留明确配置的自定义颜色覆盖。
+- 修复 SSH 自动认证忽略可用系统代理的问题。
+- 修复 Markdown 目录长标题与相邻行重叠的问题。
+
+### 改进
+
+- 支持从部分 AI 确认通知直接回答,发送前检查请求是否过期;Windows 通知激活时恢复对应的应用窗口。
+- 支持配置通知停留时长,并在替换窗格结果时保留选定时长。
+- 复用仓库快照、仅渲染可见行,减少 Git/SVN 抽屉的重复工作。
+- 改进设置搜索、SSH 连接卡片和终端文件链接打开。
+
+Windows 提供安装器和 ZIP 便携包,Linux 和 macOS 包继续标记为 Preview。本候选用于安装测试;视觉验收和所有外部 CLI 的实际关窗恢复仍需单独验证。
+
+## Contributors
+
+

+
+- **[@Traveritas](https://github.com/Traveritas)** — Kimi Code integration. / Kimi Code 集成。([#197](https://github.com/Kuddev/pebrel/pull/197))
+- **[@galact-byte](https://github.com/galact-byte)** — CMD interrupts and activity, application colors and Pi notification outcomes. / CMD 中断与活动、应用配色及 Pi 通知结果。([#206](https://github.com/Kuddev/pebrel/pull/206), [#207](https://github.com/Kuddev/pebrel/pull/207), [#208](https://github.com/Kuddev/pebrel/pull/208), [#215](https://github.com/Kuddev/pebrel/pull/215), [#216](https://github.com/Kuddev/pebrel/pull/216))
+- **[@Kuddev](https://github.com/Kuddev)** — Desktop integration, notifications, restoration and editor fixes. / 桌面集成、通知、恢复及编辑器修复。([#221](https://github.com/Kuddev/pebrel/pull/221), [#225](https://github.com/Kuddev/pebrel/pull/225), [#227](https://github.com/Kuddev/pebrel/pull/227), [#231](https://github.com/Kuddev/pebrel/pull/231))
+
+## SHA256
+
+- `Pebrel-v1.9.0-linux-x64-preview.AppImage`: `PENDING FINAL BUILD`
+- `Pebrel-v1.9.0-linux-x64-preview.deb`: `PENDING FINAL BUILD`
+- `Pebrel-v1.9.0-linux-x64-preview.tar.gz`: `PENDING FINAL BUILD`
+- `Pebrel-v1.9.0-macos-arm64-preview.dmg`: `PENDING FINAL BUILD`
+- `Pebrel-v1.9.0-macos-x64-preview.dmg`: `PENDING FINAL BUILD`
+- `Pebrel-v1.9.0-windows-x64.zip`: `PENDING FINAL BUILD`
+- `Pebrel-v1.9.0-windows-x64-setup.exe`: `PENDING FINAL BUILD`
diff --git a/nebula-completions/Cargo.toml b/nebula-completions/Cargo.toml
index dc8b24d..3674ea3 100644
--- a/nebula-completions/Cargo.toml
+++ b/nebula-completions/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "nebula-completions"
-version = "1.8.2"
+version = "1.9.0"
edition.workspace = true
[features]
diff --git a/nebula_app/Cargo.toml b/nebula_app/Cargo.toml
index 32a886a..c5ca3db 100644
--- a/nebula_app/Cargo.toml
+++ b/nebula_app/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "nebula"
-version = "1.8.2"
+version = "1.9.0"
license = "GPL-3.0-or-later"
description = "Pebrel — a GPU-accelerated terminal emulator"
readme = "README.md"
@@ -15,15 +15,15 @@ path = "src/main.rs"
[dependencies.nebula_terminal]
path = "../nebula_terminal"
-version = "1.8.2"
+version = "1.9.0"
[dependencies.nebula_config_derive]
path = "../nebula_config_derive"
-version = "1.8.2"
+version = "1.9.0"
[dependencies.nebula_config]
path = "../nebula_config"
-version = "1.8.2"
+version = "1.9.0"
# 可选:GPUI UI 层(feature = "gpui-shell",模块 src/gpui_shell/)。
# GPUI/component 的版本和 Git 来源由根 Cargo.toml 统一精确固定。
@@ -67,7 +67,7 @@ optional = true
[dependencies.nebula-completions]
path = "../nebula-completions"
-version = "1.8.2"
+version = "1.9.0"
[dependencies]
ahash = { version = "0.8.6", features = ["no-rng"] }
@@ -143,7 +143,7 @@ rusqlite = { version = "0.40.2", features = ["bundled"] }
sha1 = "0.11.0"
[build-dependencies]
-nebula-settings = { path = "../nebula_settings", version = "1.8.2" }
+nebula-settings = { path = "../nebula_settings", version = "1.9.0" }
gl_generator = { version = "0.14.0", optional = true }
serde = "1"
serde_json = "1"
diff --git a/nebula_app/windows/nebula.rc b/nebula_app/windows/nebula.rc
index 89f847e..b735a80 100644
--- a/nebula_app/windows/nebula.rc
+++ b/nebula_app/windows/nebula.rc
@@ -10,8 +10,8 @@ APP_MANIFEST RT_MANIFEST nebula.manifest
#endif
1 VERSIONINFO
-FILEVERSION 1,8,2,0
-PRODUCTVERSION 1,8,2,0
+FILEVERSION 1,9,0,0
+PRODUCTVERSION 1,9,0,0
FILEFLAGSMASK 0x3fL
FILEFLAGS 0x0L
FILEOS 0x40004L
@@ -24,11 +24,11 @@ BEGIN
BEGIN
VALUE "CompanyName", "Kuddev"
VALUE "FileDescription", "Pebrel"
- VALUE "FileVersion", "1.8.2"
+ VALUE "FileVersion", "1.9.0"
VALUE "InternalName", "nebula"
VALUE "OriginalFilename", "pebrel.exe"
VALUE "ProductName", "Pebrel"
- VALUE "ProductVersion", "1.8.2"
+ VALUE "ProductVersion", "1.9.0"
END
END
BLOCK "VarFileInfo"
diff --git a/nebula_config/Cargo.toml b/nebula_config/Cargo.toml
index fabbcbd..951d1bb 100644
--- a/nebula_config/Cargo.toml
+++ b/nebula_config/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "nebula_config"
-version = "1.8.2"
+version = "1.9.0"
license = "GPL-3.0-or-later"
description = "Nebula configuration abstractions"
homepage = "https://github.com/Kuddev/pebrel"
@@ -14,5 +14,5 @@ serde = "1.0.163"
toml.workspace = true
[dev-dependencies]
-nebula_config_derive = { version = "1.8.2", path = "../nebula_config_derive" }
+nebula_config_derive = { version = "1.9.0", path = "../nebula_config_derive" }
serde = { version = "1.0.163", features = ["derive"] }
diff --git a/nebula_config_derive/Cargo.toml b/nebula_config_derive/Cargo.toml
index 211e52a..f9c57df 100644
--- a/nebula_config_derive/Cargo.toml
+++ b/nebula_config_derive/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "nebula_config_derive"
-version = "1.8.2"
+version = "1.9.0"
license = "GPL-3.0-or-later"
description = "Failure resistant deserialization derive"
homepage = "https://github.com/Kuddev/pebrel"
@@ -18,7 +18,7 @@ syn = { version = "2.0.16", features = ["derive", "parsing", "proc-macro", "prin
[dev-dependencies.nebula_config]
path = "../nebula_config"
-version = "1.8.2"
+version = "1.9.0"
[dev-dependencies]
log = "0.4.11"
diff --git a/nebula_settings/Cargo.toml b/nebula_settings/Cargo.toml
index 82de5c2..62a29a7 100644
--- a/nebula_settings/Cargo.toml
+++ b/nebula_settings/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "nebula-settings"
-version = "1.8.2"
+version = "1.9.0"
license = "GPL-3.0-or-later"
description = "Shared reader for Nebula runtime user settings (nebula_settings.txt) and theme terminal-color tables"
publish = false
diff --git a/nebula_split/Cargo.toml b/nebula_split/Cargo.toml
index 1642326..39ae5a9 100644
--- a/nebula_split/Cargo.toml
+++ b/nebula_split/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "nebula-split"
-version = "1.8.2"
+version = "1.9.0"
license = "GPL-3.0-or-later"
description = "Shared split-pane rules: layout tree, geometry, divider drag and directional focus"
publish = false
diff --git a/nebula_terminal/Cargo.toml b/nebula_terminal/Cargo.toml
index 7ea01a3..52262c7 100644
--- a/nebula_terminal/Cargo.toml
+++ b/nebula_terminal/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "nebula_terminal"
-version = "1.8.2"
+version = "1.9.0"
license = "GPL-3.0-or-later"
description = "Nebula terminal emulation core"
readme = "../README.md"
diff --git a/scripts/installer.iss b/scripts/installer.iss
index 31e0ed3..517365a 100644
--- a/scripts/installer.iss
+++ b/scripts/installer.iss
@@ -1,9 +1,9 @@
#ifndef AppVersion
- #define AppVersion "1.8.2"
+ #define AppVersion "1.9.0"
#endif
#ifndef NumericVersion
- #define NumericVersion "1.8.2.0"
+ #define NumericVersion "1.9.0.0"
#endif
#ifndef Configuration
diff --git a/tools/i18n-contract/Cargo.lock b/tools/i18n-contract/Cargo.lock
index 7501d92..325a4c0 100644
--- a/tools/i18n-contract/Cargo.lock
+++ b/tools/i18n-contract/Cargo.lock
@@ -16,7 +16,7 @@ checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98"
[[package]]
name = "nebula-settings"
-version = "1.8.2"
+version = "1.9.0"
[[package]]
name = "pebrel-i18n-contract"