@xmoon76/dsh-pi-tui 0.4.0 → 0.4.1

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/README.en.md CHANGED
@@ -9,24 +9,96 @@ A Pi-style terminal frontend for [DeepSeek Harness](https://github.com/deepseek-
9
9
 
10
10
  `dsh-pi-tui` is installed as an independent dsh bundle inside a profile. It provides terminal interaction for streaming conversations, tool calls, session management, subagents, history search, shell commands, approvals, and settings. Models, tools, Sessions, permissions, Skills, Plan, Goal, and Subagent runtime behavior are still provided by DeepSeek Harness.
11
11
 
12
+ ![dsh-pi-tui](docs/dsh-pi-tui.png)
13
+
14
+ ## Install into a DSH profile
15
+
16
+ ### Stable / latest
17
+
18
+ Stable releases are recommended for ordinary users. Install DSH first, then add
19
+ the TUI to the `pi-tui` profile:
20
+
21
+ ```sh
22
+ npm install -g @deepseek-ai/dsh@0.1.2-rc.1
23
+ dsh plugin --profile pi-tui -- add @xmoon76/dsh-pi-tui@latest
24
+ dsh --profile pi-tui
25
+ ```
26
+
27
+ ### Preview / next
28
+
29
+ Preview releases contain unreleased changes. Use this channel only when you need
30
+ to try or validate a prerelease:
31
+
12
32
  ```sh
13
33
  dsh plugin --profile pi-tui -- add @xmoon76/dsh-pi-tui@next
14
34
  dsh --profile pi-tui
15
35
  ```
16
36
 
17
- ![dsh-pi-tui](docs/dsh-pi-tui.png)
37
+ ### Requirements
18
38
 
19
- ## DSH compatibility and source validation
39
+ * DeepSeek Harness
40
+ * Node.js `^22.19.0 || >=24`
20
41
 
21
- The published package declares the lower-bound-only DSH peer contract `>=0.1.2-rc.1`. Source validation does not change that contract or vendor DSH into this repository.
42
+ ### DSH/TUI version pairing (important)
22
43
 
23
- When the target DSH version is not yet available from npm, validate against the official checkout pinned by commit SHA:
44
+ | TUI package line | Matching DSH line | Notes |
45
+ |---|---|---|
46
+ | `0.4.1` (`@latest`) | `>=0.1.2-rc.1` | Current stable; validated against the rc.1 family |
47
+ | `0.4.x-alpha` (`@next`) | `>=0.1.2-rc.1` | Subsequent prerelease; each release validates its concrete DSH family |
48
+ | `0.4.0-alpha.2` (published) | `>=0.1.2-alpha.4` | Previous 0.4 prerelease; its releases validated the alpha.4/alpha.5 family |
49
+ | `0.4.0-alpha.1` (published) | `>=0.1.2-alpha.2` | Earlier 0.4 prerelease; accepts the alpha.2/alpha.3 runtime |
50
+ | `0.3.x` (`@0.3`) | `0.1.1-rc.2` | Legacy runtime line |
51
+
52
+ Do not mix the lines: DSH 0.1.1 is outside the 0.4 peer window and the
53
+ normal incompatible-runtime boundary will fail. The startup row prints upgrade
54
+ and rollback guidance when concurrent Loader ordering allows it, but that
55
+ friendly notice is best-effort rather than a startup-order guarantee. If you
56
+ keep DSH 0.1.1, use the 0.3 TUI line; if you keep the alpha.2/alpha.3
57
+ baseline, use `@xmoon76/dsh-pi-tui@0.4.0-alpha.1`; if you keep the
58
+ alpha.4/alpha.5 baseline, use `@xmoon76/dsh-pi-tui@0.4.0-alpha.2`. The stable
59
+ installation path is documented above under “Install into a DSH profile”; if
60
+ you need to keep the legacy DSH runtime, use this compatibility recovery path:
24
61
 
25
62
  ```sh
26
- pnpm compat:dsh:source -- --dsh-dir "$HOME/project/deepseek-harness"
63
+ npm install -g @deepseek-ai/dsh@0.1.1-rc.2
64
+ dsh plugin --profile pi-tui -- add @xmoon76/dsh-pi-tui@0.3
65
+ dsh --profile pi-tui
27
66
  ```
28
67
 
29
- CI follows the tracked `test/compat/dsh-mode.json` policy for pushes to `next` and pull requests targeting `next`; `main` and every tag use npm Mode. Both `next` lanes use `test/compat/dsh-source.json` for the current validated DSH target; Source Mode validates the complete official DSH tarball family, TUI presets, and the old-runtime boundary, while npm Mode runs the frozen registry lane. The published `pi2dsh` ecosystem check is explicitly marked skipped for an unpublished source family. See [`docs/dsh-compatibility.md`](docs/dsh-compatibility.md) for the full workflow.
68
+ The current 0.4 line declares `>=0.1.2-rc.1`; each release validates
69
+ its concrete DSH family. `npm install -g` is only for installing DSH itself; to
70
+ install dsh-pi-tui into a DSH profile, you must use the `dsh plugin` command.
71
+
72
+ New agent sessions use the official roster's selected preset id. A custom DSH
73
+ preset literally named `code` is valid and remains `code` when it exists in the
74
+ current roster. Old persisted `code` defaults/session values fall back to `ptc`
75
+ only after the roster proves that no custom `code` preset exists.
76
+
77
+ ### Profile management
78
+
79
+ Update the installed TUI:
80
+
81
+ ```sh
82
+ dsh plugin --profile pi-tui -- update @xmoon76/dsh-pi-tui
83
+ ```
84
+
85
+ List installed plugins:
86
+
87
+ ```sh
88
+ dsh plugin --profile pi-tui -- list
89
+ ```
90
+
91
+ Remove the plugin:
92
+
93
+ ```sh
94
+ dsh plugin --profile pi-tui -- remove @xmoon76/dsh-pi-tui
95
+ ```
96
+
97
+ Resume an existing Session:
98
+
99
+ ```sh
100
+ dsh --profile pi-tui --session <session-id>
101
+ ```
30
102
 
31
103
  ## Features
32
104
 
@@ -94,7 +166,8 @@ Regular `↑` / `↓` history recall is still available for recent input.
94
166
 
95
167
  ### Subagents and background tasks
96
168
 
97
- `/tasks` opens the task browser for the current Session.
169
+ `/tasks` opens the full Task Center for all background work in the current
170
+ Session; the Footer's `↓` opens the lightweight Quick Tasks view for running work.
98
171
 
99
172
  Subagents are shown using their complete lineage, including nested descendants:
100
173
 
@@ -113,6 +186,12 @@ The browser distinguishes:
113
186
  * nested descendants
114
187
  * background Jobs
115
188
 
189
+ The two views share the same runtime state: `A` toggles Active / All scope,
190
+ `Tab` changes type filters, `/` enters search, `S` stops the selected task after
191
+ confirmation, and `N` / `Shift+N` moves between running tasks. In Quick Tasks,
192
+ `T` or the bottom “View all” row opens the full Task Center, and `Esc` returns
193
+ one layer at a time.
194
+
116
195
  Completed one-shot Subagents remain available for persisted Transcript inspection.
117
196
 
118
197
  A direct `continuable` Child can be opened in an interactive viewer and sent follow-up messages directly (through DSH's official `subagents.prompt()` human channel — queued in order as the Child's own next turn, with user provenance). The Child has its own Transcript, Draft, and runtime state, without modifying the main Session input.
@@ -219,8 +298,8 @@ For the full `/footer` workflow, Custom Text / Command items, YAML reference, se
219
298
  | `Shift+Enter` | Insert newline |
220
299
  | `Esc` | Cancel current interaction / interrupt running work |
221
300
  | `Esc Esc` | Open Rewind while idle |
222
- | `Ctrl+C` | Interrupt / clear current input |
223
- | `Ctrl+D` | Quit the TUI (like `/exit`) |
301
+ | `Ctrl+C` | Keyboard exit confirmation; clears the draft first |
302
+ | `Ctrl+D` | Keyboard exit confirmation when empty; forward-delete with draft text |
224
303
  | `Ctrl+S` | Steer queued messages and the draft into the running turn |
225
304
  | `Ctrl+T` | Toggle the todo panel |
226
305
  | `Ctrl+R` | Search input history |
@@ -308,102 +387,6 @@ dsh-pi-tui:
308
387
  works; only `false` removes every trigger of an action.
309
388
 
310
389
 
311
- ## Installation
312
-
313
- ### Requirements
314
-
315
- * DeepSeek Harness
316
- * Node.js `^22.19.0 || >=24`
317
-
318
- ### DSH/TUI version pairing (important)
319
-
320
- | TUI package line | Matching DSH line | Notes |
321
- |---|---|---|
322
- | `0.4.0` (`@latest`) | `>=0.1.2-rc.1` | Current stable; validated against the rc.1 family |
323
- | `0.4.x-alpha` (`@next`) | `>=0.1.2-rc.1` | Subsequent prerelease; each release validates its concrete DSH family |
324
- | `0.4.0-alpha.2` (published) | `>=0.1.2-alpha.4` | Previous 0.4 prerelease; its releases validated the alpha.4/alpha.5 family |
325
- | `0.4.0-alpha.1` (published) | `>=0.1.2-alpha.2` | Earlier 0.4 prerelease; accepts the alpha.2/alpha.3 runtime |
326
- | `0.3.x` (`@0.3`) | `0.1.1-rc.2` | Legacy runtime line |
327
-
328
- Do not mix the lines: DSH 0.1.1 is outside the 0.4 peer window and the
329
- normal incompatible-runtime boundary will fail. The startup row prints upgrade
330
- and rollback guidance when concurrent Loader ordering allows it, but that
331
- friendly notice is best-effort rather than a startup-order guarantee. If you
332
- keep DSH 0.1.1, use the 0.3 TUI line; if you keep the alpha.2/alpha.3
333
- baseline, use `@xmoon76/dsh-pi-tui@0.4.0-alpha.1`; if you keep the
334
- alpha.4/alpha.5 baseline, use `@xmoon76/dsh-pi-tui@0.4.0-alpha.2`. For the
335
- current 0.4 stable release, install the matching DSH first and then add the
336
- TUI to a profile:
337
-
338
- ```sh
339
- npm install -g @deepseek-ai/dsh@0.1.2-rc.1
340
- dsh plugin --profile pi-tui -- add @xmoon76/dsh-pi-tui@latest
341
- dsh --profile pi-tui
342
- ```
343
-
344
- If you need to keep the legacy DSH runtime:
345
-
346
- ```sh
347
- npm install -g @deepseek-ai/dsh@0.1.1-rc.2
348
- dsh plugin --profile pi-tui -- add @xmoon76/dsh-pi-tui@0.3
349
- dsh --profile pi-tui
350
- ```
351
-
352
- The current 0.4 line declares `>=0.1.2-rc.1`; each release validates
353
- its concrete DSH family. Running only `npm install -g @xmoon76/dsh-pi-tui` does
354
- not install the plugin into a DSH profile; the `dsh plugin` command is still
355
- required.
356
-
357
- New agent sessions use the official roster's selected preset id. A custom DSH
358
- preset literally named `code` is valid and remains `code` when it exists in the
359
- current roster. Old persisted `code` defaults/session values fall back to `ptc`
360
- only after the roster proves that no custom `code` preset exists.
361
-
362
- ### npm
363
-
364
- Using a dedicated `pi-tui` profile is recommended. Use the TUI channel that
365
- matches your DSH line: `@latest` for stable releases, `@next` for prereleases:
366
-
367
- ```sh
368
- dsh plugin --profile pi-tui -- add @xmoon76/dsh-pi-tui@latest
369
- dsh --profile pi-tui
370
- ```
371
-
372
- Resume an existing Session:
373
-
374
- ```sh
375
- dsh --profile pi-tui --session <session-id>
376
- ```
377
-
378
- ### Source Mode (validation only)
379
-
380
- Source Mode is the validation-only distribution selected by the tracked policy for `next` CI and available for local compatibility checks. It reads the full commit pin in `test/compat/dsh-source.json`, builds the official DSH tarball family, installs it through temporary pnpm overrides, and removes the temporary state afterward. Do not write DSH source paths, `file:` dependencies, or workspace symlinks into a published package.
381
-
382
- ```sh
383
- pnpm compat:dsh:source -- --dsh-dir "$HOME/project/deepseek-harness"
384
- pnpm compat:dsh:npm
385
- ```
386
-
387
- The published package already contains the Pi TUI fork required at runtime. No separate internal TUI package needs to be installed.
388
-
389
- ### Update
390
-
391
- ```sh
392
- dsh plugin --profile pi-tui -- update @xmoon76/dsh-pi-tui
393
- ```
394
-
395
- List installed plugins:
396
-
397
- ```sh
398
- dsh plugin --profile pi-tui -- list
399
- ```
400
-
401
- Remove:
402
-
403
- ```sh
404
- dsh plugin --profile pi-tui -- remove @xmoon76/dsh-pi-tui
405
- ```
406
-
407
390
  ## Running from source
408
391
 
409
392
  ```sh
@@ -566,6 +549,25 @@ dsh plugin --profile pi-tui-dev -- add @xmoon76/dsh-pi-tui@link:$PWD
566
549
  dsh --profile pi-tui-dev
567
550
  ```
568
551
 
552
+ ## DSH compatibility and validation
553
+
554
+ This section contains Source Mode and CI validation details only; ordinary users do not need Source Mode to install the TUI.
555
+
556
+ ### Source Mode (validation only)
557
+
558
+ Source Mode is the validation-only distribution selected by the tracked policy for `next` CI and available for local compatibility checks. It reads the full commit pin in `test/compat/dsh-source.json`, builds the official DSH tarball family, installs it through temporary pnpm overrides, and removes the temporary state afterward. Do not write DSH source paths, `file:` dependencies, or workspace symlinks into a published package.
559
+
560
+ ```sh
561
+ pnpm compat:dsh:source -- --dsh-dir "$HOME/project/deepseek-harness"
562
+ pnpm compat:dsh:npm
563
+ ```
564
+
565
+ The published package already contains the Pi TUI fork required at runtime. No separate internal TUI package needs to be installed.
566
+
567
+ ### CI validation policy
568
+
569
+ CI follows the tracked `test/compat/dsh-mode.json` policy for pushes to `next` and pull requests targeting `next`; `main` and every tag use npm Mode. Both `next` lanes use `test/compat/dsh-source.json` for the current validated DSH target; Source Mode validates the complete official DSH tarball family, TUI presets, and the old-runtime boundary, while npm Mode runs the frozen registry lane. The published `pi2dsh` ecosystem check is explicitly marked skipped for an unpublished source family. See [`docs/dsh-compatibility.md`](docs/dsh-compatibility.md) for the full workflow.
570
+
569
571
  ## Repository layout
570
572
 
571
573
  The repository root is the npm package published as `@xmoon76/dsh-pi-tui`.
package/README.md CHANGED
@@ -9,24 +9,92 @@
9
9
 
10
10
  `dsh-pi-tui` 作为独立的 dsh bundle 安装到 profile 中,提供流式对话、工具调用、会话管理、Subagent、历史搜索、Shell、审批与设置等终端交互。模型、工具、Session、权限、Skills、Plan、Goal、Subagent 等运行时能力仍由 DeepSeek Harness 提供。
11
11
 
12
+ ![dsh-pi-tui](docs/dsh-pi-tui.png)
13
+
14
+ ## 安装到 DSH Profile
15
+
16
+ ### Stable / latest
17
+
18
+ 稳定版是普通用户的推荐渠道。请先安装 DSH,再将 TUI 添加到 `pi-tui` profile:
19
+
20
+ ```sh
21
+ npm install -g @deepseek-ai/dsh@0.1.2-rc.1
22
+ dsh plugin --profile pi-tui -- add @xmoon76/dsh-pi-tui@latest
23
+ dsh --profile pi-tui
24
+ ```
25
+
26
+ ### Preview / next
27
+
28
+ 预览版包含未发布的变更,仅在需要体验或验证预发布版本时使用:
29
+
12
30
  ```sh
13
31
  dsh plugin --profile pi-tui -- add @xmoon76/dsh-pi-tui@next
14
32
  dsh --profile pi-tui
15
33
  ```
16
34
 
17
- ![dsh-pi-tui](docs/dsh-pi-tui.png)
35
+ ### 环境要求
18
36
 
19
- ## DSH 兼容性与源码验证
37
+ * DeepSeek Harness
38
+ * Node.js `^22.19.0 || >=24`
20
39
 
21
- 发布包通过 `package.json` peer contract 使用 DSH `>=0.1.2-rc.1`;源码验证不会修改这个发布契约,也不会把 DSH vendor 进本仓库。
40
+ ### DSH 与 TUI 版本对应(重要)
22
41
 
23
- 当目标 DSH 版本尚未发布到 npm 时,可以用固定 commit 的官方源码包做本地验证:
42
+ | TUI 包版本 | 对应 DSH 版本 | 说明 |
43
+ |---|---|---|
44
+ | `0.4.1`(`@latest`) | `>=0.1.2-rc.1` | 当前稳定版;按 0.1.2-rc.1 family 验证 |
45
+ | `0.4.x-alpha`(`@next`) | `>=0.1.2-rc.1` | 后续预发布线;按每个发布版本的具体 DSH family 验证 |
46
+ | `0.4.0-alpha.2`(已发布) | `>=0.1.2-alpha.4` | 上一条 0.4 预发布线;其发布版本按 alpha.4/alpha.5 family 验证 |
47
+ | `0.4.0-alpha.1`(已发布) | `>=0.1.2-alpha.2` | 更早的 0.4 预发布线;接受 alpha.2/alpha.3 运行时 |
48
+ | `0.3.x`(`@0.3`) | `0.1.1-rc.2` | 旧运行时兼容线 |
49
+
50
+ 不要把两条线混装:DSH 0.1.1 不在 0.4 的 peer 支持范围内,运行时会在
51
+ 正常的不兼容边界以非零状态失败。启动行会在 Loader 并发挂载顺序允许时打印
52
+ 升级和回退提示,但该友好提示是 best-effort,不是启动顺序保证;保留 DSH
53
+ 0.1.1 时请使用 0.3,保留 alpha.2/alpha.3 时请使用
54
+ `@xmoon76/dsh-pi-tui@0.4.0-alpha.1`,保留 alpha.4/alpha.5 时请使用
55
+ `@xmoon76/dsh-pi-tui@0.4.0-alpha.2`。稳定版的安装方式已在上方“安装到 DSH
56
+ Profile”中给出;如果需要保留旧 DSH,请使用下面的兼容恢复路径:
24
57
 
25
58
  ```sh
26
- pnpm compat:dsh:source -- --dsh-dir "$HOME/project/deepseek-harness"
59
+ npm install -g @deepseek-ai/dsh@0.1.1-rc.2
60
+ dsh plugin --profile pi-tui -- add @xmoon76/dsh-pi-tui@0.3
61
+ dsh --profile pi-tui
27
62
  ```
28
63
 
29
- CI 对 push 到 `next` 以及目标为 `next` 的 PR 遵循跟踪的 `test/compat/dsh-mode.json` 策略;`main` 和所有 tag 使用 npm Mode。`next` 的两种 lane 都从 `test/compat/dsh-source.json` 读取当前 validated DSH target;Source Mode 会验证完整的官方 DSH tarball family、TUI 预设和旧 runtime 边界,npm Mode 则运行冻结的 registry lane。对于尚未发布的 source family,已发布 `pi2dsh` 的生态检查会明确标记为 skipped。详细流程见 [`docs/dsh-compatibility.md`](docs/dsh-compatibility.md)。
64
+ `0.4` 当前线的声明支持范围是 `>=0.1.2-rc.1`;每个发布版本都会验证
65
+ 具体的 DSH family。`npm install -g` 仅用于安装 DSH 本身;要将 dsh-pi-tui
66
+ 安装进 DSH profile,必须使用 `dsh plugin` 命令。
67
+
68
+ 新的 Agent preset 使用当前 roster 中选定的 id。DSH 允许合法的自定义
69
+ `code` preset;只要当前 roster 存在它,显式输入和持久化状态都会保留 `code`。
70
+ 旧数据中省略请求的 `code` default/session 值只有在确认 roster 不含 `code` 后
71
+ 才会回退到 `ptc`。
72
+
73
+ ### Profile management
74
+
75
+ 更新已安装的 TUI:
76
+
77
+ ```sh
78
+ dsh plugin --profile pi-tui -- update @xmoon76/dsh-pi-tui
79
+ ```
80
+
81
+ 查看已安装插件:
82
+
83
+ ```sh
84
+ dsh plugin --profile pi-tui -- list
85
+ ```
86
+
87
+ 卸载:
88
+
89
+ ```sh
90
+ dsh plugin --profile pi-tui -- remove @xmoon76/dsh-pi-tui
91
+ ```
92
+
93
+ 恢复已有 Session:
94
+
95
+ ```sh
96
+ dsh --profile pi-tui --session <session-id>
97
+ ```
30
98
 
31
99
  ## 功能
32
100
 
@@ -218,8 +286,8 @@ TUI 使用 DSH 提供的模型和设置服务。
218
286
  | `Shift+Enter` | 换行 |
219
287
  | `Esc` | 取消当前交互 / 中断运行 |
220
288
  | `Esc Esc` | 空闲时打开 Rewind |
221
- | `Ctrl+C` | 中断 / 清空当前输入 |
222
- | `Ctrl+D` | 退出 TUI(等同 `/exit`) |
289
+ | `Ctrl+C` | 键盘退出确认;首次清空草稿 |
290
+ | `Ctrl+D` | 空草稿时键盘退出确认;有内容时向前删除 |
223
291
  | `Ctrl+S` | Steer:把队列消息和草稿一起发送到正在运行的回合 |
224
292
  | `Ctrl+T` | 切换 Todo 面板 |
225
293
  | `Ctrl+R` | 搜索输入历史 |
@@ -297,99 +365,6 @@ dsh-pi-tui:
297
365
  移除某 action 的全部触发。
298
366
 
299
367
 
300
- ## 安装
301
-
302
- ### 环境要求
303
-
304
- * DeepSeek Harness
305
- * Node.js `^22.19.0 || >=24`
306
-
307
- ### DSH 与 TUI 版本对应(重要)
308
-
309
- | TUI 包版本 | 对应 DSH 版本 | 说明 |
310
- |---|---|---|
311
- | `0.4.0`(`@latest`) | `>=0.1.2-rc.1` | 当前稳定版;按 0.1.2-rc.1 family 验证 |
312
- | `0.4.x-alpha`(`@next`) | `>=0.1.2-rc.1` | 后续预发布线;按每个发布版本的具体 DSH family 验证 |
313
- | `0.4.0-alpha.2`(已发布) | `>=0.1.2-alpha.4` | 上一条 0.4 预发布线;其发布版本按 alpha.4/alpha.5 family 验证 |
314
- | `0.4.0-alpha.1`(已发布) | `>=0.1.2-alpha.2` | 更早的 0.4 预发布线;接受 alpha.2/alpha.3 运行时 |
315
- | `0.3.x`(`@0.3`) | `0.1.1-rc.2` | 旧运行时兼容线 |
316
-
317
- 不要把两条线混装:DSH 0.1.1 不在 0.4 的 peer 支持范围内,运行时会在
318
- 正常的不兼容边界以非零状态失败。启动行会在 Loader 并发挂载顺序允许时打印
319
- 升级和回退提示,但该友好提示是 best-effort,不是启动顺序保证;保留 DSH
320
- 0.1.1 时请使用 0.3,保留 alpha.2/alpha.3 时请使用
321
- `@xmoon76/dsh-pi-tui@0.4.0-alpha.1`,保留 alpha.4/alpha.5 时请使用
322
- `@xmoon76/dsh-pi-tui@0.4.0-alpha.2`。当前 0.4 稳定版的推荐安装顺序如下
323
- (先装 DSH,再把 TUI 装入 profile):
324
-
325
- ```sh
326
- npm install -g @deepseek-ai/dsh@0.1.2-rc.1
327
- dsh plugin --profile pi-tui -- add @xmoon76/dsh-pi-tui@latest
328
- dsh --profile pi-tui
329
- ```
330
-
331
- 如果需要保留旧 DSH:
332
-
333
- ```sh
334
- npm install -g @deepseek-ai/dsh@0.1.1-rc.2
335
- dsh plugin --profile pi-tui -- add @xmoon76/dsh-pi-tui@0.3
336
- dsh --profile pi-tui
337
- ```
338
-
339
- `0.4` 当前线的声明支持范围是 `>=0.1.2-rc.1`;每个发布版本都会验证
340
- 具体的 DSH family。仅执行 `npm install -g @xmoon76/dsh-pi-tui` 不会把插件安装进
341
- DSH profile,实际使用仍应执行上面的 `dsh plugin` 命令。
342
-
343
- 新的 Agent preset 使用当前 roster 中选定的 id。DSH 允许合法的自定义
344
- `code` preset;只要当前 roster 存在它,显式输入和持久化状态都会保留 `code`。
345
- 旧数据中省略请求的 `code` default/session 值只有在确认 roster 不含 `code` 后
346
- 才会回退到 `ptc`。
347
-
348
- ### npm
349
-
350
- 推荐使用单独的 `pi-tui` profile。使用与 DSH 版本匹配的
351
- TUI channel(稳定版用 `@latest`,预发布版用 `@next`):
352
-
353
- ```sh
354
- dsh plugin --profile pi-tui -- add @xmoon76/dsh-pi-tui@latest
355
- dsh --profile pi-tui
356
- ```
357
-
358
- 恢复已有 Session:
359
-
360
- ```sh
361
- dsh --profile pi-tui --session <session-id>
362
- ```
363
-
364
- ### Source Mode(仅验证)
365
-
366
- Source Mode 是 `next` CI 按跟踪策略选用的、并可用于本地兼容性检查的验证专用 distribution。它从 `test/compat/dsh-source.json` 的完整 commit SHA 构建官方 DSH tarball family,通过临时 pnpm overrides 安装,并在完成后清理临时状态。不要把 DSH 源码路径、`file:` 依赖或 workspace symlink 写入发布 package。
367
-
368
- ```sh
369
- pnpm compat:dsh:source -- --dsh-dir "$HOME/project/deepseek-harness"
370
- pnpm compat:dsh:npm
371
- ```
372
-
373
- 安装包已经包含运行所需的 Pi TUI fork,不需要额外安装内部的 TUI package。
374
-
375
- ### 更新
376
-
377
- ```sh
378
- dsh plugin --profile pi-tui -- update @xmoon76/dsh-pi-tui
379
- ```
380
-
381
- 查看已安装插件:
382
-
383
- ```sh
384
- dsh plugin --profile pi-tui -- list
385
- ```
386
-
387
- 卸载:
388
-
389
- ```sh
390
- dsh plugin --profile pi-tui -- remove @xmoon76/dsh-pi-tui
391
- ```
392
-
393
368
  ## 从源码运行
394
369
 
395
370
  ```sh
@@ -552,6 +527,25 @@ dsh plugin --profile pi-tui-dev -- add @xmoon76/dsh-pi-tui@link:$PWD
552
527
  dsh --profile pi-tui-dev
553
528
  ```
554
529
 
530
+ ## DSH 兼容性与验证
531
+
532
+ 以下内容仅介绍 Source Mode 和 CI 验证细节;普通用户无需使用 Source Mode 安装 TUI。
533
+
534
+ ### Source Mode(仅验证)
535
+
536
+ Source Mode 是 `next` CI 按跟踪策略选用的、并可用于本地兼容性检查的验证专用 distribution。它从 `test/compat/dsh-source.json` 的完整 commit SHA 构建官方 DSH tarball family,通过临时 pnpm overrides 安装,并在完成后清理临时状态。不要把 DSH 源码路径、`file:` 依赖或 workspace symlink 写入发布 package。
537
+
538
+ ```sh
539
+ pnpm compat:dsh:source -- --dsh-dir "$HOME/project/deepseek-harness"
540
+ pnpm compat:dsh:npm
541
+ ```
542
+
543
+ 安装包已经包含运行所需的 Pi TUI fork,不需要额外安装内部的 TUI package。
544
+
545
+ ### CI 验证策略
546
+
547
+ CI 对 push 到 `next` 以及目标为 `next` 的 PR 遵循跟踪的 `test/compat/dsh-mode.json` 策略;`main` 和所有 tag 使用 npm Mode。`next` 的两种 lane 都从 `test/compat/dsh-source.json` 读取当前 validated DSH target;Source Mode 会验证完整的官方 DSH tarball family、TUI 预设和旧 runtime 边界,npm Mode 则运行冻结的 registry lane。对于尚未发布的 source family,已发布 `pi2dsh` 的生态检查会明确标记为 skipped。详细流程见 [`docs/dsh-compatibility.md`](docs/dsh-compatibility.md)。
548
+
555
549
  ## 项目结构
556
550
 
557
551
  仓库根目录是发布到 npm 的 `@xmoon76/dsh-pi-tui` bundle。
package/dist/builtins.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { H as PI_TUI_EXTENSIONS_SERVICE, L as dshVersion } from "./src-zkySYmLZ.mjs";
1
+ import { H as PI_TUI_EXTENSIONS_SERVICE, L as dshVersion } from "./src-CeGK2mHo.mjs";
2
2
  import { TUI_STARTUP_SERVICE } from "./startup.mjs";
3
3
  import { readFileSync } from "node:fs";
4
4
  import { join } from "node:path";
@@ -1,3 +1,3 @@
1
- import { B as inject, H as PI_TUI_EXTENSIONS_SERVICE, U as API_VERSION, V as name, W as describeKey, z as apply } from "./src-zkySYmLZ.mjs";
1
+ import { B as inject, H as PI_TUI_EXTENSIONS_SERVICE, U as API_VERSION, V as name, W as describeKey, z as apply } from "./src-CeGK2mHo.mjs";
2
2
  import "./startup.mjs";
3
3
  export { API_VERSION, PI_TUI_EXTENSIONS_SERVICE, apply, describeKey, inject, name };
package/dist/index.mjs CHANGED
@@ -1,3 +1,3 @@
1
- import { A as shouldConsumeAdvertisedMiss, C as normalizeSkillInvocation, D as resumeCommand, E as resolveInitialCatalog, F as teardownViewerForSessionSwap, I as viewerActionCapability, M as subagentJobTranscriptId, N as subagentJobViewHint, O as runningProfile, P as subagentNoticeIsFailure, R as forkSeed, S as name, T as recordedPreset, _ as interruptAgent, a as SessionLockRefusedError, b as isUserQueueInput, c as commandRejectsImages, d as contextRefreshKind, f as createViewerOpenToken, g as inject, h as foldQueueRows, i as SESSIONLESS_COMMANDS, j as shouldSteerOnEnter, k as settleCompactionSurface, l as compactingFromLog, m as foldCompactionEvent, n as HOST_COMMAND_CATALOG, o as apply, p as dangerCommand, r as LOCAL_COMMANDS, s as busyAfterTurnBoundary, t as Config, u as composeAgent, v as isPlainExitPrompt, w as recomposeBlank, x as matchPendingSubagentCall, y as isSubagentSettlementNotice } from "./src-zkySYmLZ.mjs";
1
+ import { A as shouldConsumeAdvertisedMiss, C as normalizeSkillInvocation, D as resumeCommand, E as resolveInitialCatalog, F as teardownViewerForSessionSwap, I as viewerActionCapability, M as subagentJobTranscriptId, N as subagentJobViewHint, O as runningProfile, P as subagentNoticeIsFailure, R as forkSeed, S as name, T as recordedPreset, _ as interruptAgent, a as SessionLockRefusedError, b as isUserQueueInput, c as commandRejectsImages, d as contextRefreshKind, f as createViewerOpenToken, g as inject, h as foldQueueRows, i as SESSIONLESS_COMMANDS, j as shouldSteerOnEnter, k as settleCompactionSurface, l as compactingFromLog, m as foldCompactionEvent, n as HOST_COMMAND_CATALOG, o as apply, p as dangerCommand, r as LOCAL_COMMANDS, s as busyAfterTurnBoundary, t as Config, u as composeAgent, v as isPlainExitPrompt, w as recomposeBlank, x as matchPendingSubagentCall, y as isSubagentSettlementNotice } from "./src-CeGK2mHo.mjs";
2
2
  import "./startup.mjs";
3
3
  export { Config, HOST_COMMAND_CATALOG, LOCAL_COMMANDS, SESSIONLESS_COMMANDS, SessionLockRefusedError, apply, busyAfterTurnBoundary, commandRejectsImages, compactingFromLog, composeAgent, contextRefreshKind, createViewerOpenToken, dangerCommand, foldCompactionEvent, foldQueueRows, forkSeed, inject, interruptAgent, isPlainExitPrompt, isSubagentSettlementNotice, isUserQueueInput, matchPendingSubagentCall, name, normalizeSkillInvocation, recomposeBlank, recordedPreset, resolveInitialCatalog, resumeCommand, runningProfile, settleCompactionSurface, shouldConsumeAdvertisedMiss, shouldSteerOnEnter, subagentJobTranscriptId, subagentJobViewHint, subagentNoticeIsFailure, teardownViewerForSessionSwap, viewerActionCapability };