@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
package/lib/types/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/api.ts"],"names":[],"mappings":"AAsCA,YAAY,EACV,kBAAkB,EAClB,aAAa,EACb,gBAAgB,EAChB,oBAAoB,EACpB,aAAa,EACb,uBAAuB,EACvB,kBAAkB,EAClB,qBAAqB,EACrB,wBAAwB,EACxB,uBAAuB,EACvB,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,aAAa,EACb,uBAAuB,EACvB,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,EAChB,eAAe,EACf,YAAY,GACb,MAAM,iBAAiB,CAAA;AACxB,YAAY,EACV,YAAY,EACZ,cAAc,EACd,kBAAkB,EAClB,WAAW,EACX,mBAAmB,EACnB,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,sBAAsB,EACtB,uBAAuB,EACvB,2BAA2B,EAC3B,uBAAuB,EACvB,uBAAuB,EACvB,sBAAsB,EACtB,yBAAyB,EACzB,WAAW,EACX,eAAe,EACf,YAAY,EACZ,sBAAsB,EACtB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,kBAAkB,CAAA;AACzB,YAAY,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AACpE,YAAY,EACV,oBAAoB,EACpB,sBAAsB,EACtB,gBAAgB,EAChB,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,wBAAwB,CAAA;AAC/B,YAAY,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAA;AAChE,YAAY,EACV,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,yBAAyB,EACzB,mBAAmB,EACnB,eAAe,EACf,oBAAoB,GACrB,MAAM,iBAAiB,CAAA"}
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/api.ts"],"names":[],"mappings":"AAsCA,YAAY,EACV,kBAAkB,EAClB,aAAa,EACb,gBAAgB,EAChB,oBAAoB,EACpB,aAAa,EACb,uBAAuB,EACvB,kBAAkB,EAClB,qBAAqB,EACrB,wBAAwB,EACxB,uBAAuB,EACvB,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,aAAa,EACb,uBAAuB,EACvB,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,EAChB,eAAe,EACf,YAAY,GACb,MAAM,iBAAiB,CAAA;AACxB,YAAY,EACV,YAAY,EACZ,cAAc,EACd,kBAAkB,EAClB,WAAW,EACX,mBAAmB,EACnB,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,sBAAsB,EACtB,uBAAuB,EACvB,2BAA2B,EAC3B,uBAAuB,EACvB,uBAAuB,EACvB,sBAAsB,EACtB,yBAAyB,EACzB,WAAW,EACX,eAAe,EACf,YAAY,EACZ,sBAAsB,EACtB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,kBAAkB,CAAA;AACzB,YAAY,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AACpE,YAAY,EACV,kBAAkB,EAClB,aAAa,EACb,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,aAAa,CAAA;AAGpB,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AACnD,YAAY,EACV,oBAAoB,EACpB,sBAAsB,EACtB,gBAAgB,EAChB,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,wBAAwB,CAAA;AAC/B,YAAY,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAA;AAChE,YAAY,EACV,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,yBAAyB,EACzB,mBAAmB,EACnB,eAAe,EACf,oBAAoB,GACrB,MAAM,iBAAiB,CAAA"}
|
package/lib/types/api.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/commands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAA;AAChH,YAAY,EAAE,YAAY,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAA;
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/commands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAA;AAChH,YAAY,EAAE,YAAY,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAA;AAiBhH,+EAA+E;AAC/E,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC3B,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,qBAAqB,CAAA;IACpC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,sEAAsE;IACtE,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,MAAM,eAAe,GAAG,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,KAAK,SAAS,qBAAqB,EAAE,CAAA;AAEpG;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE/D;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,YAAY,EAoExC,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,eAAe,EAAE,SAAS,YAAY,EAElD,CAAA;AAED,0DAA0D;AAC1D,eAAO,MAAM,oBAAoB,EAAE,WAAW,CAAC,MAAM,CAEpD,CAAA;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAG1D;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,YAAY,GAAG;IAAE,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAIhG;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,GACX;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAIhD;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,IAAI,GAAE,SAAS,YAAY,EAAmB,GAC7C,OAAO,CAKT;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,EACb,IAAI,GAAE,SAAS,YAAY,EAAmB,GAC7C,YAAY,EAAE,CAKhB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,EACb,KAAK,GAAE,SAAS,YAAY,EAAmB,EAC/C,QAAQ,GAAE,eAA0B,GACnC,iBAAiB,EAAE,CAuCrB"}
|
package/lib/types/commands.js
CHANGED
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Local slash commands for dsh-tui, presented as `/name — description`.
|
|
3
|
-
* The built-in set is merged with plugin-registered
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
3
|
+
* The built-in set is merged with plugin-registered commands (plan/goal/…)
|
|
4
|
+
* from the DSH command registry (`dsh-commands`); `runCommand` in the Chat
|
|
5
|
+
* screen dispatches either kind.
|
|
6
|
+
*
|
|
7
|
+
* Locals win on name collisions: the merge skips a registry descriptor whose
|
|
8
|
+
* name a local command already declares (`channel/skill-catalog.ts`), and the
|
|
9
|
+
* Chat switch answers the local name before the registry path. `/compact` is
|
|
10
|
+
* the live case — the TUI's own transaction is the primary route and the
|
|
11
|
+
* official `dsh-command-compact` handler is only the fallback when the local
|
|
12
|
+
* path cannot run (see `dsh-adapter/channel/capabilities.ts`).
|
|
7
13
|
*/
|
|
8
14
|
import { getLang, tOr } from './i18n.js';
|
|
9
15
|
/**
|
|
@@ -42,12 +48,14 @@ export const LOCAL_COMMANDS = [
|
|
|
42
48
|
{ name: 'config', description: 'Show the dsh-tui configuration source' },
|
|
43
49
|
{ name: 'reload', description: 'Reload preference files from disk and apply live' },
|
|
44
50
|
{ name: 'settings', description: 'View and edit plugin settings' },
|
|
51
|
+
{ name: 'setup', description: 'Re-run the first-run guide (API key / language + theme / model + workspace / shortcuts)' },
|
|
45
52
|
{ name: 'star', description: 'Star this project on GitHub (one-key via the gh CLI)' },
|
|
46
53
|
{ name: 'doctor', description: 'Run environment checks' },
|
|
47
54
|
{ name: 'migrate', description: 'Import conversations from other coding agents (claude-code / codex / omp / zcode / grok-build)' },
|
|
48
55
|
{ name: 'init', description: 'Create AGENTS.md in the working directory' },
|
|
49
56
|
{ name: 'agents', description: 'Show subagents of this session' },
|
|
50
57
|
{ name: 'jobs', description: 'Show background jobs of this session' },
|
|
58
|
+
{ name: 'panel', description: 'Side panel: toggle / focus / zoom / switch panels' },
|
|
51
59
|
// Model / display
|
|
52
60
|
{ name: 'activity', description: 'Switch the working-activity indicator preset' },
|
|
53
61
|
{ name: 'preset', description: 'Switch the agent preset (including Liangshen mode)' },
|
|
@@ -1,16 +1,13 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import type { ActivityView } from '../dsh-adapter/activity-store.js';
|
|
3
|
+
import type { ContextOccupancy } from '../adapter/ports/channel-view.js';
|
|
3
4
|
/**
|
|
4
|
-
* Context-pressure percentage (0–100) from the
|
|
5
|
-
* undefined when unknown —
|
|
6
|
-
*
|
|
7
|
-
* amber ≥ 80%, red ≥ 95%).
|
|
5
|
+
* Context-pressure percentage (0–100) from the channel's SINGLE occupancy
|
|
6
|
+
* reading (see `dsh-adapter/context-occupancy.ts`), or undefined when unknown —
|
|
7
|
+
* shared by the spinner-line and status-line placements of the
|
|
8
|
+
* working-activity line (pi working-activity style: amber ≥ 80%, red ≥ 95%).
|
|
8
9
|
*/
|
|
9
|
-
export declare function contextPressurePct(
|
|
10
|
-
input: number;
|
|
11
|
-
cacheRead: number;
|
|
12
|
-
cacheWrite: number;
|
|
13
|
-
} | undefined, contextWindow: number | undefined): number | undefined;
|
|
10
|
+
export declare function contextPressurePct(occupancy: ContextOccupancy | undefined): number | undefined;
|
|
14
11
|
/**
|
|
15
12
|
* The working-activity line, rendered either in the spinner slot (while a
|
|
16
13
|
* turn runs — alongside the random-verb spinner) or on the status bar
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActivityLine.d.ts","sourceRoot":"","sources":["../../../src/components/ActivityLine.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAQzB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;
|
|
1
|
+
{"version":3,"file":"ActivityLine.d.ts","sourceRoot":"","sources":["../../../src/components/ActivityLine.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAQzB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AACpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AAExE;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,gBAAgB,GAAG,SAAS,GACtC,MAAM,GAAG,SAAS,CAKpB;AAED;;;;;;;GAOG;AACH,kFAAkF;AAClF,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,CAAA;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB;AAED,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,cAAc,EACd,OAAO,EACP,UAAU,EACV,MAAM,GACP,EAAE;IACD,QAAQ,EAAE,iBAAiB,CAAA;IAC3B,cAAc,EAAE,MAAM,GAAG,SAAS,CAAA;IAClC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,GAAG,KAAK,CAAC,SAAS,CAuClB"}
|
|
@@ -8,17 +8,16 @@ import { getTheme } from '../theme.js';
|
|
|
8
8
|
import { useTheme } from './design-system/ThemeProvider.js';
|
|
9
9
|
import { parseRGB } from './Spinner/spinnerUtils.js';
|
|
10
10
|
/**
|
|
11
|
-
* Context-pressure percentage (0–100) from the
|
|
12
|
-
* undefined when unknown —
|
|
13
|
-
*
|
|
14
|
-
* amber ≥ 80%, red ≥ 95%).
|
|
11
|
+
* Context-pressure percentage (0–100) from the channel's SINGLE occupancy
|
|
12
|
+
* reading (see `dsh-adapter/context-occupancy.ts`), or undefined when unknown —
|
|
13
|
+
* shared by the spinner-line and status-line placements of the
|
|
14
|
+
* working-activity line (pi working-activity style: amber ≥ 80%, red ≥ 95%).
|
|
15
15
|
*/
|
|
16
|
-
export function contextPressurePct(
|
|
17
|
-
if (
|
|
16
|
+
export function contextPressurePct(occupancy) {
|
|
17
|
+
if (occupancy === undefined || occupancy.contextWindow === undefined || occupancy.contextWindow <= 0) {
|
|
18
18
|
return undefined;
|
|
19
19
|
}
|
|
20
|
-
|
|
21
|
-
return Math.round((occupied / contextWindow) * 100);
|
|
20
|
+
return Math.round((occupancy.usedTokens / occupancy.contextWindow) * 100);
|
|
22
21
|
}
|
|
23
22
|
export function ActivityLine({ activity, activityFrames, warnPct, warnDanger, suffix, }) {
|
|
24
23
|
// 60ms frames: the shimmer sweep advances one column per frame (3.3× the
|
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import type { JobRow } from '../../dsh-adapter/channel.js';
|
|
3
|
+
/**
|
|
4
|
+
* Producer progress as the design system's bar: `n/m` draws a 5-cell
|
|
5
|
+
* sub-cell-accurate `ProgressBar` (same primitive the rest of the TUI uses)
|
|
6
|
+
* plus the raw counter; any other shape passes through verbatim. Exported for
|
|
7
|
+
* the /jobs panel so both surfaces read the same.
|
|
8
|
+
*/
|
|
9
|
+
export declare function JobProgress({ progress }: {
|
|
10
|
+
progress: string;
|
|
11
|
+
}): React.ReactNode;
|
|
3
12
|
/**
|
|
4
13
|
* Live background-job card embedded in the transcript (`kind: 'job'`),
|
|
5
14
|
* sibling of the subagent card: header (id · kind · label · elapsed ·
|
|
@@ -14,10 +23,27 @@ import type { JobRow } from '../../dsh-adapter/channel.js';
|
|
|
14
23
|
* is consuming and reserved for the owning agent, so the card shows the
|
|
15
24
|
* tail of the agent's own job_output results as they stream through the
|
|
16
25
|
* transcript.
|
|
26
|
+
*
|
|
27
|
+
* `rail` marks the card as a member of a job GROUP (see JobGroupRow): the
|
|
28
|
+
* card gets a 2-cell chain column on its left, and `rail.open` / `rail.close`
|
|
29
|
+
* round its ends (`╭` on the first line, `╰` on the last) so the run reads as
|
|
30
|
+
* one bracket from the first card to the last — the group's summary line stays
|
|
31
|
+
* OUTSIDE it. A lone card renders as before.
|
|
32
|
+
*
|
|
33
|
+
* The rail is drawn per line, which means this component owns the card's
|
|
34
|
+
* HEIGHT: the label is pre-wrapped against an explicit column width (so the
|
|
35
|
+
* wrap count is known, not guessed from the flex result), and the rail column
|
|
36
|
+
* paints exactly that many glyphs. Both use ink's own `wrapText`/`stringWidth`,
|
|
37
|
+
* so the pre-wrap breaks where the renderer would have broken.
|
|
17
38
|
*/
|
|
18
|
-
export declare function JobCard({ job, marginTopOnTurn, onClick }: {
|
|
39
|
+
export declare function JobCard({ job, marginTopOnTurn, onClick, rail }: {
|
|
19
40
|
job: JobRow;
|
|
20
41
|
marginTopOnTurn: boolean;
|
|
21
42
|
onClick?(): void;
|
|
43
|
+
/** Job GROUP member: shared chain rail, optionally rounded at either end. */
|
|
44
|
+
rail?: {
|
|
45
|
+
open?: boolean;
|
|
46
|
+
close?: boolean;
|
|
47
|
+
} | undefined;
|
|
22
48
|
}): React.ReactNode;
|
|
23
49
|
//# sourceMappingURL=JobCard.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JobCard.d.ts","sourceRoot":"","sources":["../../../../src/components/Chat/JobCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAA;
|
|
1
|
+
{"version":3,"file":"JobCard.d.ts","sourceRoot":"","sources":["../../../../src/components/Chat/JobCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAA;AAoC1D;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,KAAK,CAAC,SAAS,CAa/E;AA6CD;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,OAAO,CAAC,EAAE,GAAG,EAAE,eAAe,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;IAC/D,GAAG,EAAE,MAAM,CAAA;IACX,eAAe,EAAE,OAAO,CAAA;IACxB,OAAO,CAAC,IAAI,IAAI,CAAA;IAChB,6EAA6E;IAC7E,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,SAAS,CAAA;CACvD,GAAG,KAAK,CAAC,SAAS,CAwKlB"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
import { jsx as _jsx,
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import { Box, Text, useAnimationFrame, useTerminalSize } from '../../ui.js';
|
|
4
4
|
import { formatJobDuration } from '../../dsh-adapter/jobs.js';
|
|
5
5
|
import { t } from '../../i18n.js';
|
|
6
|
+
import wrapText from '../../ink/wrap-text.js';
|
|
6
7
|
import { stringWidth } from '../../ink/stringWidth.js';
|
|
7
|
-
import {
|
|
8
|
+
import { isMinimalUiMode } from '../../minimalUiMode.js';
|
|
9
|
+
import { ProgressBar } from '../design-system/ProgressBar.js';
|
|
8
10
|
/** The waterfall window mirrors the subagent card: a constant-height region. */
|
|
9
11
|
const WATERFALL_ROWS = 3;
|
|
10
12
|
/** Card left padding + the `│ ` gutter prefix. */
|
|
@@ -16,37 +18,63 @@ const WATERFALL_GUTTER = 4;
|
|
|
16
18
|
* U+2699 is East-Asian Ambiguous: ink measures it 1 cell while CJK
|
|
17
19
|
* terminal fonts paint it 2, so the following text overlaps the glyph. */
|
|
18
20
|
function statusInfo(status) {
|
|
19
|
-
const
|
|
21
|
+
const minimalUi = isMinimalUiMode();
|
|
20
22
|
switch (status) {
|
|
21
23
|
case 'completed':
|
|
22
|
-
return { glyph: '✓', label: t('jobs-status-completed'), color:
|
|
24
|
+
return { glyph: '✓', label: t('jobs-status-completed'), color: minimalUi ? undefined : 'success' };
|
|
23
25
|
case 'failed':
|
|
24
|
-
return { glyph: '✗', label: t('jobs-status-failed'), color:
|
|
26
|
+
return { glyph: '✗', label: t('jobs-status-failed'), color: minimalUi ? undefined : 'error' };
|
|
25
27
|
case 'killed':
|
|
26
|
-
return { glyph: '✗', label: t('jobs-status-killed'), color:
|
|
28
|
+
return { glyph: '✗', label: t('jobs-status-killed'), color: minimalUi ? undefined : 'error' };
|
|
27
29
|
case 'stopping':
|
|
28
|
-
return { glyph: '●', label: t('jobs-status-stopping'), color:
|
|
30
|
+
return { glyph: '●', label: t('jobs-status-stopping'), color: minimalUi ? undefined : 'warning' };
|
|
29
31
|
default:
|
|
30
|
-
return { glyph: '●', label: t('jobs-status-running'), color:
|
|
32
|
+
return { glyph: '●', label: t('jobs-status-running'), color: minimalUi ? undefined : 'warning' };
|
|
31
33
|
}
|
|
32
34
|
}
|
|
33
|
-
/**
|
|
34
|
-
*
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
35
|
+
/**
|
|
36
|
+
* Producer progress as the design system's bar: `n/m` draws a 5-cell
|
|
37
|
+
* sub-cell-accurate `ProgressBar` (same primitive the rest of the TUI uses)
|
|
38
|
+
* plus the raw counter; any other shape passes through verbatim. Exported for
|
|
39
|
+
* the /jobs panel so both surfaces read the same.
|
|
40
|
+
*/
|
|
41
|
+
export function JobProgress({ progress }) {
|
|
42
|
+
const match = /^(\d+)\s*\/\s*(\d+)$/.exec(progress.trim());
|
|
43
|
+
const current = match === null ? Number.NaN : Number(match[1]);
|
|
44
|
+
const total = match === null ? Number.NaN : Number(match[2]);
|
|
45
|
+
if (!Number.isFinite(current) || !Number.isFinite(total) || total <= 0) {
|
|
46
|
+
return _jsx(Text, { color: "accent", wrap: "truncate-end", children: progress });
|
|
47
|
+
}
|
|
48
|
+
return (_jsxs(Box, { flexDirection: "row", gap: 1, children: [_jsx(ProgressBar, { ratio: Math.min(current, total) / total, width: 5, fillColor: "accent", emptyColor: "inactive" }), _jsx(Text, { color: "accent", children: progress.trim() })] }));
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* The waterfall window: every entry is WRAPPED at the card width FIRST, then
|
|
52
|
+
* the last `budget` VISUAL rows are kept. A 400-cell JSON line therefore
|
|
53
|
+
* shows its ending folded over the rows instead of a clipped head — and the
|
|
54
|
+
* window still costs a constant number of rows, which is what the
|
|
55
|
+
* transcript's virtualization measures.
|
|
56
|
+
*/
|
|
57
|
+
function waterfallWindow(entries, width, budget) {
|
|
58
|
+
const rows = [];
|
|
59
|
+
// One cell of slack: a line that lands exactly on the boundary is re-wrapped
|
|
60
|
+
// by ink's own renderer, which would silently double that row's height.
|
|
61
|
+
const textWidth = Math.max(1, width - 1);
|
|
62
|
+
for (let index = entries.length - 1; index >= 0 && rows.length < budget; index--) {
|
|
63
|
+
const entry = entries[index];
|
|
64
|
+
if (entry.kind === 'gap') {
|
|
65
|
+
rows.unshift({ key: `gap-${index}`, text: '', gap: true });
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
const wrapped = wrapText(entry.line.text, textWidth, 'wrap').split('\n');
|
|
69
|
+
for (let row = wrapped.length - 1; row >= 0 && rows.length < budget; row--) {
|
|
70
|
+
rows.unshift({
|
|
71
|
+
key: `${index}-${row}`,
|
|
72
|
+
text: wrapped[row] ?? '',
|
|
73
|
+
...(entry.line.channel === undefined ? {} : { channel: entry.line.channel }),
|
|
74
|
+
});
|
|
75
|
+
}
|
|
48
76
|
}
|
|
49
|
-
return
|
|
77
|
+
return rows;
|
|
50
78
|
}
|
|
51
79
|
/**
|
|
52
80
|
* Live background-job card embedded in the transcript (`kind: 'job'`),
|
|
@@ -62,8 +90,20 @@ function clipLine(text, maxWidth) {
|
|
|
62
90
|
* is consuming and reserved for the owning agent, so the card shows the
|
|
63
91
|
* tail of the agent's own job_output results as they stream through the
|
|
64
92
|
* transcript.
|
|
93
|
+
*
|
|
94
|
+
* `rail` marks the card as a member of a job GROUP (see JobGroupRow): the
|
|
95
|
+
* card gets a 2-cell chain column on its left, and `rail.open` / `rail.close`
|
|
96
|
+
* round its ends (`╭` on the first line, `╰` on the last) so the run reads as
|
|
97
|
+
* one bracket from the first card to the last — the group's summary line stays
|
|
98
|
+
* OUTSIDE it. A lone card renders as before.
|
|
99
|
+
*
|
|
100
|
+
* The rail is drawn per line, which means this component owns the card's
|
|
101
|
+
* HEIGHT: the label is pre-wrapped against an explicit column width (so the
|
|
102
|
+
* wrap count is known, not guessed from the flex result), and the rail column
|
|
103
|
+
* paints exactly that many glyphs. Both use ink's own `wrapText`/`stringWidth`,
|
|
104
|
+
* so the pre-wrap breaks where the renderer would have broken.
|
|
65
105
|
*/
|
|
66
|
-
export function JobCard({ job, marginTopOnTurn, onClick }) {
|
|
106
|
+
export function JobCard({ job, marginTopOnTurn, onClick, rail }) {
|
|
67
107
|
const settled = job.status === 'completed' || job.status === 'failed' || job.status === 'killed';
|
|
68
108
|
// 动画订阅仅限存活卡片:settled 后退订共享 clock(同 SubagentMessage 的
|
|
69
109
|
// 约定)。1s tick 只驱动运行时长跳动——状态标是静态的(见 statusInfo)。
|
|
@@ -72,22 +112,77 @@ export function JobCard({ job, marginTopOnTurn, onClick }) {
|
|
|
72
112
|
const info = statusInfo(job.status);
|
|
73
113
|
const [hovered, setHovered] = React.useState(false);
|
|
74
114
|
const clickable = onClick !== undefined;
|
|
75
|
-
const
|
|
76
|
-
const
|
|
115
|
+
const grouped = rail !== undefined;
|
|
116
|
+
const cardColumns = columns ?? 80;
|
|
117
|
+
// A grouped card spends two columns on the rail — the glyph column plus its
|
|
118
|
+
// 1-cell gutter. Every width below is measured against that, or the rows
|
|
119
|
+
// would wrap a second time inside ink and the card would grow past the
|
|
120
|
+
// height the rail was painted for.
|
|
121
|
+
const rowWidth = Math.max(20, cardColumns - WATERFALL_GUTTER - (grouped ? 2 : 0));
|
|
122
|
+
// Waterfall entries: gap banners interleave as their own rows, then the
|
|
123
|
+
// window keeps the LAST WATERFALL_ROWS entries so a banner never pushes a
|
|
124
|
+
// fresher line out — the card stays constant-height.
|
|
125
|
+
const waterfall = [];
|
|
126
|
+
for (const line of settled ? [] : job.outputLines) {
|
|
127
|
+
if (line.gapBefore === true)
|
|
128
|
+
waterfall.push({ kind: 'gap' });
|
|
129
|
+
waterfall.push({ kind: 'line', line });
|
|
130
|
+
}
|
|
131
|
+
const activity = waterfallWindow(waterfall, rowWidth, WATERFALL_ROWS);
|
|
77
132
|
// A settled job's terminal detail ('exit code: 0') rides the header; a
|
|
78
133
|
// failed/killed one also keeps it as the explanatory tail line.
|
|
79
134
|
const headerDetail = job.detail !== undefined && job.detail !== '' ? job.detail : undefined;
|
|
80
135
|
const headerName = `${t('jobs-card-prefix')}${job.id}`;
|
|
81
136
|
const duration = formatJobDuration(job);
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
137
|
+
// Only a LIVE job carries a progress chip; a settled one has dropped it, so
|
|
138
|
+
// reserving width for it unconditionally would clip the label for nothing.
|
|
139
|
+
const liveProgress = settled || job.progress === undefined || job.progress === '' ? undefined : job.progress;
|
|
140
|
+
// A grouped card paints its rail line by line, so its HEIGHT must be known
|
|
141
|
+
// before the render: measure every fixed column and pre-wrap the label into
|
|
142
|
+
// whatever is left. The label column is then given that width EXPLICITLY —
|
|
143
|
+
// never a flex leftover — so the pre-wrapped line count is exactly what the
|
|
144
|
+
// renderer paints (both sides use ink's own wrapText/stringWidth, so the
|
|
145
|
+
// breaks match the ones a plain wrapping Text would have chosen).
|
|
146
|
+
const railBody = settled && job.status !== 'completed' && headerDetail !== undefined;
|
|
147
|
+
const fixedWidths = [
|
|
148
|
+
stringWidth(info.glyph),
|
|
149
|
+
stringWidth(headerName),
|
|
150
|
+
stringWidth(job.kind),
|
|
151
|
+
...(liveProgress === undefined ? [] : [12]),
|
|
152
|
+
stringWidth(duration),
|
|
153
|
+
...(headerDetail === undefined ? [] : [stringWidth(headerDetail)]),
|
|
154
|
+
stringWidth(info.label),
|
|
155
|
+
];
|
|
156
|
+
// One gap between each pair of columns: (fixed + label) - 1 = fixed count.
|
|
157
|
+
const labelWidth = Math.max(8, cardColumns - (grouped ? 2 : 0) - fixedWidths.reduce((sum, width) => sum + width, 0) - fixedWidths.length);
|
|
158
|
+
// wrapText returns the wrapped STRING (newline separated), so the line
|
|
159
|
+
// count comes straight out of it.
|
|
160
|
+
const labelLines = grouped ? wrapText(job.label, labelWidth, 'wrap').split('\n') : undefined;
|
|
161
|
+
const contentLines = (labelLines?.length ?? 1) + activity.length + (railBody ? 1 : 0);
|
|
162
|
+
const railGlyphs = [];
|
|
163
|
+
if (grouped) {
|
|
164
|
+
for (let index = 0; index < contentLines; index++) {
|
|
165
|
+
const opens = index === 0 && rail?.open === true;
|
|
166
|
+
const closes = index === contentLines - 1 && rail?.close === true;
|
|
167
|
+
railGlyphs.push(opens ? '╭' : closes ? '╰' : '│');
|
|
168
|
+
}
|
|
169
|
+
}
|
|
87
170
|
// 点击打开 /jobs 面板;hover 不刷整行背景(转录视觉保持安静),只把
|
|
88
171
|
// 状态 glyph 提亮为品牌色作为可点指示。无外层缩进:任务卡是上方工具
|
|
89
172
|
// 调用(run_in_background 卡)的延续,与工具卡通栏左对齐;子代理卡才
|
|
90
173
|
// 是嵌套子实体、保留缩进。瀑布的 ` │ ` 槽自带两格,正好与工具卡正文
|
|
91
174
|
// 的 ` ⎿ ` 槽位一致。
|
|
92
|
-
|
|
175
|
+
//
|
|
176
|
+
// 成组时的竖线不在 body 里:继续中的成员把 body 包进一个只有左边框的
|
|
177
|
+
// Box(见下方 bordered),边框覆盖整张卡的每一行——标签折行出的续行也
|
|
178
|
+
// 有线,链条不断。收口的尾成员用 `└ ` 字形 + 2 格空槽,两者都把正文
|
|
179
|
+
// 落在第 2 列。
|
|
180
|
+
const body = (_jsxs(_Fragment, { children: [_jsxs(Box, { flexDirection: "row", gap: 1, children: [_jsx(Box, { flexShrink: 0, children: _jsx(Text, { color: hovered && clickable ? 'accent' : info.color, children: info.glyph }) }), _jsx(Box, { flexShrink: 0, children: _jsx(Text, { bold: true, color: hovered && clickable ? 'accent' : undefined, children: headerName }) }), _jsx(Box, { flexShrink: 0, children: _jsx(Text, { dimColor: true, children: job.kind }) }), labelLines === undefined ? (_jsx(Box, { flexGrow: 1, flexShrink: 1, children: _jsx(Text, { children: job.label }) })) : (_jsx(Box, { width: labelWidth, flexShrink: 0, flexDirection: "column", children: labelLines.map((line, index) => _jsx(Text, { children: line }, index)) })), liveProgress !== undefined && (_jsx(Box, { width: 12, flexShrink: 0, children: _jsx(JobProgress, { progress: liveProgress }) })), _jsx(Box, { flexShrink: 0, children: _jsx(Text, { dimColor: true, children: duration }) }), headerDetail !== undefined && _jsx(Box, { flexShrink: 0, children: _jsx(Text, { dimColor: true, wrap: "truncate-end", children: headerDetail }) }), _jsx(Box, { flexShrink: 0, children: _jsx(Text, { color: info.color, children: info.label }) })] }), !settled && activity.length > 0 && activity.map(entry => (
|
|
181
|
+
// key 不含 time(同 SubagentMessage 的约定):内容更新走 in-place
|
|
182
|
+
// diff,避免每个 tick 都 unmount+mount。瀑布只在有镜像输出时出现
|
|
183
|
+
// (后台任务静默是常态——无输出时卡片就是头行,不摆空 gutter)。
|
|
184
|
+
// Rows are pre-wrapped to the row width, so truncate is a belt-and-braces
|
|
185
|
+
// guard against a re-wrap (which would break the constant height).
|
|
186
|
+
entry.gap === true ? (_jsx(Text, { dimColor: true, italic: true, wrap: "truncate", children: ` · ${t('jobs-output-gap')}` }, entry.key)) : (_jsx(Text, { color: entry.channel === 'stderr' ? 'error' : undefined, dimColor: entry.channel !== 'stderr', wrap: "truncate", children: ` │ ${entry.text}` }, entry.key)))), railBody && (_jsx(Text, { dimColor: true, children: ` └ ${headerDetail}` }))] }));
|
|
187
|
+
return _jsx(Box, { flexDirection: "column", marginTop: marginTopOnTurn ? 1 : 0, ref: viewportRef, onClick: onClick, onMouseEnter: clickable ? () => setHovered(true) : undefined, onMouseLeave: clickable ? () => setHovered(false) : undefined, children: grouped ? (_jsxs(Box, { flexDirection: "row", children: [_jsx(Box, { width: 1, flexShrink: 0, children: _jsx(Text, { color: "inactive", children: railGlyphs.join('\n') }) }), _jsx(Box, { flexDirection: "column", flexGrow: 1, paddingLeft: 1, children: body })] })) : body });
|
|
93
188
|
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { JobGroupRow } from '../../adapter/ports/channel-view.js';
|
|
3
|
+
/**
|
|
4
|
+
* Header line of a consecutive-job group (`row.jobGroup`): the run summary
|
|
5
|
+
* while the group is open, and the fold line once it is closed.
|
|
6
|
+
*
|
|
7
|
+
* ▾ 后台任务 ×6 · 2 运行中 · 4 已完成 · 合计 12.3s
|
|
8
|
+
* ▸ 已折叠 6 个后台任务 · 4 已完成 · 2 失败 · 合计 12.3s · 点击展开
|
|
9
|
+
*
|
|
10
|
+
* The fold line keeps the header's row and glyph slot, so a settling group
|
|
11
|
+
* reads as the SAME block tucking its body away (the thinking/compact fold
|
|
12
|
+
* convention) instead of a new row appearing. The whole line is clickable
|
|
13
|
+
* and brightens on hover — the same mouse gesture the job cards use — and
|
|
14
|
+
* Ctrl+O expands every group at once.
|
|
15
|
+
*
|
|
16
|
+
* The summary line sits OUTSIDE the group's rail: the cards below it carry
|
|
17
|
+
* the bracket (`╭` on the first card, `╰` on the last), so this line reads as
|
|
18
|
+
* the run's title rather than its first row.
|
|
19
|
+
*
|
|
20
|
+
* Failures stay LOUD while folded: the failed/killed counts are painted in
|
|
21
|
+
* the error color, because folding must never bury a job that died.
|
|
22
|
+
*/
|
|
23
|
+
export declare function JobGroupHeader({ group, onToggle }: {
|
|
24
|
+
group: JobGroupRow;
|
|
25
|
+
onToggle?(): void;
|
|
26
|
+
}): React.ReactNode;
|
|
27
|
+
//# sourceMappingURL=JobGroupHeader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JobGroupHeader.d.ts","sourceRoot":"","sources":["../../../../src/components/Chat/JobGroupHeader.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAA;AAQtE;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,cAAc,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;IAClD,KAAK,EAAE,WAAW,CAAA;IAClB,QAAQ,CAAC,IAAI,IAAI,CAAA;CAClB,GAAG,KAAK,CAAC,SAAS,CAoElB"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { Box, Text, useAnimationFrame } from '../../ui.js';
|
|
4
|
+
import { formatJobDuration } from '../../dsh-adapter/jobs.js';
|
|
5
|
+
import { t } from '../../i18n.js';
|
|
6
|
+
import { isMinimalUiMode } from '../../minimalUiMode.js';
|
|
7
|
+
/**
|
|
8
|
+
* Header line of a consecutive-job group (`row.jobGroup`): the run summary
|
|
9
|
+
* while the group is open, and the fold line once it is closed.
|
|
10
|
+
*
|
|
11
|
+
* ▾ 后台任务 ×6 · 2 运行中 · 4 已完成 · 合计 12.3s
|
|
12
|
+
* ▸ 已折叠 6 个后台任务 · 4 已完成 · 2 失败 · 合计 12.3s · 点击展开
|
|
13
|
+
*
|
|
14
|
+
* The fold line keeps the header's row and glyph slot, so a settling group
|
|
15
|
+
* reads as the SAME block tucking its body away (the thinking/compact fold
|
|
16
|
+
* convention) instead of a new row appearing. The whole line is clickable
|
|
17
|
+
* and brightens on hover — the same mouse gesture the job cards use — and
|
|
18
|
+
* Ctrl+O expands every group at once.
|
|
19
|
+
*
|
|
20
|
+
* The summary line sits OUTSIDE the group's rail: the cards below it carry
|
|
21
|
+
* the bracket (`╭` on the first card, `╰` on the last), so this line reads as
|
|
22
|
+
* the run's title rather than its first row.
|
|
23
|
+
*
|
|
24
|
+
* Failures stay LOUD while folded: the failed/killed counts are painted in
|
|
25
|
+
* the error color, because folding must never bury a job that died.
|
|
26
|
+
*/
|
|
27
|
+
export function JobGroupHeader({ group, onToggle }) {
|
|
28
|
+
const minimalUi = isMinimalUiMode();
|
|
29
|
+
const [hovered, setHovered] = React.useState(false);
|
|
30
|
+
// Only a LIVE group ticks: its elapsed keeps counting. A settled group's
|
|
31
|
+
// duration is frozen, so it must not keep re-rendering the row.
|
|
32
|
+
const [tickRef] = useAnimationFrame(group.running > 0 ? 1000 : null);
|
|
33
|
+
const clickable = onToggle !== undefined;
|
|
34
|
+
const duration = formatJobDuration({
|
|
35
|
+
startedAt: group.startedAt,
|
|
36
|
+
...(group.endedAt === undefined ? {} : { finishedAt: group.endedAt }),
|
|
37
|
+
});
|
|
38
|
+
const chipColor = (color) => minimalUi ? undefined : color;
|
|
39
|
+
const chips = [];
|
|
40
|
+
if (group.running > 0)
|
|
41
|
+
chips.push({ key: 'running', text: t('jobs-group-running', { count: group.running }), color: chipColor('warning') });
|
|
42
|
+
if (group.failed > 0)
|
|
43
|
+
chips.push({ key: 'failed', text: t('jobs-group-failed', { count: group.failed }), color: chipColor('error') });
|
|
44
|
+
if (group.killed > 0)
|
|
45
|
+
chips.push({ key: 'killed', text: t('jobs-group-killed', { count: group.killed }), color: chipColor('error') });
|
|
46
|
+
if (group.folded && group.running === 0 && group.failed === 0 && group.killed === 0) {
|
|
47
|
+
// Folded and clean: "全部完成" says more than "6 已完成" — the group is
|
|
48
|
+
// the unit being reported on now.
|
|
49
|
+
chips.push({ key: 'all', text: t('jobs-group-all-completed'), color: chipColor('success') });
|
|
50
|
+
}
|
|
51
|
+
else if (group.completed > 0) {
|
|
52
|
+
chips.push({ key: 'completed', text: t('jobs-group-completed', { count: group.completed }), color: undefined });
|
|
53
|
+
}
|
|
54
|
+
// The mouse affordance: a folded line always teaches the way back in; an
|
|
55
|
+
// open group only says it while hovered (its ▾ already carries the hint).
|
|
56
|
+
const hint = group.folded
|
|
57
|
+
? t('jobs-group-hint-expand')
|
|
58
|
+
: hovered && clickable ? t('jobs-group-hint-fold') : undefined;
|
|
59
|
+
return (_jsxs(Box, { flexDirection: "row", gap: 1, ref: tickRef, onClick: clickable ? onToggle : undefined, onMouseEnter: clickable ? () => setHovered(true) : undefined, onMouseLeave: clickable ? () => setHovered(false) : undefined, children: [_jsx(Text, { color: hovered && clickable && !minimalUi ? 'accent' : 'inactive', children: group.folded ? '▸' : '▾' }), _jsx(Text, { wrap: "truncate-end", color: hovered && clickable ? 'text' : undefined, dimColor: !(hovered && clickable), children: group.folded
|
|
60
|
+
? t('jobs-group-folded', { count: group.count })
|
|
61
|
+
: t('jobs-group-title', { count: group.count }) }), chips.map(chip => (_jsxs(React.Fragment, { children: [_jsx(Text, { color: "inactive", children: "\u00B7" }), _jsx(Text, { color: chip.color, dimColor: chip.color === undefined, children: chip.text })] }, chip.key))), _jsx(Text, { color: "inactive", children: "\u00B7" }), _jsx(Text, { dimColor: true, children: t('jobs-group-elapsed', { duration }) }), hint !== undefined && (_jsxs(React.Fragment, { children: [_jsx(Text, { color: "inactive", children: "\u00B7" }), _jsx(Text, { color: group.folded ? 'inactive' : 'accent', children: hint })] }))] }));
|
|
62
|
+
}
|
|
@@ -5,7 +5,7 @@ import { t } from '../../i18n.js';
|
|
|
5
5
|
import { resolvePreset } from '../activityFrames.js';
|
|
6
6
|
import { toolNameColor } from '../messages/AssistantToolUseMessage.js';
|
|
7
7
|
import { stringWidth } from '../../ink/stringWidth.js';
|
|
8
|
-
import {
|
|
8
|
+
import { isMinimalUiMode } from '../../minimalUiMode.js';
|
|
9
9
|
/** The waterfall window is a Kimi Code style constant-height region. */
|
|
10
10
|
const WATERFALL_ROWS = 3;
|
|
11
11
|
/** Card left padding + the `│ ` gutter prefix. */
|
|
@@ -19,14 +19,14 @@ function tokens(row) {
|
|
|
19
19
|
return total > 0 ? `${total} tok` : '- tok';
|
|
20
20
|
}
|
|
21
21
|
function status(row) {
|
|
22
|
-
const
|
|
22
|
+
const minimalUi = isMinimalUiMode();
|
|
23
23
|
if (row.status === 'completed')
|
|
24
|
-
return { glyph:
|
|
24
|
+
return { glyph: minimalUi ? '✓' : '🟢', label: t('subagent-status-completed'), color: minimalUi ? undefined : 'success' };
|
|
25
25
|
if (row.status === 'failed')
|
|
26
|
-
return { glyph:
|
|
26
|
+
return { glyph: minimalUi ? '×' : '🔴', label: t('subagent-status-failed'), color: minimalUi ? undefined : 'error' };
|
|
27
27
|
if (row.status === 'cancelled')
|
|
28
|
-
return { glyph:
|
|
29
|
-
return { glyph:
|
|
28
|
+
return { glyph: minimalUi ? '×' : '🔴', label: t('subagent-status-cancelled'), color: minimalUi ? undefined : 'error' };
|
|
29
|
+
return { glyph: minimalUi ? '·' : '🟡', label: t('subagent-status-running'), color: minimalUi ? undefined : 'warning' };
|
|
30
30
|
}
|
|
31
31
|
/** Hard single-line clip by display width — a wrapped waterfall row would
|
|
32
32
|
* break the constant-height window. */
|
|
@@ -28,11 +28,23 @@ export declare function GoalStatusChip({ goal, minimal }: {
|
|
|
28
28
|
* id first appears, frozen on completion) — deliberately not derived from
|
|
29
29
|
* session-event timestamps.
|
|
30
30
|
*/
|
|
31
|
-
export declare function GoalTodoPanel({ channel, collapsed, onToggle, }: {
|
|
31
|
+
export declare function GoalTodoPanel({ channel, collapsed, onToggle, variant, visible, maxTodos, wrapWidth, }: {
|
|
32
32
|
channel: Channel;
|
|
33
33
|
/** Fold the whole todo section to its summary header line. */
|
|
34
34
|
collapsed?: boolean;
|
|
35
35
|
/** Toggle the fold (click on the header row; shares the hotkey state). */
|
|
36
36
|
onToggle?: () => void;
|
|
37
|
+
/** 'panel' = 侧栏 Todo Panel 形态:更紧凑(去外层 padding 与折叠
|
|
38
|
+
* 提示行),计时走共享动画时钟(visible=false 时零订阅)。 */
|
|
39
|
+
variant?: 'default' | 'panel';
|
|
40
|
+
/** 侧栏 visible 契约:非 active Panel 时 false——暂停本地计时,
|
|
41
|
+
* store(channel.goal/todos)照常更新,重新打开直接读最新值。 */
|
|
42
|
+
visible?: boolean;
|
|
43
|
+
/** 覆盖 MAX_TODOS(panel variant 按宿主高度传入)。 */
|
|
44
|
+
maxTodos?: number;
|
|
45
|
+
/** panel variant:todo 行按此宽度折行——单条最多 2 行,超出部分截断
|
|
46
|
+
* 加省略号;maxTodos 预算按「行」折算,放不下仍走「…N more」。缺省
|
|
47
|
+
* (default 形态)不折行,保持单行 truncate 的 chat 页现状。 */
|
|
48
|
+
wrapWidth?: number;
|
|
37
49
|
}): React.ReactNode;
|
|
38
50
|
//# sourceMappingURL=GoalTodoPanel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GoalTodoPanel.d.ts","sourceRoot":"","sources":["../../../src/components/GoalTodoPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"GoalTodoPanel.d.ts","sourceRoot":"","sources":["../../../src/components/GoalTodoPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,KAAK,EAAE,SAAS,IAAI,OAAO,EAAE,MAAM,iCAAiC,CAAA;AAC3E,OAAO,KAAK,EAAE,WAAW,EAAiB,MAAM,2BAA2B,CAAA;AAmC3E;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,EAAE,IAAI,EAAE,OAAe,EAAE,EAAE;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,KAAK,CAAC,SAAS,CAQnH;AA2CD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,aAAa,CAAC,EAC5B,OAAO,EACP,SAAiB,EACjB,QAAQ,EACR,OAAmB,EACnB,OAAc,EACd,QAAQ,EACR,SAAS,GACV,EAAE;IACD,OAAO,EAAE,OAAO,CAAA;IAChB,8DAA8D;IAC9D,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IACrB;8CAC0C;IAC1C,OAAO,CAAC,EAAE,SAAS,GAAG,OAAO,CAAA;IAC7B;oDACgD;IAChD,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;oDAEgD;IAChD,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,GAAG,KAAK,CAAC,SAAS,CAiMlB"}
|