@crazyhappyone/dsh-tui 0.1.0-alpha.50 → 0.1.0-alpha.52
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +63 -0
- package/README.md +8 -6
- package/README.zh.md +8 -6
- package/assets/screenshots/dsh-tui-settings.png +0 -0
- package/dist/index.js +1136 -856
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,68 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.1.0-alpha.52 — 2026-10-21
|
|
4
|
+
|
|
5
|
+
Prerelease for DSH `0.2.1-rc.2`; npm channel: `next`.
|
|
6
|
+
|
|
7
|
+
### Fixed
|
|
8
|
+
|
|
9
|
+
- Settings now shows a visible category tab bar, a contrasting selected row, bounded long-value details and the selected search result's source path. Narrow terminals keep the active category visible; plain-color mode retains bracket markers.
|
|
10
|
+
- Tab / Shift+Tab restores the last nested location in each category. Search supports arrow/page navigation and preserves selection when accepted. Enter changes supported booleans/choices; Right only opens nested objects. Controls describe the selected item's actual actions, and the value editor says save/cancel instead of send-message.
|
|
11
|
+
- Settings writes reject duplicate submissions and read-only quick changes while preserving official settings/credential ownership and unknown user fields.
|
|
12
|
+
|
|
13
|
+
### Verification and upgrade
|
|
14
|
+
|
|
15
|
+
- Passed 2,325 TUI tests across 174 files with two workers, 46 launcher tests, four strict TypeScript projects, five bundle builds/import checks and the npm package-content check.
|
|
16
|
+
- Production rendering in OS PTYs at 40, 80 and 120 columns passed 12 steps each: category navigation, location restoration, search selection, editing/saving and long-value cancellation. The catalog used synthetic services with 25 providers and 65 models per provider. See the [verification and screenshots](docs/settings-usability-2026-10-21/verification.md).
|
|
17
|
+
- Update with `npm install --global @crazyhappyone/dsh-tui@next`, then relaunch. Source-linked installations can use `/reload` once the new bundle is available. The official profile and configuration services remain authoritative; no migration is required.
|
|
18
|
+
- Tabs use Tab / Shift+Tab; this release does not add mouse-click tab controls. PTY checks do not establish live model authentication or every physical terminal's behavior.
|
|
19
|
+
|
|
20
|
+
### 中文变更说明
|
|
21
|
+
|
|
22
|
+
- 设置增加可见分类选项卡、选中行背景、长值详情和搜索结果来源路径;窄屏保留当前分类,无色模式也可识别选中项。
|
|
23
|
+
- Tab / Shift+Tab 切换分类并恢复深层位置;搜索中可用方向键/翻页,确认搜索保留选择。Enter 快速切换支持的布尔/枚举值,右方向键仅进入分支;编辑框明确显示保存/取消。
|
|
24
|
+
- 保存期间防止重复写入或切换编辑位置,禁止只读项快速修改;继续使用 DSH 官方 settings/credentials 服务并保留未知字段。
|
|
25
|
+
- 验证:174 个文件、2,325 项 TUI 测试、46 项 launcher 测试、4 个严格类型检查项目及构建/打包通过;40/80/120 列 OS PTY 各完成 12 个操作检查点,服务与目录数据为合成 fixture。
|
|
26
|
+
- 升级:`npm install --global @crazyhappyone/dsh-tui@next` 后重新启动;源码链接安装可在新 bundle 就绪后 `/reload`。分类切换使用 Tab / Shift+Tab,本版未新增鼠标点击分类控件。
|
|
27
|
+
|
|
28
|
+
[Full comparison](https://github.com/zhangyang-crazy-one/dsh-tui/compare/v0.1.0-alpha.51...v0.1.0-alpha.52)
|
|
29
|
+
|
|
30
|
+
## 0.1.0-alpha.51 — 2026-10-21
|
|
31
|
+
|
|
32
|
+
Prerelease for DSH `0.2.1-rc.2`; npm channel: `next`.
|
|
33
|
+
|
|
34
|
+
### Fixed
|
|
35
|
+
|
|
36
|
+
- Streamed transcript cells now have one physical painter. Ink reserves the slot and paints chrome; sparse incremental frames, pane transitions and resize restore or release that slot without retaining old prose in blank rows. HUD and input-height changes clear the old transcript area and paint the new layout in the same synchronized frame, preventing text from leaking below the transcript during unattended streaming.
|
|
37
|
+
- Mouse wheel and touchpad reports land at their target without row-by-row catch-up. Reports received before a React commit retain their combined movement, and scrolling no longer rerenders the parent loop for every report. Scroll latency is measured through the matching stdout callback.
|
|
38
|
+
- Render-store budgets use incremental row/byte totals and resident LRU order instead of repeatedly scanning all historical lines. Markdown settlement uses a source index to avoid repeatedly searching the full history.
|
|
39
|
+
- `/settings` now browses category → namespace → provider/object → model/array → fields. Search, back navigation and successful edits retain location/selection; nested edits preserve unknown user fields through the official settings service. Narrow layouts reserve space for values and actions.
|
|
40
|
+
- [#14](https://github.com/zhangyang-crazy-one/dsh-tui/issues/14): discard transient text from failed `assistant/attempt` streams, keeping live history consistent with durable replay. Successful retries and officially committed interrupted messages remain visible.
|
|
41
|
+
- [#15](https://github.com/zhangyang-crazy-one/dsh-tui/issues/15): restore SSH port-forward instructions when reopening an in-progress DeepSeek login. Automatic browser opening now checks the actual SSH environment; explicit `o` still opens the link.
|
|
42
|
+
- [#16](https://github.com/zhangyang-crazy-one/dsh-tui/issues/16): resolve file-panel relative paths against the current Session directory after `/cd`, with configured-cwd/filesystem fallback. Absolute paths and the previous root on failure retain their behavior.
|
|
43
|
+
|
|
44
|
+
### Verification and upgrade
|
|
45
|
+
|
|
46
|
+
- Passed 2,299 TUI tests across 173 files with two workers, 46 launcher tests, four strict TypeScript projects, five bundle builds/import checks and the npm package-content check.
|
|
47
|
+
- Production rendering in an OS PTY with synthetic services produced 2,928 completed frames. Of these, 2,812 had transcript snapshots for comparison: 77,558 physical rows, zero mismatches and zero transcript leaks into the input/HUD area. Initialization/layout transitions without snapshots were not counted as comparison passes.
|
|
48
|
+
- In the recorded 120×40 PTY fixture, a nine-line wheel burst reached its target in 17.93 ms instead of 168.07 ms. At 60 Hz, React commits fell from 175 to 60 and output from 804,570 to 307,651 bytes. These measurements depend on the fixture and machine; they do not measure physical touchpad or display latency. See the [verification report](docs/performance-audit-2026-10-21/fix-verification.md).
|
|
49
|
+
- Upgrade with `npm install --global @crazyhappyone/dsh-tui@next`, then relaunch. Source-linked installations can use `/reload` after the new bundle is available. The official `deepseek-tui` profile and settings/credential services remain authoritative; no configuration migration is required.
|
|
50
|
+
- Live model authentication and physical-device rendering were not part of this offline/PTY verification. Full TUI tests used two workers after timing-sensitive failures under high concurrency; assertions were not relaxed.
|
|
51
|
+
|
|
52
|
+
### 中文变更说明
|
|
53
|
+
|
|
54
|
+
- 修复无操作流式输出的重复正文、空白行残影及终端光标定位;聊天内容统一由物理帧绘制。切换面板、调整尺寸及 HUD/输入区高度变化时,在同步帧中清理旧正文区域,防止正文穿插到下方。
|
|
55
|
+
- 修复滚轮/触控板逐行追赶和同批输入只保留最后一次的问题;滚动直接进入视口,延迟统计到对应 stdout 写入回调为止。
|
|
56
|
+
- 历史渲染缓存改用增量行数/字节统计和驻留 LRU,移除预算检查中的反复全量扫描。
|
|
57
|
+
- 设置改为分类、namespace、Provider/对象、model/数组、字段的逐级浏览;支持搜索、返回和保存后停留。继续使用官方配置接口,保留未知字段,窄屏为值和操作预留空间。
|
|
58
|
+
- 修复失败流式片段残留为普通消息,保证实时历史与持久化回放一致;保留成功重试和官方已提交的中断消息。
|
|
59
|
+
- 修复 SSH 登录页关闭重开后丢失转发命令、错误自动打开远端浏览器;显式按 `o` 仍可打开链接。
|
|
60
|
+
- 修复 `/cd` 后文件面板相对路径仍使用启动目录;改用当前会话目录,保留绝对路径及失败时原目录。
|
|
61
|
+
- 验证:2,299 项 TUI 测试、46 项 launcher 测试、4 个严格类型检查项目及构建/打包通过;2,812 个有快照的 PTY 比较帧覆盖 77,558 行,正文不一致与越界均为 0。完整 TUI 测试限制为 2 个 worker,未放宽断言;不将 PTY 合成数据视为在线认证或真实设备验收。
|
|
62
|
+
- 升级:`npm install --global @crazyhappyone/dsh-tui@next` 后重新启动;源码链接安装可在新 bundle 就绪后 `/reload`。继续使用官方 profile 与配置服务,无需迁移配置。
|
|
63
|
+
|
|
64
|
+
[Full comparison](https://github.com/zhangyang-crazy-one/dsh-tui/compare/v0.1.0-alpha.50...v0.1.0-alpha.51)
|
|
65
|
+
|
|
3
66
|
## 0.1.0-alpha.50 — 2026-10-21
|
|
4
67
|
|
|
5
68
|
Prerelease for DSH `0.2.1-rc.2`; npm channel: `next`. The changes below include the unreleased work since `0.1.0-alpha.49`.
|
package/README.md
CHANGED
|
@@ -15,9 +15,9 @@ English | [中文](README.zh.md)
|
|
|
15
15
|
|
|
16
16
|
`@crazyhappyone/dsh-tui` is a terminal interface for DeepSeek Harness (dsh), shipped as a dsh **plugin bundle** plus a `dsh-tui` launcher. The package declares `dsh.bundle`, so dsh installs it into a profile like any other plugin; the launcher only automates that install and boots the profile. This repository owns the plugin sources (`tui/`, `tui-render/`). DSH continues to own agents, sessions, tools, persistence, providers, permissions, and profile assembly.
|
|
17
17
|
|
|
18
|
-
## Release 0.1.0-alpha.
|
|
18
|
+
## Release 0.1.0-alpha.52
|
|
19
19
|
|
|
20
|
-
This prerelease targets DSH `0.2.1-rc.2`.
|
|
20
|
+
This prerelease targets DSH `0.2.1-rc.2`. Settings now shows category tabs, a contrasting selected row, long-value details and clear save/cancel controls. Switching categories remembers the last nested location; search preserves selection, and pending settings writes reject duplicate submissions. See the [changelog](CHANGELOG.md#010-alpha52--2026-10-21) for the full changes and verification boundaries.
|
|
21
21
|
|
|
22
22
|
```sh
|
|
23
23
|
npm install --global @crazyhappyone/dsh-tui@next
|
|
@@ -31,9 +31,11 @@ Earlier lightweight versions used `tui`, while source mode used `deepseek-tui`.
|
|
|
31
31
|
|
|
32
32
|
For a running source-linked installation, `/reload` loads the rebuilt bundle but preserves that process's selected profile. To change from `tui` to `deepseek-tui`, quit and launch again (or pass the desired profile explicitly). Resumed Goals require `/goal resume` to enable automatic continuation.
|
|
33
33
|
|
|
34
|
+
In `/settings`, Tab / Shift+Tab switches categories and restores each category's location. Enter opens a namespace, provider or model, edits a field, or changes a supported boolean/choice. ←/Esc returns one level and closes at the category root; `/` searches; `i` edits an editable object's JSON; Space also changes supported values. While searching, arrows and page keys move through results, Enter accepts the search without resetting selection, and Esc clears it. Successful edits stay in place and use DSH's official settings/credential services. Tabs are operated with the keyboard. See the [verification and screenshots](docs/settings-usability-2026-10-21/verification.md) for the 40/80/120-column PTY checks and their limits.
|
|
35
|
+
|
|
34
36
|
## Table of Contents
|
|
35
37
|
|
|
36
|
-
- [Release and upgrade](#release-010-
|
|
38
|
+
- [Release and upgrade](#release-010-alpha52)
|
|
37
39
|
- [Changelog](CHANGELOG.md)
|
|
38
40
|
- [Terminal capabilities](#terminal-capabilities)
|
|
39
41
|
- [Screenshots](#screenshots)
|
|
@@ -52,7 +54,7 @@ For a running source-linked installation, `/reload` loads the rebuilt bundle but
|
|
|
52
54
|
<a id="screenshots"></a>
|
|
53
55
|
## Screenshots
|
|
54
56
|
|
|
55
|
-
|
|
57
|
+
Settings category tabs and nested provider navigation (`/settings`, 80-column OS PTY with a synthetic catalog):
|
|
56
58
|
|
|
57
59
|

|
|
58
60
|
|
|
@@ -190,10 +192,10 @@ Clipboard image paste uses `pngpaste -` on macOS ([installation: `brew install p
|
|
|
190
192
|
|
|
191
193
|
### DeepSeek account, models, and working directory
|
|
192
194
|
|
|
193
|
-
- `/login` opens the DeepSeek account page when dsh mounts the `deepseek-account` service: Enter starts browser sign-in, `o` reopens the authorization link, `c` cancels, and the page shows the profile and balance once signed in. The browser returns to the bundle's `webserver` row on `127.0.0.1` with an OS-assigned port. Over SSH the page prints the `ssh -L` forward instead of opening a browser; pin `port` on the `webserver` row so the forward stays stable. Without the account service, `/login` and `/key` open the API-key editor.
|
|
195
|
+
- `/login` opens the DeepSeek account page when dsh mounts the `deepseek-account` service: Enter starts browser sign-in, `o` reopens the authorization link, `c` cancels, and the page shows the profile and balance once signed in. The browser returns to the bundle's `webserver` row on `127.0.0.1` with an OS-assigned port. Over SSH the page prints the `ssh -L` forward instead of opening a browser; pin `port` on the `webserver` row so the forward stays stable. Closing and reopening this page retains the active attempt and restores its forwarding instructions; `o` opens the link only when explicitly requested. Without the account service, `/login` and `/key` open the API-key editor.
|
|
194
196
|
- `/logout` signs out after confirmation; stored API keys remain.
|
|
195
197
|
- `/model` lists `deepseek-account` and `deepseek-official` with the step that makes their models available (`/login` or `/key`) while their catalogs are empty, and refuses to select such a row.
|
|
196
|
-
- `/cd [path]` shows or changes the Session working directory on dsh 0.2.1 and later. The header, `@` mentions, and `/files` follow it, and the model receives the change notice; existing shells keep their own directories.
|
|
198
|
+
- `/cd [path]` shows or changes the Session working directory on dsh 0.2.1 and later. The header, `@` mentions, and `/files` follow it, including relative paths entered in the file panel, and the model receives the change notice; existing shells keep their own directories.
|
|
197
199
|
- `/plugins` lists official bundles in their own group. An official catalog entry whose files are not installed is marked installable, and Space opens the install preview for its exact target.
|
|
198
200
|
|
|
199
201
|
### OpenCode Zen free models
|
package/README.zh.md
CHANGED
|
@@ -15,9 +15,9 @@ kind: "package-group"
|
|
|
15
15
|
|
|
16
16
|
`@crazyhappyone/dsh-tui` 是 DeepSeek Harness(dsh)的终端界面,以 dsh **插件 bundle** 加 `dsh-tui` launcher 的形式发布。包声明了 `dsh.bundle`,因此 dsh 会像安装其他插件一样把它装进 profile;launcher 只负责自动完成这一安装并启动 profile。本仓库拥有插件源码(`tui/`、`tui-render/`)。Agent、会话、工具、持久化、provider、权限与 profile 组装仍由 DSH 拥有。
|
|
17
17
|
|
|
18
|
-
## 0.1.0-alpha.
|
|
18
|
+
## 0.1.0-alpha.52 版本
|
|
19
19
|
|
|
20
|
-
本预发布版面向 DSH `0.2.1-rc.2
|
|
20
|
+
本预发布版面向 DSH `0.2.1-rc.2`,设置增加可见分类栏、选中行背景、长值详情和明确的保存/取消提示。切换分类记忆深层位置,搜索确认保留选择,保存期间防止重复提交。完整变更与验证边界见 [changelog](CHANGELOG.md#010-alpha52--2026-10-21)。
|
|
21
21
|
|
|
22
22
|
```sh
|
|
23
23
|
npm install --global @crazyhappyone/dsh-tui@next
|
|
@@ -31,9 +31,11 @@ dsh-tui
|
|
|
31
31
|
|
|
32
32
|
正在运行的源码链接安装可通过 `/reload` 加载新构建,但会保留进程原先选中的 profile。若从 `tui` 切换到 `deepseek-tui`,需退出后重新启动,或显式指定 profile。恢复的 Goal 需执行 `/goal resume` 才会自动续跑。
|
|
33
33
|
|
|
34
|
+
在 `/settings` 中,Tab / Shift+Tab 切换分类并恢复各分类的位置;Enter 进入 namespace、Provider 或 model,编辑字段或切换支持的布尔/枚举值。←/Esc 返回上层,在分类根部关闭面板;`/` 搜索;`i` 编辑可修改对象的 JSON;Space 也可切换支持的值。搜索中可用方向键和翻页键移动结果,Enter 确认时保留选择,Esc 清除搜索。保存后停留原位,继续使用 DSH 官方 settings/credentials 服务。分类栏通过键盘操作。40/80/120 列 PTY 检查与边界见[验证记录及截图](docs/settings-usability-2026-10-21/verification.md)。
|
|
35
|
+
|
|
34
36
|
## 目录
|
|
35
37
|
|
|
36
|
-
- [版本与升级](#010-
|
|
38
|
+
- [版本与升级](#010-alpha52-版本)
|
|
37
39
|
- [Changelog](CHANGELOG.md)
|
|
38
40
|
- [终端能力](#终端能力)
|
|
39
41
|
- [截图](#screenshots)
|
|
@@ -52,7 +54,7 @@ dsh-tui
|
|
|
52
54
|
<a id="screenshots"></a>
|
|
53
55
|
## 截图
|
|
54
56
|
|
|
55
|
-
|
|
57
|
+
设置分类栏与 Provider 多级导航(`/settings`,80 列 OS PTY,合成目录数据):
|
|
56
58
|
|
|
57
59
|

|
|
58
60
|
|
|
@@ -190,10 +192,10 @@ TUI 是 dsh 插件 bundle,不是 fork,也不是独立的 agent 运行时:
|
|
|
190
192
|
|
|
191
193
|
### DeepSeek 账号、模型与工作目录
|
|
192
194
|
|
|
193
|
-
- 当 dsh 挂载 `deepseek-account` 服务时,`/login` 打开 DeepSeek 账号页:Enter 发起浏览器登录,`o` 重新打开授权链接,`c` 取消;登录后页面显示账号资料与余额。浏览器回调到本 bundle 的 `webserver` 行,监听 `127.0.0.1` 上由系统分配的端口。通过 SSH 使用时,页面显示 `ssh -L` 端口转发命令而不打开浏览器;在 `webserver` 行固定 `port`
|
|
195
|
+
- 当 dsh 挂载 `deepseek-account` 服务时,`/login` 打开 DeepSeek 账号页:Enter 发起浏览器登录,`o` 重新打开授权链接,`c` 取消;登录后页面显示账号资料与余额。浏览器回调到本 bundle 的 `webserver` 行,监听 `127.0.0.1` 上由系统分配的端口。通过 SSH 使用时,页面显示 `ssh -L` 端口转发命令而不打开浏览器;在 `webserver` 行固定 `port` 可让转发保持稳定。关闭重开页面会继续已有登录并恢复转发提示;按 `o` 才显式打开链接。未挂载账号服务时,`/login` 与 `/key` 打开 API 密钥编辑器。
|
|
194
196
|
- `/logout` 确认后退出登录,已保存的 API 密钥保留。
|
|
195
197
|
- `/model` 在 `deepseek-account` 与 `deepseek-official` 目录为空时列出它们,并注明使模型可用的步骤(`/login` 或 `/key`),且拒绝选中此类行。
|
|
196
|
-
- `/cd [路径]` 在 dsh 0.2.1 及以后版本查看或切换会话工作目录。顶栏、`@` 提及与 `/files`
|
|
198
|
+
- `/cd [路径]` 在 dsh 0.2.1 及以后版本查看或切换会话工作目录。顶栏、`@` 提及与 `/files` 随之切换,文件面板输入的相对路径也以当前会话目录为基准;模型会收到变更通知;已有 shell 保留各自的目录。
|
|
197
199
|
- `/plugins` 将官方 bundle 单独分组。文件尚未安装的官方目录条目标记为可安装,按 Space 打开其精确安装目标的安装预览。
|
|
198
200
|
|
|
199
201
|
### OpenCode Zen 免费模型
|
|
Binary file
|