aboutsummaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorCan Celik <ogulcancelik@gmail.com>2026-09-24 20:59:48 +0300
committerGitHub <noreply@github.com>2026-09-24 20:59:48 +0300
commitc411883ec639c9893ed9c33021c890485e91727b (patch)
tree797bb6efdb3a9425e3d8c31953f62452bd564cb1 /docs
parent11a7ab4ae21ab9427bcb44b3be01f62a4ab58c47 (diff)
feat!: replace the custom graphics api with optimized native kitty rendering (#4561)
* feat!: replace the custom graphics api with optimized native kitty rendering * fix: enable safe kitty optimizations automatically --------- Co-authored-by: JJ Liebig <jonathan.liebig@gmail.com>
Diffstat (limited to 'docs')
-rw-r--r--docs/next/api/herdr-api.schema.json254
-rw-r--r--docs/next/website/src/content/docs/configuration.mdx16
-rw-r--r--docs/next/website/src/content/docs/ja/socket-api.mdx17
-rw-r--r--docs/next/website/src/content/docs/socket-api.mdx67
-rw-r--r--docs/next/website/src/content/docs/zh-cn/socket-api.mdx17
-rw-r--r--docs/next/website/src/data/config-reference.json2
6 files changed, 29 insertions, 344 deletions
diff --git a/docs/next/api/herdr-api.schema.json b/docs/next/api/herdr-api.schema.json
index b4648b03..3151bff3 100644
--- a/docs/next/api/herdr-api.schema.json
+++ b/docs/next/api/herdr-api.schema.json
@@ -2598,110 +2598,6 @@
],
"type": "object"
},
- "PaneGraphicsClearParams": {
- "properties": {
- "layer_id": {
- "type": [
- "string",
- "null"
- ]
- },
- "pane_id": {
- "type": "string"
- }
- },
- "required": [
- "pane_id"
- ],
- "type": "object"
- },
- "PaneGraphicsFormat": {
- "enum": [
- "png",
- "rgb",
- "rgba",
- "bgra"
- ],
- "type": "string"
- },
- "PaneGraphicsPlacementParams": {
- "properties": {
- "grid_cols": {
- "default": 0,
- "format": "uint32",
- "minimum": 0,
- "type": "integer"
- },
- "grid_rows": {
- "default": 0,
- "format": "uint32",
- "minimum": 0,
- "type": "integer"
- },
- "viewport_col": {
- "default": 0,
- "format": "int32",
- "type": "integer"
- },
- "viewport_row": {
- "default": 0,
- "format": "int32",
- "type": "integer"
- }
- },
- "type": "object"
- },
- "PaneGraphicsSetParams": {
- "properties": {
- "data_base64": {
- "default": "",
- "type": "string"
- },
- "format": {
- "$ref": "#/schemas/request/$defs/PaneGraphicsFormat"
- },
- "image_height": {
- "format": "uint32",
- "minimum": 0,
- "type": "integer"
- },
- "image_width": {
- "format": "uint32",
- "minimum": 0,
- "type": "integer"
- },
- "layer_id": {
- "type": [
- "string",
- "null"
- ]
- },
- "pane_id": {
- "type": "string"
- },
- "placement": {
- "$ref": "#/schemas/request/$defs/PaneGraphicsPlacementParams",
- "default": {
- "grid_cols": 0,
- "grid_rows": 0,
- "viewport_col": 0,
- "viewport_row": 0
- }
- },
- "z_index": {
- "default": 0,
- "format": "int32",
- "type": "integer"
- }
- },
- "required": [
- "pane_id",
- "format",
- "image_width",
- "image_height"
- ],
- "type": "object"
- },
"PaneInputSetParams": {
"properties": {
"pane_id": {
@@ -6016,54 +5912,6 @@
{
"properties": {
"method": {
- "const": "pane.graphics.set",
- "type": "string"
- },
- "params": {
- "$ref": "#/schemas/request/$defs/PaneGraphicsSetParams"
- }
- },
- "required": [
- "method",
- "params"
- ],
- "type": "object"
- },
- {
- "properties": {
- "method": {
- "const": "pane.graphics.clear",
- "type": "string"
- },
- "params": {
- "$ref": "#/schemas/request/$defs/PaneGraphicsClearParams"
- }
- },
- "required": [
- "method",
- "params"
- ],
- "type": "object"
- },
- {
- "properties": {
- "method": {
- "const": "pane.graphics.info",
- "type": "string"
- },
- "params": {
- "$ref": "#/schemas/request/$defs/PaneTarget"
- }
- },
- "required": [
- "method",
- "params"
- ],
- "type": "object"
- },
- {
- "properties": {
- "method": {
"const": "pane.report_agent",
"type": "string"
},
@@ -10029,108 +9877,6 @@
},
{
"properties": {
- "revision": {
- "format": "uint64",
- "minimum": 0,
- "type": "integer"
- },
- "sequence": {
- "format": "uint64",
- "minimum": 0,
- "type": "integer"
- },
- "type": {
- "const": "pane_graphics_frame_ack",
- "type": "string"
- }
- },
- "required": [
- "type",
- "sequence",
- "revision"
- ],
- "type": "object"
- },
- {
- "properties": {
- "cell_height_px": {
- "format": "uint32",
- "minimum": 0,
- "type": "integer"
- },
- "cell_width_px": {
- "format": "uint32",
- "minimum": 0,
- "type": "integer"
- },
- "file_frame_damage": {
- "default": false,
- "description": "Accepts damage metadata while still consuming a complete canonical file.",
- "type": "boolean"
- },
- "file_frame_direct_max_bytes": {
- "format": "uint",
- "minimum": 0,
- "type": [
- "integer",
- "null"
- ]
- },
- "file_frame_directory": {
- "type": [
- "string",
- "null"
- ]
- },
- "file_frame_formats": {
- "items": {
- "type": "string"
- },
- "type": "array"
- },
- "file_frame_max_bytes": {
- "format": "uint",
- "minimum": 0,
- "type": [
- "integer",
- "null"
- ]
- },
- "file_frame_transport": {
- "type": [
- "string",
- "null"
- ]
- },
- "max_layers_per_pane": {
- "default": 0,
- "format": "uint",
- "minimum": 0,
- "type": "integer"
- },
- "pane_visible": {
- "description": "True only when this pane is on the currently rendered terminal surface.",
- "type": "boolean"
- },
- "pixel_mouse": {
- "default": false,
- "type": "boolean"
- },
- "type": {
- "const": "pane_graphics_info",
- "type": "string"
- }
- },
- "required": [
- "type",
- "cell_width_px",
- "cell_height_px",
- "pane_visible"
- ],
- "type": "object"
- },
- {
- "properties": {
"explain": true,
"type": {
"const": "agent_explain",
diff --git a/docs/next/website/src/content/docs/configuration.mdx b/docs/next/website/src/content/docs/configuration.mdx
index 3dae7168..0d68a0f4 100644
--- a/docs/next/website/src/content/docs/configuration.mdx
+++ b/docs/next/website/src/content/docs/configuration.mdx
@@ -512,9 +512,19 @@ Search the [Config reference](/docs/config-reference/) for scrollback limits, ne
## Kitty graphics
-Herdr renders pane images by default in compatible outer terminals. Popups, menus, and notifications temporarily hide only the image placements they overlap. Uncovered images stay visible, and hidden placements return when uncovered. Images do not dim with dialog backgrounds.
+Applications and plugins integrate through the standard Kitty graphics protocol emitted in pane terminal output. Herdr renders these images by default in compatible outer terminals. The external socket pane-overlay API has been removed; there is no replacement socket image API.
-To disable graphics rendering and the pane graphics API:
+Popups, menus, and notifications temporarily hide only the image placements they overlap. Uncovered images stay visible, and hidden placements return when uncovered. Images do not dim with dialog backgrounds.
+
+Herdr automatically chooses eligible file transports, with no application changes or environment switches. On local Unix Ghostty clients, it can send image data through temporary files instead of encoding it into terminal output. A small file-consumption probe checks support first. Other terminals, SSH-launched clients, and nested multiplexers retain inline output for this last-hop optimization.
+
+For eligible local clients, native RGBA images travel from server to client as paths to Herdr-owned snapshots rather than pixel bytes. Unsupported clients and failed transfers fall back to inline delivery. Remote server paths are never forwarded to the local terminal. Herdr keeps image placement, clipping, and visibility under its control.
+
+On Linux, whole-file, uncompressed RGBA uploads can use copy-on-write snapshots before Herdr reads their pixels. This requires filesystem support for cloning into Herdr's private `/var/tmp` store. Unsupported filesystems, temporary-file uploads, shared memory, and other formats use the normal loader. Snapshots are limited to 16 MiB each and 64 MiB total; animation and unsupported clients read their pixels when needed. Herdr never relies on a mutable producer path after accepting an image.
+
+PNG uploads retain full decoding and validation. Herdr does not defer corrupt-image validation to the outer terminal.
+
+To disable Kitty graphics rendering:
```toml
[terminal]
@@ -523,7 +533,7 @@ kitty_graphics = false
The legacy `experimental.kitty_graphics` setting remains accepted for existing configurations. `terminal.kitty_graphics` takes precedence when both are set.
-Changing this setting requires restarting the affected Herdr server or reattaching the client. In remote sessions, the server's setting controls pane graphics parsing and API availability, while the local client's setting controls output to the outer terminal.
+Changing this setting requires restarting the affected Herdr server or reattaching the client. In remote sessions, the server's setting controls Kitty graphics parsing, while the local client's setting controls output to the outer terminal.
## Agent session restore
diff --git a/docs/next/website/src/content/docs/ja/socket-api.mdx b/docs/next/website/src/content/docs/ja/socket-api.mdx
index 09532d5e..35a03625 100644
--- a/docs/next/website/src/content/docs/ja/socket-api.mdx
+++ b/docs/next/website/src/content/docs/ja/socket-api.mdx
@@ -99,7 +99,7 @@ herdr pane read w1:p2 --source recent --lines 50
| ワークスペース | `workspace.create`、`workspace.list`、`workspace.get`、`workspace.focus`、`workspace.rename`、`workspace.move`、`workspace.move_block`、`workspace.report_metadata`、`workspace.close` |
| Worktree | `worktree.list`、`worktree.create`、`worktree.open`、`worktree.remove` |
| タブ | `tab.create`、`tab.list`、`tab.get`、`tab.focus`、`tab.rename`、`tab.move`、`tab.close` |
-| ペイン | `pane.split`、`pane.swap`、`pane.move`、`pane.zoom`、`pane.layout`、`pane.process_info`、`pane.neighbor`、`pane.edges`、`pane.focus_direction`、`pane.resize`、`pane.list`、`pane.current`、`pane.get`、`pane.rename`、`pane.send_text`、`pane.send_keys`、`pane.send_input`、`pane.read`、`pane.graphics.info`、`pane.graphics.set`、`pane.graphics.clear`、`pane.graphics.stream`、`pane.report_agent`、`pane.report_agent_session`、`pane.report_metadata`、`pane.clear_agent_authority`、`pane.release_agent`、`pane.close`、`pane.wait_for_output` |
+| ペイン | `pane.split`、`pane.swap`、`pane.move`、`pane.zoom`、`pane.layout`、`pane.process_info`、`pane.neighbor`、`pane.edges`、`pane.focus_direction`、`pane.resize`、`pane.list`、`pane.current`、`pane.get`、`pane.rename`、`pane.send_text`、`pane.send_keys`、`pane.send_input`、`pane.read`、`pane.report_agent`、`pane.report_agent_session`、`pane.report_metadata`、`pane.clear_agent_authority`、`pane.release_agent`、`pane.close`、`pane.wait_for_output` |
| ポップアップ | `popup.close` |
| レイアウト | `layout.export`、`layout.apply`、`layout.set_split_ratio` |
| エージェント | `agent.list`、`agent.get`、`agent.read`、`agent.explain`、`agent.send_keys`、`agent.prompt`、`agent.wait`、`agent.rename`、`agent.focus`、`agent.start` |
@@ -147,20 +147,9 @@ CLI の `herdr api snapshot` は、クライアントやエージェントが簡
### ペイングラフィックス
-ペイングラフィックスを使うと、プラグインがペイン上に画像データを配置できます。デフォルトで利用でき、サーバーで `[terminal].kitty_graphics = false` が設定されている場合は、すべてのペイングラフィックスメソッドが `feature_disabled` を返します。この設定の変更にはサーバーの再起動が必要です。`pane.graphics.info` はグラフィックスレイヤーを作成せず、接続中クライアントのセルの幅と高さをピクセル単位で返します。`pane.graphics.set` は `data_base64` の `png`、`rgb`、`rgba` データを受け取り、`pane.graphics.clear` はレイヤーを削除します。
+アプリケーションとプラグインは、ペインのターミナル出力を通じて標準の Kitty グラフィックスプロトコルを送信してください。Herdr が対応する外側ターミナルで画像の配置、クリッピング、表示状態を管理します。
-```json
-{"id":"graphics_info","method":"pane.graphics.info","params":{"pane_id":"w1:p1"}}
-{"id":"graphics_set","method":"pane.graphics.set","params":{"pane_id":"w1:p1","format":"png","image_width":800,"image_height":600,"data_base64":"...","placement":{"viewport_col":0,"viewport_row":0,"grid_cols":80,"grid_rows":30}}}
-{"id":"graphics_clear","method":"pane.graphics.clear","params":{"pane_id":"w1:p1"}}
-```
-
-フレームを繰り返し送る場合は、`pane.graphics.stream` で専用ソケットを開きます。Herdr が `ok` を返した後、フレームごとに 1 つの JSON ヘッダーと正確に `data_length` バイトの生データを送ります。ソケットが閉じるまでストリームがそのペインのグラフィックスレイヤーを所有し、同時に set、clear、stream を要求すると `stream_conflict` を返します。
-
-```json
-{"id":"graphics_stream","method":"pane.graphics.stream","params":{"pane_id":"w1:p1"}}
-{"format":"png","image_width":800,"image_height":600,"data_length":12345,"placement":{"viewport_col":0,"viewport_row":0,"grid_cols":80,"grid_rows":30}}
-```
+外部ソケットのペイン画像オーバーレイ API は削除されました。`pane.graphics.info`、`pane.graphics.set`、`pane.graphics.clear`、`pane.graphics.stream` は利用できず、代替のソケット画像 API もありません。旧サーバーとの内部通信プロトコルの互換性は、これらの公開メソッドを復活させるものではありません。
`pane.layout` は、`workspace_id`、`tab_id`、`zoomed`、外側の `area`、`focused_pane_id`、ペインの矩形、分割の矩形/比率を含むタブレイアウトのスナップショットを返します。`pane.neighbor` と `pane.edges` は同じレイアウトスナップショットを含むので、クライアントは非公開のレイアウト状態なしに次の判断を下せます。
diff --git a/docs/next/website/src/content/docs/socket-api.mdx b/docs/next/website/src/content/docs/socket-api.mdx
index e6ae6a57..4572b5ab 100644
--- a/docs/next/website/src/content/docs/socket-api.mdx
+++ b/docs/next/website/src/content/docs/socket-api.mdx
@@ -103,7 +103,7 @@ Raw socket method names use dot notation:
| Workspace | `workspace.create`, `workspace.list`, `workspace.get`, `workspace.focus`, `workspace.rename`, `workspace.move`, `workspace.move_block`, `workspace.report_metadata`, `workspace.close` |
| Worktree | `worktree.list`, `worktree.create`, `worktree.open`, `worktree.remove` |
| Tab | `tab.create`, `tab.list`, `tab.get`, `tab.focus`, `tab.rename`, `tab.move`, `tab.close` |
-| Pane | `pane.split`, `pane.swap`, `pane.move`, `pane.zoom`, `pane.layout`, `pane.process_info`, `pane.neighbor`, `pane.edges`, `pane.focus_direction`, `pane.resize`, `pane.list`, `pane.current`, `pane.get`, `pane.rename`, `pane.send_text`, `pane.send_keys`, `pane.send_input`, `pane.read`, `pane.graphics.info`, `pane.graphics.set`, `pane.graphics.clear`, `pane.graphics.stream`, `pane.report_agent`, `pane.report_agent_session`, `pane.report_metadata`, `pane.clear_agent_authority`, `pane.release_agent`, `pane.close`, `pane.wait_for_output` |
+| Pane | `pane.split`, `pane.swap`, `pane.move`, `pane.zoom`, `pane.layout`, `pane.process_info`, `pane.neighbor`, `pane.edges`, `pane.focus_direction`, `pane.resize`, `pane.list`, `pane.current`, `pane.get`, `pane.rename`, `pane.send_text`, `pane.send_keys`, `pane.send_input`, `pane.read`, `pane.report_agent`, `pane.report_agent_session`, `pane.report_metadata`, `pane.clear_agent_authority`, `pane.release_agent`, `pane.close`, `pane.wait_for_output` |
| Popup | `popup.close` |
| Layout | `layout.export`, `layout.apply`, `layout.set_split_ratio` |
| Agent | `agent.list`, `agent.get`, `agent.read`, `agent.explain`, `agent.send_keys`, `agent.prompt`, `agent.wait`, `agent.rename`, `agent.focus`, `agent.start`, `agent.view.set`, `agent.view.clear` |
@@ -176,63 +176,14 @@ Clients can treat `offset_from_bottom == 0` as at-bottom state.
### Pane graphics
-Pane graphics let a plugin place image data over a pane. They are available by
-default; when the server has `[terminal].kitty_graphics = false`, every pane
-graphics method returns `feature_disabled`. Changing this setting requires a
-server restart. Calling `pane.graphics.info` explicitly
-activates capability discovery and returns the attached client's cell size,
-file-frame options, pixel-mouse support, the 16-layer limit, and `pane_visible`.
-`pane_visible` is true only when the target is in the active workspace and tab
-and is not hidden by zoom. Short-lived UI modes do not change it.
-
-`pane.graphics.set`, `pane.graphics.clear`, and `pane.graphics.stream` accept an
-optional `layer_id` (default `primary`). Set and stream also accept `z_index`;
-layers are placed in stable `(z_index, layer_id)` order. Each stream exclusively owns its layer, and
-closing it removes that layer. Inline frames accept `png`, `rgb`, `rgba`, or
-`bgra`; BGRA is normalized once to owned RGBA. Herdr advances the host cache
-one image transaction per render pass, so arbitrary layer sets progress without
-an aggregate frame. Client transport keeps each transaction within its 32 MiB
-wire limit.
-
-```json
-{"id":"graphics_info","method":"pane.graphics.info","params":{"pane_id":"w1:p1"}}
-{"id":"graphics_set","method":"pane.graphics.set","params":{"pane_id":"w1:p1","format":"png","image_width":800,"image_height":600,"data_base64":"...","placement":{"viewport_col":0,"viewport_row":0,"grid_cols":80,"grid_rows":30}}}
-{"id":"graphics_clear","method":"pane.graphics.clear","params":{"pane_id":"w1:p1"}}
-```
-
-For repeated frames, open a dedicated socket with `pane.graphics.stream`. After
-Herdr replies with `ok`, send one JSON header and then exactly `data_length` raw
-bytes per inline frame. Concurrent operations on that layer return
-`stream_conflict`.
-
-```json
-{"id":"graphics_stream","method":"pane.graphics.stream","params":{"pane_id":"w1:p1","z_index":0}}
-{"format":"png","image_width":800,"image_height":600,"data_length":12345,"placement":{"viewport_col":0,"viewport_row":0,"grid_cols":80,"grid_rows":30}}
-```
-
-When `pane.graphics.info` advertises `file_frame_transport: "direct-kitty"`, an
-eligible local Ghostty, kitty, or WezTerm client may submit an immutable private
-`rgba` or `bgra` file with `file.path`, `sequence`, and `revision`. Direct Kitty
-file transport is reserved for the default `primary` page layer; named secondary
-layers use owned inline RGBA. BGRA is always copied, swizzled, and rendered
-inline. Herdr replies with a `pane_graphics_frame_ack` only after the terminal
-accepts the file, or after a safe owned inline fallback is installed. Confirmed
-file-transport failure disables direct files for that client connection without
-disabling exact pixel mouse. A timeout or client loss closes the stream without
-acknowledging source reuse. Clients that cannot negotiate direct file transport
-remain on the owned inline fallback.
-
-Direct files are always complete canonical `width * height * 4` RGBA frames.
-`file_frame_max_bytes` is the limit that remains eligible for owned inline fallback.
-Primary-layer RGBA files may use the larger `file_frame_direct_max_bytes` limit when
-`file_frame_transport` is available. Frames above the fallback limit are acknowledged
-only when the terminal accepts the direct transfer; rejection closes the stream. If a
-frame cannot use owned inline fallback while its pane is temporarily hidden or cannot be
-placed during a redraw, Herdr uploads the image without displaying it and replays its
-placement when the pane becomes visible again.
-`file_frame_damage: true` means Herdr accepts optional damage metadata for
-producer-side canonical-ring efficiency; it still copies or presents the full file.
-Resize and full redraw replay placements without retransmitting pixels.
+Applications and plugins should emit the standard Kitty graphics protocol through
+their pane's terminal output. Herdr manages image placement, clipping, and
+visibility in compatible outer terminals.
+
+The external socket pane-overlay API has been removed: `pane.graphics.info`,
+`pane.graphics.set`, `pane.graphics.clear`, and `pane.graphics.stream` are no
+longer available. There is no replacement socket image API. Internal wire
+compatibility with older servers does not restore these public methods.
`pane.layout` returns the tab layout snapshot with `workspace_id`, `tab_id`,
`zoomed`, outer `area`, `focused_pane_id`, pane rects, and split rects/ratios.
diff --git a/docs/next/website/src/content/docs/zh-cn/socket-api.mdx b/docs/next/website/src/content/docs/zh-cn/socket-api.mdx
index 3aae7131..f947fc43 100644
--- a/docs/next/website/src/content/docs/zh-cn/socket-api.mdx
+++ b/docs/next/website/src/content/docs/zh-cn/socket-api.mdx
@@ -99,7 +99,7 @@ herdr pane read w1:p2 --source recent --lines 50
| 工作区 | `workspace.create`、`workspace.list`、`workspace.get`、`workspace.focus`、`workspace.rename`、`workspace.move`、`workspace.move_block`、`workspace.report_metadata`、`workspace.close` |
| Worktree | `worktree.list`、`worktree.create`、`worktree.open`、`worktree.remove` |
| 标签页 | `tab.create`、`tab.list`、`tab.get`、`tab.focus`、`tab.rename`、`tab.move`、`tab.close` |
-| 窗格 | `pane.split`、`pane.swap`、`pane.move`、`pane.zoom`、`pane.layout`、`pane.process_info`、`pane.neighbor`、`pane.edges`、`pane.focus_direction`、`pane.resize`、`pane.list`、`pane.current`、`pane.get`、`pane.rename`、`pane.send_text`、`pane.send_keys`、`pane.send_input`、`pane.read`、`pane.graphics.info`、`pane.graphics.set`、`pane.graphics.clear`、`pane.graphics.stream`、`pane.report_agent`、`pane.report_agent_session`、`pane.report_metadata`、`pane.clear_agent_authority`、`pane.release_agent`、`pane.close`、`pane.wait_for_output` |
+| 窗格 | `pane.split`、`pane.swap`、`pane.move`、`pane.zoom`、`pane.layout`、`pane.process_info`、`pane.neighbor`、`pane.edges`、`pane.focus_direction`、`pane.resize`、`pane.list`、`pane.current`、`pane.get`、`pane.rename`、`pane.send_text`、`pane.send_keys`、`pane.send_input`、`pane.read`、`pane.report_agent`、`pane.report_agent_session`、`pane.report_metadata`、`pane.clear_agent_authority`、`pane.release_agent`、`pane.close`、`pane.wait_for_output` |
| 弹窗 | `popup.close` |
| 布局 | `layout.export`、`layout.apply`、`layout.set_split_ratio` |
| 智能体 | `agent.list`、`agent.get`、`agent.read`、`agent.explain`、`agent.send_keys`、`agent.prompt`、`agent.wait`、`agent.rename`、`agent.focus`、`agent.start` |
@@ -147,20 +147,9 @@ CLI 的 `herdr api snapshot` 会把当前 `session.snapshot` 响应输出为 JSO
### 窗格图形
-窗格图形允许插件在窗格上放置图像数据。该功能默认可用;当服务器设置 `[terminal].kitty_graphics = false` 时,所有窗格图形方法都返回 `feature_disabled`。更改此设置需要重启服务器。调用 `pane.graphics.info` 会返回所连接客户端的单元格像素宽度和高度,但不会创建图形层。`pane.graphics.set` 接受 `data_base64` 中的 `png`、`rgb` 或 `rgba` 数据,`pane.graphics.clear` 删除该图层。
+应用和插件应通过窗格的终端输出发送标准 Kitty 图形协议。Herdr 在兼容的外层终端中管理图像的位置、裁剪和可见性。
-```json
-{"id":"graphics_info","method":"pane.graphics.info","params":{"pane_id":"w1:p1"}}
-{"id":"graphics_set","method":"pane.graphics.set","params":{"pane_id":"w1:p1","format":"png","image_width":800,"image_height":600,"data_base64":"...","placement":{"viewport_col":0,"viewport_row":0,"grid_cols":80,"grid_rows":30}}}
-{"id":"graphics_clear","method":"pane.graphics.clear","params":{"pane_id":"w1:p1"}}
-```
-
-要重复发送帧,用 `pane.graphics.stream` 打开专用 socket。Herdr 回复 `ok` 后,每一帧发送一个 JSON 头,再发送恰好 `data_length` 字节的原始数据。socket 关闭前,该流拥有对应窗格的图形层;并发 set、clear 或 stream 请求返回 `stream_conflict`。
-
-```json
-{"id":"graphics_stream","method":"pane.graphics.stream","params":{"pane_id":"w1:p1"}}
-{"format":"png","image_width":800,"image_height":600,"data_length":12345,"placement":{"viewport_col":0,"viewport_row":0,"grid_cols":80,"grid_rows":30}}
-```
+外部 socket 窗格图像叠加 API 已移除:`pane.graphics.info`、`pane.graphics.set`、`pane.graphics.clear` 和 `pane.graphics.stream` 不再可用,也没有替代的 socket 图像 API。与旧服务器的内部传输协议兼容性不会恢复这些公开方法。
`pane.layout` 返回标签页布局快照,包含 `workspace_id`、`tab_id`、`zoomed`、外层 `area`、`focused_pane_id`、窗格矩形和分割矩形/比例。`pane.neighbor` 和 `pane.edges` 也包含同一份布局快照,让客户端不需要私有布局状态就能做出下一步决策。
diff --git a/docs/next/website/src/data/config-reference.json b/docs/next/website/src/data/config-reference.json
index 76318e3a..299c2ced 100644
--- a/docs/next/website/src/data/config-reference.json
+++ b/docs/next/website/src/data/config-reference.json
@@ -439,7 +439,7 @@
"key": "terminal.kitty_graphics",
"type": "boolean",
"default": "true",
- "description": "Render pane images in Kitty graphics-compatible outer terminals. Set false to disable graphics rendering and the pane graphics API. Restart the server or reattach the client after changing it. In remote sessions, server configuration controls parsing and API availability while local client configuration controls outer-terminal output."
+ "description": "Render pane images in Kitty graphics-compatible outer terminals. Applications use the standard Kitty graphics protocol through pane terminal output; the external socket pane-overlay API is no longer available. Set false to disable graphics rendering. Restart the server or reattach the client after changing it. In remote sessions, server configuration controls Kitty graphics parsing while local client configuration controls outer-terminal output."
}
]
},