@deepseek-harness-tui/dsh-tui 0.11.2 → 0.13.0
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.md +60 -8
- package/assets/deepy/README.md +60 -0
- package/assets/deepy/frames.json +1 -0
- package/assets/whale-girl/whale-girl-happy.png +0 -0
- package/assets/whaleGirl/README.md +7 -0
- package/assets/whaleGirl/frames.json +1 -0
- package/assets/whaleGirl/img/building/00.png +0 -0
- package/assets/whaleGirl/img/building/01.png +0 -0
- package/assets/whaleGirl/img/building/02.png +0 -0
- package/assets/whaleGirl/img/building/03.png +0 -0
- package/assets/whaleGirl/img/building/04.png +0 -0
- package/assets/whaleGirl/img/building/05.png +0 -0
- package/assets/whaleGirl/img/building/06.png +0 -0
- package/assets/whaleGirl/img/building/07.png +0 -0
- package/assets/whaleGirl/img/building/08.png +0 -0
- package/assets/whaleGirl/img/building/09.png +0 -0
- package/assets/whaleGirl/img/building/10.png +0 -0
- package/assets/whaleGirl/img/building/11.png +0 -0
- package/assets/whaleGirl/img/building/12.png +0 -0
- package/assets/whaleGirl/img/building/13.png +0 -0
- package/assets/whaleGirl/img/building/14.png +0 -0
- package/assets/whaleGirl/img/building/15.png +0 -0
- package/assets/whaleGirl/img/building/16.png +0 -0
- package/assets/whaleGirl/img/building/17.png +0 -0
- package/assets/whaleGirl/img/building/18.png +0 -0
- package/assets/whaleGirl/img/building/19.png +0 -0
- package/assets/whaleGirl/img/building/20.png +0 -0
- package/assets/whaleGirl/img/building/21.png +0 -0
- package/assets/whaleGirl/img/building/22.png +0 -0
- package/assets/whaleGirl/img/building/23.png +0 -0
- package/assets/whaleGirl/img/carrying/00.png +0 -0
- package/assets/whaleGirl/img/carrying/01.png +0 -0
- package/assets/whaleGirl/img/carrying/02.png +0 -0
- package/assets/whaleGirl/img/carrying/03.png +0 -0
- package/assets/whaleGirl/img/carrying/04.png +0 -0
- package/assets/whaleGirl/img/carrying/05.png +0 -0
- package/assets/whaleGirl/img/carrying/06.png +0 -0
- package/assets/whaleGirl/img/carrying/07.png +0 -0
- package/assets/whaleGirl/img/compacting/00.png +0 -0
- package/assets/whaleGirl/img/compacting/01.png +0 -0
- package/assets/whaleGirl/img/compacting/02.png +0 -0
- package/assets/whaleGirl/img/compacting/03.png +0 -0
- package/assets/whaleGirl/img/compacting/04.png +0 -0
- package/assets/whaleGirl/img/compacting/05.png +0 -0
- package/assets/whaleGirl/img/compacting/06.png +0 -0
- package/assets/whaleGirl/img/compacting/07.png +0 -0
- package/assets/whaleGirl/img/compacting/08.png +0 -0
- package/assets/whaleGirl/img/compacting/09.png +0 -0
- package/assets/whaleGirl/img/conducting/00.png +0 -0
- package/assets/whaleGirl/img/conducting/01.png +0 -0
- package/assets/whaleGirl/img/conducting/02.png +0 -0
- package/assets/whaleGirl/img/conducting/03.png +0 -0
- package/assets/whaleGirl/img/conducting/04.png +0 -0
- package/assets/whaleGirl/img/conducting/05.png +0 -0
- package/assets/whaleGirl/img/conducting/06.png +0 -0
- package/assets/whaleGirl/img/conducting/07.png +0 -0
- package/assets/whaleGirl/img/conducting/08.png +0 -0
- package/assets/whaleGirl/img/conducting/09.png +0 -0
- package/assets/whaleGirl/img/conducting/10.png +0 -0
- package/assets/whaleGirl/img/conducting/11.png +0 -0
- package/assets/whaleGirl/img/drag/00.png +0 -0
- package/assets/whaleGirl/img/drag/01.png +0 -0
- package/assets/whaleGirl/img/drag/02.png +0 -0
- package/assets/whaleGirl/img/drag/03.png +0 -0
- package/assets/whaleGirl/img/drag/04.png +0 -0
- package/assets/whaleGirl/img/drag/05.png +0 -0
- package/assets/whaleGirl/img/drag/06.png +0 -0
- package/assets/whaleGirl/img/drag/07.png +0 -0
- package/assets/whaleGirl/img/drag/08.png +0 -0
- package/assets/whaleGirl/img/drag/09.png +0 -0
- package/assets/whaleGirl/img/error/00.png +0 -0
- package/assets/whaleGirl/img/error/01.png +0 -0
- package/assets/whaleGirl/img/error/02.png +0 -0
- package/assets/whaleGirl/img/error/03.png +0 -0
- package/assets/whaleGirl/img/error/04.png +0 -0
- package/assets/whaleGirl/img/error/05.png +0 -0
- package/assets/whaleGirl/img/error/06.png +0 -0
- package/assets/whaleGirl/img/error/07.png +0 -0
- package/assets/whaleGirl/img/error/08.png +0 -0
- package/assets/whaleGirl/img/error/09.png +0 -0
- package/assets/whaleGirl/img/happy/00.png +0 -0
- package/assets/whaleGirl/img/happy/01.png +0 -0
- package/assets/whaleGirl/img/happy/02.png +0 -0
- package/assets/whaleGirl/img/happy/03.png +0 -0
- package/assets/whaleGirl/img/happy/04.png +0 -0
- package/assets/whaleGirl/img/happy/05.png +0 -0
- package/assets/whaleGirl/img/happy/06.png +0 -0
- package/assets/whaleGirl/img/happy/07.png +0 -0
- package/assets/whaleGirl/img/happy/08.png +0 -0
- package/assets/whaleGirl/img/happy/09.png +0 -0
- package/assets/whaleGirl/img/happy/10.png +0 -0
- package/assets/whaleGirl/img/idle/00.png +0 -0
- package/assets/whaleGirl/img/idle/01.png +0 -0
- package/assets/whaleGirl/img/idle/02.png +0 -0
- package/assets/whaleGirl/img/idle/03.png +0 -0
- package/assets/whaleGirl/img/idle/04.png +0 -0
- package/assets/whaleGirl/img/idle/05.png +0 -0
- package/assets/whaleGirl/img/idle/06.png +0 -0
- package/assets/whaleGirl/img/idle/07.png +0 -0
- package/assets/whaleGirl/img/idle/08.png +0 -0
- package/assets/whaleGirl/img/idle/09.png +0 -0
- package/assets/whaleGirl/img/idle/10.png +0 -0
- package/assets/whaleGirl/img/idle/11.png +0 -0
- package/assets/whaleGirl/img/idle/12.png +0 -0
- package/assets/whaleGirl/img/idle/13.png +0 -0
- package/assets/whaleGirl/img/idle/14.png +0 -0
- package/assets/whaleGirl/img/idle/15.png +0 -0
- package/assets/whaleGirl/img/idle/16.png +0 -0
- package/assets/whaleGirl/img/idle/17.png +0 -0
- package/assets/whaleGirl/img/idle/18.png +0 -0
- package/assets/whaleGirl/img/idle/19.png +0 -0
- package/assets/whaleGirl/img/idle/20.png +0 -0
- package/assets/whaleGirl/img/idle-look/00.png +0 -0
- package/assets/whaleGirl/img/idle-look/01.png +0 -0
- package/assets/whaleGirl/img/idle-look/02.png +0 -0
- package/assets/whaleGirl/img/idle-look/03.png +0 -0
- package/assets/whaleGirl/img/idle-look/04.png +0 -0
- package/assets/whaleGirl/img/idle-look/05.png +0 -0
- package/assets/whaleGirl/img/idle-look/06.png +0 -0
- package/assets/whaleGirl/img/idle-look/07.png +0 -0
- package/assets/whaleGirl/img/idle-look/08.png +0 -0
- package/assets/whaleGirl/img/idle-look/09.png +0 -0
- package/assets/whaleGirl/img/idle-look/10.png +0 -0
- package/assets/whaleGirl/img/idle-look/11.png +0 -0
- package/assets/whaleGirl/img/idle-look/12.png +0 -0
- package/assets/whaleGirl/img/idle-spout/00.png +0 -0
- package/assets/whaleGirl/img/idle-spout/01.png +0 -0
- package/assets/whaleGirl/img/idle-spout/02.png +0 -0
- package/assets/whaleGirl/img/idle-spout/03.png +0 -0
- package/assets/whaleGirl/img/idle-spout/04.png +0 -0
- package/assets/whaleGirl/img/idle-spout/05.png +0 -0
- package/assets/whaleGirl/img/idle-spout/06.png +0 -0
- package/assets/whaleGirl/img/idle-spout/07.png +0 -0
- package/assets/whaleGirl/img/idle-spout/08.png +0 -0
- package/assets/whaleGirl/img/idle-spout/09.png +0 -0
- package/assets/whaleGirl/img/idle-spout/10.png +0 -0
- package/assets/whaleGirl/img/music/00.png +0 -0
- package/assets/whaleGirl/img/music/01.png +0 -0
- package/assets/whaleGirl/img/music/02.png +0 -0
- package/assets/whaleGirl/img/music/03.png +0 -0
- package/assets/whaleGirl/img/music/04.png +0 -0
- package/assets/whaleGirl/img/music/05.png +0 -0
- package/assets/whaleGirl/img/music/06.png +0 -0
- package/assets/whaleGirl/img/music/07.png +0 -0
- package/assets/whaleGirl/img/notification/00.png +0 -0
- package/assets/whaleGirl/img/notification/01.png +0 -0
- package/assets/whaleGirl/img/notification/02.png +0 -0
- package/assets/whaleGirl/img/notification/03.png +0 -0
- package/assets/whaleGirl/img/notification/04.png +0 -0
- package/assets/whaleGirl/img/notification/05.png +0 -0
- package/assets/whaleGirl/img/notification/06.png +0 -0
- package/assets/whaleGirl/img/notification/07.png +0 -0
- package/assets/whaleGirl/img/poke-left/00.png +0 -0
- package/assets/whaleGirl/img/poke-left/01.png +0 -0
- package/assets/whaleGirl/img/poke-left/02.png +0 -0
- package/assets/whaleGirl/img/poke-left/03.png +0 -0
- package/assets/whaleGirl/img/poke-left/04.png +0 -0
- package/assets/whaleGirl/img/poke-left/05.png +0 -0
- package/assets/whaleGirl/img/poke-left/06.png +0 -0
- package/assets/whaleGirl/img/poke-left/07.png +0 -0
- package/assets/whaleGirl/img/poke-left/08.png +0 -0
- package/assets/whaleGirl/img/poke-left/09.png +0 -0
- package/assets/whaleGirl/img/poke-left/10.png +0 -0
- package/assets/whaleGirl/img/poke-right/00.png +0 -0
- package/assets/whaleGirl/img/poke-right/01.png +0 -0
- package/assets/whaleGirl/img/poke-right/02.png +0 -0
- package/assets/whaleGirl/img/poke-right/03.png +0 -0
- package/assets/whaleGirl/img/poke-right/04.png +0 -0
- package/assets/whaleGirl/img/poke-right/05.png +0 -0
- package/assets/whaleGirl/img/poke-right/06.png +0 -0
- package/assets/whaleGirl/img/poke-right/07.png +0 -0
- package/assets/whaleGirl/img/poke-right/08.png +0 -0
- package/assets/whaleGirl/img/poke-right/09.png +0 -0
- package/assets/whaleGirl/img/poke-right/10.png +0 -0
- package/assets/whaleGirl/img/sleeping/00.png +0 -0
- package/assets/whaleGirl/img/sleeping/01.png +0 -0
- package/assets/whaleGirl/img/sleeping/02.png +0 -0
- package/assets/whaleGirl/img/sleeping/03.png +0 -0
- package/assets/whaleGirl/img/sleeping/04.png +0 -0
- package/assets/whaleGirl/img/sleeping/05.png +0 -0
- package/assets/whaleGirl/img/smile-hearts/00.png +0 -0
- package/assets/whaleGirl/img/smile-hearts/01.png +0 -0
- package/assets/whaleGirl/img/smile-hearts/02.png +0 -0
- package/assets/whaleGirl/img/smile-hearts/03.png +0 -0
- package/assets/whaleGirl/img/smile-hearts/04.png +0 -0
- package/assets/whaleGirl/img/smile-hearts/05.png +0 -0
- package/assets/whaleGirl/img/smile-hearts/06.png +0 -0
- package/assets/whaleGirl/img/smile-hearts/07.png +0 -0
- package/assets/whaleGirl/img/smile-hearts/08.png +0 -0
- package/assets/whaleGirl/img/smile-hearts/09.png +0 -0
- package/assets/whaleGirl/img/smile-hearts/10.png +0 -0
- package/assets/whaleGirl/img/smile-hearts/11.png +0 -0
- package/assets/whaleGirl/img/smile-hearts/12.png +0 -0
- package/assets/whaleGirl/img/smile-hearts/13.png +0 -0
- package/assets/whaleGirl/img/smile-hearts/14.png +0 -0
- package/assets/whaleGirl/img/smile-hearts/15.png +0 -0
- package/assets/whaleGirl/img/swim/00.png +0 -0
- package/assets/whaleGirl/img/swim/01.png +0 -0
- package/assets/whaleGirl/img/swim/02.png +0 -0
- package/assets/whaleGirl/img/swim/03.png +0 -0
- package/assets/whaleGirl/img/swim/04.png +0 -0
- package/assets/whaleGirl/img/swim/05.png +0 -0
- package/assets/whaleGirl/img/swim/06.png +0 -0
- package/assets/whaleGirl/img/swim/07.png +0 -0
- package/assets/whaleGirl/img/thinking/00.png +0 -0
- package/assets/whaleGirl/img/thinking/01.png +0 -0
- package/assets/whaleGirl/img/thinking/02.png +0 -0
- package/assets/whaleGirl/img/thinking/03.png +0 -0
- package/assets/whaleGirl/img/thinking/04.png +0 -0
- package/assets/whaleGirl/img/thinking/05.png +0 -0
- package/assets/whaleGirl/img/thinking/06.png +0 -0
- package/assets/whaleGirl/img/thinking/07.png +0 -0
- package/assets/whaleGirl/img/thinking/08.png +0 -0
- package/assets/whaleGirl/img/thinking/09.png +0 -0
- package/assets/whaleGirl/img/thinking/10.png +0 -0
- package/assets/whaleGirl/img/thinking/11.png +0 -0
- package/assets/whaleGirl/img/thinking/12.png +0 -0
- package/assets/whaleGirl/img/thinking/13.png +0 -0
- package/assets/whaleGirl/img/thinking/14.png +0 -0
- package/assets/whaleGirl/img/thinking/15.png +0 -0
- package/assets/whaleGirl/img/thinking/16.png +0 -0
- package/assets/whaleGirl/img/thumbs-up/00.png +0 -0
- package/assets/whaleGirl/img/thumbs-up/01.png +0 -0
- package/assets/whaleGirl/img/thumbs-up/02.png +0 -0
- package/assets/whaleGirl/img/thumbs-up/03.png +0 -0
- package/assets/whaleGirl/img/thumbs-up/04.png +0 -0
- package/assets/whaleGirl/img/thumbs-up/05.png +0 -0
- package/assets/whaleGirl/img/thumbs-up/06.png +0 -0
- package/assets/whaleGirl/img/thumbs-up/07.png +0 -0
- package/assets/whaleGirl/img/thumbs-up/08.png +0 -0
- package/assets/whaleGirl/img/thumbs-up/09.png +0 -0
- package/assets/whaleGirl/img/thumbs-up/10.png +0 -0
- package/assets/whaleGirl/img/thumbs-up/11.png +0 -0
- package/assets/whaleGirl/img/thumbs-up/12.png +0 -0
- package/assets/whaleGirl/img/tickle/00.png +0 -0
- package/assets/whaleGirl/img/tickle/01.png +0 -0
- package/assets/whaleGirl/img/tickle/02.png +0 -0
- package/assets/whaleGirl/img/tickle/03.png +0 -0
- package/assets/whaleGirl/img/tickle/04.png +0 -0
- package/assets/whaleGirl/img/tickle/05.png +0 -0
- package/assets/whaleGirl/img/tickle/06.png +0 -0
- package/assets/whaleGirl/img/tickle/07.png +0 -0
- package/assets/whaleGirl/img/tickle/08.png +0 -0
- package/assets/whaleGirl/img/tickle/09.png +0 -0
- package/assets/whaleGirl/img/tickle/10.png +0 -0
- package/assets/whaleGirl/img/tickle/11.png +0 -0
- package/assets/whaleGirl/img/tickle/12.png +0 -0
- package/assets/whaleGirl/img/tickle/13.png +0 -0
- package/assets/whaleGirl/img/timings.json +1 -0
- package/assets/whaleGirl/img/typing/00.png +0 -0
- package/assets/whaleGirl/img/typing/01.png +0 -0
- package/assets/whaleGirl/img/typing/02.png +0 -0
- package/assets/whaleGirl/img/typing/03.png +0 -0
- package/assets/whaleGirl/img/typing/04.png +0 -0
- package/assets/whaleGirl/img/typing/05.png +0 -0
- package/assets/whaleGirl/img/typing/06.png +0 -0
- package/assets/whaleGirl/img/typing/07.png +0 -0
- package/assets/whaleGirl/img/typing/08.png +0 -0
- package/assets/whaleGirl/img/typing/09.png +0 -0
- package/assets/whaleGirl/img/typing/10.png +0 -0
- package/assets/whaleGirl/img/typing/11.png +0 -0
- package/assets/whaleGirl/img/typing/12.png +0 -0
- package/assets/whaleGirl/img/typing/13.png +0 -0
- package/assets/whaleGirl/img/waking/00.png +0 -0
- package/assets/whaleGirl/img/waking/01.png +0 -0
- package/assets/whaleGirl/img/waking/02.png +0 -0
- package/assets/whaleGirl/img/waking/03.png +0 -0
- package/assets/whaleGirl/img/waking/04.png +0 -0
- package/assets/whaleGirl/img/waking/05.png +0 -0
- package/assets/whaleGirl/img/waking/06.png +0 -0
- package/assets/whaleGirl/img/waking/07.png +0 -0
- package/assets/whaleGirl/img/waking/08.png +0 -0
- package/assets/whaleGirl/img/waking/09.png +0 -0
- package/assets/whaleGirl/img/waking/10.png +0 -0
- package/bin/dsh-tui.js +38 -6
- package/cordis.patch.yml +31 -6
- package/guide/dsh-tui-guide/SKILL.md +37 -0
- package/guide/dsh-tui-guide/configuration.en.md +415 -0
- package/guide/dsh-tui-guide/configuration.md +354 -0
- package/guide/dsh-tui-guide/getting-started.en.md +401 -0
- package/guide/dsh-tui-guide/getting-started.md +399 -0
- package/guide/dsh-tui-guide/interaction.en.md +738 -0
- package/guide/dsh-tui-guide/interaction.md +793 -0
- package/guide/dsh-tui-guide/migrate.en.md +166 -0
- package/guide/dsh-tui-guide/migrate.md +132 -0
- package/guide/dsh-tui-guide/plugins.en.md +78 -0
- package/guide/dsh-tui-guide/plugins.md +64 -0
- package/guide/dsh-tui-guide/themes.en.md +197 -0
- package/guide/dsh-tui-guide/themes.md +188 -0
- package/guide/dsh-tui-guide/user-guide.en.md +711 -0
- package/guide/dsh-tui-guide/user-guide.md +666 -0
- package/guide/dsh-tui-guide/vscode.en.md +301 -0
- package/guide/dsh-tui-guide/vscode.md +272 -0
- package/lib/settings.json +219 -5
- package/lib/types/adapter/channel/ui-policy.d.ts +7 -2
- package/lib/types/adapter/channel/ui-policy.d.ts.map +1 -1
- package/lib/types/adapter/channel/ui-policy.js +18 -1
- package/lib/types/adapter/index.d.ts +1 -1
- package/lib/types/adapter/index.js +1 -1
- package/lib/types/adapter/kernel/host-facade.d.ts +4 -1
- package/lib/types/adapter/kernel/host-facade.d.ts.map +1 -1
- package/lib/types/adapter/kernel/host-facade.js +8 -1
- package/lib/types/adapter/kernel/runtime.d.ts.map +1 -1
- package/lib/types/adapter/kernel/runtime.js +13 -0
- package/lib/types/adapter/kernel/slices/index.d.ts +1 -0
- package/lib/types/adapter/kernel/slices/index.d.ts.map +1 -1
- package/lib/types/adapter/kernel/slices/index.js +3 -0
- package/lib/types/adapter/kernel/slices/panels.d.ts +3 -0
- package/lib/types/adapter/kernel/slices/panels.d.ts.map +1 -0
- package/lib/types/adapter/kernel/slices/panels.js +14 -0
- package/lib/types/adapter/ports/channel-capabilities.d.ts +48 -0
- package/lib/types/adapter/ports/channel-capabilities.d.ts.map +1 -0
- package/lib/types/adapter/ports/channel-capabilities.js +2 -0
- package/lib/types/adapter/ports/channel-catalog.d.ts +7 -0
- package/lib/types/adapter/ports/channel-catalog.d.ts.map +1 -1
- package/lib/types/adapter/ports/channel-display.d.ts +10 -0
- package/lib/types/adapter/ports/channel-display.d.ts.map +1 -1
- package/lib/types/adapter/ports/channel-settings.d.ts +2 -1
- package/lib/types/adapter/ports/channel-settings.d.ts.map +1 -1
- package/lib/types/adapter/ports/channel-ui.d.ts +91 -4
- package/lib/types/adapter/ports/channel-ui.d.ts.map +1 -1
- package/lib/types/adapter/ports/channel-view.d.ts +137 -9
- package/lib/types/adapter/ports/channel-view.d.ts.map +1 -1
- package/lib/types/adapter/ports/channel.d.ts +1 -1
- package/lib/types/adapter/ports/channel.js +1 -1
- package/lib/types/adapter/ports/descriptor.d.ts +1 -1
- package/lib/types/adapter/ports/descriptor.js +1 -1
- package/lib/types/adapter/ports/index.d.ts +1 -1
- package/lib/types/adapter/ports/index.js +1 -1
- package/lib/types/adapter/ports/panels.d.ts +28 -0
- package/lib/types/adapter/ports/panels.d.ts.map +1 -0
- package/lib/types/adapter/ports/panels.js +8 -0
- package/lib/types/adapter/ports/workspace.d.ts +1 -1
- package/lib/types/adapter/ports/workspace.js +1 -1
- package/lib/types/adapter/spec/index.d.ts +2 -2
- package/lib/types/adapter/spec/index.js +2 -2
- package/lib/types/adapter/spec/profile.d.ts +6 -6
- package/lib/types/adapter/spec/profile.d.ts.map +1 -1
- package/lib/types/adapter/spec/profile.js +6 -6
- package/lib/types/adapter/spec/protocol-constants.d.ts +3 -3
- package/lib/types/adapter/spec/protocol-constants.d.ts.map +1 -1
- package/lib/types/adapter/spec/protocol-constants.js +5 -5
- package/lib/types/adapter/spec/tui-contributions.d.ts +4 -4
- package/lib/types/adapter/spec/tui-contributions.d.ts.map +1 -1
- package/lib/types/adapter/spec/tui-contributions.js +5 -5
- package/lib/types/adapter/standard/descriptor.js +1 -1
- package/lib/types/adapter/standard/index.d.ts +3 -3
- package/lib/types/adapter/standard/index.js +3 -3
- package/lib/types/adapter/standard/registry.d.ts +3 -2
- package/lib/types/adapter/standard/registry.d.ts.map +1 -1
- package/lib/types/adapter/standard/registry.js +6 -5
- package/lib/types/adapter/standard/tui-extension.d.ts +1 -1
- package/lib/types/adapter/standard/tui-extension.js +1 -1
- package/lib/types/adapter/upstream/index.d.ts +1 -0
- package/lib/types/adapter/upstream/index.d.ts.map +1 -1
- package/lib/types/adapter/upstream/index.js +1 -0
- package/lib/types/adapter/upstream/panels-driver.d.ts +18 -0
- package/lib/types/adapter/upstream/panels-driver.d.ts.map +1 -0
- package/lib/types/adapter/upstream/panels-driver.js +159 -0
- package/lib/types/api.d.ts +2 -0
- package/lib/types/api.d.ts.map +1 -1
- package/lib/types/api.js +3 -1
- package/lib/types/commands.d.ts.map +1 -1
- package/lib/types/commands.js +12 -4
- package/lib/types/components/ActivityLine.d.ts +6 -9
- package/lib/types/components/ActivityLine.d.ts.map +1 -1
- package/lib/types/components/ActivityLine.js +7 -8
- package/lib/types/components/Chat/JobCard.d.ts +27 -1
- package/lib/types/components/Chat/JobCard.d.ts.map +1 -1
- package/lib/types/components/Chat/JobCard.js +128 -33
- package/lib/types/components/Chat/JobGroupHeader.d.ts +27 -0
- package/lib/types/components/Chat/JobGroupHeader.d.ts.map +1 -0
- package/lib/types/components/Chat/JobGroupHeader.js +62 -0
- package/lib/types/components/Chat/SubagentMessage.js +6 -6
- package/lib/types/components/GoalTodoPanel.d.ts +13 -1
- package/lib/types/components/GoalTodoPanel.d.ts.map +1 -1
- package/lib/types/components/GoalTodoPanel.js +55 -14
- package/lib/types/components/JobsPanel.d.ts +42 -2
- package/lib/types/components/JobsPanel.d.ts.map +1 -1
- package/lib/types/components/JobsPanel.js +220 -40
- package/lib/types/components/LogoV2.d.ts +43 -3
- package/lib/types/components/LogoV2.d.ts.map +1 -1
- package/lib/types/components/LogoV2.js +42 -15
- package/lib/types/components/MessageList.d.ts +8 -2
- package/lib/types/components/MessageList.d.ts.map +1 -1
- package/lib/types/components/MessageList.js +215 -21
- package/lib/types/components/OverlayAbove.d.ts +11 -1
- package/lib/types/components/OverlayAbove.d.ts.map +1 -1
- package/lib/types/components/OverlayAbove.js +2 -12
- package/lib/types/components/PageMargin.d.ts.map +1 -1
- package/lib/types/components/PageMargin.js +3 -1
- package/lib/types/components/PluginSceneBoundary.d.ts +1 -1
- package/lib/types/components/PluginSceneBoundary.js +1 -1
- package/lib/types/components/PresetPicker.d.ts +4 -0
- package/lib/types/components/PresetPicker.d.ts.map +1 -1
- package/lib/types/components/PresetPicker.js +5 -1
- package/lib/types/components/PromptInput.d.ts +20 -22
- package/lib/types/components/PromptInput.d.ts.map +1 -1
- package/lib/types/components/PromptInput.js +425 -157
- package/lib/types/components/SearchBox.d.ts +22 -5
- package/lib/types/components/SearchBox.d.ts.map +1 -1
- package/lib/types/components/SearchBox.js +17 -13
- package/lib/types/components/StarPrompt.d.ts +6 -0
- package/lib/types/components/StarPrompt.d.ts.map +1 -1
- package/lib/types/components/StarPrompt.js +45 -0
- package/lib/types/components/SubagentCard.d.ts.map +1 -1
- package/lib/types/components/SubagentCard.js +24 -9
- package/lib/types/components/SubagentDashboard.d.ts +18 -3
- package/lib/types/components/SubagentDashboard.d.ts.map +1 -1
- package/lib/types/components/SubagentDashboard.js +53 -5
- package/lib/types/components/SubagentDetailScene.d.ts +7 -1
- package/lib/types/components/SubagentDetailScene.d.ts.map +1 -1
- package/lib/types/components/SubagentDetailScene.js +160 -13
- package/lib/types/components/SurfaceEdges.d.ts +21 -0
- package/lib/types/components/SurfaceEdges.d.ts.map +1 -0
- package/lib/types/components/SurfaceEdges.js +7 -0
- package/lib/types/components/ThemePicker.d.ts +9 -0
- package/lib/types/components/ThemePicker.d.ts.map +1 -1
- package/lib/types/components/ThemePicker.js +74 -10
- package/lib/types/components/ThemePreviewPane.d.ts +26 -0
- package/lib/types/components/ThemePreviewPane.d.ts.map +1 -0
- package/lib/types/components/ThemePreviewPane.js +99 -0
- package/lib/types/components/WhaleGirl.d.ts +6 -0
- package/lib/types/components/WhaleGirl.d.ts.map +1 -1
- package/lib/types/components/WhaleGirl.js +18 -0
- package/lib/types/components/design-system/Divider.d.ts.map +1 -1
- package/lib/types/components/design-system/Divider.js +14 -9
- package/lib/types/components/launchpadActions.d.ts +73 -0
- package/lib/types/components/launchpadActions.d.ts.map +1 -0
- package/lib/types/components/launchpadActions.js +111 -0
- package/lib/types/components/launchpadLayout.d.ts +62 -0
- package/lib/types/components/launchpadLayout.d.ts.map +1 -0
- package/lib/types/components/launchpadLayout.js +176 -0
- package/lib/types/components/messages/AssistantThinkingMessage.js +4 -4
- package/lib/types/components/onboardingModel.d.ts +83 -0
- package/lib/types/components/onboardingModel.d.ts.map +1 -0
- package/lib/types/components/onboardingModel.js +128 -0
- package/lib/types/components/sidePanel/InfoPanel.d.ts +17 -0
- package/lib/types/components/sidePanel/InfoPanel.d.ts.map +1 -0
- package/lib/types/components/sidePanel/InfoPanel.js +124 -0
- package/lib/types/components/sidePanel/PanelBar.d.ts +45 -0
- package/lib/types/components/sidePanel/PanelBar.d.ts.map +1 -0
- package/lib/types/components/sidePanel/PanelBar.js +104 -0
- package/lib/types/components/sidePanel/PanelErrorBoundary.d.ts +21 -0
- package/lib/types/components/sidePanel/PanelErrorBoundary.d.ts.map +1 -0
- package/lib/types/components/sidePanel/PanelErrorBoundary.js +30 -0
- package/lib/types/components/sidePanel/PanelHost.d.ts +36 -0
- package/lib/types/components/sidePanel/PanelHost.d.ts.map +1 -0
- package/lib/types/components/sidePanel/PanelHost.js +81 -0
- package/lib/types/components/sidePanel/PanelPicker.d.ts +24 -0
- package/lib/types/components/sidePanel/PanelPicker.d.ts.map +1 -0
- package/lib/types/components/sidePanel/PanelPicker.js +45 -0
- package/lib/types/components/sidePanel/PanelStore.d.ts +55 -0
- package/lib/types/components/sidePanel/PanelStore.d.ts.map +1 -0
- package/lib/types/components/sidePanel/PanelStore.js +109 -0
- package/lib/types/components/sidePanel/SidePanelColumn.d.ts +31 -0
- package/lib/types/components/sidePanel/SidePanelColumn.d.ts.map +1 -0
- package/lib/types/components/sidePanel/SidePanelColumn.js +70 -0
- package/lib/types/components/sidePanel/SidePanelLayout.d.ts +54 -0
- package/lib/types/components/sidePanel/SidePanelLayout.d.ts.map +1 -0
- package/lib/types/components/sidePanel/SidePanelLayout.js +81 -0
- package/lib/types/components/sidePanel/SidePanelRuntimeContext.d.ts +43 -0
- package/lib/types/components/sidePanel/SidePanelRuntimeContext.d.ts.map +1 -0
- package/lib/types/components/sidePanel/SidePanelRuntimeContext.js +26 -0
- package/lib/types/components/sidePanel/TrajectoryPanel.d.ts +7 -0
- package/lib/types/components/sidePanel/TrajectoryPanel.d.ts.map +1 -0
- package/lib/types/components/sidePanel/TrajectoryPanel.js +263 -0
- package/lib/types/components/sidePanel/WorkspacePanel.d.ts +4 -0
- package/lib/types/components/sidePanel/WorkspacePanel.d.ts.map +1 -0
- package/lib/types/components/sidePanel/WorkspacePanel.js +171 -0
- package/lib/types/components/sidePanel/builtinPanels.d.ts +3 -0
- package/lib/types/components/sidePanel/builtinPanels.d.ts.map +1 -0
- package/lib/types/components/sidePanel/builtinPanels.js +229 -0
- package/lib/types/components/sidePanel/companion/CompanionPanel.d.ts +53 -0
- package/lib/types/components/sidePanel/companion/CompanionPanel.d.ts.map +1 -0
- package/lib/types/components/sidePanel/companion/CompanionPanel.js +528 -0
- package/lib/types/components/sidePanel/companion/SplashMascot.d.ts +32 -0
- package/lib/types/components/sidePanel/companion/SplashMascot.d.ts.map +1 -0
- package/lib/types/components/sidePanel/companion/SplashMascot.js +103 -0
- package/lib/types/components/sidePanel/companion/deepy.d.ts +75 -0
- package/lib/types/components/sidePanel/companion/deepy.d.ts.map +1 -0
- package/lib/types/components/sidePanel/companion/deepy.js +222 -0
- package/lib/types/components/sidePanel/companion/mood.d.ts +176 -0
- package/lib/types/components/sidePanel/companion/mood.d.ts.map +1 -0
- package/lib/types/components/sidePanel/companion/mood.js +212 -0
- package/lib/types/components/sidePanel/companion/pose.d.ts +43 -0
- package/lib/types/components/sidePanel/companion/pose.d.ts.map +1 -0
- package/lib/types/components/sidePanel/companion/pose.js +34 -0
- package/lib/types/components/sidePanel/companion/skins.d.ts +102 -0
- package/lib/types/components/sidePanel/companion/skins.d.ts.map +1 -0
- package/lib/types/components/sidePanel/companion/skins.js +408 -0
- package/lib/types/components/sidePanel/dimensions.d.ts +60 -0
- package/lib/types/components/sidePanel/dimensions.d.ts.map +1 -0
- package/lib/types/components/sidePanel/dimensions.js +75 -0
- package/lib/types/components/sidePanel/jobsFocusStore.d.ts +21 -0
- package/lib/types/components/sidePanel/jobsFocusStore.d.ts.map +1 -0
- package/lib/types/components/sidePanel/jobsFocusStore.js +30 -0
- package/lib/types/components/sidePanel/panelBridge.d.ts +44 -0
- package/lib/types/components/sidePanel/panelBridge.d.ts.map +1 -0
- package/lib/types/components/sidePanel/panelBridge.js +55 -0
- package/lib/types/components/sidePanel/pluginPanelAdapter.d.ts +22 -0
- package/lib/types/components/sidePanel/pluginPanelAdapter.d.ts.map +1 -0
- package/lib/types/components/sidePanel/pluginPanelAdapter.js +148 -0
- package/lib/types/components/sidePanel/types.d.ts +110 -0
- package/lib/types/components/sidePanel/types.d.ts.map +1 -0
- package/lib/types/components/sidePanel/types.js +1 -0
- package/lib/types/components/sidePanel/usePanelInput.d.ts +5 -0
- package/lib/types/components/sidePanel/usePanelInput.d.ts.map +1 -0
- package/lib/types/components/sidePanel/usePanelInput.js +44 -0
- package/lib/types/components/sidePanel/useSidePanel.d.ts +47 -0
- package/lib/types/components/sidePanel/useSidePanel.d.ts.map +1 -0
- package/lib/types/components/sidePanel/useSidePanel.js +284 -0
- package/lib/types/components/trajectory/MiniWake.d.ts +11 -1
- package/lib/types/components/trajectory/MiniWake.d.ts.map +1 -1
- package/lib/types/components/trajectory/MiniWake.js +9 -3
- package/lib/types/components/workspaces/HomeWorkspaceRow.d.ts +3 -1
- package/lib/types/components/workspaces/HomeWorkspaceRow.d.ts.map +1 -1
- package/lib/types/components/workspaces/HomeWorkspaceRow.js +3 -2
- package/lib/types/deepseekPricing.d.ts +10 -9
- package/lib/types/deepseekPricing.d.ts.map +1 -1
- package/lib/types/deepseekPricing.js +18 -11
- package/lib/types/dsh-adapter/channel/attached-context.d.ts +58 -0
- package/lib/types/dsh-adapter/channel/attached-context.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/attached-context.js +109 -0
- package/lib/types/dsh-adapter/channel/binding-events.d.ts +6 -0
- package/lib/types/dsh-adapter/channel/binding-events.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/binding-events.js +43 -0
- package/lib/types/dsh-adapter/channel/capabilities.d.ts +82 -0
- package/lib/types/dsh-adapter/channel/capabilities.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/capabilities.js +165 -0
- package/lib/types/dsh-adapter/channel/command-completions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/command-completions.js +8 -0
- package/lib/types/dsh-adapter/channel/context-bookkeeping.d.ts +4 -12
- package/lib/types/dsh-adapter/channel/context-bookkeeping.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/context-bookkeeping.js +9 -4
- package/lib/types/dsh-adapter/channel/external-commands.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/external-commands.js +8 -2
- package/lib/types/dsh-adapter/channel/input-delivery.d.ts +13 -2
- package/lib/types/dsh-adapter/channel/input-delivery.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/input-delivery.js +18 -1
- package/lib/types/dsh-adapter/channel/job-projection.d.ts +1 -0
- package/lib/types/dsh-adapter/channel/job-projection.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/job-projection.js +88 -3
- package/lib/types/dsh-adapter/channel/mode-actions.d.ts +13 -3
- package/lib/types/dsh-adapter/channel/mode-actions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/mode-actions.js +55 -9
- package/lib/types/dsh-adapter/channel/mode-permission-actions.d.ts +8 -1
- package/lib/types/dsh-adapter/channel/mode-permission-actions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/mode-permission-actions.js +25 -10
- package/lib/types/dsh-adapter/channel/preferences.d.ts +1 -1
- package/lib/types/dsh-adapter/channel/preferences.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/preferences.js +26 -8
- package/lib/types/dsh-adapter/channel/projection.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/projection.js +42 -37
- package/lib/types/dsh-adapter/channel/reports.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/reports.js +13 -4
- package/lib/types/dsh-adapter/channel/session-reset.d.ts +5 -1
- package/lib/types/dsh-adapter/channel/session-reset.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/session-reset.js +1 -0
- package/lib/types/dsh-adapter/channel/state.d.ts +21 -3
- package/lib/types/dsh-adapter/channel/state.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/state.js +3 -2
- package/lib/types/dsh-adapter/channel/subagent-projection.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/subagent-projection.js +5 -0
- package/lib/types/dsh-adapter/channel/types.d.ts +1 -1
- package/lib/types/dsh-adapter/channel/types.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/usage.d.ts +18 -1
- package/lib/types/dsh-adapter/channel/usage.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/usage.js +97 -2
- package/lib/types/dsh-adapter/channel.d.ts +1 -1
- package/lib/types/dsh-adapter/channel.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel.js +72 -4
- package/lib/types/dsh-adapter/context-occupancy.d.ts +204 -0
- package/lib/types/dsh-adapter/context-occupancy.d.ts.map +1 -0
- package/lib/types/dsh-adapter/context-occupancy.js +299 -0
- package/lib/types/dsh-adapter/contract.d.ts +19 -4
- package/lib/types/dsh-adapter/contract.d.ts.map +1 -1
- package/lib/types/dsh-adapter/contract.js +33 -3
- package/lib/types/dsh-adapter/index.d.ts +32 -0
- package/lib/types/dsh-adapter/index.d.ts.map +1 -1
- package/lib/types/dsh-adapter/index.js +20 -1
- package/lib/types/dsh-adapter/jobs.d.ts +82 -16
- package/lib/types/dsh-adapter/jobs.d.ts.map +1 -1
- package/lib/types/dsh-adapter/jobs.js +104 -9
- package/lib/types/dsh-adapter/migrate/sessionize.d.ts.map +1 -1
- package/lib/types/dsh-adapter/migrate/sessionize.js +11 -12
- package/lib/types/dsh-adapter/oauth/bonus.d.ts +27 -0
- package/lib/types/dsh-adapter/oauth/bonus.d.ts.map +1 -0
- package/lib/types/dsh-adapter/oauth/bonus.js +69 -0
- package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/command.d.ts +2 -1
- package/lib/types/dsh-adapter/oauth/command.d.ts.map +1 -0
- package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/command.js +7 -4
- package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/credentials.d.ts +13 -10
- package/lib/types/dsh-adapter/oauth/credentials.d.ts.map +1 -0
- package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/credentials.js +61 -23
- package/lib/types/dsh-adapter/oauth/deepseek.d.ts +39 -0
- package/lib/types/dsh-adapter/oauth/deepseek.d.ts.map +1 -0
- package/lib/types/dsh-adapter/oauth/deepseek.js +189 -0
- package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/index.d.ts +24 -16
- package/lib/types/dsh-adapter/oauth/index.d.ts.map +1 -0
- package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/index.js +34 -20
- package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/interaction.d.ts +14 -12
- package/lib/types/dsh-adapter/oauth/interaction.d.ts.map +1 -0
- package/lib/types/dsh-adapter/oauth/interaction.js +283 -0
- package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/opener.d.ts +2 -1
- package/lib/types/dsh-adapter/oauth/opener.d.ts.map +1 -0
- package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/opener.js +1 -1
- package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/pi-ai.d.ts +10 -3
- package/lib/types/dsh-adapter/oauth/pi-ai.d.ts.map +1 -0
- package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/pi-ai.js +8 -3
- package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/profiles.d.ts +6 -3
- package/lib/types/dsh-adapter/oauth/profiles.d.ts.map +1 -0
- package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/profiles.js +11 -3
- package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/service.d.ts +14 -7
- package/lib/types/dsh-adapter/oauth/service.d.ts.map +1 -0
- package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/service.js +82 -17
- package/lib/types/dsh-adapter/panel-runtime-registry.d.ts +39 -0
- package/lib/types/dsh-adapter/panel-runtime-registry.d.ts.map +1 -0
- package/lib/types/dsh-adapter/panel-runtime-registry.js +84 -0
- package/lib/types/dsh-adapter/panels.d.ts +251 -0
- package/lib/types/dsh-adapter/panels.d.ts.map +1 -0
- package/lib/types/dsh-adapter/panels.js +407 -0
- package/lib/types/dsh-adapter/plugin-host.js +1 -1
- package/lib/types/dsh-adapter/plugin.d.ts +25 -2
- package/lib/types/dsh-adapter/plugin.d.ts.map +1 -1
- package/lib/types/dsh-adapter/plugin.js +241 -44
- package/lib/types/dsh-adapter/presets.d.ts +26 -4
- package/lib/types/dsh-adapter/presets.d.ts.map +1 -1
- package/lib/types/dsh-adapter/presets.js +29 -5
- package/lib/types/dsh-adapter/providerWizard.d.ts.map +1 -1
- package/lib/types/dsh-adapter/providerWizard.js +6 -2
- package/lib/types/dsh-adapter/startup-args.d.ts +8 -0
- package/lib/types/dsh-adapter/startup-args.d.ts.map +1 -0
- package/lib/types/dsh-adapter/startup-args.js +34 -0
- package/lib/types/dsh-adapter/subagents.d.ts +1 -0
- package/lib/types/dsh-adapter/subagents.d.ts.map +1 -1
- package/lib/types/dsh-adapter/subagents.js +10 -1
- package/lib/types/history.d.ts +24 -7
- package/lib/types/history.d.ts.map +1 -1
- package/lib/types/history.js +77 -18
- package/lib/types/i18n.d.ts +908 -33
- package/lib/types/i18n.d.ts.map +1 -1
- package/lib/types/i18n.js +355 -17
- package/lib/types/ink/components/App.d.ts +14 -1
- package/lib/types/ink/components/App.d.ts.map +1 -1
- package/lib/types/ink/components/App.js +71 -61
- package/lib/types/ink/components/TerminalSizeContext.d.ts +7 -0
- package/lib/types/ink/components/TerminalSizeContext.d.ts.map +1 -1
- package/lib/types/ink/hooks/use-input.d.ts +11 -0
- package/lib/types/ink/hooks/use-input.d.ts.map +1 -1
- package/lib/types/ink/hooks/use-input.js +8 -2
- package/lib/types/ink/hooks/use-terminal-viewport.d.ts.map +1 -1
- package/lib/types/ink/hooks/use-terminal-viewport.js +3 -1
- package/lib/types/ink/ink.d.ts +18 -0
- package/lib/types/ink/ink.d.ts.map +1 -1
- package/lib/types/ink/ink.js +51 -8
- package/lib/types/ink/output.d.ts +10 -1
- package/lib/types/ink/output.d.ts.map +1 -1
- package/lib/types/ink/output.js +3 -3
- package/lib/types/ink/parse-keypress.d.ts +71 -3
- package/lib/types/ink/parse-keypress.d.ts.map +1 -1
- package/lib/types/ink/parse-keypress.js +815 -133
- package/lib/types/ink/render-node-to-output.d.ts +1 -1
- package/lib/types/ink/render-node-to-output.d.ts.map +1 -1
- package/lib/types/ink/render-node-to-output.js +37 -5
- package/lib/types/ink/screen.d.ts +26 -1
- package/lib/types/ink/screen.d.ts.map +1 -1
- package/lib/types/ink/screen.js +96 -1
- package/lib/types/ink/selection.d.ts +23 -1
- package/lib/types/ink/selection.d.ts.map +1 -1
- package/lib/types/ink/selection.js +102 -26
- package/lib/types/ink/sixel-codec.d.ts +11 -0
- package/lib/types/ink/sixel-codec.d.ts.map +1 -1
- package/lib/types/ink/sixel-codec.js +42 -8
- package/lib/types/ink/terminal-querier.d.ts +25 -0
- package/lib/types/ink/terminal-querier.d.ts.map +1 -1
- package/lib/types/ink/terminal-querier.js +42 -0
- package/lib/types/ink/update-overflow-guard.d.ts +24 -0
- package/lib/types/ink/update-overflow-guard.d.ts.map +1 -1
- package/lib/types/ink/update-overflow-guard.js +25 -3
- package/lib/types/math/renderer.d.ts +2 -0
- package/lib/types/math/renderer.d.ts.map +1 -1
- package/lib/types/math/renderer.js +4 -0
- package/lib/types/minimalUiMode.d.ts +19 -0
- package/lib/types/minimalUiMode.d.ts.map +1 -0
- package/lib/types/minimalUiMode.js +23 -0
- package/lib/types/oauth.d.ts +5 -10
- package/lib/types/oauth.d.ts.map +1 -1
- package/lib/types/oauth.js +5 -10
- package/lib/types/onboardingPrefs.d.ts +52 -0
- package/lib/types/onboardingPrefs.d.ts.map +1 -0
- package/lib/types/onboardingPrefs.js +107 -0
- package/lib/types/panels.d.ts +4 -0
- package/lib/types/panels.d.ts.map +1 -0
- package/lib/types/panels.js +4 -0
- package/lib/types/screens/Chat.d.ts +25 -1
- package/lib/types/screens/Chat.d.ts.map +1 -1
- package/lib/types/screens/Chat.js +1149 -302
- package/lib/types/screens/Launchpad.d.ts +194 -0
- package/lib/types/screens/Launchpad.d.ts.map +1 -0
- package/lib/types/screens/Launchpad.js +607 -0
- package/lib/types/screens/Onboarding.d.ts +37 -0
- package/lib/types/screens/Onboarding.d.ts.map +1 -0
- package/lib/types/screens/Onboarding.js +492 -0
- package/lib/types/screens/SessionSupervisor.d.ts.map +1 -1
- package/lib/types/screens/SessionSupervisor.js +18 -12
- package/lib/types/screens/StatusLine.d.ts +4 -0
- package/lib/types/screens/StatusLine.d.ts.map +1 -1
- package/lib/types/screens/StatusLine.js +43 -25
- package/lib/types/screens/StatusMetrics.d.ts +22 -0
- package/lib/types/screens/StatusMetrics.d.ts.map +1 -1
- package/lib/types/screens/StatusMetrics.js +20 -0
- package/lib/types/screens/chatOverlay.d.ts +18 -1
- package/lib/types/screens/chatOverlay.d.ts.map +1 -1
- package/lib/types/screens/chatOverlay.js +3 -0
- package/lib/types/screens/sessionSupervisor/model.d.ts +1 -2
- package/lib/types/screens/sessionSupervisor/model.d.ts.map +1 -1
- package/lib/types/screens/sessionSupervisor/model.js +4 -2
- package/lib/types/screens/sessionSupervisor/useSessionSupervisor.d.ts.map +1 -1
- package/lib/types/screens/sessionSupervisor/useSessionSupervisor.js +7 -3
- package/lib/types/settings/definitions.d.ts +93 -0
- package/lib/types/settings/definitions.d.ts.map +1 -1
- package/lib/types/settings/definitions.js +87 -4
- package/lib/types/tips.d.ts.map +1 -1
- package/lib/types/tips.js +13 -7
- package/lib/types/tuiDisplayPrefs.d.ts +42 -2
- package/lib/types/tuiDisplayPrefs.d.ts.map +1 -1
- package/lib/types/tuiDisplayPrefs.js +74 -0
- package/lib/types/update.d.ts +53 -9
- package/lib/types/update.d.ts.map +1 -1
- package/lib/types/update.js +103 -46
- package/lib/types/utils/bmp.d.ts.map +1 -1
- package/lib/types/utils/bmp.js +8 -1
- package/lib/types/utils/clipboard.d.ts.map +1 -1
- package/lib/types/utils/clipboard.js +25 -6
- package/lib/types/utils/credentials.d.ts.map +1 -1
- package/lib/types/utils/credentials.js +5 -1
- package/lib/types/utils/draftWordBoundary.d.ts +23 -0
- package/lib/types/utils/draftWordBoundary.d.ts.map +1 -0
- package/lib/types/utils/draftWordBoundary.js +161 -0
- package/lib/types/utils/fileTarget.d.ts.map +1 -1
- package/lib/types/utils/fileTarget.js +7 -9
- package/lib/types/utils/inputPaste.d.ts +62 -0
- package/lib/types/utils/inputPaste.d.ts.map +1 -0
- package/lib/types/utils/inputPaste.js +111 -0
- package/lib/types/utils/intl.d.ts +8 -0
- package/lib/types/utils/intl.d.ts.map +1 -1
- package/lib/types/utils/intl.js +11 -0
- package/lib/types/utils/keymap.d.ts +13 -3
- package/lib/types/utils/keymap.d.ts.map +1 -1
- package/lib/types/utils/keymap.js +27 -5
- package/lib/types/utils/pastedImagePath.d.ts +8 -0
- package/lib/types/utils/pastedImagePath.d.ts.map +1 -1
- package/lib/types/utils/pastedImagePath.js +29 -5
- package/package.json +128 -106
- package/presets/liangshen/agent.cordis.yml +4 -1
- package/presets/liangshen/preset.yml +1 -1
- package/{dsh-ecosystem-spec → tui-profile}/registry/README.md +1 -1
- package/{dsh-ecosystem-spec → tui-profile}/registry/registry-0.15.json +1 -1
- package/lib/types/minimalMode.d.ts +0 -13
- package/lib/types/minimalMode.d.ts.map +0 -1
- package/lib/types/minimalMode.js +0 -17
- package/node_modules/@deepseek-harness-tui/dsh-auth/LICENSE +0 -21
- package/node_modules/@deepseek-harness-tui/dsh-auth/README.md +0 -143
- package/node_modules/@deepseek-harness-tui/dsh-auth/cordis.patch.yml +0 -11
- package/node_modules/@deepseek-harness-tui/dsh-auth/dsh-plugin.json +0 -44
- package/node_modules/@deepseek-harness-tui/dsh-auth/lib/interaction.js +0 -193
- package/node_modules/@deepseek-harness-tui/dsh-auth/package.json +0 -69
- /package/{dsh-ecosystem-spec → tui-profile}/protocols/profile-definitions.d.ts +0 -0
- /package/{dsh-ecosystem-spec → tui-profile}/protocols/profile-definitions.js +0 -0
- /package/{dsh-ecosystem-spec → tui-profile}/protocols/tui-channel-http.d.ts +0 -0
- /package/{dsh-ecosystem-spec → tui-profile}/protocols/tui-channel-http.js +0 -0
- /package/{dsh-ecosystem-spec → tui-profile}/protocols/tui-channel.d.ts +0 -0
- /package/{dsh-ecosystem-spec → tui-profile}/protocols/tui-channel.js +0 -0
- /package/{dsh-ecosystem-spec → tui-profile}/protocols/tui-contributions.d.ts +0 -0
- /package/{dsh-ecosystem-spec → tui-profile}/protocols/tui-contributions.js +0 -0
- /package/{dsh-ecosystem-spec → tui-profile}/registry/contracts/decision-events-v1alpha1.json +0 -0
- /package/{dsh-ecosystem-spec → tui-profile}/registry/contracts/scene-v1alpha1.json +0 -0
- /package/{dsh-ecosystem-spec → tui-profile}/registry/contracts/settings-section-v1alpha1.json +0 -0
- /package/{dsh-ecosystem-spec → tui-profile}/registry/contracts/tui-channel-v1alpha1.json +0 -0
- /package/{dsh-ecosystem-spec → tui-profile}/registry/contracts/workspace-provider-v1alpha1.json +0 -0
- /package/{dsh-ecosystem-spec → tui-profile}/registry/host-descriptor.tui.example.json +0 -0
- /package/{dsh-ecosystem-spec → tui-profile}/registry/permissions-0.1.json +0 -0
- /package/{dsh-ecosystem-spec → tui-profile}/schemas/conformance-claim.schema.json +0 -0
- /package/{dsh-ecosystem-spec → tui-profile}/schemas/effect-ledger-record.schema.json +0 -0
- /package/{dsh-ecosystem-spec → tui-profile}/schemas/host-descriptor.schema.json +0 -0
|
@@ -31,11 +31,13 @@ import { ensurePackagedPresets } from './packaged-presets.js';
|
|
|
31
31
|
import { registerBundledPresets } from './bundled-presets.js';
|
|
32
32
|
import { ensureLegacySessionEventTypes, snapshotLiveSessionEvents } from './compat/index.js';
|
|
33
33
|
import { clearResumeTarget, resumeTargetFromArgv, writeResumeTarget } from '../sessionHistory.js';
|
|
34
|
+
import { initialPromptFromCmdlineArgs } from './startup-args.js';
|
|
34
35
|
import { readHomePrefs } from '../homePrefs.js';
|
|
36
|
+
import { shouldOfferOnboarding } from '../onboardingPrefs.js';
|
|
35
37
|
import { resolveSessionCwd } from '../utils/workspaceRoot.js';
|
|
36
38
|
import { beginRestartAttempt, checkForTuiUpdate, installedTuiVersion, isBootDeadlockTarget, isStandaloneRuntime, isVersionNewer, logRestartEvent, resolveDshProfileName, resolveTuiUpdateTarget, restartTui, updateTuiAndRestart, writeHandoffNotice } from '../update.js';
|
|
37
39
|
import { getLang, isLang, resolveStartupLang, setLang, t, writeLangPref } from '../i18n.js';
|
|
38
|
-
import { DEFAULT_PAGE_MARGIN, DEFAULT_STATUS_BAR, applyImageBacking, applyMathImageBacking, applyMathImageScale, applyMathRendering, applyMermaidDiagrams, applyPageMargin, isPageMarginMode, normalizePageMargin, normalizeScrollGutter, normalizeStatusBar, normalizeToolBackground, parsePageMarginSpec, resolveMathRendering } from '../tuiDisplayPrefs.js';
|
|
40
|
+
import { DEFAULT_PAGE_MARGIN, DEFAULT_SIDE_PANEL_IDS, DEFAULT_STATUS_BAR, SIDE_PANEL_ID_PATTERN, applyCompanionSkin, applyImageBacking, applyMathImageBacking, applyMathImageScale, applyMathRendering, applyMermaidDiagrams, applyPageMargin, applySidePanelOpen, applySidePanelPanels, applySidePanelRatio, applySidePanelSplitEnabled, isPageMarginMode, normalizeJobGroupFold, normalizePageMargin, normalizeScrollGutter, normalizeSidePanelPanels, normalizeStatusBar, normalizeToolBackground, parsePageMarginSpec, resolveMathRendering } from '../tuiDisplayPrefs.js';
|
|
39
41
|
import { draftComboConflicts, effectiveComboString, parseComboDraft, setKeymapOverrides, SHORTCUT_ACTIONS, } from '../utils/keymap.js';
|
|
40
42
|
import { attachHerdrIntegration } from '../herdr.js';
|
|
41
43
|
import { logMouseDebug } from '../utils/debug.js';
|
|
@@ -46,6 +48,7 @@ import { reserveMount } from '../sessionMounts.js';
|
|
|
46
48
|
import { getHostDialogStore } from './dialogs.js';
|
|
47
49
|
import { getHostStatusStore } from './status.js';
|
|
48
50
|
import { createActivityStore } from './activity-store.js';
|
|
51
|
+
import { createContextOccupancyStore } from './context-occupancy.js';
|
|
49
52
|
import { getHostToastStore } from './toast.js';
|
|
50
53
|
import { getHostShortcuts } from './shortcuts.js';
|
|
51
54
|
import { getHostThemes } from './themes.js';
|
|
@@ -61,6 +64,7 @@ import instances from '../ink/instances.js';
|
|
|
61
64
|
import { cursorMove, DISABLE_KITTY_KEYBOARD, DISABLE_MODIFY_OTHER_KEYS, DISABLE_WIN32_INPUT_MODE } from '../ink/termio/csi.js';
|
|
62
65
|
import { DBP, DFE, DISABLE_MOUSE_TRACKING, EXIT_ALT_SCREEN, SHOW_CURSOR } from '../ink/termio/dec.js';
|
|
63
66
|
import { CLEAR_ITERM2_PROGRESS, CLEAR_TAB_STATUS, supportsTabStatus, wrapForMultiplexer } from '../ink/termio/osc.js';
|
|
67
|
+
import { fatalReasonForExit, registerProcessGuardFatalSink } from '../ink/update-overflow-guard.js';
|
|
64
68
|
/**
|
|
65
69
|
* Interactive TUI front door for DeepSeek Harness agents.
|
|
66
70
|
*
|
|
@@ -85,39 +89,28 @@ import { CLEAR_ITERM2_PROGRESS, CLEAR_TAB_STATUS, supportsTabStatus, wrapForMult
|
|
|
85
89
|
let lastBootedFullscreen;
|
|
86
90
|
// Image preferences also stay fixed across host recomposes until /restart.
|
|
87
91
|
let lastBootedTerminalImages;
|
|
92
|
+
// Kept importable from here: the startup parser moved to its own dependency-free
|
|
93
|
+
// module so argv probes can load it without the whole plugin graph.
|
|
94
|
+
export { initialPromptFromCmdlineArgs };
|
|
88
95
|
/**
|
|
89
96
|
* Extract the startup prompt from raw app argv, excluding session selectors
|
|
90
97
|
* and Web startup flag values. `--trusted-host` consumes multiple authorities
|
|
91
98
|
* up to the next flag; none of them are prompt text (issue #882). An app-level
|
|
92
99
|
* `--` ends flag parsing; all following tokens are literal prompt text.
|
|
93
100
|
*/
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
continue;
|
|
108
|
-
}
|
|
109
|
-
if (arg === '--trusted-host') {
|
|
110
|
-
while (args[i + 1] !== undefined && !args[i + 1].startsWith('-'))
|
|
111
|
-
i += 1;
|
|
112
|
-
continue;
|
|
113
|
-
}
|
|
114
|
-
if (arg.startsWith('--resume='))
|
|
115
|
-
continue;
|
|
116
|
-
if (arg.startsWith('-'))
|
|
117
|
-
continue;
|
|
118
|
-
promptArgs.push(arg);
|
|
119
|
-
}
|
|
120
|
-
return promptArgs.join(' ').trim();
|
|
101
|
+
/**
|
|
102
|
+
* 落地页 / 首启引导该不该在这次启动出现。
|
|
103
|
+
*
|
|
104
|
+
* 只看「用户有没有说要回到哪儿」:`--resume` 目标与首句都算他知道自己要去哪。
|
|
105
|
+
* **工作区目标不算**——`dst` 默认把 cwd 当工作区目标喂进来,算进去就等于在本机
|
|
106
|
+
* 最主流的启动方式下把这两个屏永久关掉(实测事故,见调用点的口径注释)。
|
|
107
|
+
*
|
|
108
|
+
* @param input.launchSessionId - 本次要恢复的会话(--resume / DSH_TUI_RESUME_SESSION)。
|
|
109
|
+
* @param input.initialPrompt - 命令行里带的首句提示词(无则空串)。
|
|
110
|
+
* @returns true 表示这次是「普通启动」。
|
|
111
|
+
*/
|
|
112
|
+
export function isLandingLaunch(input) {
|
|
113
|
+
return input.launchSessionId === undefined && input.initialPrompt === '';
|
|
121
114
|
}
|
|
122
115
|
export function resolveTuiHostMode(stdoutIsTTY = process.stdout.isTTY === true, env = process.env) {
|
|
123
116
|
if (stdoutIsTTY) {
|
|
@@ -274,10 +267,10 @@ export async function apply(ctx, runtimeConfig, configOwner = ctx) {
|
|
|
274
267
|
const userQuestions = ctx.get('userQuestions') ?? new UserQuestionService(ctx);
|
|
275
268
|
ctx.plugin(toolAskUser);
|
|
276
269
|
// The host-level tool mount above is intentional for the TUI and for user
|
|
277
|
-
// presets, but the official Minimal preset is a
|
|
278
|
-
//
|
|
279
|
-
// final assembly boundary. Reading the session on every assembly also
|
|
280
|
-
// blank-session /preset switches and resumed sessions behave correctly.
|
|
270
|
+
// presets, but the official Minimal preset is a single-tool trajectory (one
|
|
271
|
+
// persistent shell: bash on POSIX, pwsh on Windows). Filter only that preset
|
|
272
|
+
// at the final assembly boundary. Reading the session on every assembly also
|
|
273
|
+
// makes blank-session /preset switches and resumed sessions behave correctly.
|
|
281
274
|
ctx.on('system-prompt/assemble', async (_assembly, context, next) => {
|
|
282
275
|
const assembled = await next();
|
|
283
276
|
const presetId = context.agent === undefined ? undefined : runningPresetOf(context.agent.session);
|
|
@@ -383,6 +376,14 @@ export async function apply(ctx, runtimeConfig, configOwner = ctx) {
|
|
|
383
376
|
ctx.logger.warn('dsh-tui: tuiScenes service is not mounted; plugin scenes will never open. ' +
|
|
384
377
|
'The bundle patch is older than the installed dsh-tui package — update the globally installed dsh-tui launcher to match the profile (issue #183).');
|
|
385
378
|
}
|
|
379
|
+
// Same skew guard for the side-panel registry (dsh-tui-panels row): the
|
|
380
|
+
// tuiPanels runtime is what admits plugin panels into the PanelStore, so
|
|
381
|
+
// register() warns and returns undefined for every plugin when the row is
|
|
382
|
+
// absent — say why on profile launches.
|
|
383
|
+
if (ctx.get('tuiPanels') === undefined && resolveDshProfileName() !== undefined) {
|
|
384
|
+
ctx.logger.warn('dsh-tui: tuiPanels service is not mounted; plugin side panels will never register. ' +
|
|
385
|
+
'The bundle patch is older than the installed dsh-tui package — update the globally installed dsh-tui launcher to match the profile (issue #183).');
|
|
386
|
+
}
|
|
386
387
|
// Same skew guard for the plugin-UI services (dsh-tui-extensions row):
|
|
387
388
|
// managed dialogs park unanswered, status contributions never render,
|
|
388
389
|
// shortcuts never match, custom-entry renderers stay invisible, and runtime
|
|
@@ -431,7 +432,20 @@ export async function apply(ctx, runtimeConfig, configOwner = ctx) {
|
|
|
431
432
|
// reads the same records. There is deliberately no rail-side "add a
|
|
432
433
|
// workspace" control any more: a terminal's launch directory is the whole
|
|
433
434
|
// registration story.
|
|
434
|
-
|
|
435
|
+
//
|
|
436
|
+
// A RESUMED session is accounted where its OWN header cwd lives, never
|
|
437
|
+
// where this terminal was launched. The launch directory can be an
|
|
438
|
+
// ANCESTOR of the resumed session's: launching in `~/projects` and
|
|
439
|
+
// resuming a session recorded in `~/projects/app` accounts the same
|
|
440
|
+
// session in both workspaces, and the next boot dies inside
|
|
441
|
+
// `validateStoredState` ("session ... is accounted by both workspace
|
|
442
|
+
// ..."), which leaves `workspaceRegistry` unactivated and the whole TUI
|
|
443
|
+
// pending forever. Ownership must therefore agree with the `cwd:` handed
|
|
444
|
+
// to `createChannel` below, which already prefers the persisted header.
|
|
445
|
+
// Fresh sessions record `meta.cwd` at creation, so the launch directory
|
|
446
|
+
// still registers through them.
|
|
447
|
+
const ownershipCwd = agent.session.header.cwd ?? meta.cwd;
|
|
448
|
+
const attached = await attachSessionToWorkspace(ctx, ownershipCwd, agent.session.id);
|
|
435
449
|
if (!attached) {
|
|
436
450
|
ctx.logger.warn(`dsh-tui: session "${agent.session.id}" has no workspace ownership because workspaceRegistry is not mounted`);
|
|
437
451
|
}
|
|
@@ -457,6 +471,13 @@ export async function apply(ctx, runtimeConfig, configOwner = ctx) {
|
|
|
457
471
|
// (the runtime `/activity` command only changes the preset), so a hidden
|
|
458
472
|
// line attaches nothing at all — no feed, no 500ms tick.
|
|
459
473
|
const activityStore = createActivityStore(ctx, config.activity !== false);
|
|
474
|
+
// Read side of the token meter's `contextPressure` unit: the ONE occupancy
|
|
475
|
+
// source for the footer, the segmented bar, the status commands and the
|
|
476
|
+
// context-low warning. Created unconditionally (unlike the activity store,
|
|
477
|
+
// there is no config gate: hiding the bar must not make the warning or the
|
|
478
|
+
// footer read a stale sample). A composition without the meter leaves it
|
|
479
|
+
// empty and the channel falls back to the last-request sample.
|
|
480
|
+
const contextOccupancyStore = createContextOccupancyStore(ctx);
|
|
460
481
|
const rawChannel = createChannel(ctx, agent, {
|
|
461
482
|
// The namespace this boot actually registered the settings section under
|
|
462
483
|
// (the Config owner's Loader id; custom ids are supported). Chat and the
|
|
@@ -467,6 +488,10 @@ export async function apply(ctx, runtimeConfig, configOwner = ctx) {
|
|
|
467
488
|
// soon as this session binds so a resumed or reattached session renders its
|
|
468
489
|
// line immediately instead of waiting for the next event.
|
|
469
490
|
seedActivity: session => activityStore.seed(session),
|
|
491
|
+
// Same reason as the activity line: the occupancy projection only pushes on
|
|
492
|
+
// change, so a resumed session reads one baseline at bind time.
|
|
493
|
+
contextPressure: contextOccupancyStore,
|
|
494
|
+
seedContextOccupancy: session => contextOccupancyStore.seed(session),
|
|
470
495
|
// A RESUMED session keeps its persisted header cwd (issue #96 review):
|
|
471
496
|
// pre-upgrade sessions recorded the launch directory, and re-resolving
|
|
472
497
|
// from the current launch directory would split @ expansion / file
|
|
@@ -501,6 +526,7 @@ export async function apply(ctx, runtimeConfig, configOwner = ctx) {
|
|
|
501
526
|
// screen edits this key live through the dsh-tui namespace.
|
|
502
527
|
diffLayout: config.diffLayout,
|
|
503
528
|
thinkingFold: config.thinkingFold,
|
|
529
|
+
jobGroupFold: config.jobGroupFold,
|
|
504
530
|
toolBackground: config.toolBackground,
|
|
505
531
|
scrollGutter: config.scrollGutter,
|
|
506
532
|
pageMargin: config.pageMargin,
|
|
@@ -550,6 +576,15 @@ export async function apply(ctx, runtimeConfig, configOwner = ctx) {
|
|
|
550
576
|
// mermaid and LaTeX switches ride the same kind of store (Markdown is
|
|
551
577
|
// memoized by content, so no prop reaches the diagram/formula nodes).
|
|
552
578
|
applyPageMargin(config.pageMargin);
|
|
579
|
+
// Side panel (settings `dsh-tui.sidePanel.*`): same reason as pageMargin —
|
|
580
|
+
// the useSidePanel controller reads these module-level stores ABOVE the
|
|
581
|
+
// channel's version bump, so a Ctrl+B toggle re-renders Chat without any
|
|
582
|
+
// session change. applyDisplay below mirrors every settings edit into them.
|
|
583
|
+
applySidePanelSplitEnabled(config.sidePanel?.splitEnabled);
|
|
584
|
+
applySidePanelOpen(config.sidePanel?.open);
|
|
585
|
+
applySidePanelRatio(config.sidePanel?.ratio);
|
|
586
|
+
applySidePanelPanels(config.sidePanel?.panels);
|
|
587
|
+
applyCompanionSkin(config.companion?.skin);
|
|
553
588
|
applyMermaidDiagrams(config.mermaidDiagrams);
|
|
554
589
|
applyMathRendering(resolveMathRendering({}, config));
|
|
555
590
|
applyMathImageScale(config.mathImageScale ?? 'auto');
|
|
@@ -599,6 +634,7 @@ export async function apply(ctx, runtimeConfig, configOwner = ctx) {
|
|
|
599
634
|
const scope = createSettingsScope(configOwner, settingsCtx.settings, tuiSettingsNs, Schema.object({
|
|
600
635
|
diffLayout: Schema.union(['auto', 'split', 'unified']).default('auto'),
|
|
601
636
|
thinkingFold: Schema.union(['preview', 'full']).default('preview'),
|
|
637
|
+
jobGroupFold: Schema.union(['auto', 'always', 'never']).default('auto'),
|
|
602
638
|
toolBackground: Schema.union(['none', 'subtle', 'strong']).default('none'),
|
|
603
639
|
scrollGutter: Schema.union(['timeline', 'scrollbar', 'hidden']).default('timeline'),
|
|
604
640
|
// Preset names AND custom `NxM` specs (the settings field's parse
|
|
@@ -643,6 +679,7 @@ export async function apply(ctx, runtimeConfig, configOwner = ctx) {
|
|
|
643
679
|
contextUsage: Schema.boolean().default(DEFAULT_STATUS_BAR.contextUsage),
|
|
644
680
|
cache: Schema.boolean().default(DEFAULT_STATUS_BAR.cache),
|
|
645
681
|
tokens: Schema.boolean().default(DEFAULT_STATUS_BAR.tokens),
|
|
682
|
+
cost: Schema.boolean().default(DEFAULT_STATUS_BAR.cost),
|
|
646
683
|
tps: Schema.boolean().default(DEFAULT_STATUS_BAR.tps),
|
|
647
684
|
gitBranch: Schema.boolean().default(DEFAULT_STATUS_BAR.gitBranch),
|
|
648
685
|
sessionTitle: Schema.boolean().default(DEFAULT_STATUS_BAR.sessionTitle),
|
|
@@ -654,6 +691,22 @@ export async function apply(ctx, runtimeConfig, configOwner = ctx) {
|
|
|
654
691
|
trajectory: Schema.boolean().default(DEFAULT_STATUS_BAR.trajectory),
|
|
655
692
|
shortcutHint: Schema.boolean().default(DEFAULT_STATUS_BAR.shortcutHint),
|
|
656
693
|
}).default({ ...DEFAULT_STATUS_BAR }),
|
|
694
|
+
// Side-panel preferences. No schema defaults on purpose (same rule as
|
|
695
|
+
// foldTerminalCommand/expandEditor above): a default here would come
|
|
696
|
+
// back from scope.get()/watch() and shadow an explicit cordis.yml
|
|
697
|
+
// `sidePanel` block while the user layer is unset. applyDisplay
|
|
698
|
+
// resolves `?? config.sidePanel?.x` and the apply* stores normalize
|
|
699
|
+
// undefined to the documented defaults (true / false / 0.68 / the
|
|
700
|
+
// built-in panel trio).
|
|
701
|
+
sidePanel: Schema.object({
|
|
702
|
+
splitEnabled: Schema.boolean(),
|
|
703
|
+
open: Schema.boolean(),
|
|
704
|
+
ratio: Schema.number(),
|
|
705
|
+
panels: Schema.string(),
|
|
706
|
+
}),
|
|
707
|
+
companion: Schema.object({
|
|
708
|
+
skin: Schema.string(),
|
|
709
|
+
}),
|
|
657
710
|
// Header pixel whale art; on unless settings.yaml says otherwise.
|
|
658
711
|
whale: Schema.boolean().default(true),
|
|
659
712
|
// Idle whale behaviors after the intro settles; on by default —
|
|
@@ -670,8 +723,9 @@ export async function apply(ctx, runtimeConfig, configOwner = ctx) {
|
|
|
670
723
|
// (undefined → daily), so cordis.yml stays decisive and junk lands on
|
|
671
724
|
// daily.
|
|
672
725
|
splashFont: Schema.string(),
|
|
673
|
-
// Minimal
|
|
674
|
-
//
|
|
726
|
+
// Minimal UI (极简界面, settings key `minimal` — never renamed): strips
|
|
727
|
+
// the header splash, emoji glyphs, and decorative colors; code highlight
|
|
728
|
+
// and tool colors stay. Unrelated to the kernel agent preset `minimal`.
|
|
675
729
|
minimal: Schema.boolean().default(false),
|
|
676
730
|
// No default on purpose: an unset `lang` keeps the field showing
|
|
677
731
|
// the effective language (see the section's format below) and lets
|
|
@@ -714,10 +768,12 @@ export async function apply(ctx, runtimeConfig, configOwner = ctx) {
|
|
|
714
768
|
return;
|
|
715
769
|
channel.setSplashFont(normalizeSplashFont(value.splashFont ?? config.splashFont));
|
|
716
770
|
};
|
|
717
|
-
const
|
|
771
|
+
const applyMinimalUi = (value) => {
|
|
718
772
|
if (shadow)
|
|
719
773
|
return;
|
|
720
|
-
|
|
774
|
+
// `value.minimal` is the persisted settings key (never renamed); the
|
|
775
|
+
// channel member is the minimal-UI flag, NOT the kernel preset.
|
|
776
|
+
channel.setMinimalUi(value.minimal ?? false);
|
|
721
777
|
};
|
|
722
778
|
// Renderer settings are resolved before mount; later edits wait for restart.
|
|
723
779
|
const applyRendererSettings = (value) => {
|
|
@@ -745,6 +801,7 @@ export async function apply(ctx, runtimeConfig, configOwner = ctx) {
|
|
|
745
801
|
if (shadow)
|
|
746
802
|
return;
|
|
747
803
|
channel.setThinkingFold(value.thinkingFold ?? config.thinkingFold ?? 'preview');
|
|
804
|
+
channel.setJobGroupFold(normalizeJobGroupFold(value.jobGroupFold ?? config.jobGroupFold));
|
|
748
805
|
channel.setToolBackground(normalizeToolBackground(value.toolBackground ?? config.toolBackground));
|
|
749
806
|
channel.setScrollGutter(normalizeScrollGutter(value.scrollGutter ?? config.scrollGutter));
|
|
750
807
|
// Page margin: the channel carries the mode (tests observe it), the
|
|
@@ -763,6 +820,15 @@ export async function apply(ctx, runtimeConfig, configOwner = ctx) {
|
|
|
763
820
|
applyMathImageBacking(value.mathImageBacking ?? config.mathImageBacking ?? 'transparent');
|
|
764
821
|
applyImageBacking(value.imageBacking ?? config.imageBacking ?? 'transparent');
|
|
765
822
|
channel.setStatusBar(normalizeStatusBar(value.statusBar ?? config.statusBar));
|
|
823
|
+
// Side panel: no channel member — the layout owns module-level stores
|
|
824
|
+
// (they sit above the channel's version bump), so /settings writes them
|
|
825
|
+
// directly and useSidePanel's own subscriptions re-lay out at once. An
|
|
826
|
+
// unset user layer falls back to cordis.yml, then to the store default.
|
|
827
|
+
applySidePanelSplitEnabled(value.sidePanel?.splitEnabled ?? config.sidePanel?.splitEnabled);
|
|
828
|
+
applySidePanelOpen(value.sidePanel?.open ?? config.sidePanel?.open);
|
|
829
|
+
applySidePanelRatio(value.sidePanel?.ratio ?? config.sidePanel?.ratio);
|
|
830
|
+
applySidePanelPanels(value.sidePanel?.panels ?? config.sidePanel?.panels);
|
|
831
|
+
applyCompanionSkin(value.companion?.skin ?? config.companion?.skin);
|
|
766
832
|
};
|
|
767
833
|
// Legacy user scopes layer over cordis.yml. Modern Config is already
|
|
768
834
|
// resolved: an unset action must not revive its startup override.
|
|
@@ -802,7 +868,7 @@ export async function apply(ctx, runtimeConfig, configOwner = ctx) {
|
|
|
802
868
|
applyWhaleIdle(next);
|
|
803
869
|
applyWhaleGirl(next);
|
|
804
870
|
applySplashFont(next);
|
|
805
|
-
|
|
871
|
+
applyMinimalUi(next);
|
|
806
872
|
applyLang(next);
|
|
807
873
|
applyDisplay(next);
|
|
808
874
|
applyEffortDefault(next);
|
|
@@ -936,6 +1002,9 @@ export async function apply(ctx, runtimeConfig, configOwner = ctx) {
|
|
|
936
1002
|
{
|
|
937
1003
|
...settingField('thinkingFold'),
|
|
938
1004
|
},
|
|
1005
|
+
{
|
|
1006
|
+
...settingField('jobGroupFold'),
|
|
1007
|
+
},
|
|
939
1008
|
{
|
|
940
1009
|
...settingField('toolBackground'),
|
|
941
1010
|
},
|
|
@@ -1076,6 +1145,66 @@ export async function apply(ctx, runtimeConfig, configOwner = ctx) {
|
|
|
1076
1145
|
{
|
|
1077
1146
|
...settingField('statusBar.shortcutHint'),
|
|
1078
1147
|
},
|
|
1148
|
+
{
|
|
1149
|
+
...settingField('sidePanel.splitEnabled'),
|
|
1150
|
+
format(value) {
|
|
1151
|
+
// Unset in the user layer: the effective default is on.
|
|
1152
|
+
return String(typeof value === 'boolean' ? value : config.sidePanel?.splitEnabled !== false);
|
|
1153
|
+
},
|
|
1154
|
+
},
|
|
1155
|
+
{
|
|
1156
|
+
...settingField('sidePanel.open'),
|
|
1157
|
+
format(value) {
|
|
1158
|
+
// Unset in the user layer: the effective default is off.
|
|
1159
|
+
return String(typeof value === 'boolean' ? value : config.sidePanel?.open === true);
|
|
1160
|
+
},
|
|
1161
|
+
},
|
|
1162
|
+
{
|
|
1163
|
+
...settingField('sidePanel.ratio'),
|
|
1164
|
+
placeholder: '0.68',
|
|
1165
|
+
format(value) {
|
|
1166
|
+
// Unset in the user layer: show the effective fraction.
|
|
1167
|
+
const ratio = typeof value === 'number' && Number.isFinite(value) ? value : config.sidePanel?.ratio;
|
|
1168
|
+
return String(ratio ?? 0.68);
|
|
1169
|
+
},
|
|
1170
|
+
parse(text) {
|
|
1171
|
+
const draft = text.trim();
|
|
1172
|
+
if (draft === '')
|
|
1173
|
+
return { kind: 'clear' };
|
|
1174
|
+
const ratio = Number(draft);
|
|
1175
|
+
// Range gate mirrors the geometry contract (0.1–0.95): an
|
|
1176
|
+
// out-of-range draft would be silently clamped by the store, so
|
|
1177
|
+
// refuse it and let the editor keep the error badge instead.
|
|
1178
|
+
if (!Number.isFinite(ratio) || ratio < 0.1 || ratio > 0.95)
|
|
1179
|
+
return undefined;
|
|
1180
|
+
return { kind: 'set', value: ratio };
|
|
1181
|
+
},
|
|
1182
|
+
},
|
|
1183
|
+
{
|
|
1184
|
+
...settingField('sidePanel.panels'),
|
|
1185
|
+
placeholder: DEFAULT_SIDE_PANEL_IDS,
|
|
1186
|
+
format(value) {
|
|
1187
|
+
// Unset in the user layer: show the effective list.
|
|
1188
|
+
return typeof value === 'string' && value.trim() !== ''
|
|
1189
|
+
? value
|
|
1190
|
+
: config.sidePanel?.panels ?? DEFAULT_SIDE_PANEL_IDS;
|
|
1191
|
+
},
|
|
1192
|
+
parse(text) {
|
|
1193
|
+
const draft = text.trim();
|
|
1194
|
+
if (draft === '')
|
|
1195
|
+
return { kind: 'clear' };
|
|
1196
|
+
// Strict gate: every token must be a well-formed panel id. The
|
|
1197
|
+
// store would drop a typo silently, so a draft that does not
|
|
1198
|
+
// round-trip is refused instead of saved as something else.
|
|
1199
|
+
const tokens = draft.split(',').map(token => token.trim().toLowerCase()).filter(token => token !== '');
|
|
1200
|
+
if (tokens.length === 0 || tokens.some(token => !SIDE_PANEL_ID_PATTERN.test(token)))
|
|
1201
|
+
return undefined;
|
|
1202
|
+
return { kind: 'set', value: normalizeSidePanelPanels(draft) };
|
|
1203
|
+
},
|
|
1204
|
+
},
|
|
1205
|
+
{
|
|
1206
|
+
...settingField('companion.skin'),
|
|
1207
|
+
},
|
|
1079
1208
|
{
|
|
1080
1209
|
...settingField('whale'),
|
|
1081
1210
|
},
|
|
@@ -1190,6 +1319,24 @@ export async function apply(ctx, runtimeConfig, configOwner = ctx) {
|
|
|
1190
1319
|
if (error !== undefined) {
|
|
1191
1320
|
const message = error instanceof Error ? error.message : String(error);
|
|
1192
1321
|
ctx.logger.error(`dsh-tui: exit after error: ${message}`);
|
|
1322
|
+
// A crash must leave the resume marker a clean exit would leave: the
|
|
1323
|
+
// launcher's next start (and its safe-mode retry) then reopens the
|
|
1324
|
+
// session the user was actually in instead of a blank one. Only the
|
|
1325
|
+
// resumable case writes — unlike the clean-exit branch below, a crash
|
|
1326
|
+
// never CLEARS a marker, so a session the user still has cannot be
|
|
1327
|
+
// dropped by a failure that happened before the first message landed.
|
|
1328
|
+
try {
|
|
1329
|
+
if (isExitResumable({
|
|
1330
|
+
pendingCount: channel.pending.length,
|
|
1331
|
+
liveAgent: ctx.agents.get(SessionId(channel.agentId)),
|
|
1332
|
+
startupAgent: agent,
|
|
1333
|
+
})) {
|
|
1334
|
+
writeResumeTarget(channel.agentId);
|
|
1335
|
+
}
|
|
1336
|
+
}
|
|
1337
|
+
catch {
|
|
1338
|
+
// Resume persistence is best effort and must never block the exit.
|
|
1339
|
+
}
|
|
1193
1340
|
void finishExit(ctx, instance, bootedFullscreen, undefined, `dsh-tui crashed: ${message}`, () => disposeRootAndExit(ctx, 1));
|
|
1194
1341
|
return;
|
|
1195
1342
|
}
|
|
@@ -1250,6 +1397,25 @@ export async function apply(ctx, runtimeConfig, configOwner = ctx) {
|
|
|
1250
1397
|
},
|
|
1251
1398
|
});
|
|
1252
1399
|
const handleExit = funnel.handleExit;
|
|
1400
|
+
// Process-level crash backstop (see installNestedUpdateOverflowProcessGuard):
|
|
1401
|
+
// an uncaught exception or unhandled rejection that is NOT the React #185
|
|
1402
|
+
// overflow would otherwise take Node's default path and kill the process
|
|
1403
|
+
// before this funnel runs — no resume marker, no terminal restore, and the
|
|
1404
|
+
// launcher's "entered safe mode" prompt on what looks like a lost session.
|
|
1405
|
+
// Route it through the same teardown a fatal RENDER error uses: unmount,
|
|
1406
|
+
// `dsh-tui crashed: …`, dispose, exit 1. Fail loud stays intact — the funnel
|
|
1407
|
+
// returns false when it has already settled or the tree is being torn down
|
|
1408
|
+
// (host recompose), and the guard then rethrows to Node's default crash.
|
|
1409
|
+
// DSH_TUI_NO_185_PROCESS_GUARD=1 skips the guard entirely, leaving process
|
|
1410
|
+
// error policy to the host exactly as before.
|
|
1411
|
+
registerProcessGuardFatalSink((error, origin) => {
|
|
1412
|
+
// An undefined reason (`Promise.reject()`, `throw undefined`) must not reach
|
|
1413
|
+
// the funnel as-is: `error !== undefined` is what selects the crash path, so
|
|
1414
|
+
// a bare undefined would exit 0 while this sink claims the process.
|
|
1415
|
+
const fatal = fatalReasonForExit(error, origin);
|
|
1416
|
+
ctx.logger.error(`dsh-tui: fatal ${origin}: ${fatal instanceof Error ? fatal.message : String(fatal)}`);
|
|
1417
|
+
return handleExit(fatal);
|
|
1418
|
+
});
|
|
1253
1419
|
// External injection controller: Chat fills it with `{ append, submit }`
|
|
1254
1420
|
// every render; the injection socket (opened below) drives it. A ref rather
|
|
1255
1421
|
// than a prop callback so the socket handler always reaches the live Chat.
|
|
@@ -1274,10 +1440,33 @@ export async function apply(ctx, runtimeConfig, configOwner = ctx) {
|
|
|
1274
1440
|
* so a process that dies before the first frame does not consume it.
|
|
1275
1441
|
*/
|
|
1276
1442
|
const homeSeen = readHomePrefs().seen === true;
|
|
1277
|
-
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
|
-
|
|
1443
|
+
/**
|
|
1444
|
+
* 「普通启动」在这里有两档口径,差在**工作区目标算不算**:
|
|
1445
|
+
*
|
|
1446
|
+
* - 落地页与首启引导只认「没说要回到哪儿」:没有 resume 目标、没有首句。
|
|
1447
|
+
* - home(会话与工作区)还多认一条「没说在哪儿干活」——那一屏问的就是这个。
|
|
1448
|
+
*
|
|
1449
|
+
* 工作区目标**不能**进前者的判定:`dst` 那类 launcher 默认把 cwd 当工作区
|
|
1450
|
+
* 目标喂进来(D:/node/dst.cmd 里 set DSH_TUI_WORKSPACE_TARGET=%CD%),一旦
|
|
1451
|
+
* 算进去,落地页在本机最主流的启动方式下**永远不出**——用户实测「既没看到
|
|
1452
|
+
* ob 也没看到 lp」的根因就是这一条。
|
|
1453
|
+
*/
|
|
1454
|
+
const noResume = isLandingLaunch({ launchSessionId, initialPrompt });
|
|
1455
|
+
const openHomeOnBoot = !homeSeen && noResume && requestedWorkspace === undefined;
|
|
1456
|
+
/**
|
|
1457
|
+
* The launchpad is NOT one-shot the way the workspace home is: every
|
|
1458
|
+
* ordinary launch starts on it, because it is where the first sentence gets
|
|
1459
|
+
* typed rather than a tutorial that retires itself. `DSH_TUI_NO_LAUNCHPAD=1`
|
|
1460
|
+
* is the escape hatch (an automation that wants the old blank conversation
|
|
1461
|
+
* and no dialog in front of it).
|
|
1462
|
+
*/
|
|
1463
|
+
const launchpadOnBoot = noResume && process.env.DSH_TUI_NO_LAUNCHPAD !== '1';
|
|
1464
|
+
/**
|
|
1465
|
+
* The first-run guide. Gated on its own preference (not on `homeSeen`): the
|
|
1466
|
+
* two answer different questions, and an install that already knows its
|
|
1467
|
+
* workspace may still never have configured a key.
|
|
1468
|
+
*/
|
|
1469
|
+
const onboardingOnBoot = noResume && shouldOfferOnboarding();
|
|
1281
1470
|
const chat = React.createElement(Chat, {
|
|
1282
1471
|
channel,
|
|
1283
1472
|
renderScene: createChannelSceneOutlet(() => rawChannel.pluginScene),
|
|
@@ -1285,10 +1474,13 @@ export async function apply(ctx, runtimeConfig, configOwner = ctx) {
|
|
|
1285
1474
|
approvalStore,
|
|
1286
1475
|
injectControllerRef,
|
|
1287
1476
|
openHomeOnBoot,
|
|
1477
|
+
launchpadOnBoot,
|
|
1478
|
+
onboardingOnBoot,
|
|
1288
1479
|
// The dsh-tui-extensions row's services (managed dialogs, status line,
|
|
1289
1480
|
// shortcuts). Soft-consumed: absent the row (stale patch, bare embed),
|
|
1290
1481
|
// Chat falls back to inert stores and no shortcut registry.
|
|
1291
1482
|
extensionDialogs: getHostDialogStore(ctx.get('tuiDialogs')),
|
|
1483
|
+
bonusNotices: ctx.get('dshAuth')?.coupons,
|
|
1292
1484
|
extensionStatus: getHostStatusStore(ctx.get('tuiStatus')),
|
|
1293
1485
|
// The working line's semantics belong to the dsh-working-activity plugin's
|
|
1294
1486
|
// session projection; this store is the read side of that seam, so the TUI
|
|
@@ -1445,6 +1637,10 @@ export async function apply(ctx, runtimeConfig, configOwner = ctx) {
|
|
|
1445
1637
|
ctx.effect(() => () => {
|
|
1446
1638
|
logMouseDebug('apply teardown');
|
|
1447
1639
|
funnel.markTeardown();
|
|
1640
|
+
// Drop the crash backstop with this mount: a torn-down funnel cannot own
|
|
1641
|
+
// the process, so a later fatal error falls back to Node's default crash
|
|
1642
|
+
// instead of reaching a disposed ctx.
|
|
1643
|
+
registerProcessGuardFatalSink(undefined);
|
|
1448
1644
|
rawChannel.releaseContributions();
|
|
1449
1645
|
instance?.unmount();
|
|
1450
1646
|
});
|
|
@@ -1648,11 +1844,12 @@ export function createExitFunnel(deps) {
|
|
|
1648
1844
|
},
|
|
1649
1845
|
handleExit: (error) => {
|
|
1650
1846
|
if (teardown)
|
|
1651
|
-
return;
|
|
1847
|
+
return false;
|
|
1652
1848
|
if (exited)
|
|
1653
|
-
return;
|
|
1849
|
+
return false;
|
|
1654
1850
|
exited = true;
|
|
1655
1851
|
deps.onUserExit(error);
|
|
1852
|
+
return true;
|
|
1656
1853
|
},
|
|
1657
1854
|
};
|
|
1658
1855
|
}
|
|
@@ -79,10 +79,32 @@ export declare function runningPresetOf(session: unknown): string | undefined;
|
|
|
79
79
|
*/
|
|
80
80
|
export declare function resolvePersistedRoute(ctx: Context, sessionId: SessionId): Promise<ModelRoute | undefined>;
|
|
81
81
|
/**
|
|
82
|
-
*
|
|
83
|
-
*
|
|
84
|
-
*
|
|
85
|
-
*
|
|
82
|
+
* Whether the host-layer `ask_user_question` tool must stay invisible to one
|
|
83
|
+
* preset's model-facing catalog.
|
|
84
|
+
*
|
|
85
|
+
* The official Minimal preset is a single-persistent-shell trajectory
|
|
86
|
+
* (`@deepseek-ai/dsh-web-app/presets/minimal.patch.yml`: `persona` +
|
|
87
|
+
* `persistent-shell`, i.e. bash on POSIX / pwsh on Windows — `str_replace_editor`
|
|
88
|
+
* has been opt-in since 0.1.3-alpha.2), while the TUI mounts
|
|
89
|
+
* ask_user_question at the HOST layer so every other preset (including user
|
|
90
|
+
* presets) can use its questionnaire UI; that host-layer tool otherwise merges
|
|
91
|
+
* into Minimal's scoped catalog as an extra tool.
|
|
92
|
+
*
|
|
93
|
+
* The recorded preset id is the only signal available at the assembly
|
|
94
|
+
* boundary: the composition exposes no per-tool manifest, and a host tool's
|
|
95
|
+
* presence in the tool registry cannot tell whether a preset declared it. This
|
|
96
|
+
* is therefore the ONE preset-id read in the capability path, shared with
|
|
97
|
+
* `resolveAgentCapabilities` so advertisement and assembly agree, and pinned
|
|
98
|
+
* by `verify:minimal-preset-tools`.
|
|
99
|
+
*
|
|
100
|
+
* @param presetId - Preset recorded for the requesting session.
|
|
101
|
+
* @returns True when the host-layer tool must be filtered out of the assembly.
|
|
102
|
+
*/
|
|
103
|
+
export declare function presetHidesHostAskTool(presetId: string | undefined): boolean;
|
|
104
|
+
/**
|
|
105
|
+
* Keep the official Minimal preset's model-facing catalog minimal: it declares
|
|
106
|
+
* exactly one persistent shell tool, and the host-mounted ask_user_question
|
|
107
|
+
* must not become a second one.
|
|
86
108
|
*
|
|
87
109
|
* This is a per-assembly filter rather than a startup-time decision because
|
|
88
110
|
* one TUI process can resume, create, or recompose sessions under different
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../../../src/dsh-adapter/presets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AACpE,OAAO,EAAsB,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAWtE,kEAAkE;AAClE,MAAM,WAAW,iBAAiB;IAChC,kFAAkF;IAClF,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,yEAAyE;IACzE,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,CAAA;CAC5B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAmBhG;AAED;;;;;;;;;GASG;AACH,wBAAsB,sBAAsB,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAW5G;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAGpE;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAW/G;AAED
|
|
1
|
+
{"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../../../src/dsh-adapter/presets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AACpE,OAAO,EAAsB,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAWtE,kEAAkE;AAClE,MAAM,WAAW,iBAAiB;IAChC,kFAAkF;IAClF,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,yEAAyE;IACzE,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,CAAA;CAC5B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAmBhG;AAED;;;;;;;;;GASG;AACH,wBAAsB,sBAAsB,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAW5G;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAGpE;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAW/G;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAE5E;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,cAAc,CAM/G;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE;IAAE,GAAG,EAAE,OAAO,CAAA;CAAE,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAKpG"}
|
|
@@ -120,10 +120,34 @@ export async function resolvePersistedRoute(ctx, sessionId) {
|
|
|
120
120
|
}
|
|
121
121
|
}
|
|
122
122
|
/**
|
|
123
|
-
*
|
|
124
|
-
*
|
|
125
|
-
*
|
|
126
|
-
*
|
|
123
|
+
* Whether the host-layer `ask_user_question` tool must stay invisible to one
|
|
124
|
+
* preset's model-facing catalog.
|
|
125
|
+
*
|
|
126
|
+
* The official Minimal preset is a single-persistent-shell trajectory
|
|
127
|
+
* (`@deepseek-ai/dsh-web-app/presets/minimal.patch.yml`: `persona` +
|
|
128
|
+
* `persistent-shell`, i.e. bash on POSIX / pwsh on Windows — `str_replace_editor`
|
|
129
|
+
* has been opt-in since 0.1.3-alpha.2), while the TUI mounts
|
|
130
|
+
* ask_user_question at the HOST layer so every other preset (including user
|
|
131
|
+
* presets) can use its questionnaire UI; that host-layer tool otherwise merges
|
|
132
|
+
* into Minimal's scoped catalog as an extra tool.
|
|
133
|
+
*
|
|
134
|
+
* The recorded preset id is the only signal available at the assembly
|
|
135
|
+
* boundary: the composition exposes no per-tool manifest, and a host tool's
|
|
136
|
+
* presence in the tool registry cannot tell whether a preset declared it. This
|
|
137
|
+
* is therefore the ONE preset-id read in the capability path, shared with
|
|
138
|
+
* `resolveAgentCapabilities` so advertisement and assembly agree, and pinned
|
|
139
|
+
* by `verify:minimal-preset-tools`.
|
|
140
|
+
*
|
|
141
|
+
* @param presetId - Preset recorded for the requesting session.
|
|
142
|
+
* @returns True when the host-layer tool must be filtered out of the assembly.
|
|
143
|
+
*/
|
|
144
|
+
export function presetHidesHostAskTool(presetId) {
|
|
145
|
+
return presetId === 'minimal';
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Keep the official Minimal preset's model-facing catalog minimal: it declares
|
|
149
|
+
* exactly one persistent shell tool, and the host-mounted ask_user_question
|
|
150
|
+
* must not become a second one.
|
|
127
151
|
*
|
|
128
152
|
* This is a per-assembly filter rather than a startup-time decision because
|
|
129
153
|
* one TUI process can resume, create, or recompose sessions under different
|
|
@@ -134,7 +158,7 @@ export async function resolvePersistedRoute(ctx, sessionId) {
|
|
|
134
158
|
* @returns The original assembly, except ask_user_question is absent in Minimal.
|
|
135
159
|
*/
|
|
136
160
|
export function filterMinimalPresetTools(assembly, presetId) {
|
|
137
|
-
if (presetId
|
|
161
|
+
if (!presetHidesHostAskTool(presetId) || !assembly.tools.some(tool => tool.name === ASK_USER_TOOL))
|
|
138
162
|
return assembly;
|
|
139
163
|
return {
|
|
140
164
|
...assembly,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"providerWizard.d.ts","sourceRoot":"","sources":["../../../src/dsh-adapter/providerWizard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAsH,MAAM,sCAAsC,CAAA;AACjM,YAAY,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,aAAa,EAAE,cAAc,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAA;AAsBjM,OAAO,EAEL,KAAK,qBAAqB,EAE1B,KAAK,sBAAsB,EAC5B,MAAM,iCAAiC,CAAA;AACxC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAE9D,iFAAiF;AACjF,eAAO,MAAM,iBAAiB,QAAoC,CAAA;AAElE,2EAA2E;AAC3E,eAAO,MAAM,kBAAkB,2EAIrB,CAAA;AAEV;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAA;IAChC,QAAQ,CAAC,GAAG,EAAE,CACZ,OAAO,EAAE,sBAAsB,EAC/B,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,KAC3B,OAAO,CAAC,qBAAqB,CAAC,CAAA;IACnC,QAAQ,CAAC,MAAM,EAAE,CACf,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,KACtE,IAAI,CAAA;IACT,QAAQ,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,KAAK,IAAI,CAAA;IACrE,2EAA2E;IAC3E,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAA;IAC/B,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;CAC5E;AAED,MAAM,MAAM,qBAAqB,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,YAAY,GAAG,WAAW,GAAG,QAAQ,CAAA;AA4D3G;;;;;;;;;;;;GAYG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC,qBAAqB,CAAC,CA8BhC;
|
|
1
|
+
{"version":3,"file":"providerWizard.d.ts","sourceRoot":"","sources":["../../../src/dsh-adapter/providerWizard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAsH,MAAM,sCAAsC,CAAA;AACjM,YAAY,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,aAAa,EAAE,cAAc,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAA;AAsBjM,OAAO,EAEL,KAAK,qBAAqB,EAE1B,KAAK,sBAAsB,EAC5B,MAAM,iCAAiC,CAAA;AACxC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAE9D,iFAAiF;AACjF,eAAO,MAAM,iBAAiB,QAAoC,CAAA;AAElE,2EAA2E;AAC3E,eAAO,MAAM,kBAAkB,2EAIrB,CAAA;AAEV;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAA;IAChC,QAAQ,CAAC,GAAG,EAAE,CACZ,OAAO,EAAE,sBAAsB,EAC/B,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,KAC3B,OAAO,CAAC,qBAAqB,CAAC,CAAA;IACnC,QAAQ,CAAC,MAAM,EAAE,CACf,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,KACtE,IAAI,CAAA;IACT,QAAQ,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,KAAK,IAAI,CAAA;IACrE,2EAA2E;IAC3E,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAA;IAC/B,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;CAC5E;AAED,MAAM,MAAM,qBAAqB,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,YAAY,GAAG,WAAW,GAAG,QAAQ,CAAA;AA4D3G;;;;;;;;;;;;GAYG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC,qBAAqB,CAAC,CA8BhC;AAw3BD,8DAA8D;AAC9D,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,QAAQ,GAAG,aAAa,CAAA;AACrE,MAAM,MAAM,qBAAqB,GAAG,SAAS,GAAG,QAAQ,GAAG,aAAa,CAAA;AACxE,MAAM,MAAM,oBAAoB,GAC5B,aAAa,GACb,qBAAqB,GACrB,gBAAgB,CAAA;AAEpB,qEAAqE;AACrE,MAAM,WAAW,cAAc;IAC7B;uEACmE;IACnE,QAAQ,CAAC,IAAI,EAAE,SAAS,kBAAkB,EAAE,CAAA;IAC5C,6EAA6E;IAC7E,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IACxC,8DAA8D;IAC9D,QAAQ,CAAC,OAAO,EAAE,qBAAqB,CAAA;IACvC,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAA;IACjC,QAAQ,CAAC,MAAM,CAAC,EAAE,oBAAoB,CAAA;CACvC"}
|
|
@@ -817,7 +817,9 @@ function buildDeleteSummary(provider) {
|
|
|
817
817
|
/** Masked state line for one provider row in the OAuth pick question. */
|
|
818
818
|
function oauthStateDescription(status) {
|
|
819
819
|
if (status.signedIn) {
|
|
820
|
-
return
|
|
820
|
+
return status.expiresAt === undefined
|
|
821
|
+
? t('provider-oauth-state-in-no-expiry')
|
|
822
|
+
: t('provider-oauth-state-in', { time: new Date(status.expiresAt).toISOString() });
|
|
821
823
|
}
|
|
822
824
|
return status.expired
|
|
823
825
|
? t('provider-oauth-state-expired')
|
|
@@ -872,7 +874,9 @@ async function runOAuthWizard(deps, oauth) {
|
|
|
872
874
|
pushLocal('/provider', [
|
|
873
875
|
t('provider-line-oauth-provider', { provider: result.provider }),
|
|
874
876
|
t('provider-line-oauth-flow', { flow: result.oauthLabel }),
|
|
875
|
-
|
|
877
|
+
...(result.expiresAt === undefined
|
|
878
|
+
? []
|
|
879
|
+
: [t('provider-line-oauth-expires', { time: new Date(result.expiresAt).toISOString() })]),
|
|
876
880
|
t('provider-switch-hint'),
|
|
877
881
|
]);
|
|
878
882
|
notify(t('provider-oauth-login-ok', { provider: result.provider }), { color: 'success' });
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extract the startup prompt from raw app argv, excluding session selectors
|
|
3
|
+
* and Web startup flag values. `--trusted-host` consumes multiple authorities
|
|
4
|
+
* up to the next flag; none of them are prompt text (issue #882). An app-level
|
|
5
|
+
* `--` ends flag parsing; all following tokens are literal prompt text.
|
|
6
|
+
*/
|
|
7
|
+
export declare function initialPromptFromCmdlineArgs(args: readonly string[] | undefined): string;
|
|
8
|
+
//# sourceMappingURL=startup-args.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"startup-args.d.ts","sourceRoot":"","sources":["../../../src/dsh-adapter/startup-args.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,GAAG,MAAM,CAsBxF"}
|