@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
|
@@ -21,6 +21,7 @@ import { BRAND, FLASH, ICE, PALE, sweep } from './shimmer.js';
|
|
|
21
21
|
import { STANDARD_FRAME_INDEX, WhaleArt } from './Whale.js';
|
|
22
22
|
import { WhaleGirlArt } from './WhaleGirl.js';
|
|
23
23
|
import { MAID_BOX_CENTER, MaidPortrait, useMaidPortraits } from './maidPortrait.js';
|
|
24
|
+
import { SplashMascot, useSplashMascotSkin } from './sidePanel/companion/SplashMascot.js';
|
|
24
25
|
import { OPENING_SEQUENCES, pickOpeningSequence, WHALE_FRAME_INDEX } from './whaleFrames.js';
|
|
25
26
|
import { RESTING_POSE } from './whaleLayers.js';
|
|
26
27
|
import { initialWhaleIdleState, nextWhaleIdleStep, } from './whaleIdle.js';
|
|
@@ -87,7 +88,7 @@ function capitalize(text) {
|
|
|
87
88
|
* with a clickable "star us on GitHub" line whose indent is recomputed from
|
|
88
89
|
* its own width.
|
|
89
90
|
*/
|
|
90
|
-
export function LogoV2({ model, effort, cwd, skipIntro = false, intro, tip, fontId, whale = true, whaleIdle = true, whaleGirl = false, starred = false, starReveal, onStarClick, working = false, drift, egg, starChance, }) {
|
|
91
|
+
export function LogoV2({ model = '', effort, cwd = '', skipIntro = false, intro, tip, fontId, whale = true, whaleIdle = true, whaleGirl = false, starred = false, starReveal, onStarClick, working = false, drift, egg, starChance, align = 'start', chrome = 'full', arrangement = 'row', companionSkin, }) {
|
|
91
92
|
// One intro per logo mount: the production path rolls (startup splash
|
|
92
93
|
// and each /deepseek replay roll independently), the `intro` seam pins
|
|
93
94
|
// a specific animation for probes.
|
|
@@ -118,6 +119,12 @@ export function LogoV2({ model, effort, cwd, skipIntro = false, intro, tip, font
|
|
|
118
119
|
if (working)
|
|
119
120
|
setWhaleFrozen(true);
|
|
120
121
|
}, [working]);
|
|
122
|
+
// ── 启动页吉祥物(2026-10 复用轮):companion.skin 驱动 ────────────────
|
|
123
|
+
// deepy → 字母格动画;whaleGirl → 鲸娘动画(图像协议自适应,首帧字母格
|
|
124
|
+
// 同步可画);两者都取代艺术槽的原住民(分层鲸/静态女仆娘立绘)。
|
|
125
|
+
// 'whale'/未知皮肤 → undefined,原路径零改动。冻结/落地页(whaleIdle=
|
|
126
|
+
// false)时吉祥物定格 idle 帧 0、零时钟(SplashMascot 内部保证)。
|
|
127
|
+
const mascotSkin = useSplashMascotSkin(companionSkin);
|
|
121
128
|
// ── Whale behaviors (ported from the dsh-ui-whale pet) ─────────────────
|
|
122
129
|
// Intro-phase click → heart pass: whole heart frames over the opening
|
|
123
130
|
// animation (one-way heart1→heart2→heart3). Once the header settles, the
|
|
@@ -163,7 +170,21 @@ export function LogoV2({ model, effort, cwd, skipIntro = false, intro, tip, font
|
|
|
163
170
|
const [dailyEgg] = React.useState(() => (egg === undefined ? pickSplashEgg() : egg));
|
|
164
171
|
const titleFont = dailyEgg === null ? font : withTagline(font, dailyEgg.top, dailyEgg.bottom);
|
|
165
172
|
// 窄终端阶梯:鲸鱼 + 大字 → 纯大字 → 纯鲸鱼 → 一行纯文字(阈值随字体字身宽度变)。
|
|
166
|
-
const
|
|
173
|
+
const splash = resolveSplashLayout(columns, { whale, font: titleFont });
|
|
174
|
+
/**
|
|
175
|
+
* 上下排布(落地页)时立绘与词标**不共行**,宽轴那套「谁挤掉谁」的判定不适用:
|
|
176
|
+
* 立绘只看自己放不放得下(盒宽)。照并排阈值走会在 55–96 列这一大段把立绘判掉,
|
|
177
|
+
* 而落地页明明有一整行宽度给它——实测症状是「撤立绘」那一档不生效:矮屏上鲸鱼
|
|
178
|
+
* 照画,把大字与卡片挤出屏幕。
|
|
179
|
+
*/
|
|
180
|
+
const stacked = arrangement === 'column';
|
|
181
|
+
const { showWhale, showBigTitle, showPlainTitle } = stacked
|
|
182
|
+
? {
|
|
183
|
+
showWhale: whale && columns >= WHALE_BOX_WIDTH,
|
|
184
|
+
showBigTitle: splash.showBigTitle,
|
|
185
|
+
showPlainTitle: !splash.showBigTitle,
|
|
186
|
+
}
|
|
187
|
+
: splash;
|
|
167
188
|
// 女仆娘档优先走**真图**(Kitty/Sixel 终端图像协议,见 `maidPortrait.tsx`);
|
|
168
189
|
// 协议不可用(内联模式、终端不支持)或资产解码失败时,回落到字符画版
|
|
169
190
|
// 女仆娘(`WhaleGirl.tsx` 半块精灵——作者占位,之后会换更好看的)。
|
|
@@ -207,9 +228,9 @@ export function LogoV2({ model, effort, cwd, skipIntro = false, intro, tip, font
|
|
|
207
228
|
const pendingHeartRef = React.useRef(false);
|
|
208
229
|
const tickRef = React.useRef(null);
|
|
209
230
|
React.useEffect(() => {
|
|
210
|
-
//
|
|
211
|
-
//
|
|
212
|
-
if (!settled || !whaleIdle || !showWhale || whaleFrozen || whaleGirl) {
|
|
231
|
+
// 女仆娘档(真图或字符画)与吉祥物档(SplashMascot 自带节拍器)都
|
|
232
|
+
// 不需要鲸鱼的闲置规划器:那两条路径里分层鲸根本没画。
|
|
233
|
+
if (!settled || !whaleIdle || !showWhale || whaleFrozen || whaleGirl || mascotSkin !== undefined) {
|
|
213
234
|
setIdlePose(null);
|
|
214
235
|
tickRef.current = null;
|
|
215
236
|
return;
|
|
@@ -316,9 +337,14 @@ export function LogoV2({ model, effort, cwd, skipIntro = false, intro, tip, font
|
|
|
316
337
|
// line than `logo-tagline`, so reusing the tagline's width would push it
|
|
317
338
|
// visibly off-center.
|
|
318
339
|
const welcomeWidth = starLine === null ? stringWidth(tagline) : starLine.width;
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
340
|
+
// 居中排版(落地页)交给父级的 `alignItems="center"`,缩进一律为 0;只有
|
|
341
|
+
// 转录区顶部那一版才需要"把标语钉在鲸鱼下方"。这条判据与根盒的
|
|
342
|
+
// `align` 走同一个开关,否则两种对齐会各偏一点。
|
|
343
|
+
const welcomePad = align === 'center'
|
|
344
|
+
? 0
|
|
345
|
+
: showWhale
|
|
346
|
+
? Math.max(0, Math.round((whaleGirl ? MAID_BOX_CENTER : WHALE_CENTER) - welcomeWidth / 2))
|
|
347
|
+
: 2;
|
|
322
348
|
// 两行标题各自用字体声明的字距;下排再按 `bottomIndent` 居中——
|
|
323
349
|
// 两者一起保证画出来的列数相等(见 splashFonts 的 tagline 契约)。
|
|
324
350
|
// 节日彩蛋换的就是这里的两排词(`titleFont` 已按当天词对重解字距);字体若自带
|
|
@@ -326,12 +352,13 @@ export function LogoV2({ model, effort, cwd, skipIntro = false, intro, tip, font
|
|
|
326
352
|
const { top, bottom, topKerning, bottomKerning, bottomIndent } = titleFont.tagline;
|
|
327
353
|
const bigDeepSeek = renderBigText(titleFont, top, t, titleFont.palette?.from ?? wordmarkRGB, titleFont.palette?.to ?? taglineRGB, FLASH, 60, topKerning);
|
|
328
354
|
const bigHarness = renderBigText(titleFont, bottom, t, titleFont.palette?.from ?? taglineRGB, titleFont.palette?.to ?? PALE, FLASH, 60, bottomKerning, bottomIndent);
|
|
329
|
-
//
|
|
330
|
-
//
|
|
355
|
+
// 立绘槽位的**唯一真源**:文字列的实际行数。full = 词标 1 + 两排大字 +
|
|
356
|
+
// 两排之间空 1 行 + 模型/目录/提示 3 行;minimal = 只有两排大字 + 空行
|
|
357
|
+
//(信息行整块不画,见 chrome prop)。槽位与它等高,图片既不压过文字列
|
|
331
358
|
// 也不留一截在下面(实机反馈「超出去、不和谐」);大字换字体/换词时也
|
|
332
|
-
//
|
|
333
|
-
const textColumnRows = bigDeepSeek.length + bigHarness.length + 5;
|
|
334
|
-
return (_jsxs(Box, { ref: ref, flexDirection: "column", marginTop: 1, children: [_jsxs(Box, { flexDirection:
|
|
359
|
+
// 自动跟着变,不写死数字。
|
|
360
|
+
const textColumnRows = bigDeepSeek.length + bigHarness.length + (chrome === 'minimal' ? 1 : 5);
|
|
361
|
+
return (_jsxs(Box, { ref: ref, flexDirection: "column", marginTop: 1, ...(align === 'center' ? { alignItems: 'center' } : {}), children: [_jsxs(Box, { flexDirection: arrangement === 'column' ? 'column' : 'row', gap: arrangement === 'column' ? 1 : COLUMN_GAP, alignItems: "center", ...(align === 'center' || arrangement === 'column' ? {} : { width: '100%' }), children: [showWhale && (_jsx(Box, { flexDirection: "column", alignItems: "center", flexShrink: 0, onClick: () => {
|
|
335
362
|
// Frozen (first task started): the whale is a static logo —
|
|
336
363
|
// clicks do nothing. Settled: the layered planner consumes the
|
|
337
364
|
// click on its next tick — run that tick immediately so the
|
|
@@ -355,9 +382,9 @@ export function LogoV2({ model, effort, cwd, skipIntro = false, intro, tip, font
|
|
|
355
382
|
setHeartSeq(0);
|
|
356
383
|
setHeartKey(k => k + 1);
|
|
357
384
|
}
|
|
358
|
-
}, children: whaleGirl ? (_jsx(Box, { width: WHALE_BOX_WIDTH, height: textColumnRows, flexDirection: "row", justifyContent: "center", alignItems: "center", children: maidImageActive ? (_jsx(MaidPortrait, { source: maidHappy ? (portraits?.happy ?? maidSource) : maidSource, maxColumns: WHALE_BOX_WIDTH, maxRows: textColumnRows, presentation: "transcript" })) : (_jsx(WhaleGirlArt, { width: WHALE_BOX_WIDTH })) })) : (_jsx(WhaleArt, { frameIndex: frameIndex, pose: settled && whaleIdle && !whaleFrozen ? (idlePose ?? RESTING_POSE) : undefined, width: WHALE_BOX_WIDTH })) })), (showBigTitle || showPlainTitle) && (_jsxs(Box, { flexDirection: "column", flexShrink: 1, children: [_jsxs(Text, { wrap: "truncate-end", children: [sweep('✦ dsh-TUI', t, wordmarkRGB, wordmarkShimmerRGB, 60), _jsx(Text, { dimColor: true, children: ' v' + VERSION })] }), showBigTitle ? (_jsxs(_Fragment, { children: [bigDeepSeek.map((row, index) => (_jsx(Text, { wrap: "truncate-end", children: row }, `ds-${index}`))), _jsx(Box, { height: 1 }), bigHarness.map((row, index) => (_jsx(Text, { wrap: "truncate-end", children: row }, `h-${index}`)))] })) : (showPlainTitle && (_jsx(Text, { color: "accent", bold: true, wrap: "truncate-end", children: "DeepSeek Harness" }))), _jsxs(Text, { wrap: "truncate-end", children: [model, effort !== undefined && _jsx(Text, { dimColor: true, children: ' · ' + capitalize(effort) + ' effort' })] }), _jsx(Text, { dimColor: true, wrap: "truncate-end", children: cwd }), _jsxs(Text, { wrap: "truncate-end", children: [_jsx(Text, { dimColor: true, children: tr('logo-tip-prefix') }), getLang() === 'zh' ? randomTip.zh : randomTip.en, _jsx(Text, { dimColor: true, children: ' · /tips ' + tr('logo-tip-more') })] }), driftLine != null && (_jsxs(Text, { color: "warning", wrap: "wrap", children: ["\u26A0", ' ', tOr(`logo-drift-${driftLine.kind}`, `The dsh engine (${driftLine.versions.join(' / ')}) does not match the validated ${UPSTREAM_VALIDATED_VERSION}; reinstall via npm i -g @deepseek-ai/dsh@${UPSTREAM_VALIDATED_VERSION}.`, {
|
|
385
|
+
}, children: _jsx(Box, { width: WHALE_BOX_WIDTH, flexDirection: "column", alignItems: "center", children: mascotSkin !== undefined ? (_jsx(SplashMascot, { skin: mascotSkin, active: !whaleFrozen && whaleIdle })) : whaleGirl ? (_jsx(Box, { width: WHALE_BOX_WIDTH, height: textColumnRows, flexDirection: "row", justifyContent: "center", alignItems: "center", children: maidImageActive ? (_jsx(MaidPortrait, { source: maidHappy ? (portraits?.happy ?? maidSource) : maidSource, maxColumns: WHALE_BOX_WIDTH, maxRows: textColumnRows, presentation: "transcript" })) : (_jsx(WhaleGirlArt, { width: WHALE_BOX_WIDTH })) })) : (_jsx(WhaleArt, { frameIndex: frameIndex, pose: settled && whaleIdle && !whaleFrozen ? (idlePose ?? RESTING_POSE) : undefined, width: WHALE_BOX_WIDTH })) }) })), (showBigTitle || showPlainTitle) && (_jsxs(Box, { flexDirection: "column", flexShrink: 1, children: [chrome !== 'minimal' && (_jsxs(Text, { wrap: "truncate-end", children: [sweep('✦ dsh-TUI', t, wordmarkRGB, wordmarkShimmerRGB, 60), _jsx(Text, { dimColor: true, children: ' v' + VERSION })] })), showBigTitle ? (_jsxs(_Fragment, { children: [bigDeepSeek.map((row, index) => (_jsx(Text, { wrap: "truncate-end", children: row }, `ds-${index}`))), _jsx(Box, { height: 1 }), bigHarness.map((row, index) => (_jsx(Text, { wrap: "truncate-end", children: row }, `h-${index}`)))] })) : (showPlainTitle && (_jsx(Text, { color: "accent", bold: true, wrap: "truncate-end", children: "DeepSeek Harness" }))), chrome !== 'minimal' && (_jsxs(_Fragment, { children: [_jsxs(Text, { wrap: "truncate-end", children: [model, effort !== undefined && _jsx(Text, { dimColor: true, children: ' · ' + capitalize(effort) + ' effort' })] }), _jsx(Text, { dimColor: true, wrap: "truncate-end", children: cwd }), _jsxs(Text, { wrap: "truncate-end", children: [_jsx(Text, { dimColor: true, children: tr('logo-tip-prefix') }), getLang() === 'zh' ? randomTip.zh : randomTip.en, _jsx(Text, { dimColor: true, children: ' · /tips ' + tr('logo-tip-more') })] })] })), chrome !== 'minimal' && driftLine != null && (_jsxs(Text, { color: "warning", wrap: "wrap", children: ["\u26A0", ' ', tOr(`logo-drift-${driftLine.kind}`, `The dsh engine (${driftLine.versions.join(' / ')}) does not match the validated ${UPSTREAM_VALIDATED_VERSION}; reinstall via npm i -g @deepseek-ai/dsh@${UPSTREAM_VALIDATED_VERSION}.`, {
|
|
359
386
|
installed: driftLine.versions.join(' / '),
|
|
360
387
|
validated: UPSTREAM_VALIDATED_VERSION,
|
|
361
388
|
primary: UPSTREAM_VALIDATED_VERSION,
|
|
362
|
-
})] }))] }))] }), _jsx(Box, { flexDirection: "column", marginTop: 1, ...(starLine === null || onStarClick === undefined ? {} : { onClick: onStarClick }), children: starLine === null ? (_jsx(Box, { paddingLeft: welcomePad, children: _jsx(Text, { children: sweep(tagline, t, taglineRGB, FLASH, 60) }) })) : (_jsxs(_Fragment, { children: [_jsx(Box, { paddingLeft: welcomePad, children: _jsx(Text, { children: sweep(starLine.title, t, taglineRGB, FLASH, 60) }) }), revealed >= 1 && (_jsx(Box, { paddingLeft: welcomePad, children: _jsx(Text, { dimColor: true, children: starLine.stats }) })), revealed >= 2 && starred !== true && starLine.ask !== null && (_jsx(Box, { paddingLeft: welcomePad, children: _jsx(Text, { children: starLine.ask }) }))] })) })] }));
|
|
389
|
+
})] }))] }))] }), (chrome !== 'minimal' || starLine !== null) && (_jsx(Box, { flexDirection: "column", marginTop: 1, ...(starLine === null || onStarClick === undefined ? {} : { onClick: onStarClick }), children: starLine === null ? (_jsx(Box, { paddingLeft: welcomePad, children: _jsx(Text, { children: sweep(tagline, t, taglineRGB, FLASH, 60) }) })) : (_jsxs(_Fragment, { children: [_jsx(Box, { paddingLeft: welcomePad, children: _jsx(Text, { children: sweep(starLine.title, t, taglineRGB, FLASH, 60) }) }), revealed >= 1 && (_jsx(Box, { paddingLeft: welcomePad, children: _jsx(Text, { dimColor: true, children: starLine.stats }) })), revealed >= 2 && starred !== true && starLine.ask !== null && (_jsx(Box, { paddingLeft: welcomePad, children: _jsx(Text, { children: starLine.ask }) }))] })) }))] }));
|
|
363
390
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { type ScrollBoxHandle } from '../ui.js';
|
|
3
3
|
import type { ChatRow } from '../dsh-adapter/channel.js';
|
|
4
|
+
import type { JobGroupFoldMode } from '../tuiDisplayPrefs.js';
|
|
4
5
|
import type { TranscriptImage } from '../dsh-adapter/transcript-images.js';
|
|
5
6
|
import type { DOMElement } from '../ink/dom.js';
|
|
6
7
|
import { type TimelineSnapshot } from '../ink/timeline-rail.js';
|
|
@@ -24,7 +25,7 @@ import type { ToolBackground } from '../tuiDisplayPrefs.js';
|
|
|
24
25
|
* any host.
|
|
25
26
|
*/
|
|
26
27
|
export declare function displaySelectionPath(path: string, sessionCwd: string | undefined, caseInsensitive?: boolean): string;
|
|
27
|
-
export declare function MessageList({ rows, expanded, expandedRows, selectedId, onToggleRow, streamViewToggledRows, onToggleStreamView, model, diffLayout, thinkingFold, toolBackground, foldTerminalCommand, smoothStreaming, activityFrames, showAll, onToggleAll, onLoadOlder, thinkingVisible, historyPaintEnabled, registerRowRef, scrollHandle, forceMountRowId, newSinceRowId, onUnseenCount, onTimeline, failureHintRowId, failureHint, onOpenSubagent, onOpenJobs, onOpenFile, sessionCwd, onPreviewImage, suppressImageGraphics, }: {
|
|
28
|
+
export declare function MessageList({ rows, expanded, expandedRows, selectedId, onToggleRow, streamViewToggledRows, onToggleStreamView, model, diffLayout, thinkingFold, jobGroupFold, toolBackground, foldTerminalCommand, smoothStreaming, activityFrames, showAll, onToggleAll, onLoadOlder, thinkingVisible, historyPaintEnabled, registerRowRef, scrollHandle, forceMountRowId, newSinceRowId, onUnseenCount, onTimeline, failureHintRowId, failureHint, onOpenSubagent, onOpenJobs, onOpenFile, sessionCwd, onPreviewImage, suppressImageGraphics, }: {
|
|
28
29
|
rows: readonly ChatRow[];
|
|
29
30
|
expanded: boolean;
|
|
30
31
|
expandedRows: ReadonlySet<number>;
|
|
@@ -38,6 +39,11 @@ export declare function MessageList({ rows, expanded, expandedRows, selectedId,
|
|
|
38
39
|
diffLayout?: 'auto' | 'split' | 'unified';
|
|
39
40
|
/** Thinking-block display mode from channel (`preview`/`full`). */
|
|
40
41
|
thinkingFold?: 'preview' | 'full';
|
|
42
|
+
/** Grouping/folding of consecutive job-card runs (settings
|
|
43
|
+
* `dsh-tui.jobGroupFold`): `auto` folds a settled run of ≥3 into its
|
|
44
|
+
* summary header, `always` folds any run of ≥2, `never` leaves runs open
|
|
45
|
+
* (a header click still folds one by hand). */
|
|
46
|
+
jobGroupFold?: JobGroupFoldMode;
|
|
41
47
|
/** Tool-card background treatment from the live channel settings. */
|
|
42
48
|
toolBackground?: ToolBackground;
|
|
43
49
|
/** Terminal-card header folding from the live channel settings. */
|
|
@@ -109,7 +115,7 @@ export declare function MessageList({ rows, expanded, expandedRows, selectedId,
|
|
|
109
115
|
/** 打开子代理详情场景(transcript 内点击子代理卡)。 */
|
|
110
116
|
onOpenSubagent?: (agentId: string) => void;
|
|
111
117
|
/** 打开 /jobs 后台任务面板(transcript 内点击任务卡)。 */
|
|
112
|
-
onOpenJobs?: () => void;
|
|
118
|
+
onOpenJobs?: (focusId?: string) => void;
|
|
113
119
|
/** 点击工具卡内的文件路径(打开文件操作菜单)。 */
|
|
114
120
|
onOpenFile?: (path: string) => void;
|
|
115
121
|
/** Session working directory (fs path, `channel.cwd`): the IDE-selection
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessageList.d.ts","sourceRoot":"","sources":["../../../src/components/MessageList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAA;AAEvC,OAAO,EAA8B,KAAK,eAAe,EAAE,MAAM,UAAU,CAAA;AAE3E,OAAO,KAAK,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"MessageList.d.ts","sourceRoot":"","sources":["../../../src/components/MessageList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAA;AAEvC,OAAO,EAA8B,KAAK,eAAe,EAAE,MAAM,UAAU,CAAA;AAE3E,OAAO,KAAK,EAAE,OAAO,EAA2E,MAAM,2BAA2B,CAAA;AACjI,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAE7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAA;AAC1E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAoB/C,OAAO,EAAe,KAAK,gBAAgB,EAAqB,MAAM,yBAAyB,CAAA;AAC/F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAyF3D;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,eAAe,GAAE,OAAuE,GACvF,MAAM,CAoBR;AAkLD,wBAAgB,WAAW,CAAC,EAC1B,IAAI,EACJ,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,WAAW,EACX,qBAA8C,EAC9C,kBAA4C,EAC5C,KAAK,EACL,UAAmB,EACnB,YAAwB,EACxB,YAAqB,EACrB,cAAuB,EACvB,mBAA2B,EAC3B,eAAuB,EACvB,cAAc,EACd,OAAO,EACP,WAAW,EACX,WAAW,EACX,eAAsB,EACtB,mBAA0B,EAC1B,cAAc,EACd,YAAY,EACZ,eAAe,EACf,aAAa,EACb,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,UAAU,EACV,UAAU,EACV,UAAU,EACV,cAAc,EACd,qBAA6B,GAC9B,EAAE;IACD,IAAI,EAAE,SAAS,OAAO,EAAE,CAAA;IACxB,QAAQ,EAAE,OAAO,CAAA;IACjB,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IACjC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACpC,+CAA+C;IAC/C,qBAAqB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IAC3C,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAC5C,KAAK,EAAE,MAAM,CAAA;IACb,yEAAyE;IACzE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAA;IACzC,mEAAmE;IACnE,YAAY,CAAC,EAAE,SAAS,GAAG,MAAM,CAAA;IACjC;;;oDAGgD;IAChD,YAAY,CAAC,EAAE,gBAAgB,CAAA;IAC/B,qEAAqE;IACrE,cAAc,CAAC,EAAE,cAAc,CAAA;IAC/B,mEAAmE;IACnE,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B;;sEAEkE;IAClE,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB;sEACkE;IAClE,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,OAAO,EAAE,OAAO,CAAA;IAChB,WAAW,EAAE,MAAM,IAAI,CAAA;IACvB;4BACwB;IACxB,WAAW,CAAC,EAAE,MAAM,IAAI,CAAA;IACxB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB;;;;;;;OAOG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,8EAA8E;IAC9E,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,GAAG,IAAI,KAAK,IAAI,CAAA;IAC/D,oDAAoD;IACpD,YAAY,CAAC,EAAE,eAAe,GAAG,IAAI,CAAA;IACrC,4EAA4E;IAC5E,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B;8EAC0E;IAC1E,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,0EAA0E;IAC1E,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAA;IAC9C;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAChC,4DAA4D;IAC5D,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,qCAAqC;IACrC,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IAC1C,0CAA0C;IAC1C,UAAU,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC,6BAA6B;IAC7B,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACnC;;;;8CAI0C;IAC1C,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC/B,4CAA4C;IAC5C,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAA;IACjD,qEAAqE;IACrE,qBAAqB,CAAC,EAAE,OAAO,CAAA;CAChC,qBA6+BA;AAqdD;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,MAAM,EACN,GAAG,EACH,MAAM,EACN,KAAY,EACZ,SAAgB,EAChB,SAAiB,EACjB,OAAe,EACf,WAAW,EACX,OAAe,EACf,SAAiB,GAClB,EAAE;IACD,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3B,GAAG,EAAE,MAAM,CAAA;IACX;oEACgE;IAChE,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,wEAAwE;IACxE,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,mFAAmF;IACnF,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,0CAA0C;IAC1C,WAAW,CAAC,EAAE,MAAM,IAAI,CAAA;IACxB,8BAA8B;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB;qEACiE;IACjE,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB,GAAG,KAAK,CAAC,SAAS,CASlB"}
|
|
@@ -10,7 +10,8 @@ import { AssistantThinkingMessage } from './messages/AssistantThinkingMessage.js
|
|
|
10
10
|
import { AssistantToolUseMessage } from './messages/AssistantToolUseMessage.js';
|
|
11
11
|
import { SubagentMessage } from './Chat/SubagentMessage.js';
|
|
12
12
|
import { JobCard } from './Chat/JobCard.js';
|
|
13
|
-
import {
|
|
13
|
+
import { JobGroupHeader } from './Chat/JobGroupHeader.js';
|
|
14
|
+
import { isMinimalUiMode } from '../minimalUiMode.js';
|
|
14
15
|
import { noteFrameCause, noteListGeometry } from '../ink/geometry-trace.js';
|
|
15
16
|
import { getTerminalFlushTick } from '../ink/flush-tick.js';
|
|
16
17
|
import { TurnInterruptedRow } from './TurnInterruptedRow.js';
|
|
@@ -45,6 +46,13 @@ import { primaryComboString } from '../utils/keymap.js';
|
|
|
45
46
|
* paint (<1s) with the rest behind the show-previous divider. The transcript
|
|
46
47
|
* is a viewport, not a printout; load-earlier restores older rows. */
|
|
47
48
|
const RENDERED_ROW_CAP = 120;
|
|
49
|
+
/** Threshold of the `auto` jobGroupFold policy: a run of this many (or
|
|
50
|
+
* more) FULLY SETTLED jobs folds into its own summary line. Two jobs are
|
|
51
|
+
* still a pair worth reading card by card — the group rail alone already
|
|
52
|
+
* saves their separator lines there. `always` uses 2, `never` uses none.
|
|
53
|
+
* Ctrl+O and a click on the summary reopen any group; clicking again folds
|
|
54
|
+
* it back. */
|
|
55
|
+
const JOB_GROUP_FOLD_MIN = 3;
|
|
48
56
|
// --- layout virtualization constants -------------------------------------
|
|
49
57
|
// Offscreen rows render as fixed-height spacers whose heights come from the
|
|
50
58
|
// previous commit's Yoga layout, so the pure-JS Yoga engine never walks
|
|
@@ -158,6 +166,18 @@ export function displaySelectionPath(path, sessionCwd, caseInsensitive = process
|
|
|
158
166
|
* (parts.slice()).
|
|
159
167
|
*/
|
|
160
168
|
const signatureScratch = [];
|
|
169
|
+
/** Status code for the job-group fingerprint (a hash input only — the values
|
|
170
|
+
* just have to be distinct per status). */
|
|
171
|
+
function jobStatusCode(status) {
|
|
172
|
+
switch (status) {
|
|
173
|
+
case 'running': return 1;
|
|
174
|
+
case 'stopping': return 2;
|
|
175
|
+
case 'completed': return 3;
|
|
176
|
+
case 'failed': return 4;
|
|
177
|
+
case 'killed': return 5;
|
|
178
|
+
default: return 7;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
161
181
|
function signatureParts(row, columns, expanded, expandedRows, streamViewToggledRows, thinkingVisible, thinkingFold, diffLayout, foldTerminalCommand, model, failureHintRowId, failureHint, displayTextLen, sessionCwd) {
|
|
162
182
|
signatureScratch.length = 0;
|
|
163
183
|
// Universal height inputs: width reflows every row; kind switches height
|
|
@@ -180,7 +200,7 @@ function signatureParts(row, columns, expanded, expandedRows, streamViewToggledR
|
|
|
180
200
|
case 'reasoning':
|
|
181
201
|
// thinkingFold (preview vs full), its per-row live override, and the
|
|
182
202
|
// visibility filter all change the card's height.
|
|
183
|
-
signatureScratch.push(row.streaming === true, expanded, expandedRows.has(row.id), streamViewToggledRows.has(row.id), thinkingVisible, thinkingFold);
|
|
203
|
+
signatureScratch.push(row.streaming === true, row.thinkingOpen === true, expanded, expandedRows.has(row.id), streamViewToggledRows.has(row.id), thinkingVisible, thinkingFold);
|
|
184
204
|
break;
|
|
185
205
|
case 'tool': {
|
|
186
206
|
const tool = row.tool;
|
|
@@ -197,6 +217,31 @@ function signatureParts(row, columns, expanded, expandedRows, streamViewToggledR
|
|
|
197
217
|
// height 永不过期 → 滚回 blank band / 滚不到底。
|
|
198
218
|
signatureScratch.push(row.subagent?.status ?? '', row.subagent?.toolCalls.length ?? 0, row.subagent?.outputLines.length ?? 0, row.subagent?.error?.length ?? 0);
|
|
199
219
|
break;
|
|
220
|
+
case 'job': {
|
|
221
|
+
// Card height inputs: the group decoration reshapes the row wholesale
|
|
222
|
+
// (the head adds the summary line, a folded run collapses into it, the
|
|
223
|
+
// rail shifts the body two columns right), the waterfall grows and
|
|
224
|
+
// shrinks with mirrored output, and settling drops the progress chip
|
|
225
|
+
// and the waterfall while it may add the detail tail. Missing any of
|
|
226
|
+
// them leaves an offscreen card's cached height stale → blank band /
|
|
227
|
+
// unreachable scroll bottom (the subagent card's lesson).
|
|
228
|
+
const group = row.jobGroup;
|
|
229
|
+
signatureScratch.push(row.job?.status ?? '',
|
|
230
|
+
// The label drives the card's height: it wraps inside its column and
|
|
231
|
+
// the rail is painted per line, so a label that lands later (the
|
|
232
|
+
// kernel fills it in after launch) must invalidate the cached height.
|
|
233
|
+
row.job?.label?.length ?? 0, row.job?.outputLines.length ?? 0, row.job?.detail?.length ?? 0, row.job?.progress?.length ?? 0,
|
|
234
|
+
// The waterfall wraps its tail and keeps the last rows, so how much
|
|
235
|
+
// text those tail lines carry decides how many rows actually paint.
|
|
236
|
+
row.job === undefined
|
|
237
|
+
? ''
|
|
238
|
+
: row.job.outputLines.slice(-4).map(line => line.text.length).join(','),
|
|
239
|
+
// Grouped members all render with the same 2-cell rail, so the only
|
|
240
|
+
// shape inputs are "is it a member", "is it the head" and "is the run
|
|
241
|
+
// folded" (a folded head paints the summary alone).
|
|
242
|
+
group !== undefined, group?.head === true, group?.last === true, group?.folded === true);
|
|
243
|
+
break;
|
|
244
|
+
}
|
|
200
245
|
case 'compact':
|
|
201
246
|
// Folded one-liner vs full summary text.
|
|
202
247
|
signatureScratch.push(expanded, expandedRows.has(row.id));
|
|
@@ -232,7 +277,7 @@ function signatureParts(row, columns, expanded, expandedRows, streamViewToggledR
|
|
|
232
277
|
}
|
|
233
278
|
return signatureScratch;
|
|
234
279
|
}
|
|
235
|
-
export function MessageList({ rows, expanded, expandedRows, selectedId, onToggleRow, streamViewToggledRows = NO_STREAM_VIEW_TOGGLED, onToggleStreamView = NOOP_TOGGLE_STREAM_VIEW, model, diffLayout = 'auto', thinkingFold = 'preview', toolBackground = 'none', foldTerminalCommand = false, smoothStreaming = false, activityFrames, showAll, onToggleAll, onLoadOlder, thinkingVisible = true, historyPaintEnabled = true, registerRowRef, scrollHandle, forceMountRowId, newSinceRowId, onUnseenCount, onTimeline, failureHintRowId, failureHint, onOpenSubagent, onOpenJobs, onOpenFile, sessionCwd, onPreviewImage, suppressImageGraphics = false, }) {
|
|
280
|
+
export function MessageList({ rows, expanded, expandedRows, selectedId, onToggleRow, streamViewToggledRows = NO_STREAM_VIEW_TOGGLED, onToggleStreamView = NOOP_TOGGLE_STREAM_VIEW, model, diffLayout = 'auto', thinkingFold = 'preview', jobGroupFold = 'auto', toolBackground = 'none', foldTerminalCommand = false, smoothStreaming = false, activityFrames, showAll, onToggleAll, onLoadOlder, thinkingVisible = true, historyPaintEnabled = true, registerRowRef, scrollHandle, forceMountRowId, newSinceRowId, onUnseenCount, onTimeline, failureHintRowId, failureHint, onOpenSubagent, onOpenJobs, onOpenFile, sessionCwd, onPreviewImage, suppressImageGraphics = false, }) {
|
|
236
281
|
const lang = React.useSyncExternalStore(subscribeLang, getLang);
|
|
237
282
|
const hiddenCount = rows.length - RENDERED_ROW_CAP;
|
|
238
283
|
// The thinking filter runs BEFORE virtualization so window indices line up.
|
|
@@ -264,11 +309,25 @@ export function MessageList({ rows, expanded, expandedRows, selectedId, onToggle
|
|
|
264
309
|
}
|
|
265
310
|
}
|
|
266
311
|
}
|
|
312
|
+
// Job-group fingerprint: job statuses land IN PLACE (`row.job` is
|
|
313
|
+
// re-assigned by the projection, the row array never moves) and the expand
|
|
314
|
+
// toggles live in a Set — none of that shows up in the rows identity or
|
|
315
|
+
// length key above, yet both decide whether a consecutive-job run folds,
|
|
316
|
+
// and a folded run REMOVES its members from the visible window. One
|
|
317
|
+
// allocation-free pass over the row list (only job rows feed the hash).
|
|
318
|
+
let jobsSig = (expanded ? 1 : 0) * 7 + (jobGroupFold === 'always' ? 1 : jobGroupFold === 'never' ? 2 : 3);
|
|
319
|
+
for (let i = 0; i < rows.length; i++) {
|
|
320
|
+
const row = rows[i];
|
|
321
|
+
if (row.kind !== 'job' || row.job === undefined)
|
|
322
|
+
continue;
|
|
323
|
+
jobsSig = (jobsSig * 33 + row.id + jobStatusCode(row.job.status) + (expandedRows.has(row.id) ? 7 : 0)) | 0;
|
|
324
|
+
}
|
|
267
325
|
if (visibleCache === null ||
|
|
268
326
|
visibleCache.rows !== rows ||
|
|
269
327
|
visibleCache.rowsLength !== rows.length ||
|
|
270
328
|
visibleCache.showAll !== (showAll || hiddenCount <= 0) ||
|
|
271
329
|
visibleCache.thinkingVisible !== thinkingVisible ||
|
|
330
|
+
visibleCache.jobsSig !== jobsSig ||
|
|
272
331
|
!streamBitsSame) {
|
|
273
332
|
const sliced = showAll || hiddenCount <= 0
|
|
274
333
|
? rows
|
|
@@ -299,20 +358,132 @@ export function MessageList({ rows, expanded, expandedRows, selectedId, onToggle
|
|
|
299
358
|
break;
|
|
300
359
|
}
|
|
301
360
|
}
|
|
361
|
+
// The transcript can arrive FROZEN end to end: the session projection
|
|
362
|
+
// freezes both the row array and every row object (session-projection.ts
|
|
363
|
+
// `Object.freeze(rows.map(row => Object.freeze({ ...row })))`), so the
|
|
364
|
+
// pass-through branch below must COPY rather than alias it. The group
|
|
365
|
+
// decoration further down is render-local derived state: it rides
|
|
366
|
+
// shallow copies inside this writable array, never the shared row
|
|
367
|
+
// objects (an in-place write throws on a frozen row and takes the TUI
|
|
368
|
+
// down at startup — the resume/replay first frame delivers exactly
|
|
369
|
+
// that shape).
|
|
302
370
|
const out = hasEmptyAssistant
|
|
303
371
|
? sliced.filter(row => !rendersEmptyAssistant(row) &&
|
|
304
372
|
(thinkingVisible || row.kind !== 'reasoning'))
|
|
305
373
|
: thinkingVisible
|
|
306
|
-
? sliced
|
|
374
|
+
? sliced.slice()
|
|
307
375
|
: sliced.filter(row => row.kind !== 'reasoning');
|
|
308
|
-
//
|
|
309
|
-
//
|
|
310
|
-
//
|
|
376
|
+
// --- consecutive-job groups ------------------------------------------
|
|
377
|
+
// A batch of run_in_background calls lands as N adjacent job cards (the
|
|
378
|
+
// projection pushes the whole roster in one sync) and EVERY card pays
|
|
379
|
+
// the 1-row block margin — a pile of near-identical rows for work nobody
|
|
380
|
+
// reads card by card. Read ≥2 adjacent job rows as ONE group instead:
|
|
381
|
+
// members drop the blank line between them, hang off a shared chain
|
|
382
|
+
// rail, and the head row carries the run summary. A fully settled run
|
|
383
|
+
// (≥ JOB_GROUP_FOLD_MIN) folds into that summary alone.
|
|
384
|
+
//
|
|
385
|
+
// Folded members are removed HERE, before virtualization, so window
|
|
386
|
+
// indices line up (same rule as the thinking filter). The fold is the
|
|
387
|
+
// ordinary per-row expand gesture: clicking the summary — or Ctrl+O —
|
|
388
|
+
// reopens the run, clicking again folds it back.
|
|
389
|
+
//
|
|
390
|
+
// Runs are detected in the VISIBLE list, so a run whose head fell behind
|
|
391
|
+
// the RENDERED_ROW_CAP fold window is read from the first visible member
|
|
392
|
+
// (the header then counts what is on screen — never a headerless rail).
|
|
393
|
+
const foldedMembers = new Set();
|
|
394
|
+
for (let i = 0; i < out.length; i++) {
|
|
395
|
+
const head = out[i];
|
|
396
|
+
if (head.kind !== 'job' || head.job === undefined)
|
|
397
|
+
continue;
|
|
398
|
+
let end = i;
|
|
399
|
+
while (end + 1 < out.length) {
|
|
400
|
+
const next = out[end + 1];
|
|
401
|
+
if (next.kind !== 'job' || next.job === undefined)
|
|
402
|
+
break;
|
|
403
|
+
end++;
|
|
404
|
+
}
|
|
405
|
+
const count = end - i + 1;
|
|
406
|
+
if (count < 2) {
|
|
407
|
+
// A lone card renders exactly as it did before groups existed (no
|
|
408
|
+
// rail, its own block margin). Nothing to clear: the decoration
|
|
409
|
+
// lives on per-pass shallow copies, never on the shared rows.
|
|
410
|
+
i = end;
|
|
411
|
+
continue;
|
|
412
|
+
}
|
|
413
|
+
let running = 0;
|
|
414
|
+
let completed = 0;
|
|
415
|
+
let failed = 0;
|
|
416
|
+
let killed = 0;
|
|
417
|
+
let startedAt = Number.POSITIVE_INFINITY;
|
|
418
|
+
let endedAt;
|
|
419
|
+
for (let k = i; k <= end; k++) {
|
|
420
|
+
const job = out[k].job;
|
|
421
|
+
switch (job.status) {
|
|
422
|
+
case 'running':
|
|
423
|
+
case 'stopping':
|
|
424
|
+
running++;
|
|
425
|
+
break;
|
|
426
|
+
case 'completed':
|
|
427
|
+
completed++;
|
|
428
|
+
break;
|
|
429
|
+
case 'killed':
|
|
430
|
+
killed++;
|
|
431
|
+
break;
|
|
432
|
+
default:
|
|
433
|
+
failed++;
|
|
434
|
+
}
|
|
435
|
+
startedAt = Math.min(startedAt, job.startedAt);
|
|
436
|
+
if (job.finishedAt !== undefined)
|
|
437
|
+
endedAt = Math.max(endedAt ?? job.finishedAt, job.finishedAt);
|
|
438
|
+
}
|
|
439
|
+
// A live member means the run is not over: no duration to freeze.
|
|
440
|
+
if (running > 0)
|
|
441
|
+
endedAt = undefined;
|
|
442
|
+
// Fold policy (settings `dsh-tui.jobGroupFold`): `auto` waits for the
|
|
443
|
+
// whole run to settle, `always` folds a run of 2+ immediately (live
|
|
444
|
+
// members included — the header still reports what is running), and
|
|
445
|
+
// `never` leaves the decision to a header click. Ctrl+O force-expands
|
|
446
|
+
// every run; the header click lands in expandedRows.
|
|
447
|
+
const foldMin = jobGroupFold === 'always' ? 2 : JOB_GROUP_FOLD_MIN;
|
|
448
|
+
const folded = jobGroupFold !== 'never' && count >= foldMin &&
|
|
449
|
+
(jobGroupFold === 'always' || running === 0) && !expanded && !expandedRows.has(head.id);
|
|
450
|
+
for (let k = i; k <= end; k++) {
|
|
451
|
+
// Copy-on-write: decorate a shallow copy. `out[k].jobGroup = …` in
|
|
452
|
+
// place throws on the frozen rows the session projection delivers
|
|
453
|
+
// (resume/replay), crashing the TUI at startup.
|
|
454
|
+
out[k] = {
|
|
455
|
+
...(out[k]),
|
|
456
|
+
jobGroup: {
|
|
457
|
+
head: k === i,
|
|
458
|
+
last: k === end,
|
|
459
|
+
count,
|
|
460
|
+
folded,
|
|
461
|
+
running,
|
|
462
|
+
completed,
|
|
463
|
+
failed,
|
|
464
|
+
killed,
|
|
465
|
+
startedAt,
|
|
466
|
+
...(endedAt === undefined ? {} : { endedAt }),
|
|
467
|
+
},
|
|
468
|
+
};
|
|
469
|
+
}
|
|
470
|
+
if (folded) {
|
|
471
|
+
for (let k = i + 1; k <= end; k++)
|
|
472
|
+
foldedMembers.add(out[k].id);
|
|
473
|
+
}
|
|
474
|
+
i = end;
|
|
475
|
+
}
|
|
476
|
+
const visibleOut = foldedMembers.size === 0 ? out : out.filter(row => !foldedMembers.has(row.id));
|
|
477
|
+
// Every rendered block gets a 1-row top margin except the first. Pre-pass
|
|
478
|
+
// over the FULL list so a windowed row keeps the exact spacing it would
|
|
479
|
+
// have in a fully-mounted list. Group members are the exception: they sit
|
|
480
|
+
// flush under their head, which is the separator line the group removes.
|
|
311
481
|
const margins = new Map();
|
|
312
482
|
{
|
|
313
483
|
let prev;
|
|
314
|
-
for (const row of
|
|
315
|
-
|
|
484
|
+
for (const row of visibleOut) {
|
|
485
|
+
const member = row.jobGroup !== undefined && !row.jobGroup.head;
|
|
486
|
+
margins.set(row.id, prev !== undefined && !member);
|
|
316
487
|
prev = row.kind;
|
|
317
488
|
}
|
|
318
489
|
}
|
|
@@ -324,9 +495,10 @@ export function MessageList({ rows, expanded, expandedRows, selectedId, onToggle
|
|
|
324
495
|
rowsLength: rows.length,
|
|
325
496
|
showAll: showAll || hiddenCount <= 0,
|
|
326
497
|
thinkingVisible,
|
|
327
|
-
out,
|
|
498
|
+
out: visibleOut,
|
|
328
499
|
margins,
|
|
329
500
|
streamBits,
|
|
501
|
+
jobsSig,
|
|
330
502
|
};
|
|
331
503
|
visGenRef.current++;
|
|
332
504
|
}
|
|
@@ -1006,6 +1178,7 @@ export function MessageList({ rows, expanded, expandedRows, selectedId, onToggle
|
|
|
1006
1178
|
const tool = row.tool;
|
|
1007
1179
|
const subagent = row.kind === 'subagent' ? row.subagent : undefined;
|
|
1008
1180
|
const job = row.kind === 'job' ? row.job : undefined;
|
|
1181
|
+
const jobGroup = row.kind === 'job' ? row.jobGroup : undefined;
|
|
1009
1182
|
const revealVersion = smoothStreaming && row.kind === 'tool' && row.fresh === true &&
|
|
1010
1183
|
row.tool?.status === 'running' && row.tool.resultView === undefined
|
|
1011
1184
|
? getRevealVersion()
|
|
@@ -1030,7 +1203,7 @@ export function MessageList({ rows, expanded, expandedRows, selectedId, onToggle
|
|
|
1030
1203
|
else if (row.kind === 'reasoning' && smoothStreaming) {
|
|
1031
1204
|
displayText = revealTextOf(`r${row.id}`, row.text, { enabled: true, active: displayStreaming });
|
|
1032
1205
|
}
|
|
1033
|
-
return (_jsx(MemoRow, { rowId: row.id, kind: row.kind, text: displayText, images: row.images, textFull: row.kind === 'reasoning' ? row.text : undefined, executionTarget: row.executionTarget, selectionAttached: row.selectionAttached, streaming: displayStreaming, durationMs: row.durationMs, time: row.time, marginTopOnTurn: marginTopOnTurn, isSelected: selectedId === row.id, isExpanded: expandedRows.has(row.id), expanded: expanded, model: model, diffLayout: diffLayout, thinkingFold: thinkingFold, toolBackground: toolBackground, foldTerminalCommand: foldTerminalCommand, smoothStreaming: smoothStreaming, fresh: row.fresh === true, revealVersion: revealVersion, activityFrames: activityFrames, background: rowBackground(row.id), toolCallId: tool?.callId, toolName: tool?.name, toolArgsText: tool?.argsText, toolArgsFull: tool?.argsFull, toolStatus: tool?.status, toolResultText: tool?.resultText, toolResultFull: tool?.resultFull, toolErrorText: tool?.errorText, toolFootnote: failureHintRowId === row.id ? failureHint : undefined, toolCallView: tool?.callView, toolResultView: tool?.resultView, toolStartedAt: tool?.startedAt, toolDurationMs: tool?.durationMs, subagent: subagent, job: job, onToggleRow: onToggleRow, onToggleStreamView: onToggleStreamView, streamViewToggled: streamViewToggledRows.has(row.id), onOpenSubagent: onOpenSubagent, onOpenJobs: onOpenJobs, onOpenFile: onOpenFile, sessionCwd: sessionCwd, onPreviewImage: onPreviewImage, suppressImageGraphics: suppressImageGraphics, setRowRef: setRowRef }, row.id));
|
|
1206
|
+
return (_jsx(MemoRow, { rowId: row.id, kind: row.kind, text: displayText, images: row.images, textFull: row.kind === 'reasoning' ? row.text : undefined, executionTarget: row.executionTarget, selectionAttached: row.selectionAttached, streaming: displayStreaming, thinkingOpen: row.thinkingOpen === true, durationMs: row.durationMs, time: row.time, marginTopOnTurn: marginTopOnTurn, isSelected: selectedId === row.id, isExpanded: expandedRows.has(row.id), expanded: expanded, model: model, diffLayout: diffLayout, thinkingFold: thinkingFold, toolBackground: toolBackground, foldTerminalCommand: foldTerminalCommand, smoothStreaming: smoothStreaming, fresh: row.fresh === true, revealVersion: revealVersion, activityFrames: activityFrames, background: rowBackground(row.id), toolCallId: tool?.callId, toolName: tool?.name, toolArgsText: tool?.argsText, toolArgsFull: tool?.argsFull, toolStatus: tool?.status, toolResultText: tool?.resultText, toolResultFull: tool?.resultFull, toolErrorText: tool?.errorText, toolFootnote: failureHintRowId === row.id ? failureHint : undefined, toolCallView: tool?.callView, toolResultView: tool?.resultView, toolStartedAt: tool?.startedAt, toolDurationMs: tool?.durationMs, subagent: subagent, job: job, jobGroup: jobGroup, onToggleRow: onToggleRow, onToggleStreamView: onToggleStreamView, streamViewToggled: streamViewToggledRows.has(row.id), onOpenSubagent: onOpenSubagent, onOpenJobs: onOpenJobs, onOpenFile: onOpenFile, sessionCwd: sessionCwd, onPreviewImage: onPreviewImage, suppressImageGraphics: suppressImageGraphics, setRowRef: setRowRef }, row.id));
|
|
1034
1207
|
}), bottomPad > 0 && _jsx(Box, { height: bottomPad, flexShrink: 0 })] }));
|
|
1035
1208
|
}
|
|
1036
1209
|
/** Load-earlier / show-previous divider row with a mouse hover tint — the
|
|
@@ -1039,7 +1212,7 @@ function ClickableDivider({ title, onClick }) {
|
|
|
1039
1212
|
const [hovered, setHovered] = useState(false);
|
|
1040
1213
|
return (_jsx(Box, { marginTop: 1, onClick: onClick, onMouseEnter: () => setHovered(true), onMouseLeave: () => setHovered(false), backgroundColor: hovered ? 'userMessageBackgroundHover' : undefined, children: _jsx(Divider, { title: title }) }));
|
|
1041
1214
|
}
|
|
1042
|
-
function TranscriptRow({ rowId, kind, text, images, textFull, executionTarget, selectionAttached, sessionCwd, streaming, durationMs, time, marginTopOnTurn, isSelected, isExpanded, expanded, model, diffLayout, smoothStreaming, fresh, revealVersion, thinkingFold, toolBackground, foldTerminalCommand, activityFrames, background, toolCallId, toolName, toolArgsText, toolArgsFull, toolStatus, toolResultText, toolResultFull, toolErrorText, toolFootnote, toolCallView, toolResultView, toolStartedAt, toolDurationMs, subagent, job, onToggleRow, onToggleStreamView, streamViewToggled, onOpenSubagent, onOpenJobs, onOpenFile, onPreviewImage, suppressImageGraphics, setRowRef, }) {
|
|
1215
|
+
function TranscriptRow({ rowId, kind, text, images, textFull, executionTarget, selectionAttached, sessionCwd, streaming, thinkingOpen, durationMs, time, marginTopOnTurn, isSelected, isExpanded, expanded, model, diffLayout, smoothStreaming, fresh, revealVersion, thinkingFold, toolBackground, foldTerminalCommand, activityFrames, background, toolCallId, toolName, toolArgsText, toolArgsFull, toolStatus, toolResultText, toolResultFull, toolErrorText, toolFootnote, toolCallView, toolResultView, toolStartedAt, toolDurationMs, subagent, job, jobGroup, onToggleRow, onToggleStreamView, streamViewToggled, onOpenSubagent, onOpenJobs, onOpenFile, onPreviewImage, suppressImageGraphics, setRowRef, }) {
|
|
1043
1216
|
const ref = React.useCallback((el) => {
|
|
1044
1217
|
setRowRef(rowId, el);
|
|
1045
1218
|
}, [setRowRef, rowId]);
|
|
@@ -1053,13 +1226,18 @@ function TranscriptRow({ rowId, kind, text, images, textFull, executionTarget, s
|
|
|
1053
1226
|
return;
|
|
1054
1227
|
onToggleRow(rowId);
|
|
1055
1228
|
}, [onToggleRow, rowId]);
|
|
1056
|
-
//
|
|
1057
|
-
//
|
|
1229
|
+
// 当前回合仍展开的 reasoning 行:点击在三行预览/全文间切换。它反转
|
|
1230
|
+
// thinkingFold 的默认值,回合落定后语义自动回到 foldOnClick。
|
|
1058
1231
|
const streamViewOnClick = React.useCallback((event) => {
|
|
1059
1232
|
if (event.cellIsBlank)
|
|
1060
1233
|
return;
|
|
1061
1234
|
onToggleStreamView(rowId);
|
|
1062
1235
|
}, [onToggleStreamView, rowId]);
|
|
1236
|
+
// 任务组:点击组头行折叠/展开整组(与工具卡的折叠同一套手势:行点击 =
|
|
1237
|
+
// expandedRows 切换,Ctrl+O 展开全部)。
|
|
1238
|
+
const toggleJobGroup = React.useCallback(() => {
|
|
1239
|
+
onToggleRow(rowId);
|
|
1240
|
+
}, [onToggleRow, rowId]);
|
|
1063
1241
|
// 子代理卡:点击打开详情场景(不是折叠)。
|
|
1064
1242
|
const openSubagent = React.useCallback(() => {
|
|
1065
1243
|
if (subagent !== undefined)
|
|
@@ -1099,12 +1277,13 @@ function TranscriptRow({ rowId, kind, text, images, textFull, executionTarget, s
|
|
|
1099
1277
|
case 'reasoning': {
|
|
1100
1278
|
// The setting chooses the live default; a row click reverses it. Global
|
|
1101
1279
|
// or per-row transcript expansion always wins and shows the full text.
|
|
1102
|
-
const
|
|
1280
|
+
const turnOpen = streaming || thinkingOpen;
|
|
1281
|
+
const streamPreview = turnOpen && !expanded && !isExpanded &&
|
|
1103
1282
|
(streamViewToggled ? thinkingFold === 'full' : thinkingFold === 'preview');
|
|
1104
1283
|
return (_jsx(Box, { flexDirection: "column", ref: ref, children: _jsx(AssistantThinkingMessage, { thinking: text, textFull: textFull, marginTopOnTurn: marginTopOnTurn, streaming: streaming, preview: streamPreview,
|
|
1105
1284
|
// Settled rows keep the fold-on-settle default and expand via
|
|
1106
|
-
// expandedRows/Ctrl+O; a
|
|
1107
|
-
verbose: isExpanded || expanded || (
|
|
1285
|
+
// expandedRows/Ctrl+O; a current-turn row is preview or full.
|
|
1286
|
+
verbose: isExpanded || expanded || (turnOpen && !streamPreview), durationMs: durationMs, isSelected: isSelected, onClick: turnOpen ? streamViewOnClick : foldOnClick }) }));
|
|
1108
1287
|
}
|
|
1109
1288
|
case 'tool': {
|
|
1110
1289
|
if (toolCallId === undefined ||
|
|
@@ -1150,10 +1329,25 @@ function TranscriptRow({ rowId, kind, text, images, textFull, executionTarget, s
|
|
|
1150
1329
|
if (!subagent)
|
|
1151
1330
|
return null;
|
|
1152
1331
|
return (_jsx(Box, { flexDirection: "column", ref: ref, children: _jsx(SubagentMessage, { subagent: subagent, marginTopOnTurn: marginTopOnTurn, activityFrames: activityFrames, isExpanded: isExpanded, onClick: openSubagent }) }));
|
|
1153
|
-
case 'job':
|
|
1332
|
+
case 'job': {
|
|
1154
1333
|
if (!job)
|
|
1155
1334
|
return null;
|
|
1156
|
-
|
|
1335
|
+
// A grouped run renders as ONE block: the head row carries the summary
|
|
1336
|
+
// line, members hang off the shared rail, and a FOLDED run keeps only
|
|
1337
|
+
// that summary (its members were dropped from the window upstream).
|
|
1338
|
+
const groupHead = jobGroup !== undefined && jobGroup.head;
|
|
1339
|
+
return (_jsxs(Box, { flexDirection: "column",
|
|
1340
|
+
// The head's block margin moves UP to the group (the summary line
|
|
1341
|
+
// is what separates the run from what precedes it); the card under
|
|
1342
|
+
// it must not add a second blank line.
|
|
1343
|
+
marginTop: groupHead && marginTopOnTurn ? 1 : 0, ref: ref, children: [groupHead && _jsx(JobGroupHeader, { group: jobGroup, onToggle: toggleJobGroup }), groupHead && jobGroup.folded ? null : (_jsx(JobCard, { job: job, marginTopOnTurn: groupHead ? false : marginTopOnTurn,
|
|
1344
|
+
// The bracket hugs the CARDS: the summary line above stays
|
|
1345
|
+
// outside it, and the head/last member round the two ends in
|
|
1346
|
+
// place (no extra cap row) — see JobCard's `rail` prop.
|
|
1347
|
+
rail: jobGroup === undefined ? undefined : { open: jobGroup.head, close: jobGroup.last },
|
|
1348
|
+
// Clicking a card opens the panel focused on THAT job, not the roster head.
|
|
1349
|
+
onClick: onOpenJobs === undefined ? undefined : () => onOpenJobs(job.id) }))] }));
|
|
1350
|
+
}
|
|
1157
1351
|
}
|
|
1158
1352
|
}
|
|
1159
1353
|
/** Folded compact-summary preview: whitespace flattened, capped with an
|
|
@@ -1171,9 +1365,9 @@ const MemoRow = React.memo(TranscriptRow);
|
|
|
1171
1365
|
* fills the viewport.
|
|
1172
1366
|
*/
|
|
1173
1367
|
export function LogoHeader({ model, effort, cwd, fontId, whale = true, whaleIdle = true, whaleGirl = false, starred = false, onStarClick, working = false, skipIntro = false, }) {
|
|
1174
|
-
//
|
|
1368
|
+
// The minimal UI drops the whole splash (whale art AND wordmark) — only the
|
|
1175
1369
|
// transcript and a bare status bar remain.
|
|
1176
|
-
if (
|
|
1370
|
+
if (isMinimalUiMode())
|
|
1177
1371
|
return null;
|
|
1178
1372
|
return (_jsx(Box, { flexDirection: "column", marginBottom: 1, children: _jsx(LogoV2, { model: model, effort: effort, cwd: cwd, fontId: fontId, whale: whale, whaleIdle: whaleIdle, whaleGirl: whaleGirl, starred: starred, onStarClick: onStarClick, working: working, skipIntro: skipIntro }) }));
|
|
1179
1373
|
}
|
|
@@ -40,9 +40,19 @@ export declare function useOverlayListRows(frameRows: number): number;
|
|
|
40
40
|
* bottom:'100%' 会把面板顶到 todo 之上,远离输入框。in-flow 面板(问卷/
|
|
41
41
|
* 对话框/提示等)走输入簇的替换链,天然落在输入行位置,同样不会越过 todo。
|
|
42
42
|
*/
|
|
43
|
-
export declare function OverlayAbove({ children, maxHeight, }: {
|
|
43
|
+
export declare function OverlayAbove({ children, maxHeight, transparent, }: {
|
|
44
44
|
children: React.ReactNode;
|
|
45
45
|
/** 调用方声明的上限;实际还会被钳到锚点上方的可画行数。 */
|
|
46
46
|
maxHeight?: number | undefined;
|
|
47
|
+
/**
|
|
48
|
+
* 透明宿主(第七版:落地页侧专用):**干净的镂空,不是混合**——只关掉
|
|
49
|
+
* occlusionColor(那是立绘图像在浮层后面时触发的 toolCardBackground 整块
|
|
50
|
+
* 白底,用户截图报的「整块白底」就是它),**保留 opaque 的空格垫底**:
|
|
51
|
+
* 浮层矩形内每一格都被空格占位(宿主屏的字形——大字/立绘字符画——被完全
|
|
52
|
+
* 遮掉,绝不重影),但不发任何背景色 SGR(终端默认背景;Kitty 负 z 立绘
|
|
53
|
+
* 图像仍从默认背景格里透出来,这正是「透出启动页」想要的)。
|
|
54
|
+
* 聊天页姿态不变:那边的底是转录文本,遮挡图像的 occlusion 语义仍然需要。
|
|
55
|
+
*/
|
|
56
|
+
transparent?: boolean;
|
|
47
57
|
}): React.ReactNode;
|
|
48
58
|
//# sourceMappingURL=OverlayAbove.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OverlayAbove.d.ts","sourceRoot":"","sources":["../../../src/components/OverlayAbove.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAezB;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAK5D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,SAAS,
|
|
1
|
+
{"version":3,"file":"OverlayAbove.d.ts","sourceRoot":"","sources":["../../../src/components/OverlayAbove.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAezB;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAK5D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,SAAS,EACT,WAAmB,GACpB,EAAE;IACD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,iCAAiC;IACjC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC9B;;;;;;;;OAQG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB,GAAG,KAAK,CAAC,SAAS,CA0DlB"}
|
|
@@ -56,7 +56,7 @@ export function useOverlayListRows(frameRows) {
|
|
|
56
56
|
* bottom:'100%' 会把面板顶到 todo 之上,远离输入框。in-flow 面板(问卷/
|
|
57
57
|
* 对话框/提示等)走输入簇的替换链,天然落在输入行位置,同样不会越过 todo。
|
|
58
58
|
*/
|
|
59
|
-
export function OverlayAbove({ children, maxHeight, }) {
|
|
59
|
+
export function OverlayAbove({ children, maxHeight, transparent = false, }) {
|
|
60
60
|
const ref = React.useRef(null);
|
|
61
61
|
const terminal = useTerminalSize();
|
|
62
62
|
const { stdout } = useApp();
|
|
@@ -84,15 +84,5 @@ export function OverlayAbove({ children, maxHeight, }) {
|
|
|
84
84
|
setSpaceAbove(previous => (previous === next ? previous : next));
|
|
85
85
|
});
|
|
86
86
|
const effectiveMaxHeight = clampOverlayHeight(maxHeight, spaceAbove);
|
|
87
|
-
return (_jsx(Box, { ref: ref, position: "absolute", bottom: "100%", left: 0, right: 0, flexDirection: "column", justifyContent: "flex-end", overflow: "hidden",
|
|
88
|
-
// Kitty graphics below text still show through terminal-default
|
|
89
|
-
// background cells, and a real surface color is the only way to make
|
|
90
|
-
// the negative-z placement obey this overlay's visual bounds without
|
|
91
|
-
// deleting it. But a PERMANENT surface paints every transient panel
|
|
92
|
-
// (/ menu、picker、对话框) a bright full-width block that reads as a
|
|
93
|
-
// spurious highlight (a regression introduced by 49f7166).
|
|
94
|
-
// occlusionColor keeps the overlay terminal-transparent in the
|
|
95
|
-
// common frame and only paints the surface while an image actually
|
|
96
|
-
// sits behind this rect — see Styles.occlusionColor.
|
|
97
|
-
occlusionColor: "toolCardBackground", opaque: true, ...(effectiveMaxHeight === undefined ? {} : { maxHeight: effectiveMaxHeight }), children: _jsx(Box, { flexDirection: "column", flexShrink: 0, children: _jsx(OverlayBudgetContext.Provider, { value: effectiveMaxHeight, children: children }) }) }));
|
|
87
|
+
return (_jsx(Box, { ref: ref, position: "absolute", bottom: "100%", left: 0, right: 0, flexDirection: "column", justifyContent: "flex-end", overflow: "hidden", ...(transparent ? { opaque: true } : { occlusionColor: 'toolCardBackground', opaque: true }), ...(effectiveMaxHeight === undefined ? {} : { maxHeight: effectiveMaxHeight }), children: _jsx(Box, { flexDirection: "column", flexShrink: 0, children: _jsx(OverlayBudgetContext.Provider, { value: effectiveMaxHeight, children: children }) }) }));
|
|
98
88
|
}
|