@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
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
import type { ToolBackground, ScrollGutterMode, PageMarginSetting, PageMarginMode, PageMarginSpec, StatusBarConfig } from './adapter/ports/channel-display.js';
|
|
2
|
-
export type { ToolBackground, ScrollGutterMode, PageMarginSetting, PageMarginMode, PageMarginSpec, StatusBarConfig } from './adapter/ports/channel-display.js';
|
|
1
|
+
import type { ToolBackground, ScrollGutterMode, PageMarginSetting, PageMarginMode, PageMarginSpec, StatusBarConfig, JobGroupFoldMode } from './adapter/ports/channel-display.js';
|
|
2
|
+
export type { ToolBackground, ScrollGutterMode, PageMarginSetting, PageMarginMode, PageMarginSpec, StatusBarConfig, JobGroupFoldMode } from './adapter/ports/channel-display.js';
|
|
3
3
|
/** Defaults keep the essential route/context information visible. */
|
|
4
4
|
export declare const DEFAULT_STATUS_BAR: Readonly<StatusBarConfig>;
|
|
5
5
|
/** Normalize untrusted/config-layer values without mutating the input. */
|
|
6
6
|
export declare function normalizeToolBackground(value: unknown): ToolBackground;
|
|
7
|
+
/** Same normalize contract as toolBackground; `auto` is the default. */
|
|
8
|
+
export declare function normalizeJobGroupFold(value: unknown): JobGroupFoldMode;
|
|
7
9
|
/** Same normalize contract as toolBackground; `timeline` is the default. */
|
|
8
10
|
export declare function normalizeScrollGutter(value: unknown): ScrollGutterMode;
|
|
9
11
|
/** Merge a partial settings value over the stable status-bar defaults. */
|
|
@@ -113,4 +115,42 @@ export declare function normalizeImageBacking(value: unknown): ImageBacking;
|
|
|
113
115
|
export declare const subscribeImageBacking: (listener: () => void) => () => void;
|
|
114
116
|
export declare const getImageBacking: () => ImageBacking;
|
|
115
117
|
export declare const applyImageBacking: (value: unknown) => ImageBacking;
|
|
118
|
+
/** Panel id grammar (plugins register under a `plugin:sub` namespace). */
|
|
119
|
+
export declare const SIDE_PANEL_ID_PATTERN: RegExp;
|
|
120
|
+
export declare const DEFAULT_SIDE_PANEL_IDS = "todo,jobs,agents";
|
|
121
|
+
/** Chat fraction of the content width; junk collapses to the default and
|
|
122
|
+
* the value is sanity-clamped (geometry clamps further per width). */
|
|
123
|
+
export declare function normalizeSidePanelRatio(value: unknown): number;
|
|
124
|
+
/** Comma-separated enabled-panel ids: tokens that fail the id grammar are
|
|
125
|
+
* dropped (a typo must never wedge the layout); unknown-but-well-formed
|
|
126
|
+
* ids survive — a plugin may register them later in the session. */
|
|
127
|
+
export declare function normalizeSidePanelPanels(value: unknown): string;
|
|
128
|
+
/** Enabled panel ids in PanelBar order. */
|
|
129
|
+
export declare function parseSidePanelIds(value: string): readonly string[];
|
|
130
|
+
export declare const subscribeSidePanelSplitEnabled: (listener: () => void) => () => void;
|
|
131
|
+
export declare const getSidePanelSplitEnabled: () => boolean;
|
|
132
|
+
export declare const applySidePanelSplitEnabled: (value: unknown) => boolean;
|
|
133
|
+
export declare const subscribeSidePanelOpen: (listener: () => void) => () => void;
|
|
134
|
+
export declare const getSidePanelOpen: () => boolean;
|
|
135
|
+
export declare const applySidePanelOpen: (value: unknown) => boolean;
|
|
136
|
+
export declare const subscribeSidePanelRatio: (listener: () => void) => () => void;
|
|
137
|
+
export declare const getSidePanelRatio: () => number;
|
|
138
|
+
export declare const applySidePanelRatio: (value: unknown) => number;
|
|
139
|
+
export declare const subscribeSidePanelPanels: (listener: () => void) => () => void;
|
|
140
|
+
export declare const getSidePanelPanels: () => string;
|
|
141
|
+
export declare const applySidePanelPanels: (value: unknown) => string;
|
|
142
|
+
/**
|
|
143
|
+
* Companion 皮肤(设置 `dsh-tui.companion.skin`):内置 'deepy'(默认,
|
|
144
|
+
* assets/deepy 素材包)、'whaleGirl'(用户提供的鲸娘素材包,assets/
|
|
145
|
+
* whaleGirl)与 'whale'(开屏像素鲸鱼同款分层动画);插件
|
|
146
|
+
* 皮肤 id('plugin:sub' 命名空间)随 Phase 7 开放注册后同样可写——
|
|
147
|
+
* 未注册/未知的 id 一律回退 deepy,不阻断启动。
|
|
148
|
+
*/
|
|
149
|
+
export type CompanionSkinSetting = string;
|
|
150
|
+
export declare const COMPANION_SKIN_IDS: readonly ["deepy", "whaleGirl", "whale"];
|
|
151
|
+
export declare const DEFAULT_COMPANION_SKIN: CompanionSkinSetting;
|
|
152
|
+
export declare function normalizeCompanionSkin(value: unknown): CompanionSkinSetting;
|
|
153
|
+
export declare const subscribeCompanionSkin: (listener: () => void) => () => void;
|
|
154
|
+
export declare const getCompanionSkin: () => string;
|
|
155
|
+
export declare const applyCompanionSkin: (value: unknown) => string;
|
|
116
156
|
//# sourceMappingURL=tuiDisplayPrefs.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tuiDisplayPrefs.d.ts","sourceRoot":"","sources":["../../src/tuiDisplayPrefs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAA;
|
|
1
|
+
{"version":3,"file":"tuiDisplayPrefs.d.ts","sourceRoot":"","sources":["../../src/tuiDisplayPrefs.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,6 +24,7 @@ export const DEFAULT_STATUS_BAR = Object.freeze({
|
|
|
24
24
|
shortcutHint: false,
|
|
25
25
|
});
|
|
26
26
|
const TOOL_BACKGROUNDS = new Set(['none', 'subtle', 'strong']);
|
|
27
|
+
const JOB_GROUP_FOLDS = new Set(['auto', 'always', 'never']);
|
|
27
28
|
const SCROLL_GUTTERS = new Set(['timeline', 'scrollbar', 'hidden']);
|
|
28
29
|
const STATUS_BAR_KEYS = Object.keys(DEFAULT_STATUS_BAR);
|
|
29
30
|
/** Normalize untrusted/config-layer values without mutating the input. */
|
|
@@ -32,6 +33,12 @@ export function normalizeToolBackground(value) {
|
|
|
32
33
|
? value
|
|
33
34
|
: 'none';
|
|
34
35
|
}
|
|
36
|
+
/** Same normalize contract as toolBackground; `auto` is the default. */
|
|
37
|
+
export function normalizeJobGroupFold(value) {
|
|
38
|
+
return typeof value === 'string' && JOB_GROUP_FOLDS.has(value)
|
|
39
|
+
? value
|
|
40
|
+
: 'auto';
|
|
41
|
+
}
|
|
35
42
|
/** Same normalize contract as toolBackground; `timeline` is the default. */
|
|
36
43
|
export function normalizeScrollGutter(value) {
|
|
37
44
|
return typeof value === 'string' && SCROLL_GUTTERS.has(value)
|
|
@@ -225,3 +232,70 @@ const imageBackingStore = createLiveSetting('transparent', normalizeImageBacking
|
|
|
225
232
|
export const subscribeImageBacking = imageBackingStore.subscribe;
|
|
226
233
|
export const getImageBacking = imageBackingStore.get;
|
|
227
234
|
export const applyImageBacking = imageBackingStore.apply;
|
|
235
|
+
// ── Side panel (侧栏) ────────────────────────────────────────────────
|
|
236
|
+
// Settings `dsh-tui.sidePanel.*`. These are module-level live stores (not
|
|
237
|
+
// channel state): the layout needs them above the channel's version bump —
|
|
238
|
+
// a Ctrl+B toggle must re-render Chat even though nothing about the
|
|
239
|
+
// session changed — and /settings + cordis.yml write through the same
|
|
240
|
+
// apply* functions (plugin's applyDisplay mirrors them here, exactly like
|
|
241
|
+
// pageMargin). Key toggles are session-level: they move the live store but
|
|
242
|
+
// never write the user settings layer, so a restart returns to the
|
|
243
|
+
// configured default.
|
|
244
|
+
/** Panel id grammar (plugins register under a `plugin:sub` namespace). */
|
|
245
|
+
export const SIDE_PANEL_ID_PATTERN = /^[a-z][a-z0-9_-]*(:[a-z][a-z0-9_-]*)*$/;
|
|
246
|
+
export const DEFAULT_SIDE_PANEL_IDS = 'todo,jobs,agents';
|
|
247
|
+
function normalizeBoolean(value, fallback) {
|
|
248
|
+
return typeof value === 'boolean' ? value : fallback;
|
|
249
|
+
}
|
|
250
|
+
/** Chat fraction of the content width; junk collapses to the default and
|
|
251
|
+
* the value is sanity-clamped (geometry clamps further per width). */
|
|
252
|
+
export function normalizeSidePanelRatio(value) {
|
|
253
|
+
if (typeof value !== 'number' || !Number.isFinite(value))
|
|
254
|
+
return 0.68;
|
|
255
|
+
return Math.min(0.95, Math.max(0.1, value));
|
|
256
|
+
}
|
|
257
|
+
/** Comma-separated enabled-panel ids: tokens that fail the id grammar are
|
|
258
|
+
* dropped (a typo must never wedge the layout); unknown-but-well-formed
|
|
259
|
+
* ids survive — a plugin may register them later in the session. */
|
|
260
|
+
export function normalizeSidePanelPanels(value) {
|
|
261
|
+
if (typeof value !== 'string')
|
|
262
|
+
return DEFAULT_SIDE_PANEL_IDS;
|
|
263
|
+
const seen = new Set();
|
|
264
|
+
for (const token of value.split(',')) {
|
|
265
|
+
const id = token.trim().toLowerCase();
|
|
266
|
+
if (id !== '' && SIDE_PANEL_ID_PATTERN.test(id))
|
|
267
|
+
seen.add(id);
|
|
268
|
+
}
|
|
269
|
+
return seen.size > 0 ? [...seen].join(',') : DEFAULT_SIDE_PANEL_IDS;
|
|
270
|
+
}
|
|
271
|
+
/** Enabled panel ids in PanelBar order. */
|
|
272
|
+
export function parseSidePanelIds(value) {
|
|
273
|
+
return normalizeSidePanelPanels(value).split(',');
|
|
274
|
+
}
|
|
275
|
+
const sidePanelSplitEnabledStore = createLiveSetting(true, value => normalizeBoolean(value, true));
|
|
276
|
+
export const subscribeSidePanelSplitEnabled = sidePanelSplitEnabledStore.subscribe;
|
|
277
|
+
export const getSidePanelSplitEnabled = sidePanelSplitEnabledStore.get;
|
|
278
|
+
export const applySidePanelSplitEnabled = sidePanelSplitEnabledStore.apply;
|
|
279
|
+
const sidePanelOpenStore = createLiveSetting(false, value => normalizeBoolean(value, false));
|
|
280
|
+
export const subscribeSidePanelOpen = sidePanelOpenStore.subscribe;
|
|
281
|
+
export const getSidePanelOpen = sidePanelOpenStore.get;
|
|
282
|
+
export const applySidePanelOpen = sidePanelOpenStore.apply;
|
|
283
|
+
const sidePanelRatioStore = createLiveSetting(0.68, normalizeSidePanelRatio);
|
|
284
|
+
export const subscribeSidePanelRatio = sidePanelRatioStore.subscribe;
|
|
285
|
+
export const getSidePanelRatio = sidePanelRatioStore.get;
|
|
286
|
+
export const applySidePanelRatio = sidePanelRatioStore.apply;
|
|
287
|
+
const sidePanelPanelsStore = createLiveSetting(DEFAULT_SIDE_PANEL_IDS, normalizeSidePanelPanels);
|
|
288
|
+
export const subscribeSidePanelPanels = sidePanelPanelsStore.subscribe;
|
|
289
|
+
export const getSidePanelPanels = sidePanelPanelsStore.get;
|
|
290
|
+
export const applySidePanelPanels = sidePanelPanelsStore.apply;
|
|
291
|
+
export const COMPANION_SKIN_IDS = ['deepy', 'whaleGirl', 'whale'];
|
|
292
|
+
export const DEFAULT_COMPANION_SKIN = 'deepy';
|
|
293
|
+
export function normalizeCompanionSkin(value) {
|
|
294
|
+
if (typeof value === 'string' && COMPANION_SKIN_IDS.includes(value))
|
|
295
|
+
return value;
|
|
296
|
+
return DEFAULT_COMPANION_SKIN;
|
|
297
|
+
}
|
|
298
|
+
const companionSkinStore = createLiveSetting(DEFAULT_COMPANION_SKIN, normalizeCompanionSkin);
|
|
299
|
+
export const subscribeCompanionSkin = companionSkinStore.subscribe;
|
|
300
|
+
export const getCompanionSkin = companionSkinStore.get;
|
|
301
|
+
export const applyCompanionSkin = companionSkinStore.apply;
|
package/lib/types/update.d.ts
CHANGED
|
@@ -303,16 +303,38 @@ export interface ReleaseAgeExcludeOutcome {
|
|
|
303
303
|
* (24h by default) — on release day that gate refuses the very version
|
|
304
304
|
* `/update` is installing (ERR_PNPM_MINIMUM_RELEASE_AGE_VIOLATION), which
|
|
305
305
|
* reads to the user as a broken update until the window passes. Pre-seed the
|
|
306
|
-
* profile's pnpm-workspace.yaml with
|
|
307
|
-
* package at the exact
|
|
308
|
-
*
|
|
309
|
-
*
|
|
310
|
-
*
|
|
311
|
-
*
|
|
312
|
-
*
|
|
313
|
-
*
|
|
306
|
+
* profile's pnpm-workspace.yaml with release-age exclusions scoped to this
|
|
307
|
+
* package at the exact versions pnpm verifies before it can swap the package:
|
|
308
|
+
* the target version itself, plus `alsoExempt` — the pre-update `updatedFrom`,
|
|
309
|
+
* read from the running package's own manifest (normally the version the
|
|
310
|
+
* profile lockfile pins). Two releases inside the 24h window leave the OLD
|
|
311
|
+
* lockfile entry inside it too, and pnpm fails the whole policy check on that
|
|
312
|
+
* entry before replacing the package (issue #1205), so exempting only the
|
|
313
|
+
* target is not enough. Same best-effort,
|
|
314
|
+
* idempotent pattern as {@link ensureProfileAllowBuilds}: entries for this
|
|
315
|
+
* package track exactly the versions the current update needs (older own
|
|
316
|
+
* entries are dropped instead of accumulating), foreign entries are
|
|
317
|
+
* preserved, a missing `minimumReleaseAgeExclude` block is appended, a
|
|
318
|
+
* missing file is created, and an absent profile directory resolves to
|
|
319
|
+
* undefined — the caller still runs pnpm, whose own diagnostic stays the
|
|
320
|
+
* visible fallback. Own entries are re-rendered target-first on every
|
|
321
|
+
* rewrite: pnpm 11.7.x honours only the FIRST entry per package (later
|
|
322
|
+
* entries for the same package are ignored against the real registry), and
|
|
323
|
+
* 11.21.x applies every entry in any order, so the target — the version the
|
|
324
|
+
* swap itself has to resolve, and published by construction while a
|
|
325
|
+
* dev-built `updatedFrom` need not be — takes the slot older pnpm still
|
|
326
|
+
* reads. Both exemptions come from the manifest, not from `pnpm-lock.yaml`:
|
|
327
|
+
* a profile whose manifest and lockfile diverged keeps the lockfile's entry
|
|
328
|
+
* unexempted. The 11.7.x `--frozen-lockfile` policy check reads that first
|
|
329
|
+
* entry only, so a two-entry list does not clear it there; the `pnpm add`
|
|
330
|
+
* path `/update` runs resolves the target and does pass.
|
|
331
|
+
*
|
|
332
|
+
* @param profile - The dsh profile whose workspace file is seeded.
|
|
333
|
+
* @param version - The update target (exact version).
|
|
334
|
+
* @param alsoExempt - Optional second version to keep exempt, normally the
|
|
335
|
+
* pre-update `updatedFrom`; ignored when empty or equal to `version`.
|
|
314
336
|
*/
|
|
315
|
-
export declare function ensureProfileReleaseAgeExclude(profile: string, version: string): ReleaseAgeExcludeOutcome | undefined;
|
|
337
|
+
export declare function ensureProfileReleaseAgeExclude(profile: string, version: string, alsoExempt?: string): ReleaseAgeExcludeOutcome | undefined;
|
|
316
338
|
/**
|
|
317
339
|
* The @img suffix of the RUNNING platform: musl linux maps to linuxmusl, and
|
|
318
340
|
* FreeBSD — which has no native @img build — maps to the only form it can load.
|
|
@@ -497,6 +519,28 @@ export declare function updateTuiAndRestart(sessionId: string, profile: string,
|
|
|
497
519
|
* @returns Process exit code: 0 on success or already-latest, 1 otherwise.
|
|
498
520
|
*/
|
|
499
521
|
export declare function cliUpdate(profile: string): Promise<number>;
|
|
522
|
+
/**
|
|
523
|
+
* Release the shared console for the replacement without resetting it.
|
|
524
|
+
*
|
|
525
|
+
* A pty's termios is per-DEVICE: destroying this stream would write this
|
|
526
|
+
* process's saved cooked/ECHO mode back over the replacement's raw mode
|
|
527
|
+
* (libuv restores orig_termios on tty close; verified on Node 24 — mouse
|
|
528
|
+
* reports then echo as `^[[<…M` and keys wait for a newline). Detaching —
|
|
529
|
+
* no readers, paused, unref'd — keeps the mode untouched.
|
|
530
|
+
*
|
|
531
|
+
* Two deliberate trade-offs vs the old destroy():
|
|
532
|
+
* - destroy() doubled as a permanent gate ("a destroyed stream can never be
|
|
533
|
+
* resumed"). Readers removed + paused already keep this process out of the
|
|
534
|
+
* console's key path (#284/#307), and after the handoff only the
|
|
535
|
+
* child-exit listener remains here — nothing re-attaches a reader.
|
|
536
|
+
* - On exit Node still writes the saved cooked mode back once (atexit
|
|
537
|
+
* uv_tty_reset_mode). Fine in the normal order — this process outlives the
|
|
538
|
+
* replacement, and the shell wants cooked back anyway; it only bites if
|
|
539
|
+
* this process dies while the replacement is still running.
|
|
540
|
+
*
|
|
541
|
+
* @param stdin - Console stream to detach; injectable for the regression.
|
|
542
|
+
*/
|
|
543
|
+
export declare function detachHandoffStdin(stdin?: Pick<NodeJS.ReadStream, 'removeAllListeners' | 'pause' | 'unref'>): void;
|
|
500
544
|
/**
|
|
501
545
|
* Restart the running TUI in place and resume the active session — the
|
|
502
546
|
* `/update` restart path minus the pnpm step, for `/restart`. Spawns the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/update.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/update.ts"],"names":[],"mappings":"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"}
|
package/lib/types/update.js
CHANGED
|
@@ -966,16 +966,38 @@ export function ensureProfileAllowBuilds(profile) {
|
|
|
966
966
|
* (24h by default) — on release day that gate refuses the very version
|
|
967
967
|
* `/update` is installing (ERR_PNPM_MINIMUM_RELEASE_AGE_VIOLATION), which
|
|
968
968
|
* reads to the user as a broken update until the window passes. Pre-seed the
|
|
969
|
-
* profile's pnpm-workspace.yaml with
|
|
970
|
-
* package at the exact
|
|
971
|
-
*
|
|
972
|
-
*
|
|
973
|
-
*
|
|
974
|
-
*
|
|
975
|
-
*
|
|
976
|
-
*
|
|
969
|
+
* profile's pnpm-workspace.yaml with release-age exclusions scoped to this
|
|
970
|
+
* package at the exact versions pnpm verifies before it can swap the package:
|
|
971
|
+
* the target version itself, plus `alsoExempt` — the pre-update `updatedFrom`,
|
|
972
|
+
* read from the running package's own manifest (normally the version the
|
|
973
|
+
* profile lockfile pins). Two releases inside the 24h window leave the OLD
|
|
974
|
+
* lockfile entry inside it too, and pnpm fails the whole policy check on that
|
|
975
|
+
* entry before replacing the package (issue #1205), so exempting only the
|
|
976
|
+
* target is not enough. Same best-effort,
|
|
977
|
+
* idempotent pattern as {@link ensureProfileAllowBuilds}: entries for this
|
|
978
|
+
* package track exactly the versions the current update needs (older own
|
|
979
|
+
* entries are dropped instead of accumulating), foreign entries are
|
|
980
|
+
* preserved, a missing `minimumReleaseAgeExclude` block is appended, a
|
|
981
|
+
* missing file is created, and an absent profile directory resolves to
|
|
982
|
+
* undefined — the caller still runs pnpm, whose own diagnostic stays the
|
|
983
|
+
* visible fallback. Own entries are re-rendered target-first on every
|
|
984
|
+
* rewrite: pnpm 11.7.x honours only the FIRST entry per package (later
|
|
985
|
+
* entries for the same package are ignored against the real registry), and
|
|
986
|
+
* 11.21.x applies every entry in any order, so the target — the version the
|
|
987
|
+
* swap itself has to resolve, and published by construction while a
|
|
988
|
+
* dev-built `updatedFrom` need not be — takes the slot older pnpm still
|
|
989
|
+
* reads. Both exemptions come from the manifest, not from `pnpm-lock.yaml`:
|
|
990
|
+
* a profile whose manifest and lockfile diverged keeps the lockfile's entry
|
|
991
|
+
* unexempted. The 11.7.x `--frozen-lockfile` policy check reads that first
|
|
992
|
+
* entry only, so a two-entry list does not clear it there; the `pnpm add`
|
|
993
|
+
* path `/update` runs resolves the target and does pass.
|
|
994
|
+
*
|
|
995
|
+
* @param profile - The dsh profile whose workspace file is seeded.
|
|
996
|
+
* @param version - The update target (exact version).
|
|
997
|
+
* @param alsoExempt - Optional second version to keep exempt, normally the
|
|
998
|
+
* pre-update `updatedFrom`; ignored when empty or equal to `version`.
|
|
977
999
|
*/
|
|
978
|
-
export function ensureProfileReleaseAgeExclude(profile, version) {
|
|
1000
|
+
export function ensureProfileReleaseAgeExclude(profile, version, alsoExempt) {
|
|
979
1001
|
const yamlPath = profileWorkspaceYamlPath(profile);
|
|
980
1002
|
try {
|
|
981
1003
|
if (!existsSafe(dirname(yamlPath)))
|
|
@@ -988,6 +1010,10 @@ export function ensureProfileReleaseAgeExclude(profile, version) {
|
|
|
988
1010
|
// Missing file — start from an empty document; writeFileSync creates it.
|
|
989
1011
|
}
|
|
990
1012
|
const entry = `${PACKAGE_NAME}@${version}`;
|
|
1013
|
+
const alsoEntry = alsoExempt !== undefined && alsoExempt !== '' && alsoExempt !== version
|
|
1014
|
+
? `${PACKAGE_NAME}@${alsoExempt}`
|
|
1015
|
+
: undefined;
|
|
1016
|
+
const keep = alsoEntry === undefined ? [entry] : [entry, alsoEntry];
|
|
991
1017
|
const lines = text.split(/\r?\n/u);
|
|
992
1018
|
let blockStart = -1;
|
|
993
1019
|
for (let i = 0; i < lines.length; i += 1) {
|
|
@@ -999,9 +1025,12 @@ export function ensureProfileReleaseAgeExclude(profile, version) {
|
|
|
999
1025
|
}
|
|
1000
1026
|
/** Item text of a list line, unquoted (`- 'x@1'` / `- x@1` → `x@1`). */
|
|
1001
1027
|
const itemOf = (line) => line.trim().replace(/^-\s*/u, '').replace(/^'(.*)'$/u, '$1');
|
|
1002
|
-
|
|
1028
|
+
/** Foreign exclusion lines, preserved verbatim and in file order. */
|
|
1029
|
+
const foreignLines = [];
|
|
1030
|
+
/** Keep-set entries already present in the block. */
|
|
1031
|
+
const present = [];
|
|
1032
|
+
let droppedStale = false;
|
|
1003
1033
|
let blockEnd = -1;
|
|
1004
|
-
let alreadyCurrent = false;
|
|
1005
1034
|
if (blockStart !== -1) {
|
|
1006
1035
|
blockEnd = blockStart + 1;
|
|
1007
1036
|
for (let i = blockStart + 1; i < lines.length; i += 1) {
|
|
@@ -1010,21 +1039,27 @@ export function ensureProfileReleaseAgeExclude(profile, version) {
|
|
|
1010
1039
|
break; // dedent = block ends
|
|
1011
1040
|
blockEnd = i + 1;
|
|
1012
1041
|
const item = itemOf(line);
|
|
1013
|
-
if (item
|
|
1014
|
-
|
|
1015
|
-
foreign.push(line);
|
|
1042
|
+
if (!item.startsWith(`${PACKAGE_NAME}@`)) {
|
|
1043
|
+
foreignLines.push(line);
|
|
1016
1044
|
}
|
|
1017
|
-
else if (
|
|
1018
|
-
|
|
1045
|
+
else if (keep.includes(item)) {
|
|
1046
|
+
present.push(item);
|
|
1047
|
+
}
|
|
1048
|
+
else {
|
|
1049
|
+
// Own entries for older targets: dropped (no accumulation).
|
|
1050
|
+
droppedStale = true;
|
|
1019
1051
|
}
|
|
1020
|
-
// Stale entries for THIS package (older targets) are dropped above.
|
|
1021
1052
|
}
|
|
1022
1053
|
}
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
return { entries, changed: false };
|
|
1054
|
+
const missing = keep.filter(item => !present.includes(item));
|
|
1055
|
+
if (!droppedStale && missing.length === 0) {
|
|
1056
|
+
return { entries: [...foreignLines.map(itemOf), ...present], changed: false };
|
|
1026
1057
|
}
|
|
1027
|
-
|
|
1058
|
+
// Own entries are re-rendered in keep order (target first) instead of
|
|
1059
|
+
// copied as found: pnpm 11.7.x honours only the first entry per package
|
|
1060
|
+
// (11.21.x applies them all, order-independent), and the target is the
|
|
1061
|
+
// version the swap must resolve, so it takes that first slot.
|
|
1062
|
+
const insert = foreignLines.concat(keep.map(item => ` - '${item}'`));
|
|
1028
1063
|
if (blockStart !== -1) {
|
|
1029
1064
|
lines.splice(blockStart + 1, blockEnd - blockStart - 1, ...insert);
|
|
1030
1065
|
}
|
|
@@ -1034,7 +1069,7 @@ export function ensureProfileReleaseAgeExclude(profile, version) {
|
|
|
1034
1069
|
lines.push('minimumReleaseAgeExclude:', ...insert);
|
|
1035
1070
|
}
|
|
1036
1071
|
writeFileSync(yamlPath, `${lines.join('\n')}\n`);
|
|
1037
|
-
return { entries:
|
|
1072
|
+
return { entries: insert.map(itemOf), changed: true };
|
|
1038
1073
|
}
|
|
1039
1074
|
catch {
|
|
1040
1075
|
return undefined;
|
|
@@ -1446,13 +1481,17 @@ export async function updateTui(profile, targetVersion) {
|
|
|
1446
1481
|
// pnpm ≥11's minimumReleaseAge (24h by default) refuses installs of
|
|
1447
1482
|
// packages published within the window — on release day that gate rejects
|
|
1448
1483
|
// the exact version /update pins, surfacing as a failed update that heals
|
|
1449
|
-
// itself a day later.
|
|
1450
|
-
//
|
|
1484
|
+
// itself a day later. Two releases inside the window (issue #1205) trip the
|
|
1485
|
+
// same gate on the OLD lockfile entry pnpm verifies before the swap, so
|
|
1486
|
+
// both the target and the still-installed updatedFrom are exempted.
|
|
1451
1487
|
if (targetVersion !== undefined) {
|
|
1452
|
-
const releaseAge = ensureProfileReleaseAgeExclude(profile, targetVersion);
|
|
1488
|
+
const releaseAge = ensureProfileReleaseAgeExclude(profile, targetVersion, updatedFrom === '' ? undefined : updatedFrom);
|
|
1453
1489
|
if (releaseAge !== undefined && releaseAge.changed) {
|
|
1454
|
-
|
|
1455
|
-
|
|
1490
|
+
const exempted = updatedFrom !== '' && updatedFrom !== targetVersion
|
|
1491
|
+
? `${PACKAGE_NAME}@${targetVersion} + ${PACKAGE_NAME}@${updatedFrom}`
|
|
1492
|
+
: `${PACKAGE_NAME}@${targetVersion}`;
|
|
1493
|
+
process.stderr.write(`dsh-tui: pre-seeded profile release-age exclusion (${exempted}) — ` +
|
|
1494
|
+
'freshly published versions install without the 24h supply-chain delay\n');
|
|
1456
1495
|
}
|
|
1457
1496
|
}
|
|
1458
1497
|
let updateStderr = '';
|
|
@@ -1622,6 +1661,33 @@ export async function cliUpdate(profile) {
|
|
|
1622
1661
|
}
|
|
1623
1662
|
return outcome.code;
|
|
1624
1663
|
}
|
|
1664
|
+
/**
|
|
1665
|
+
* Release the shared console for the replacement without resetting it.
|
|
1666
|
+
*
|
|
1667
|
+
* A pty's termios is per-DEVICE: destroying this stream would write this
|
|
1668
|
+
* process's saved cooked/ECHO mode back over the replacement's raw mode
|
|
1669
|
+
* (libuv restores orig_termios on tty close; verified on Node 24 — mouse
|
|
1670
|
+
* reports then echo as `^[[<…M` and keys wait for a newline). Detaching —
|
|
1671
|
+
* no readers, paused, unref'd — keeps the mode untouched.
|
|
1672
|
+
*
|
|
1673
|
+
* Two deliberate trade-offs vs the old destroy():
|
|
1674
|
+
* - destroy() doubled as a permanent gate ("a destroyed stream can never be
|
|
1675
|
+
* resumed"). Readers removed + paused already keep this process out of the
|
|
1676
|
+
* console's key path (#284/#307), and after the handoff only the
|
|
1677
|
+
* child-exit listener remains here — nothing re-attaches a reader.
|
|
1678
|
+
* - On exit Node still writes the saved cooked mode back once (atexit
|
|
1679
|
+
* uv_tty_reset_mode). Fine in the normal order — this process outlives the
|
|
1680
|
+
* replacement, and the shell wants cooked back anyway; it only bites if
|
|
1681
|
+
* this process dies while the replacement is still running.
|
|
1682
|
+
*
|
|
1683
|
+
* @param stdin - Console stream to detach; injectable for the regression.
|
|
1684
|
+
*/
|
|
1685
|
+
export function detachHandoffStdin(stdin = process.stdin) {
|
|
1686
|
+
stdin.removeAllListeners('readable');
|
|
1687
|
+
stdin.removeAllListeners('data');
|
|
1688
|
+
stdin.pause();
|
|
1689
|
+
stdin.unref();
|
|
1690
|
+
}
|
|
1625
1691
|
export async function restartTui(sessionId, options = {}) {
|
|
1626
1692
|
const kind = options.kind ?? 'restart';
|
|
1627
1693
|
const tag = kind === 'update' ? 'update-restart' : 'restart';
|
|
@@ -1661,10 +1727,12 @@ export async function restartTui(sessionId, options = {}) {
|
|
|
1661
1727
|
// 1. SAMPLE this process's stdin state every second — if anything
|
|
1662
1728
|
// re-attaches a reader after the funnel's detachStdinForHandoff, the
|
|
1663
1729
|
// sample (taken before the re-assert below) shows it in the log.
|
|
1664
|
-
// 2. RE-ASSERT the detach
|
|
1665
|
-
//
|
|
1666
|
-
//
|
|
1667
|
-
//
|
|
1730
|
+
// 2. RE-ASSERT the detach — never DESTROY the stream: destroying it
|
|
1731
|
+
// resets the shared pty and stomps the replacement's raw mode (see
|
|
1732
|
+
// detachHandoffStdin for the mechanism and trade-offs). This process
|
|
1733
|
+
// must never read the shared console again — every keypress belongs to
|
|
1734
|
+
// the replacement, and a resumed pump here is exactly the "restarted
|
|
1735
|
+
// TUI sees dropped or swallowed input" failure (#284/#307).
|
|
1668
1736
|
let watchdogTicks = 0;
|
|
1669
1737
|
const watchdog = setInterval(() => {
|
|
1670
1738
|
watchdogTicks += 1;
|
|
@@ -1678,25 +1746,14 @@ export async function restartTui(sessionId, options = {}) {
|
|
|
1678
1746
|
buffered: stdin.readableLength,
|
|
1679
1747
|
});
|
|
1680
1748
|
try {
|
|
1681
|
-
stdin
|
|
1682
|
-
stdin.removeAllListeners('data');
|
|
1683
|
-
stdin.pause();
|
|
1749
|
+
detachHandoffStdin(stdin);
|
|
1684
1750
|
}
|
|
1685
1751
|
catch {
|
|
1686
1752
|
// Diagnosis/mitigation only.
|
|
1687
1753
|
}
|
|
1688
1754
|
if (watchdogTicks === 15) {
|
|
1689
1755
|
clearInterval(watchdog);
|
|
1690
|
-
|
|
1691
|
-
// Terminal safeguard: a destroyed stream can never be resumed by
|
|
1692
|
-
// any late re-attachment. The child holds its own inherited
|
|
1693
|
-
// handle, so closing ours does not affect it.
|
|
1694
|
-
process.stdin.destroy();
|
|
1695
|
-
logRestartEvent('parent: stdin destroyed after watchdog');
|
|
1696
|
-
}
|
|
1697
|
-
catch {
|
|
1698
|
-
// Best effort.
|
|
1699
|
-
}
|
|
1756
|
+
logRestartEvent('parent: stdin detached after watchdog (kept raw, not destroyed)');
|
|
1700
1757
|
}
|
|
1701
1758
|
}, 1000);
|
|
1702
1759
|
watchdog.unref();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bmp.d.ts","sourceRoot":"","sources":["../../../src/utils/bmp.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA8DH;;;;;GAKG;AACH,wBAAsB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"bmp.d.ts","sourceRoot":"","sources":["../../../src/utils/bmp.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA8DH;;;;;GAKG;AACH,wBAAsB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA4FlE"}
|
package/lib/types/utils/bmp.js
CHANGED
|
@@ -74,6 +74,10 @@ export async function bmpToPng(bmp) {
|
|
|
74
74
|
return null;
|
|
75
75
|
if (bpp !== 24 && bpp !== 32)
|
|
76
76
|
return null;
|
|
77
|
+
// High-colour DIBs may still carry a colour table. Without a file header
|
|
78
|
+
// its length is ambiguous; a BMP file instead locates pixels via bfOffBits.
|
|
79
|
+
if (!hasFileHeader && bmp.readUInt32LE(dib + 32) !== 0)
|
|
80
|
+
return null; // biClrUsed
|
|
77
81
|
if (compression !== BI_RGB && compression !== BI_BITFIELDS && compression !== BI_ALPHABITFIELDS)
|
|
78
82
|
return null;
|
|
79
83
|
if (bpp === 24 && compression !== BI_RGB)
|
|
@@ -100,7 +104,10 @@ export async function bmpToPng(bmp) {
|
|
|
100
104
|
if (bpp === 32 && (redMask === 0 || greenMask === 0 || blueMask === 0))
|
|
101
105
|
return null;
|
|
102
106
|
const declaredOffset = hasFileHeader ? bmp.readUInt32LE(10) : 0;
|
|
103
|
-
const
|
|
107
|
+
const minimumOffset = dib + headerSize + maskBytes;
|
|
108
|
+
if (hasFileHeader && declaredOffset < minimumOffset)
|
|
109
|
+
return null;
|
|
110
|
+
const pixelOffset = hasFileHeader ? declaredOffset : minimumOffset;
|
|
104
111
|
const stride = Math.floor((bpp * width + 31) / 32) * 4;
|
|
105
112
|
if (pixelOffset + stride * height > bmp.length)
|
|
106
113
|
return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clipboard.d.ts","sourceRoot":"","sources":["../../../src/utils/clipboard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAeH;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GACxB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;AAElC;;;;;;;GAOG;AACH,MAAM,MAAM,aAAa,GAAG,gBAAgB,GAAG;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAAA;AAE5F;;;;;;;;;;;;;GAaG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CA6BtD;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAIvE;AAWD;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAYtE;AAiDD;;;;;GAKG;AACH,wBAAgB,uBAAuB,IAAI,IAAI,CAS9C;
|
|
1
|
+
{"version":3,"file":"clipboard.d.ts","sourceRoot":"","sources":["../../../src/utils/clipboard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAeH;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GACxB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;AAElC;;;;;;;GAOG;AACH,MAAM,MAAM,aAAa,GAAG,gBAAgB,GAAG;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAAA;AAE5F;;;;;;;;;;;;;GAaG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CA6BtD;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAIvE;AAWD;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAYtE;AAiDD;;;;;GAKG;AACH,wBAAgB,uBAAuB,IAAI,IAAI,CAS9C;AAsfD;;;;;;GAMG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAAC,aAAa,CAAC,CAStD;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAG5C;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI,CAEhE;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAcvE"}
|
|
@@ -239,8 +239,18 @@ function spawnForBuffer(file, args, timeout = CLIPBOARD_TIMEOUT) {
|
|
|
239
239
|
const child = spawn(file, [...args], { timeout });
|
|
240
240
|
const chunks = [];
|
|
241
241
|
child.stdout.on('data', (chunk) => chunks.push(chunk));
|
|
242
|
-
child.
|
|
243
|
-
|
|
242
|
+
child.stderr.resume(); // A full stderr pipe must not block the child.
|
|
243
|
+
// Node's spawn timeout sends SIGTERM only; an uncooperative helper can
|
|
244
|
+
// otherwise keep the paste Promise pending forever.
|
|
245
|
+
const hardKill = setTimeout(() => child.kill('SIGKILL'), timeout + 1000);
|
|
246
|
+
child.on('error', () => {
|
|
247
|
+
clearTimeout(hardKill);
|
|
248
|
+
resolve({ code: 1, stdout: Buffer.concat(chunks) });
|
|
249
|
+
});
|
|
250
|
+
child.on('close', code => {
|
|
251
|
+
clearTimeout(hardKill);
|
|
252
|
+
resolve({ code, stdout: Buffer.concat(chunks) });
|
|
253
|
+
});
|
|
244
254
|
child.stdin.end();
|
|
245
255
|
});
|
|
246
256
|
}
|
|
@@ -490,12 +500,15 @@ function buildWslPsScript() {
|
|
|
490
500
|
return [
|
|
491
501
|
"$ErrorActionPreference='SilentlyContinue'",
|
|
492
502
|
'[Console]::OutputEncoding=[System.Text.Encoding]::UTF8',
|
|
503
|
+
// Only CLIPBRD_E_CANT_OPEN is retryable. A missing format or empty
|
|
504
|
+
// clipboard is not a reason to cold-start PowerShell three times.
|
|
505
|
+
'function Test-ClipboardBusy($e){while($e){if($e.HResult -eq -2147221040){return $true};$e=$e.InnerException};return $false}',
|
|
493
506
|
'$files=$null',
|
|
494
|
-
'try { $files = Get-Clipboard -Format FileDropList -ErrorAction Stop } catch {}',
|
|
507
|
+
'try { $files = Get-Clipboard -Format FileDropList -ErrorAction Stop } catch { if(Test-ClipboardBusy $_.Exception){exit 75} }',
|
|
495
508
|
'if($files){foreach($f in $files){Write-Output ("FILE:"+$f.FullName)}}',
|
|
496
509
|
'$saved=$false',
|
|
497
|
-
'if(-not $files){try { Add-Type -AssemblyName System.Drawing; $img=Get-Clipboard -Format Image -ErrorAction Stop; if($img){$ms=New-Object System.IO.MemoryStream; $img.Save($ms,[System.Drawing.Imaging.ImageFormat]::Png); $img.Dispose(); Write-Output ("IMAGE64:"+[Convert]::ToBase64String($ms.ToArray())); $saved=$true} } catch {} }',
|
|
498
|
-
'if(-not $files -and -not $saved){$t=Get-Clipboard -Raw; if($null -ne $t){Write-Output ("TEXT64:"+[Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($t)))}}',
|
|
510
|
+
'if(-not $files){try { Add-Type -AssemblyName System.Drawing; $img=Get-Clipboard -Format Image -ErrorAction Stop; if($img){$ms=New-Object System.IO.MemoryStream; $img.Save($ms,[System.Drawing.Imaging.ImageFormat]::Png); $img.Dispose(); Write-Output ("IMAGE64:"+[Convert]::ToBase64String($ms.ToArray())); $saved=$true} } catch { if(Test-ClipboardBusy $_.Exception){exit 75} } }',
|
|
511
|
+
'if(-not $files -and -not $saved){try { $t=Get-Clipboard -Raw -ErrorAction Stop; if($null -ne $t){Write-Output ("TEXT64:"+[Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($t)))} } catch { if(Test-ClipboardBusy $_.Exception){exit 75} } }',
|
|
499
512
|
].join('; ');
|
|
500
513
|
}
|
|
501
514
|
/**
|
|
@@ -505,7 +518,13 @@ function buildWslPsScript() {
|
|
|
505
518
|
* clipboard holds nothing usable.
|
|
506
519
|
*/
|
|
507
520
|
async function readClipboardWsl() {
|
|
508
|
-
|
|
521
|
+
let result;
|
|
522
|
+
for (let attempt = 0;; attempt += 1) {
|
|
523
|
+
result = await spawnForBuffer('powershell.exe', ['-NoProfile', '-NonInteractive', '-Command', buildWslPsScript()], WSL_POWERSHELL_TIMEOUT);
|
|
524
|
+
if (result.code !== 75 || attempt >= 2)
|
|
525
|
+
break;
|
|
526
|
+
await new Promise(resolve => setTimeout(resolve, 150));
|
|
527
|
+
}
|
|
509
528
|
if (result.code !== 0)
|
|
510
529
|
return null;
|
|
511
530
|
const files = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../../src/utils/credentials.ts"],"names":[],"mappings":"AAgBA,kFAAkF;AAClF,wBAAgB,UAAU,IAAI,MAAM,
|
|
1
|
+
{"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../../src/utils/credentials.ts"],"names":[],"mappings":"AAgBA,kFAAkF;AAClF,wBAAgB,UAAU,IAAI,MAAM,CAMnC;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,MAAqB,GAAG,OAAO,CAUxF"}
|
|
@@ -15,7 +15,11 @@ import { homedir } from 'node:os';
|
|
|
15
15
|
import { join } from 'node:path';
|
|
16
16
|
/** The DSH home that owns the credential store, following the launcher's rule. */
|
|
17
17
|
export function dshHomeDir() {
|
|
18
|
-
|
|
18
|
+
// `||`, not `??`: the launcher resolves the same root as
|
|
19
|
+
// `process.env.DSH_HOME || join(homedir(), '.dsh')` (bin/dsh-tui.js), so an
|
|
20
|
+
// empty `DSH_HOME=` — a common way to spell "unset" in scripts — must fall
|
|
21
|
+
// back here too instead of turning every path into a relative one.
|
|
22
|
+
return process.env.DSH_HOME || join(homedir(), '.dsh');
|
|
19
23
|
}
|
|
20
24
|
/**
|
|
21
25
|
* Whether the DSH credential store declares a reference by this name.
|