Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
- **Pixel whale pet** — three startup intros, click to wake; freezes after the first task.
- **Launchpad and first-run guide** — every launch lands on a landing page with a **real input box** (big text + whale + quick actions, dropping whole blocks on short/narrow terminals); command completion matches chat: `Tab` fills the input, `Enter` runs the command and clears it. The first run walks a four-step wizard (API key / language+theme / model+workspace / shortcuts), re-runnable with `/setup`.
- **Terminal-native UI** — streaming Markdown, tool cards, `/` and `@` completion, `#L12-14` ranges, history search, zh/en UI.
- **Native cursor** — focused text inputs inherit your terminal's cursor shape, color, blinking, and enabled animation or trail effects in both inline and fullscreen modes. The `/model` picker shows the same cursor during movement between provider tabs, model rows, and effort levels, then hides it after **0.5 seconds at rest**; clipped regions fall back to the model row. Configure animation and trail effects in your terminal.
- **Native cursor** — focused text inputs inherit your terminal's cursor shape, color, blinking, and enabled animation or trail effects in both inline and fullscreen modes. The `/model` picker shows the same cursor during movement between provider tabs, model rows, and effort levels, then hides it after **0.5 seconds at rest**; clipped regions fall back to the model row. The session manager also moves this cursor between the workspace rail, session rows, and search box; typing claims the search caret, and navigation returns it to the focused row. Configure animation and trail effects in your terminal.
- **Images** — Kitty/Sixel thumbnails, centered preview with zoom and pan, paste-time fitting, text fallback.
- **Mermaid diagrams** — ````mermaid ```` fences drawn as Unicode diagrams.
- **LaTeX math** — `$…$` and `$$…$$` formulas as Unicode text, fractions and limits stacked in display blocks; `mathRendering: image` typesets block and one-row inline formulas as terminal images on graphics terminals.
Expand Down Expand Up @@ -315,7 +315,7 @@ Shortcuts sit below the title and effort levels have their own section; DSH, Cla

In `/provider`'s model list, focus a model and press `Tab` to edit its context window, max output tokens, reasoning efforts, and image input capability.

The session manager focuses the most recently used session in the current workspace; if there is no history, it focuses the new-session card. Press `←` to move to the workspace rail. It paints the last successful list immediately while it checks the persistence store for changes. This first-paint snapshot survives restarts on DSH, Claude and Codex and is isolated by backend and storage directory. Without a snapshot, all three backends prioritize the current workspace before filling in other workspaces. Claude and Codex first request up to 32 recent sessions within their native cwd scope: Claude's SDK includes Git worktrees in the same repository, while Codex matches the session cwd exactly. The browser groups sessions by their own cwd. DSH resolves the current workspace's metadata first and publishes it before reading other workspaces' logs, even when it has fewer than 32 sessions. Titles that require a deeper DSH log scan appear first with a fallback name and update in place when recovery finishes.
The session manager focuses the most recently used session in the current workspace; if there is no history, it focuses the new-session card. Moving between the workspace rail and session list preserves the selected session, including when the mouse enters the list. Switching to another workspace selects its latest session; switching back also starts from its latest session instead of restoring an earlier selection. Press `←` to move to the workspace rail. It paints the last successful list immediately while it checks the persistence store for changes. This first-paint snapshot survives restarts on DSH, Claude and Codex and is isolated by backend and storage directory. Without a snapshot, all three backends prioritize the current workspace before filling in other workspaces. Claude and Codex first request up to 32 recent sessions within their native cwd scope: Claude's SDK includes Git worktrees in the same repository, while Codex matches the session cwd exactly. The browser groups sessions by their own cwd. DSH resolves the current workspace's metadata first and publishes it before reading other workspaces' logs, even when it has fewer than 32 sessions. Titles that require a deeper DSH log scan appear first with a fallback name and update in place when recovery finishes.
With DSH's current JSONL backend, startup and `/new` keep initial permission events in memory until further session activity or an explicit durability flush saves the complete log. Restarting an unstored empty session starts fresh.
Removing a workspace registration keeps its sessions accessible under a "History only" directory in the rail.
History-only directories offer edit and new-session actions; rename and remove are available for registered workspaces.
Expand Down
4 changes: 2 additions & 2 deletions README_ZH.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
- **像素鲸鱼娘** — 开屏三选一动画,点击唤醒;开始第一个任务后定格。
- **落地页与首次引导** — 每次启动先落在带**真输入框**的落地页(大字 + 鲸鱼 + 快捷入口,窄/矮终端自动整块降级);命令补全与聊天页一致:`Tab` 填入输入框,`Enter` 执行并清空。首次运行走四步向导(API Key / 语言主题 / 模型工作区 / 快捷键),`/setup` 随时重跑。
- **终端原生界面** — 流式 Markdown、工具卡、`/` 与 `@` 补全、`#L12-14` 行区间、历史搜索、中英界面。
- **原生光标** — 聚焦的文本输入框继承终端的光标形状、颜色、闪烁及已启用的动画或拖尾效果,inline 与 fullscreen 均支持。`/model` 选择器在提供商标签、模型行和推理档位之间移动时显示同样的光标,停稳 **0.5 秒后隐藏**;区域被裁剪时回落到模型行。动画与拖尾效果在终端设置中配置。
- **原生光标** — 聚焦的文本输入框继承终端的光标形状、颜色、闪烁及已启用的动画或拖尾效果,inline 与 fullscreen 均支持。`/model` 选择器在提供商标签、模型行和推理档位之间移动时显示同样的光标,停稳 **0.5 秒后隐藏**;区域被裁剪时回落到模型行。会话管理界面也会在工作区栏、会话行与搜索框之间移动原生光标;输入时移到搜索框,导航时回到聚焦行。动画与拖尾效果在终端设置中配置。
- **图片** — Kitty/Sixel 缩略图,居中大图可缩放平移,粘贴前按限额适配,无图形时文字回退。
- **Mermaid 图表** — ```` ```mermaid ```` 代码块画成 Unicode 字符图。
- **LaTeX 公式** — `$…$` 与 `$$…$$` 公式转成 Unicode 文本,块级公式里的分数与上下限竖排;`mathRendering: image` 时在支持图形的终端里把块级公式与能压成一行的行内公式排成终端图片。
Expand Down Expand Up @@ -269,7 +269,7 @@ OpenAI 条款约束。完整操作与当前边界:[Codex 后端](docs/codex-ba

在 `/provider` 模型列表聚焦一项并按 `Tab`,可编辑上下文窗口、最大输出 token、推理档位和图片输入能力。

会话管理界面默认聚焦当前工作区最近使用的会话;没有历史时聚焦“新建会话”卡片,按 `←` 可移到工作区栏。界面会立即显示上次成功读取的列表,同时核对持久化存储的变化。DSH、Claude 和 Codex 的首屏快照都可跨重启复用,并按内核与存储目录隔离。没有快照时,三种后端都优先加载当前工作区,再补齐其他工作区。Claude 和 Codex 按各自原生的 cwd 范围先请求最近的最多 32 条会话:Claude 的 SDK 默认包含同仓库 Git worktree,Codex 则精确匹配会话 cwd。界面仍按会话自身 cwd 分组。DSH 先解析当前工作区的元数据,即使不足 32 条,也会在读取其他工作区日志前显示;需要深度扫描日志的标题会先显示回退名称,恢复完成后在原行更新。
会话管理界面默认聚焦当前工作区最近使用的会话;没有历史时聚焦“新建会话”卡片,按 `←` 可移到工作区栏。同一工作区左右切栏或鼠标移入列表会保留会话选择;换工作区时选中该工作区最新的会话,返回之前的工作区时也重新选最新会话,不记忆各工作区的旧选择。界面会立即显示上次成功读取的列表,同时核对持久化存储的变化。DSH、Claude 和 Codex 的首屏快照都可跨重启复用,并按内核与存储目录隔离。没有快照时,三种后端都优先加载当前工作区,再补齐其他工作区。Claude 和 Codex 按各自原生的 cwd 范围先请求最近的最多 32 条会话:Claude 的 SDK 默认包含同仓库 Git worktree,Codex 则精确匹配会话 cwd。界面仍按会话自身 cwd 分组。DSH 先解析当前工作区的元数据,即使不足 32 条,也会在读取其他工作区日志前显示;需要深度扫描日志的标题会先显示回退名称,恢复完成后在原行更新。
使用 DSH 当前的 JSONL 后端时,启动与 `/new` 的初始权限事件只保留在内存中;后续会话活动或显式持久化 flush 才会保存完整日志。尚未落盘的空会话重启时会重新创建。
移除工作区登记后,其历史会话仍可从侧栏的「仅历史」目录进入。
「仅历史」目录只提供编辑和新建会话操作;重命名与移除仅适用于已登记工作区。
Expand Down
6 changes: 5 additions & 1 deletion docs/interaction.en.md
Original file line number Diff line number Diff line change
Expand Up @@ -352,7 +352,7 @@ brings it back.

| Key | Action |
| --- | --- |
| `←` `→` | Choose the column that owns the keyboard (rail / sessions); exactly one `❯` is on screen |
| `←` `→` | Choose the column that owns the keyboard (rail / sessions), preserving the selected session in the same workspace; exactly one `❯` is on screen |
| `↑` `↓` / `PgUp` `PgDn` / wheel | Move in the rail; move in the session list (row 0 is the new-session card) |
| Type | Filter the selected workspace's sessions live (title, directory, branch, model) |
| `Enter` | Sessions: enter the row under the cursor (row 0 = start a session in this workspace). Rail: open that workspace's action menu |
Expand All @@ -363,6 +363,10 @@ brings it back.
| `Tab` / `Shift+Tab` | Next / previous source tab (when other agents have sessions) |
| `Esc` | Dismiss a notice → clear the filter → leave the screen |

Each workspace starts on its most recent visible session, or the new-session card if it has no matches. Changing columns or moving the mouse into the list preserves the current selection. Changing workspace chooses that workspace's newest session; returning chooses the newest again, without remembering past selections per workspace. A workspace still being loaded updates this default as rows arrive until you select a list row.

The native cursor follows the last-used region, as in the model picker: workspace navigation parks it on the workspace row, session navigation on the session row or new-session card, and typing or clicking the filter on its text caret. Row carets hide after 0.5 seconds at rest; the search caret stays visible. Animation and trail effects come from your terminal settings. Narrow layouts keep the caret on a visible target when the workspace rail is hidden. Arrow and Enter actions keep the same meaning while filtering.

The right side of the title row is the **source strip**: `DSH │ Claude Code Codex …`.

- A tab appears only for another coding agent on this machine (Claude Code, Codex, Grok Build, zcode) that has conversations, in a fixed order; with none, there is no strip. Opening the screen only checks whether each source has any conversation; a source's list is read when its tab is opened.
Expand Down
6 changes: 5 additions & 1 deletion docs/interaction.md
Original file line number Diff line number Diff line change
Expand Up @@ -344,7 +344,7 @@ Bracketed paste(右键或终端原生粘贴)保留普通文本与换行。

| 按键 | 作用 |
| --- | --- |
| `←` `→` | 切换键盘所在栏(工作区栏 / 会话栏),屏幕上永远只有一个 `❯` |
| `←` `→` | 切换键盘所在栏(工作区栏 / 会话栏),同一工作区保留会话选择,屏幕上永远只有一个 `❯` |
| `↑` `↓` / `PgUp` `PgDn` / 滚轮 | 在工作区栏移动工作区;在会话栏移动会话(第 0 行是"新建会话"卡片) |
| 直接输入 | 实时筛选当前工作区下的会话(标题、目录、分支、模型) |
| `Enter` | 会话栏:进入光标所在行(第 0 行 = 在该工作区新建会话);工作区栏:打开该工作区的操作菜单 |
Expand All @@ -366,6 +366,10 @@ Bracketed paste(右键或终端原生粘贴)保留普通文本与换行。
- 外部标签下 `Ctrl+N`、`Ctrl+X`、固定不生效;`Ctrl+L` 改为重新扫描该来源。
- 导入与 `/migrate` 用同一套解析和确定性 id,两个入口导入同一条会话得到的是同一个 DSH 会话。

每个工作区默认选中当前可见的最新会话,没有匹配会话时落在“新建会话”卡片。左右切栏或鼠标移入列表不会重置选择;换工作区时选中该工作区最新会话,返回之前的工作区时也重新选最新会话,不记忆各工作区的旧选择。尚在加载的工作区会随首批或完整列表更新默认选择,直到你主动选择会话行。

原生光标与模型选择器一样跟随最后操作的区域:导航工作区时停在工作区行,导航会话时停在会话行或“新建会话”卡片,输入或点击筛选框时移到文本光标。行光标停稳 0.5 秒后隐藏,搜索光标保持可见;动画与拖尾沿用终端设置。窄屏隐藏工作区栏后,光标会回落到可见位置。筛选期间方向键与 Enter 的作用保持一致。

工作区栏的菜单有四项:

- **编辑**:选中该工作区,右侧列出它的会话。
Expand Down
6 changes: 5 additions & 1 deletion guide/dsh-tui-guide/interaction.en.md
Original file line number Diff line number Diff line change
Expand Up @@ -352,7 +352,7 @@ brings it back.

| Key | Action |
| --- | --- |
| `←` `→` | Choose the column that owns the keyboard (rail / sessions); exactly one `❯` is on screen |
| `←` `→` | Choose the column that owns the keyboard (rail / sessions), preserving the selected session in the same workspace; exactly one `❯` is on screen |
| `↑` `↓` / `PgUp` `PgDn` / wheel | Move in the rail; move in the session list (row 0 is the new-session card) |
| Type | Filter the selected workspace's sessions live (title, directory, branch, model) |
| `Enter` | Sessions: enter the row under the cursor (row 0 = start a session in this workspace). Rail: open that workspace's action menu |
Expand All @@ -363,6 +363,10 @@ brings it back.
| `Tab` / `Shift+Tab` | Next / previous source tab (when other agents have sessions) |
| `Esc` | Dismiss a notice → clear the filter → leave the screen |

Each workspace starts on its most recent visible session, or the new-session card if it has no matches. Changing columns or moving the mouse into the list preserves the current selection. Changing workspace chooses that workspace's newest session; returning chooses the newest again, without remembering past selections per workspace. A workspace still being loaded updates this default as rows arrive until you select a list row.

The native cursor follows the last-used region, as in the model picker: workspace navigation parks it on the workspace row, session navigation on the session row or new-session card, and typing or clicking the filter on its text caret. Row carets hide after 0.5 seconds at rest; the search caret stays visible. Animation and trail effects come from your terminal settings. Narrow layouts keep the caret on a visible target when the workspace rail is hidden. Arrow and Enter actions keep the same meaning while filtering.

The right side of the title row is the **source strip**: `DSH │ Claude Code Codex …`.

- A tab appears only for another coding agent on this machine (Claude Code, Codex, Grok Build, zcode) that has conversations, in a fixed order; with none, there is no strip. Opening the screen only checks whether each source has any conversation; a source's list is read when its tab is opened.
Expand Down
6 changes: 5 additions & 1 deletion guide/dsh-tui-guide/interaction.md
Original file line number Diff line number Diff line change
Expand Up @@ -344,7 +344,7 @@ Bracketed paste(右键或终端原生粘贴)保留普通文本与换行。

| 按键 | 作用 |
| --- | --- |
| `←` `→` | 切换键盘所在栏(工作区栏 / 会话栏),屏幕上永远只有一个 `❯` |
| `←` `→` | 切换键盘所在栏(工作区栏 / 会话栏),同一工作区保留会话选择,屏幕上永远只有一个 `❯` |
| `↑` `↓` / `PgUp` `PgDn` / 滚轮 | 在工作区栏移动工作区;在会话栏移动会话(第 0 行是"新建会话"卡片) |
| 直接输入 | 实时筛选当前工作区下的会话(标题、目录、分支、模型) |
| `Enter` | 会话栏:进入光标所在行(第 0 行 = 在该工作区新建会话);工作区栏:打开该工作区的操作菜单 |
Expand All @@ -366,6 +366,10 @@ Bracketed paste(右键或终端原生粘贴)保留普通文本与换行。
- 外部标签下 `Ctrl+N`、`Ctrl+X`、固定不生效;`Ctrl+L` 改为重新扫描该来源。
- 导入与 `/migrate` 用同一套解析和确定性 id,两个入口导入同一条会话得到的是同一个 DSH 会话。

每个工作区默认选中当前可见的最新会话,没有匹配会话时落在“新建会话”卡片。左右切栏或鼠标移入列表不会重置选择;换工作区时选中该工作区最新会话,返回之前的工作区时也重新选最新会话,不记忆各工作区的旧选择。尚在加载的工作区会随首批或完整列表更新默认选择,直到你主动选择会话行。

原生光标与模型选择器一样跟随最后操作的区域:导航工作区时停在工作区行,导航会话时停在会话行或“新建会话”卡片,输入或点击筛选框时移到文本光标。行光标停稳 0.5 秒后隐藏,搜索光标保持可见;动画与拖尾沿用终端设置。窄屏隐藏工作区栏后,光标会回落到可见位置。筛选期间方向键与 Enter 的作用保持一致。

工作区栏的菜单有四项:

- **编辑**:选中该工作区,右侧列出它的会话。
Expand Down
Loading
Loading