@deepseek-harness-tui/dsh-tui 0.12.0 → 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 +41 -5
- 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 +8 -3
- package/cordis.patch.yml +7 -1
- package/guide/dsh-tui-guide/configuration.en.md +6 -1
- package/guide/dsh-tui-guide/configuration.md +6 -1
- package/guide/dsh-tui-guide/getting-started.en.md +6 -3
- package/guide/dsh-tui-guide/getting-started.md +4 -2
- package/guide/dsh-tui-guide/interaction.en.md +68 -4
- package/guide/dsh-tui-guide/interaction.md +49 -3
- package/guide/dsh-tui-guide/plugins.en.md +16 -6
- package/guide/dsh-tui-guide/plugins.md +14 -6
- package/guide/dsh-tui-guide/themes.en.md +7 -2
- package/guide/dsh-tui-guide/themes.md +5 -2
- package/guide/dsh-tui-guide/user-guide.en.md +124 -21
- package/guide/dsh-tui-guide/user-guide.md +96 -16
- package/lib/settings.json +215 -1
- package/lib/types/adapter/channel/ui-policy.d.ts +6 -2
- package/lib/types/adapter/channel/ui-policy.d.ts.map +1 -1
- package/lib/types/adapter/channel/ui-policy.js +14 -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-ui.d.ts +62 -2
- package/lib/types/adapter/ports/channel-ui.d.ts.map +1 -1
- package/lib/types/adapter/ports/channel-view.d.ts +94 -0
- 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 +18 -1
- package/lib/types/components/Chat/JobCard.d.ts.map +1 -1
- package/lib/types/components/Chat/JobCard.js +90 -22
- 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/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 +147 -14
- 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 +212 -18
- 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/PromptInput.d.ts +20 -22
- package/lib/types/components/PromptInput.d.ts.map +1 -1
- package/lib/types/components/PromptInput.js +413 -156
- 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/SubagentCard.d.ts.map +1 -1
- package/lib/types/components/SubagentCard.js +17 -2
- 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 +54 -5
- 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/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/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/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/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/mode-actions.d.ts +0 -3
- package/lib/types/dsh-adapter/channel/mode-actions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/mode-actions.js +7 -2
- 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 +0 -1
- 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 +9 -1
- 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 +18 -2
- package/lib/types/dsh-adapter/channel/state.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/state.js +2 -1
- 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 +56 -3
- 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 +14 -0
- package/lib/types/dsh-adapter/contract.d.ts.map +1 -1
- package/lib/types/dsh-adapter/contract.js +24 -0
- 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/migrate/sessionize.d.ts.map +1 -1
- package/lib/types/dsh-adapter/migrate/sessionize.js +11 -12
- 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 +17 -1
- package/lib/types/dsh-adapter/plugin.d.ts.map +1 -1
- package/lib/types/dsh-adapter/plugin.js +169 -32
- package/lib/types/dsh-adapter/presets.d.ts +26 -6
- package/lib/types/dsh-adapter/presets.d.ts.map +1 -1
- package/lib/types/dsh-adapter/presets.js +29 -7
- 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/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 +734 -15
- package/lib/types/i18n.d.ts.map +1 -1
- package/lib/types/i18n.js +302 -6
- 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 +62 -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 +36 -3
- package/lib/types/ink/parse-keypress.d.ts.map +1 -1
- package/lib/types/ink/parse-keypress.js +262 -108
- 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/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/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 +22 -1
- package/lib/types/screens/Chat.d.ts.map +1 -1
- package/lib/types/screens/Chat.js +1126 -299
- 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.map +1 -1
- package/lib/types/screens/StatusLine.js +32 -14
- 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 +83 -0
- package/lib/types/tips.js +5 -5
- 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 +101 -44
- 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/package.json +19 -8
- 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/{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
|
@@ -10,6 +10,7 @@ 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 { JobGroupHeader } from './Chat/JobGroupHeader.js';
|
|
13
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';
|
|
@@ -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
|
|
@@ -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
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PageMargin.d.ts","sourceRoot":"","sources":["../../../src/components/PageMargin.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"PageMargin.d.ts","sourceRoot":"","sources":["../../../src/components/PageMargin.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAezB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,qCAAqC;AACrC,MAAM,MAAM,SAAS,GAAG;IAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAElE,2CAA2C;AAC3C,eAAO,MAAM,gBAAgB,0BAAiD,CAAA;AAE9E;;;;;GAKG;AACH,wBAAgB,YAAY,IAAI,SAAS,CAExC;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,EACzB,QAAQ,GACT,EAAE;IACD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAC1B,GAAG,KAAK,CAAC,SAAS,CA2ClB"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import { Box } from '../ui.js';
|
|
4
|
+
import { SurfaceEdgesContext } from './SurfaceEdges.js';
|
|
4
5
|
import { TerminalSizeContext, } from '../ink/components/TerminalSizeContext.js';
|
|
5
6
|
import { useTerminalSize } from '../ink/hooks/use-terminal-size.js';
|
|
6
7
|
import { getPageMarginSetting, resolvePageMargin, subscribePageMargin, } from '../tuiDisplayPrefs.js';
|
|
@@ -29,10 +30,11 @@ export function PageMargin({ children, }) {
|
|
|
29
30
|
const inner = {
|
|
30
31
|
columns: Math.max(1, size.columns - 2 * x),
|
|
31
32
|
rows: Math.max(1, size.rows - 2 * y),
|
|
33
|
+
screenRows: size.screenRows ?? size.rows,
|
|
32
34
|
};
|
|
33
35
|
const inset = {
|
|
34
36
|
x: parentInset.x + x,
|
|
35
37
|
y: parentInset.y + y,
|
|
36
38
|
};
|
|
37
|
-
return (_jsx(PageInsetContext.Provider, { value: inset, children: _jsx(TerminalSizeContext.Provider, { value: inner, children: _jsx(Box, { flexDirection: "column", flexGrow: 1, width: "100%", paddingX: x, paddingY: y, children: _jsx(Box, { flexDirection: "column", flexGrow: 1, width: inner.columns, children: children }) }) }) }));
|
|
39
|
+
return (_jsx(PageInsetContext.Provider, { value: inset, children: _jsx(SurfaceEdgesContext.Provider, { value: { left: inset.x, right: inset.x }, children: _jsx(TerminalSizeContext.Provider, { value: inner, children: _jsx(Box, { flexDirection: "column", flexGrow: 1, width: "100%", paddingX: x, paddingY: y, children: _jsx(Box, { flexDirection: "column", flexGrow: 1, width: inner.columns, children: children }) }) }) }) }));
|
|
38
40
|
}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
*
|
|
9
9
|
* Boundaries catch render/lifecycle errors only; errors thrown from async
|
|
10
10
|
* handlers and effects remain the scene's own responsibility (see the
|
|
11
|
-
* 场景红线 section in
|
|
11
|
+
* 场景红线 section in tui-profile 的插件准入与开发指南).
|
|
12
12
|
*/
|
|
13
13
|
import React from 'react';
|
|
14
14
|
type PluginSceneBoundaryProps = {
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
*
|
|
9
9
|
* Boundaries catch render/lifecycle errors only; errors thrown from async
|
|
10
10
|
* handlers and effects remain the scene's own responsibility (see the
|
|
11
|
-
* 场景红线 section in
|
|
11
|
+
* 场景红线 section in tui-profile 的插件准入与开发指南).
|
|
12
12
|
*/
|
|
13
13
|
import React from 'react';
|
|
14
14
|
export class PluginSceneBoundary extends React.Component {
|
|
@@ -3,31 +3,14 @@ import type { ChannelUi as Channel } from '../adapter/channel/ui-policy.js';
|
|
|
3
3
|
import type { ComposerImageRef } from '../dsh-adapter/channel.js';
|
|
4
4
|
import type { TranscriptImage } from '../dsh-adapter/transcript-images.js';
|
|
5
5
|
import { type PromptDraftCache } from './promptDraftCache.js';
|
|
6
|
-
|
|
7
|
-
* Normalize editable text so no terminal control characters remain in state.
|
|
8
|
-
*/
|
|
9
|
-
export declare function sanitizeEditableText(text: string): string;
|
|
10
|
-
/**
|
|
11
|
-
* Paste-payload ingress: strip the ESC-less tail of a split record before
|
|
12
|
-
* normalizing. The tail is printable, so it survives `sanitizeEditableText`'s
|
|
13
|
-
* control probe untouched; typed text keeps it because only a paste payload
|
|
14
|
-
* can carry a partial record.
|
|
15
|
-
*
|
|
16
|
-
* The five separators only prove the *shape*, not that a record was split:
|
|
17
|
-
* a user can legitimately paste the literal `[13;28;13;1;0;1_`. Strip the
|
|
18
|
-
* ESC-less form only when the same payload also carries a full ESC-bearing
|
|
19
|
-
* record — only then is there in-payload evidence of a split stream.
|
|
20
|
-
* Otherwise the bytes are ordinary text and must survive verbatim.
|
|
21
|
-
*/
|
|
22
|
-
export declare function sanitizePastedText(text: string): string;
|
|
6
|
+
export { sanitizeEditableText, sanitizePastedText } from '../utils/inputPaste.js';
|
|
23
7
|
/** Capabilities referenced by `text`, in first occurrence order. A raw token
|
|
24
8
|
* restored from disk/history has no sidecar entry and therefore stays inert. */
|
|
25
9
|
export declare function composerImageRefsForText(text: string, stagedByToken: ReadonlyMap<string, string>): ComposerImageRef[];
|
|
26
10
|
/**
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
* double-press exit). Populated every render; null while unmounted.
|
|
11
|
+
* Live composer handle for Chat's global key rules and external draft actions.
|
|
12
|
+
* Chat listens first, so delegated editing actions stay with their state owner.
|
|
13
|
+
* Populated after each commit; null while unmounted or suspended.
|
|
31
14
|
*/
|
|
32
15
|
export interface PromptController {
|
|
33
16
|
hasText(): boolean;
|
|
@@ -53,6 +36,8 @@ export interface PromptController {
|
|
|
53
36
|
* branch calls this first, before its clear/exit semantics.
|
|
54
37
|
*/
|
|
55
38
|
consumeSelectionCopy(): boolean;
|
|
39
|
+
/** Consume selection/editor Esc before Chat's working-turn interrupt. */
|
|
40
|
+
consumeEscape(): boolean;
|
|
56
41
|
/** Toggle vim editing mode (`/vim`); returns the new state (true = on). */
|
|
57
42
|
toggleVim(): boolean;
|
|
58
43
|
/** True while vim mode is on (either submode). Esc belongs to vim then —
|
|
@@ -70,6 +55,13 @@ export interface PromptInputProps {
|
|
|
70
55
|
channel: Channel;
|
|
71
56
|
/** Keep the draft mounted while another prompt-slot panel owns the UI. */
|
|
72
57
|
suspended?: boolean;
|
|
58
|
+
/**
|
|
59
|
+
* Host judgement "this notice needs no toast" — the pet panel says it with
|
|
60
|
+
* its speech bubble instead while it is the active panel. Evaluated during
|
|
61
|
+
* render (not via an effect-written ledger) so toast and bubble swap in
|
|
62
|
+
* the same commit without a one-frame flash. Errors are never suppressed.
|
|
63
|
+
*/
|
|
64
|
+
toastSuppressed?: (item: Channel['notifications'][number]) => boolean;
|
|
73
65
|
/**
|
|
74
66
|
* Owner-held slot for the unsent draft.
|
|
75
67
|
*
|
|
@@ -145,6 +137,12 @@ export interface PromptInputProps {
|
|
|
145
137
|
*/
|
|
146
138
|
caretPreviewOpen?: boolean;
|
|
147
139
|
onDismissCaretPreview?(): void;
|
|
140
|
+
/**
|
|
141
|
+
* Clock seam for the draft undo's 700ms idle coalescing. Defaults to
|
|
142
|
+
* `Date.now`; the regression harness passes a hand-advanced clock so the idle
|
|
143
|
+
* rule is exercised without a wall-clock sleep (which would be flaky).
|
|
144
|
+
*/
|
|
145
|
+
now?: () => number;
|
|
148
146
|
}
|
|
149
147
|
/**
|
|
150
148
|
* dsh-TUI prompt input: rounded border box (top+bottom borders
|
|
@@ -176,5 +174,5 @@ export interface PromptInputProps {
|
|
|
176
174
|
* working) interrupts the turn and delivers them right away; Ctrl+Enter
|
|
177
175
|
* aborts the turn and sends the current input immediately.
|
|
178
176
|
*/
|
|
179
|
-
export declare function PromptInput({ channel, suspended, draftCache, helpOpen, onToggleHelp, onRunCommand, selectionActive, fillText, onFillConsumed, onRewindRequest, onBackgroundRequest, onOpenSessions, backgroundAgentsNeedingInput, controllerRef, onCaretImage, caretPreviewOpen, onDismissCaretPreview, }: PromptInputProps): React.JSX.Element | null;
|
|
177
|
+
export declare function PromptInput({ channel, toastSuppressed, suspended, draftCache, helpOpen, onToggleHelp, onRunCommand, selectionActive, fillText, onFillConsumed, onRewindRequest, onBackgroundRequest, onOpenSessions, backgroundAgentsNeedingInput, controllerRef, onCaretImage, caretPreviewOpen, onDismissCaretPreview, now, }: PromptInputProps): React.JSX.Element | null;
|
|
180
178
|
//# sourceMappingURL=PromptInput.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PromptInput.d.ts","sourceRoot":"","sources":["../../../src/components/PromptInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"PromptInput.d.ts","sourceRoot":"","sources":["../../../src/components/PromptInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AA6BzB,OAAO,KAAK,EAAE,SAAS,IAAI,OAAO,EAAE,MAAM,iCAAiC,CAAA;AAC3E,OAAO,KAAK,EACV,gBAAgB,EAGjB,MAAM,2BAA2B,CAAA;AAClC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAA;AAY1E,OAAO,EAIL,KAAK,gBAAgB,EAEtB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAkOjF;gFACgF;AAChF,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GACzC,gBAAgB,EAAE,CAWpB;AA+MD;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,IAAI,OAAO,CAAA;IAClB,yFAAyF;IACzF,IAAI,IAAI,MAAM,CAAA;IACd,4EAA4E;IAC5E,aAAa,CAAC,IAAI,SAAS;QAAE,KAAK,EAAE,eAAe,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IACtE,KAAK,IAAI,IAAI,CAAA;IACb;;;;;OAKG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;IAC5B;;;;;OAKG;IACH,oBAAoB,IAAI,OAAO,CAAA;IAC/B,yEAAyE;IACzE,aAAa,IAAI,OAAO,CAAA;IACxB,2EAA2E;IAC3E,SAAS,IAAI,OAAO,CAAA;IACpB;yEACqE;IACrE,SAAS,IAAI,OAAO,CAAA;CAAC;AAEvB;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAA;IAChB,0EAA0E;IAC1E,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB;;;;;OAKG;IACH,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,KAAK,OAAO,CAAA;IACrE;;;;;;;;;;;;;;OAcG;IACH,UAAU,CAAC,EAAE,gBAAgB,CAAA;IAC7B,0EAA0E;IAC1E,QAAQ,EAAE,OAAO,CAAA;IACjB,YAAY,IAAI,IAAI,CAAA;IACpB;;;OAGG;IACH,YAAY,CACV,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,SAAS,gBAAgB,EAAE,GAClC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAC7B,6EAA6E;IAC7E,eAAe,EAAE,OAAO,CAAA;IACxB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,cAAc,CAAC,IAAI,IAAI,CAAA;IACvB,kEAAkE;IAClE,eAAe,CAAC,IAAI,IAAI,CAAA;IACxB;;;OAGG;IACH,mBAAmB,CAAC,IAAI,IAAI,CAAA;IAC5B;;;;;;;;OAQG;IACH,cAAc,CAAC,IAAI,IAAI,CAAA;IACvB;;;;OAIG;IACH,4BAA4B,CAAC,EAAE,MAAM,CAAA;IACrC,0EAA0E;IAC1E,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAA;IACxD;;;;;;;OAOG;IACH,YAAY,CAAC,CAAC,KAAK,EAAE,eAAe,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,GAAG,IAAI,CAAA;IAC7G;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,qBAAqB,CAAC,IAAI,IAAI,CAAA;IAC9B;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,WAAW,CAAC,EAC1B,OAAO,EACP,eAAe,EACf,SAAiB,EACjB,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,QAAQ,EACR,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,cAAc,EACd,4BAA4B,EAC5B,aAAa,EACb,YAAY,EACZ,gBAAwB,EACxB,qBAAqB,EACrB,GAAc,GACf,EAAE,gBAAgB,4BA0lHlB"}
|