@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
|
@@ -0,0 +1,407 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ctx.tuiPanels — 插件侧栏 Panel 服务(设计文档 §8/§18,v2.1 修订,Phase 6)。
|
|
3
|
+
*
|
|
4
|
+
* 与 tuiStatus/tuiScenes 同一接缝家族:一份 Cordis-free 的进程级 store
|
|
5
|
+
* (components/sidePanel/PanelStore,注册/badge/错误隔离)+ 一层薄的
|
|
6
|
+
* Cordis 服务做准入(requirePluginCaller → activationFiber owner →
|
|
7
|
+
* bindCallerEffect 撤下 → 能力 shadow policy → 重复 id
|
|
8
|
+
* DUPLICATE_CONTRIBUTION_ID → Object.freeze descriptor)。
|
|
9
|
+
*
|
|
10
|
+
* 本阶段范围(§18.2 简化版):
|
|
11
|
+
* - register:宿主自动加 '<pluginId>:' 前缀;mountPolicy 强制 'active';
|
|
12
|
+
* minColumns 默认 28;预算 = 每插件 ≤4 个 / 全局 ≤32 个。
|
|
13
|
+
* - list:只读摘要(id/title/source,不含组件)。
|
|
14
|
+
* - open/close:仅自己注册的 id;open 为 mutate 且限速(每插件每 5s 至多
|
|
15
|
+
* 1 次,超过丢弃并记 ledger);UI 触达经 panelBridge(useSidePanel 订阅)。
|
|
16
|
+
* - badge:仅自己注册的 id → panelStore.setBadge。
|
|
17
|
+
* - subscribe:仅涉及自己 Panel 的事件(本阶段 registered/unregistered/
|
|
18
|
+
* badge/error/disabled;opened/closed/focused/blurred/sidebar-toggled 事件
|
|
19
|
+
* 源在 useSidePanel 侧,留 TODO)。
|
|
20
|
+
* - compact:descriptor 校验 + 存档,渲染槽不挂载(TODO §18.1)。
|
|
21
|
+
*/
|
|
22
|
+
import { Service } from '@deepseek-ai/cordis';
|
|
23
|
+
import { cleanScalarText } from './sanitize.js';
|
|
24
|
+
import { activationFiber, assertCallerContext, bindCallerEffect, compositionRoot, concreteService, requirePluginCaller } from './host-access.js';
|
|
25
|
+
import { componentIdentityOf } from './component-identity.js';
|
|
26
|
+
import { assertCapabilityShadowPolicy, } from '../adapter/kernel/runtime.js';
|
|
27
|
+
import { adapterRuntimeFor } from '../adapter/kernel/runtime-context.js';
|
|
28
|
+
import { panelStore } from '../components/sidePanel/PanelStore.js';
|
|
29
|
+
import { makePluginPanelComponent } from '../components/sidePanel/pluginPanelAdapter.js';
|
|
30
|
+
import { panelBridgeRequests } from '../components/sidePanel/panelBridge.js';
|
|
31
|
+
import { applySidePanelPanels, getSidePanelPanels, parseSidePanelIds } from '../tuiDisplayPrefs.js';
|
|
32
|
+
import { stringWidth } from '../ink/stringWidth.js';
|
|
33
|
+
import { countPanelsOwnedBy, countPluginPanels, deletePanelOwnerRecord, getPanelOwnerRecord, setPanelOwnerRecord, } from './panel-runtime-registry.js';
|
|
34
|
+
/** 插件 Panel API 版本(§18.2):descriptor.apiVersion 必须精确匹配。 */
|
|
35
|
+
export const TUI_PANEL_API_VERSION = 1;
|
|
36
|
+
// 单段小写 slug(宿主自动加 '<pluginId>:' 前缀形成最终 panel id)。
|
|
37
|
+
const SUB_ID_PATTERN = /^[a-z][a-z0-9_-]*$/u;
|
|
38
|
+
const TITLE_CELLS = 80;
|
|
39
|
+
const MIN_COLUMNS_FLOOR = 12;
|
|
40
|
+
const MIN_COLUMNS_CEIL = 64;
|
|
41
|
+
const DEFAULT_MIN_COLUMNS = 28;
|
|
42
|
+
/** 每插件 Panel 预算(§18.4)。 */
|
|
43
|
+
export const MAX_PANELS_PER_PLUGIN = 4;
|
|
44
|
+
/** 全局插件 Panel 注册预算(§18.4)。 */
|
|
45
|
+
export const MAX_PLUGIN_PANELS_TOTAL = 32;
|
|
46
|
+
/** open() 限速窗口:每插件每窗口至多 1 次。 */
|
|
47
|
+
export const PANEL_OPEN_RATE_LIMIT_MS = 5_000;
|
|
48
|
+
export const name = 'dsh-tui-panels';
|
|
49
|
+
const panelStates = new WeakMap();
|
|
50
|
+
function panelStateFor(runtime) {
|
|
51
|
+
const state = panelStates.get(concreteService(runtime));
|
|
52
|
+
if (state === undefined)
|
|
53
|
+
throw new Error('tuiPanels host state is unavailable');
|
|
54
|
+
return state;
|
|
55
|
+
}
|
|
56
|
+
/** 无 Component identity 的裸挂载(测试夹具)需要一个稳定命名空间:
|
|
57
|
+
* 按 activation fiber 发号。 */
|
|
58
|
+
const fallbackPluginIds = new WeakMap();
|
|
59
|
+
let fallbackSeq = 0;
|
|
60
|
+
function pluginIdFor(caller, owner) {
|
|
61
|
+
const identity = componentIdentityOf(caller);
|
|
62
|
+
if (identity !== undefined && /^[a-z][a-z0-9_-]*$/u.test(identity.componentId)) {
|
|
63
|
+
return identity.componentId;
|
|
64
|
+
}
|
|
65
|
+
let fallback = fallbackPluginIds.get(owner);
|
|
66
|
+
if (fallback === undefined) {
|
|
67
|
+
fallbackSeq += 1;
|
|
68
|
+
fallback = 'act' + String(fallbackSeq);
|
|
69
|
+
fallbackPluginIds.set(owner, fallback);
|
|
70
|
+
}
|
|
71
|
+
return fallback;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* ctx.tuiPanels —— 插件侧栏 Panel 准入服务。拒绝一律 warn + 返回
|
|
75
|
+
* undefined/false(与 tuiStatus.registerView 同语义),绝不抛给插件。
|
|
76
|
+
*/
|
|
77
|
+
export class TuiPanelRuntime extends Service {
|
|
78
|
+
constructor(ctx) {
|
|
79
|
+
super(ctx, 'tuiPanels');
|
|
80
|
+
compositionRoot(ctx);
|
|
81
|
+
const state = {
|
|
82
|
+
runtime: adapterRuntimeFor(ctx),
|
|
83
|
+
host: undefined,
|
|
84
|
+
};
|
|
85
|
+
state.host = Object.freeze({
|
|
86
|
+
register(descriptor) {
|
|
87
|
+
const finalId = String(descriptor.id ?? '');
|
|
88
|
+
if (!finalId.includes(':') || panelStore.get(finalId) !== undefined) {
|
|
89
|
+
throw new Error('invalid or duplicate host panel id: ' + finalId);
|
|
90
|
+
}
|
|
91
|
+
const definition = {
|
|
92
|
+
id: finalId,
|
|
93
|
+
title: String(descriptor.title ?? finalId),
|
|
94
|
+
source: 'plugin',
|
|
95
|
+
pluginId: 'dsh-tui-host',
|
|
96
|
+
mountPolicy: 'active',
|
|
97
|
+
minColumns: DEFAULT_MIN_COLUMNS,
|
|
98
|
+
component: () => null,
|
|
99
|
+
};
|
|
100
|
+
return panelStore.register(definition, 'builtin');
|
|
101
|
+
},
|
|
102
|
+
list() {
|
|
103
|
+
return panelStore.list()
|
|
104
|
+
.filter(entry => entry.definition.source === 'plugin')
|
|
105
|
+
.map(entry => Object.freeze({ id: entry.definition.id, title: entry.definition.title ?? entry.definition.id, source: 'plugin' }));
|
|
106
|
+
},
|
|
107
|
+
open(id) {
|
|
108
|
+
return panelBridgeRequests.request('open', id);
|
|
109
|
+
},
|
|
110
|
+
close(id) {
|
|
111
|
+
return panelBridgeRequests.request('close', id);
|
|
112
|
+
},
|
|
113
|
+
subscribe(listener) {
|
|
114
|
+
return panelStore.subscribe(event => {
|
|
115
|
+
const entry = panelStore.get(event.id);
|
|
116
|
+
if (entry?.definition.source === 'plugin')
|
|
117
|
+
listener(event);
|
|
118
|
+
});
|
|
119
|
+
},
|
|
120
|
+
});
|
|
121
|
+
panelStates.set(this, state);
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* 注册一个侧栏 Panel。成功返回 cleanup-aware disposer;拒绝 warn 并
|
|
125
|
+
* 返回 undefined(feature-detect 可辨)。identity 语义与 tuiStatus
|
|
126
|
+
* 相同(只喂 effect ledger 的 pluginId)。
|
|
127
|
+
*/
|
|
128
|
+
register(descriptor, identity) {
|
|
129
|
+
assertCapabilityShadowPolicy('host.panels.register', panelStateFor(this).runtime.mode, panelStateFor(this).runtime.slices);
|
|
130
|
+
let caller;
|
|
131
|
+
try {
|
|
132
|
+
caller = requirePluginCaller(this.ctx, 'tuiPanels.register', this);
|
|
133
|
+
}
|
|
134
|
+
catch {
|
|
135
|
+
this.ctx.logger.warn('dsh-tui: tuiPanels.register requires a live non-root plugin activation');
|
|
136
|
+
return undefined;
|
|
137
|
+
}
|
|
138
|
+
if (identity !== undefined) {
|
|
139
|
+
try {
|
|
140
|
+
assertCallerContext(caller, identity, 'tuiPanels.register');
|
|
141
|
+
}
|
|
142
|
+
catch {
|
|
143
|
+
caller.logger.warn('dsh-tui: tuiPanels.register rejected an identity belonging to another activation');
|
|
144
|
+
return undefined;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
const owner = activationFiber(caller);
|
|
148
|
+
if (owner === undefined) {
|
|
149
|
+
caller.logger.warn('dsh-tui: tuiPanels.register requires a live activation owner');
|
|
150
|
+
return undefined;
|
|
151
|
+
}
|
|
152
|
+
const ledger = caller.get('tuiEffectLedger');
|
|
153
|
+
const raw = descriptor;
|
|
154
|
+
if (typeof raw !== 'object' || raw === null || Array.isArray(raw)) {
|
|
155
|
+
caller.logger.warn('dsh-tui: tuiPanels.register rejected an invalid descriptor');
|
|
156
|
+
return undefined;
|
|
157
|
+
}
|
|
158
|
+
const d = raw;
|
|
159
|
+
if (d.apiVersion !== TUI_PANEL_API_VERSION) {
|
|
160
|
+
caller.logger.warn('dsh-tui: tuiPanels.register rejected a descriptor with apiVersion ' + String(d.apiVersion) + ' (expected ' + TUI_PANEL_API_VERSION + ')');
|
|
161
|
+
return undefined;
|
|
162
|
+
}
|
|
163
|
+
if (typeof d.id !== 'string' || !SUB_ID_PATTERN.test(d.id)) {
|
|
164
|
+
caller.logger.warn('dsh-tui: tuiPanels.register rejected an invalid panel id');
|
|
165
|
+
return undefined;
|
|
166
|
+
}
|
|
167
|
+
if (typeof d.title !== 'string' || cleanScalarText(d.title, TITLE_CELLS).length === 0) {
|
|
168
|
+
caller.logger.warn('dsh-tui: tuiPanels.register rejected "' + d.id + '" — title must be a non-empty string');
|
|
169
|
+
return undefined;
|
|
170
|
+
}
|
|
171
|
+
if (d.icon !== undefined && (typeof d.icon !== 'string' || stringWidth(d.icon) !== 1)) {
|
|
172
|
+
caller.logger.warn('dsh-tui: tuiPanels.register rejected "' + d.id + '" — icon display width must be 1');
|
|
173
|
+
return undefined;
|
|
174
|
+
}
|
|
175
|
+
if (d.component !== undefined && typeof d.component !== 'function') {
|
|
176
|
+
caller.logger.warn('dsh-tui: tuiPanels.register rejected "' + d.id + '" — component must be a function');
|
|
177
|
+
return undefined;
|
|
178
|
+
}
|
|
179
|
+
let compactMaxRows;
|
|
180
|
+
let compactComponent;
|
|
181
|
+
if (d.compact !== undefined) {
|
|
182
|
+
if (typeof d.compact !== 'object' || d.compact === null) {
|
|
183
|
+
caller.logger.warn('dsh-tui: tuiPanels.register rejected "' + d.id + '" — invalid compact descriptor');
|
|
184
|
+
return undefined;
|
|
185
|
+
}
|
|
186
|
+
const rows = d.compact.maxRows;
|
|
187
|
+
if (typeof rows !== 'number' || !Number.isInteger(rows) || rows < 1 || rows > 3) {
|
|
188
|
+
caller.logger.warn('dsh-tui: tuiPanels.register rejected "' + d.id + '" — compact.maxRows must be an integer from 1 to 3');
|
|
189
|
+
return undefined;
|
|
190
|
+
}
|
|
191
|
+
compactComponent = d.compact.component;
|
|
192
|
+
if (typeof compactComponent !== 'function') {
|
|
193
|
+
caller.logger.warn('dsh-tui: tuiPanels.register rejected "' + d.id + '" — compact.component must be a function');
|
|
194
|
+
return undefined;
|
|
195
|
+
}
|
|
196
|
+
compactMaxRows = rows;
|
|
197
|
+
}
|
|
198
|
+
if (d.component === undefined && d.compact === undefined) {
|
|
199
|
+
caller.logger.warn('dsh-tui: tuiPanels.register rejected "' + d.id + '" — at least one of component/compact is required');
|
|
200
|
+
return undefined;
|
|
201
|
+
}
|
|
202
|
+
if (d.minColumns !== undefined
|
|
203
|
+
&& (typeof d.minColumns !== 'number' || !Number.isInteger(d.minColumns) || d.minColumns < MIN_COLUMNS_FLOOR || d.minColumns > MIN_COLUMNS_CEIL)) {
|
|
204
|
+
caller.logger.warn('dsh-tui: tuiPanels.register rejected "' + d.id + '" — minColumns must be an integer from ' + MIN_COLUMNS_FLOOR + ' to ' + MIN_COLUMNS_CEIL);
|
|
205
|
+
return undefined;
|
|
206
|
+
}
|
|
207
|
+
if (d.order !== undefined && (typeof d.order !== 'number' || !Number.isFinite(d.order))) {
|
|
208
|
+
caller.logger.warn('dsh-tui: tuiPanels.register rejected "' + d.id + '" — order must be a finite number');
|
|
209
|
+
return undefined;
|
|
210
|
+
}
|
|
211
|
+
const pluginId = pluginIdFor(caller, owner);
|
|
212
|
+
const finalId = pluginId + ':' + d.id;
|
|
213
|
+
if (panelStore.get(finalId) !== undefined) {
|
|
214
|
+
caller.logger.warn('dsh-tui: tuiPanels.register rejected "' + finalId + '" — already registered');
|
|
215
|
+
ledger?.record({ operation: 'bind', resource: { kind: 'panel', id: finalId }, result: 'failed', errorCode: 'DUPLICATE_CONTRIBUTION_ID' }, identity);
|
|
216
|
+
return undefined;
|
|
217
|
+
}
|
|
218
|
+
if (countPanelsOwnedBy(owner) >= MAX_PANELS_PER_PLUGIN) {
|
|
219
|
+
caller.logger.warn('dsh-tui: tuiPanels.register rejected "' + finalId + '" — a plugin may register at most ' + MAX_PANELS_PER_PLUGIN + ' panels');
|
|
220
|
+
ledger?.record({ operation: 'bind', resource: { kind: 'panel', id: finalId }, result: 'failed', errorCode: 'PANEL_BUDGET_EXCEEDED' }, identity);
|
|
221
|
+
return undefined;
|
|
222
|
+
}
|
|
223
|
+
if (countPluginPanels() >= MAX_PLUGIN_PANELS_TOTAL) {
|
|
224
|
+
caller.logger.warn('dsh-tui: tuiPanels.register rejected "' + finalId + '" — ' + MAX_PLUGIN_PANELS_TOTAL + ' plugin panels are already registered');
|
|
225
|
+
ledger?.record({ operation: 'bind', resource: { kind: 'panel', id: finalId }, result: 'failed', errorCode: 'PANEL_BUDGET_EXCEEDED' }, identity);
|
|
226
|
+
return undefined;
|
|
227
|
+
}
|
|
228
|
+
const title = cleanScalarText(d.title, TITLE_CELLS);
|
|
229
|
+
const definition = Object.freeze({
|
|
230
|
+
id: finalId,
|
|
231
|
+
title,
|
|
232
|
+
icon: d.icon,
|
|
233
|
+
order: d.order,
|
|
234
|
+
minColumns: d.minColumns ?? DEFAULT_MIN_COLUMNS,
|
|
235
|
+
source: 'plugin',
|
|
236
|
+
pluginId,
|
|
237
|
+
// v2.1:插件 Panel 强制 active 挂载(防常驻面板烧资源)。
|
|
238
|
+
mountPolicy: 'active',
|
|
239
|
+
component: makePluginPanelComponent(finalId, (d.component ?? (() => null))),
|
|
240
|
+
// compact 本阶段只校验不挂载(渲染槽 TODO §18.1)。
|
|
241
|
+
compact: compactMaxRows === undefined ? undefined : { maxRows: compactMaxRows, component: () => null },
|
|
242
|
+
});
|
|
243
|
+
const ownerTag = { pluginId, activation: owner };
|
|
244
|
+
const unregister = panelStore.register(definition, ownerTag);
|
|
245
|
+
setPanelOwnerRecord(finalId, { caller, owner, pluginId, lastOpenAt: 0 });
|
|
246
|
+
// 注册即入侧栏启用列表(PanelBar 可见;/panel 与 /settings 仍可移除)。
|
|
247
|
+
enablePanelIdInStore(finalId);
|
|
248
|
+
let disposed = false;
|
|
249
|
+
let ownerCleanup;
|
|
250
|
+
const dispose = () => {
|
|
251
|
+
if (disposed)
|
|
252
|
+
return;
|
|
253
|
+
disposed = true;
|
|
254
|
+
// 先撤 store(unregistered 事件还需 owner record 做订阅过滤),再清
|
|
255
|
+
// owner 数据与启用列表。
|
|
256
|
+
unregister();
|
|
257
|
+
deletePanelOwnerRecord(finalId);
|
|
258
|
+
disablePanelIdInStore(finalId);
|
|
259
|
+
caller.get('tuiEffectLedger')?.record({ operation: 'release', resource: { kind: 'panel', id: finalId }, result: 'applied' }, identity);
|
|
260
|
+
const cleanup = ownerCleanup;
|
|
261
|
+
ownerCleanup = undefined;
|
|
262
|
+
cleanup?.();
|
|
263
|
+
};
|
|
264
|
+
const bound = bindCallerEffect(caller, dispose, cleanup => {
|
|
265
|
+
ownerCleanup = cleanup;
|
|
266
|
+
});
|
|
267
|
+
if (!bound)
|
|
268
|
+
return undefined;
|
|
269
|
+
ledger?.record({ operation: 'bind', resource: { kind: 'panel', id: finalId }, result: 'applied' }, identity);
|
|
270
|
+
return dispose;
|
|
271
|
+
}
|
|
272
|
+
/** 只读摘要(仅自己注册的 Panel;不含组件)。 */
|
|
273
|
+
list() {
|
|
274
|
+
assertCapabilityShadowPolicy('host.panels.list', panelStateFor(this).runtime.mode, panelStateFor(this).runtime.slices);
|
|
275
|
+
const caller = requirePluginCaller(this.ctx, 'tuiPanels.list', this);
|
|
276
|
+
const owner = activationFiber(caller);
|
|
277
|
+
if (owner === undefined)
|
|
278
|
+
return [];
|
|
279
|
+
return panelStore.list()
|
|
280
|
+
.filter(entry => entry.definition.source === 'plugin' && getPanelOwnerRecord(entry.definition.id)?.owner === owner)
|
|
281
|
+
.map(entry => Object.freeze({
|
|
282
|
+
id: entry.definition.id,
|
|
283
|
+
title: entry.definition.title ?? entry.definition.id,
|
|
284
|
+
source: 'plugin',
|
|
285
|
+
}));
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* 打开自己注册的 Panel(展开侧栏并聚焦)。mutate + 限速:每插件每
|
|
289
|
+
* 5s 至多 1 次,超限丢弃并记 ledger。返回 false = 未注册/不属于自己的
|
|
290
|
+
* id、超限、或没有活的 Chat 控制器消费请求。
|
|
291
|
+
*/
|
|
292
|
+
open(id) {
|
|
293
|
+
assertCapabilityShadowPolicy('host.panels.open', panelStateFor(this).runtime.mode, panelStateFor(this).runtime.slices);
|
|
294
|
+
const caller = requirePluginCaller(this.ctx, 'tuiPanels.open', this);
|
|
295
|
+
const owner = activationFiber(caller);
|
|
296
|
+
if (owner === undefined)
|
|
297
|
+
return false;
|
|
298
|
+
const record = getPanelOwnerRecord(String(id ?? ''));
|
|
299
|
+
if (record === undefined || record.owner !== owner) {
|
|
300
|
+
caller.logger.warn('dsh-tui: tuiPanels.open rejected "' + String(id) + '" — not registered by this activation');
|
|
301
|
+
return false;
|
|
302
|
+
}
|
|
303
|
+
// 无 Chat 消费者:直接 false,不消耗限速窗口(请求从未送达)。
|
|
304
|
+
if (!panelBridgeRequests.hasConsumer())
|
|
305
|
+
return false;
|
|
306
|
+
const now = Date.now();
|
|
307
|
+
if (now - record.lastOpenAt < PANEL_OPEN_RATE_LIMIT_MS) {
|
|
308
|
+
caller.logger.warn('dsh-tui: tuiPanels.open dropped "' + String(id) + '" — rate limited to one open per ' + PANEL_OPEN_RATE_LIMIT_MS + 'ms');
|
|
309
|
+
caller.get('tuiEffectLedger')?.record({ operation: 'bind', resource: { kind: 'panel', id: String(id) }, result: 'failed', errorCode: 'RATE_LIMITED' });
|
|
310
|
+
return false;
|
|
311
|
+
}
|
|
312
|
+
if (!panelBridgeRequests.request('open', String(id)))
|
|
313
|
+
return false;
|
|
314
|
+
record.lastOpenAt = now;
|
|
315
|
+
return true;
|
|
316
|
+
}
|
|
317
|
+
/** 关闭自己注册的 Panel:若它是当前 active Panel,则收起侧栏。 */
|
|
318
|
+
close(id) {
|
|
319
|
+
assertCapabilityShadowPolicy('host.panels.close', panelStateFor(this).runtime.mode, panelStateFor(this).runtime.slices);
|
|
320
|
+
const caller = requirePluginCaller(this.ctx, 'tuiPanels.close', this);
|
|
321
|
+
const owner = activationFiber(caller);
|
|
322
|
+
if (owner === undefined)
|
|
323
|
+
return false;
|
|
324
|
+
const record = getPanelOwnerRecord(String(id ?? ''));
|
|
325
|
+
if (record === undefined || record.owner !== owner) {
|
|
326
|
+
caller.logger.warn('dsh-tui: tuiPanels.close rejected "' + String(id) + '" — not registered by this activation');
|
|
327
|
+
return false;
|
|
328
|
+
}
|
|
329
|
+
return panelBridgeRequests.request('close', String(id));
|
|
330
|
+
}
|
|
331
|
+
/** 设置/清除自己 Panel 的 badge。 */
|
|
332
|
+
badge(id, badge) {
|
|
333
|
+
assertCapabilityShadowPolicy('host.panels.badge', panelStateFor(this).runtime.mode, panelStateFor(this).runtime.slices);
|
|
334
|
+
const caller = requirePluginCaller(this.ctx, 'tuiPanels.badge', this);
|
|
335
|
+
const owner = activationFiber(caller);
|
|
336
|
+
if (owner === undefined)
|
|
337
|
+
return false;
|
|
338
|
+
const record = getPanelOwnerRecord(String(id ?? ''));
|
|
339
|
+
if (record === undefined || record.owner !== owner) {
|
|
340
|
+
caller.logger.warn('dsh-tui: tuiPanels.badge rejected "' + String(id) + '" — not registered by this activation');
|
|
341
|
+
return false;
|
|
342
|
+
}
|
|
343
|
+
if (badge === null) {
|
|
344
|
+
panelStore.clearBadge(String(id));
|
|
345
|
+
return true;
|
|
346
|
+
}
|
|
347
|
+
if (typeof badge !== 'object' || !['info', 'warning', 'error'].includes(String(badge.level))
|
|
348
|
+
|| typeof badge.unread !== 'number') {
|
|
349
|
+
caller.logger.warn('dsh-tui: tuiPanels.badge rejected an invalid badge');
|
|
350
|
+
return false;
|
|
351
|
+
}
|
|
352
|
+
panelStore.setBadge(String(id), {
|
|
353
|
+
level: badge.level,
|
|
354
|
+
unread: badge.unread,
|
|
355
|
+
});
|
|
356
|
+
return true;
|
|
357
|
+
}
|
|
358
|
+
/** 订阅涉及自己 Panel 的事件(本阶段 registered/unregistered/badge/
|
|
359
|
+
* error/disabled;opened/closed/focused/blurred/sidebar-toggled TODO)。 */
|
|
360
|
+
subscribe(listener) {
|
|
361
|
+
assertCapabilityShadowPolicy('host.panels.subscribe', panelStateFor(this).runtime.mode, panelStateFor(this).runtime.slices);
|
|
362
|
+
const caller = requirePluginCaller(this.ctx, 'tuiPanels.subscribe', this);
|
|
363
|
+
const owner = activationFiber(caller);
|
|
364
|
+
if (owner === undefined || typeof listener !== 'function')
|
|
365
|
+
return () => { };
|
|
366
|
+
const wrapped = (event) => {
|
|
367
|
+
const record = getPanelOwnerRecord(event.id);
|
|
368
|
+
if (record === undefined || record.owner !== owner)
|
|
369
|
+
return;
|
|
370
|
+
try {
|
|
371
|
+
listener(event);
|
|
372
|
+
}
|
|
373
|
+
catch (error) {
|
|
374
|
+
caller.logger.warn('dsh-tui: tuiPanels listener failed: ' + (error instanceof Error ? error.message : String(error)));
|
|
375
|
+
}
|
|
376
|
+
};
|
|
377
|
+
const dispose = panelStore.subscribe(wrapped);
|
|
378
|
+
bindCallerEffect(caller, dispose);
|
|
379
|
+
return dispose;
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
// ── 启用列表接线(tuiDisplayPrefs 的 panels CSV;无环的 module store)──
|
|
383
|
+
/** 注册成功后把最终 id 追加进侧栏启用 CSV(已存在则不动)——注册即
|
|
384
|
+
* 可见:PanelBar 出胶囊、open()/1-9/z 生效;/panel 与 /settings 仍可移除。 */
|
|
385
|
+
function enablePanelIdInStore(id) {
|
|
386
|
+
const ids = [...parseSidePanelIds(getSidePanelPanels())];
|
|
387
|
+
if (!ids.includes(id))
|
|
388
|
+
ids.push(id);
|
|
389
|
+
applySidePanelPanels(ids.join(','));
|
|
390
|
+
}
|
|
391
|
+
/** 撤下时把最终 id 从启用 CSV 摘掉(PanelHost 对缺失的 active 自动回
|
|
392
|
+
* 退到第一个已启用 Panel)。 */
|
|
393
|
+
function disablePanelIdInStore(id) {
|
|
394
|
+
const ids = parseSidePanelIds(getSidePanelPanels()).filter(candidate => candidate !== id);
|
|
395
|
+
applySidePanelPanels(ids.join(','));
|
|
396
|
+
}
|
|
397
|
+
export function getHostPanelRuntime(runtime) {
|
|
398
|
+
if (runtime === undefined)
|
|
399
|
+
return undefined;
|
|
400
|
+
try {
|
|
401
|
+
return panelStateFor(runtime).host ?? undefined;
|
|
402
|
+
}
|
|
403
|
+
catch {
|
|
404
|
+
return undefined;
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
export default TuiPanelRuntime;
|
|
@@ -613,7 +613,7 @@ export class TuiPluginHostRuntime extends Service {
|
|
|
613
613
|
this.assertEffect('host.diagnostics');
|
|
614
614
|
const data = loadSpecData();
|
|
615
615
|
if (data === undefined)
|
|
616
|
-
return ['vendored spec data unavailable (
|
|
616
|
+
return ['vendored spec data unavailable (tui-profile/)'];
|
|
617
617
|
return [...verifyRegistry(data), ...verifyContractProfiles(data)];
|
|
618
618
|
}
|
|
619
619
|
}
|
|
@@ -2,14 +2,30 @@ import type { Agent } from '@deepseek-ai/dsh-agent';
|
|
|
2
2
|
import type { Context } from '@deepseek-ai/cordis';
|
|
3
3
|
import { Config } from './index.js';
|
|
4
4
|
import { type RuntimeConfig } from './compat/settings.js';
|
|
5
|
+
import { initialPromptFromCmdlineArgs } from './startup-args.js';
|
|
5
6
|
import { render } from '../ui.js';
|
|
7
|
+
export { initialPromptFromCmdlineArgs };
|
|
6
8
|
/**
|
|
7
9
|
* Extract the startup prompt from raw app argv, excluding session selectors
|
|
8
10
|
* and Web startup flag values. `--trusted-host` consumes multiple authorities
|
|
9
11
|
* up to the next flag; none of them are prompt text (issue #882). An app-level
|
|
10
12
|
* `--` ends flag parsing; all following tokens are literal prompt text.
|
|
11
13
|
*/
|
|
12
|
-
|
|
14
|
+
/**
|
|
15
|
+
* 落地页 / 首启引导该不该在这次启动出现。
|
|
16
|
+
*
|
|
17
|
+
* 只看「用户有没有说要回到哪儿」:`--resume` 目标与首句都算他知道自己要去哪。
|
|
18
|
+
* **工作区目标不算**——`dst` 默认把 cwd 当工作区目标喂进来,算进去就等于在本机
|
|
19
|
+
* 最主流的启动方式下把这两个屏永久关掉(实测事故,见调用点的口径注释)。
|
|
20
|
+
*
|
|
21
|
+
* @param input.launchSessionId - 本次要恢复的会话(--resume / DSH_TUI_RESUME_SESSION)。
|
|
22
|
+
* @param input.initialPrompt - 命令行里带的首句提示词(无则空串)。
|
|
23
|
+
* @returns true 表示这次是「普通启动」。
|
|
24
|
+
*/
|
|
25
|
+
export declare function isLandingLaunch(input: {
|
|
26
|
+
launchSessionId?: string;
|
|
27
|
+
initialPrompt: string;
|
|
28
|
+
}): boolean;
|
|
13
29
|
/**
|
|
14
30
|
* How this process should treat the TUI frontend, given the terminal it runs on.
|
|
15
31
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../src/dsh-adapter/plugin.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAe,MAAM,wBAAwB,CAAA;AAGhE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAGlD,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACnC,OAAO,EAA+D,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../src/dsh-adapter/plugin.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAe,MAAM,wBAAwB,CAAA;AAGhE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAGlD,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACnC,OAAO,EAA+D,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAA;AA2BtH,OAAO,EAAE,4BAA4B,EAAE,MAAM,mBAAmB,CAAA;AAiChE,OAAO,EAAE,MAAM,EAAkC,MAAM,UAAU,CAAA;AAqCjE,OAAO,EAAE,4BAA4B,EAAE,CAAA;AAEvC;;;;;GAKG;AACH;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE;IAAE,eAAe,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAEnG;AAGD;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,WAAW,GAAG,aAAa,GAAG,yBAAyB,GAAG,eAAe,CAAA;AAErF,wBAAgB,kBAAkB,CAChC,WAAW,UAAgC,EAC3C,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,WAAW,CASb;AAED,wBAAsB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,aAAa,EAAE,aAAa,CAAC,MAAM,CAAC,EAAE,WAAW,GAAE,OAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAmmDzH;AAmMD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IAAE,UAAU,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;CAAE,GAAG;IACjF;;;;;;OAMG;IACH,UAAU,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,OAAO,CAAA;IACxC,YAAY,EAAE,MAAM,IAAI,CAAA;CACzB,CAeA;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE;IACpC,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,KAAK,GAAG,SAAS,CAAA;IAC5B,YAAY,EAAE,KAAK,CAAA;CACpB,GAAG,OAAO,CAQV;AAgBD;;;GAGG;AACH,wBAAsB,UAAU,CAC9B,GAAG,EAAE,OAAO,EACZ,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,MAAM,CAAC,CAAC,GAAG,SAAS,EACxD,UAAU,EAAE,OAAO,EACnB,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,IAAI,EAAE,MAAM,IAAI,GACf,OAAO,CAAC,IAAI,CAAC,CAmFf;AA4HD,gFAAgF;AAChF,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAIrE"}
|