@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,4 +1,7 @@
|
|
|
1
1
|
import { carrierKeyOf } from '@deepseek-ai/dsh-scope';
|
|
2
|
+
import { t } from '../../i18n.js';
|
|
3
|
+
import { runningPresetOf } from '../presets.js';
|
|
4
|
+
import { agentCapabilityEvidence, resolveAgentCapabilities } from './capabilities.js';
|
|
2
5
|
import { isTokenDelta, tokenDeltaChars } from './usage.js';
|
|
3
6
|
/**
|
|
4
7
|
* Foreground transcript listeners capture a binding generation. Child event
|
|
@@ -8,6 +11,41 @@ import { isTokenDelta, tokenDeltaChars } from './usage.js';
|
|
|
8
11
|
*/
|
|
9
12
|
export function createBindingEvents(ctx, deps) {
|
|
10
13
|
let subagentsInstalled = false;
|
|
14
|
+
/**
|
|
15
|
+
* Preset of the last binding we announced a capability gap for. The gap is a
|
|
16
|
+
* property of the agent's PRESET, so it is reported once per entry into a
|
|
17
|
+
* preset that lacks it (a rebind to the SAME preset — /model, /rewind —
|
|
18
|
+
* stays quiet; switching away and back reports again). Facts come from
|
|
19
|
+
* `channel/capabilities.ts`, never from a preset-id list: a user preset that
|
|
20
|
+
* adds compaction/pruning back gets no warning at all.
|
|
21
|
+
*
|
|
22
|
+
* A session recording NO preset (rosterless bare `cordis.yml`, or an embed
|
|
23
|
+
* that composes its own leaf) stays silent: nothing there attributes the
|
|
24
|
+
* missing services to a preset choice, and the command-list annotation plus
|
|
25
|
+
* the use-time refusal already say it when it matters. Only the id, not its
|
|
26
|
+
* contents, is read here.
|
|
27
|
+
*/
|
|
28
|
+
let announcedPreset;
|
|
29
|
+
let announced = false;
|
|
30
|
+
const announceCapabilityGap = () => {
|
|
31
|
+
const agent = deps.binding.agent;
|
|
32
|
+
const presetId = runningPresetOf(agent.session);
|
|
33
|
+
if (presetId === undefined)
|
|
34
|
+
return;
|
|
35
|
+
if (announced && presetId === announcedPreset)
|
|
36
|
+
return;
|
|
37
|
+
announced = true;
|
|
38
|
+
announcedPreset = presetId;
|
|
39
|
+
const capabilities = resolveAgentCapabilities(agentCapabilityEvidence(ctx, agent));
|
|
40
|
+
if (capabilities.compaction && capabilities.pruner)
|
|
41
|
+
return;
|
|
42
|
+
const key = capabilities.compaction
|
|
43
|
+
? 'capability-gap-pruner'
|
|
44
|
+
: capabilities.pruner
|
|
45
|
+
? 'capability-gap-compaction'
|
|
46
|
+
: 'capability-gap-compaction-pruner';
|
|
47
|
+
deps.state.notify(t(key), { color: 'warning', timeoutMs: 12000 });
|
|
48
|
+
};
|
|
11
49
|
const installSubagents = () => {
|
|
12
50
|
if (subagentsInstalled)
|
|
13
51
|
return;
|
|
@@ -56,6 +94,7 @@ export function createBindingEvents(ctx, deps) {
|
|
|
56
94
|
deps.inputConvergence.cancelInFlight = false;
|
|
57
95
|
deps.inputConvergence.interruptSeq += 1;
|
|
58
96
|
deps.seedActivity?.(deps.binding.agent.session);
|
|
97
|
+
deps.seedContextOccupancy?.(deps.binding.agent.session);
|
|
59
98
|
deps.modelActions.selection.current = undefined;
|
|
60
99
|
deps.modelActions.selection.assembled = undefined;
|
|
61
100
|
if (deps.binding.agent.options?.model === undefined && deps.state.provider !== '' && deps.state.model !== '') {
|
|
@@ -63,6 +102,10 @@ export function createBindingEvents(ctx, deps) {
|
|
|
63
102
|
}
|
|
64
103
|
void deps.modelActions.applyPreferredEffort();
|
|
65
104
|
deps.modeActions.refreshMode();
|
|
105
|
+
// Entering/resuming a session whose preset serves neither automatic
|
|
106
|
+
// compaction nor tool-result pruning changes what the user can expect
|
|
107
|
+
// from a long session; say it once, here, before the turn starts.
|
|
108
|
+
announceCapabilityGap();
|
|
66
109
|
const capture = deps.binding.capture();
|
|
67
110
|
const session = capture.agent.session;
|
|
68
111
|
const current = () => deps.owner.current() && deps.binding.isCurrent(capture);
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One place that answers "can this agent actually do X?", with the evidence
|
|
3
|
+
* for every answer.
|
|
4
|
+
*
|
|
5
|
+
* The TUI used to answer that question three different ways: `/permission`
|
|
6
|
+
* read the merged command list or the permission-presets snapshot, `/plan`
|
|
7
|
+
* read the command list only, and `/compact` asked nothing at all — so a
|
|
8
|
+
* command could look available (Help, `/` completion) and then fail on use.
|
|
9
|
+
* Every consumer now reads these facts: Chat's command switch, the
|
|
10
|
+
* session-mode actions, and the Help/completion annotation applied where the
|
|
11
|
+
* command list is built (`annotateCommandCapabilities`).
|
|
12
|
+
*
|
|
13
|
+
* Resolution is FACT-based on purpose. Each fact is read from the live service
|
|
14
|
+
* the agent's own scope chain resolves (`presets.serviceForAgent`, which
|
|
15
|
+
* mirrors the official host's `agentPresets.serviceFor(agent, key) ??
|
|
16
|
+
* ctx.get(key)`), never from a preset-id table — a user preset that adds
|
|
17
|
+
* compaction/pruning back gets the full feature set with no TUI change. The
|
|
18
|
+
* single preset-id read left is the official Minimal `ask_user_question`
|
|
19
|
+
* carve-out, and it lives in `presets.ts` (one source, pinned by
|
|
20
|
+
* `verify:minimal-preset-tools`).
|
|
21
|
+
*
|
|
22
|
+
* Evidence per fact:
|
|
23
|
+
* compaction `serviceForAgent(ctx, agent, 'compaction')` exposing
|
|
24
|
+
* `compactNow` — the same seam the TUI transaction and the
|
|
25
|
+
* official `/compact` command both call;
|
|
26
|
+
* pruner `serviceForAgent(ctx, agent, 'toolResultPruner')`;
|
|
27
|
+
* skills `serviceForAgent(ctx, agent, 'skills')`;
|
|
28
|
+
* compact/plan the DSH command registry (`commands.find(agent, name)`,
|
|
29
|
+
* scope-correct: same name in another scope is not this
|
|
30
|
+
* agent's command). `/compact` prefers the TUI's own
|
|
31
|
+
* transaction whenever the compaction service exists, because
|
|
32
|
+
* that path owns the `tui/compact` decision event, the
|
|
33
|
+
* progress row, Esc cancellation and the session-switch
|
|
34
|
+
* settle; it falls back to the registry command only when the
|
|
35
|
+
* local path cannot run.
|
|
36
|
+
*/
|
|
37
|
+
import type { Agent } from '@deepseek-ai/dsh-agent';
|
|
38
|
+
import type { Context } from '@deepseek-ai/cordis';
|
|
39
|
+
import type { CommandRuntime } from '@deepseek-ai/dsh-commands';
|
|
40
|
+
import type { AgentCapabilities } from '../../adapter/ports/channel-capabilities.js';
|
|
41
|
+
import type { LocalCommand } from '../../commands.js';
|
|
42
|
+
/**
|
|
43
|
+
* Everything the resolver reads, passed in explicitly so the decision can be
|
|
44
|
+
* driven from fixtures (the focused regression) instead of a live composition.
|
|
45
|
+
*/
|
|
46
|
+
export interface CapabilityEvidence {
|
|
47
|
+
/** The live agent whose composition is described; undefined before a bind. */
|
|
48
|
+
readonly agent: Agent | undefined;
|
|
49
|
+
/** `ctx.commands` (the DSH command registry), undefined without the row. */
|
|
50
|
+
readonly commandService: CommandRuntime | undefined;
|
|
51
|
+
/** Read one service the way the agent sees it (preset scope chain first). */
|
|
52
|
+
readonly service: (key: string) => unknown;
|
|
53
|
+
/** Whether the agent's scoped tool catalog carries one model-facing tool. */
|
|
54
|
+
readonly toolPresent: (name: string) => boolean;
|
|
55
|
+
/** The preset recorded for the agent (only the Minimal carve-out reads it). */
|
|
56
|
+
readonly presetId: string | undefined;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Resolve the facts for one agent.
|
|
60
|
+
*
|
|
61
|
+
* @param evidence - The live reads described on {@link CapabilityEvidence}.
|
|
62
|
+
* @returns Facts plus, for a missing route, the i18n key naming the reason.
|
|
63
|
+
*/
|
|
64
|
+
export declare function resolveAgentCapabilities(evidence: CapabilityEvidence): AgentCapabilities;
|
|
65
|
+
/** The live evidence bag for one agent, read through its preset scope chain. */
|
|
66
|
+
export declare function agentCapabilityEvidence(ctx: Context, agent: Agent | undefined): CapabilityEvidence;
|
|
67
|
+
/**
|
|
68
|
+
* Mark the commands whose capability route is `none` so Help and `/`
|
|
69
|
+
* completion state that instead of advertising a command that can only fail.
|
|
70
|
+
*
|
|
71
|
+
* The marker is a `descriptionKey` override, so `localizedDescription`
|
|
72
|
+
* resolves it at render time (`/lang` applies immediately) and every list
|
|
73
|
+
* consumer — Help menu, suggestion overlay, i18n verifier — picks it up with
|
|
74
|
+
* no new UI mode. The command stays dispatchable: removing it from the list
|
|
75
|
+
* would silently forward `/compact` to the model as a plain message.
|
|
76
|
+
*
|
|
77
|
+
* @param commands - The merged command list (locals + registry).
|
|
78
|
+
* @param capabilities - Facts for the agent the list is built for.
|
|
79
|
+
* @returns The same list, with `none`-route entries re-described.
|
|
80
|
+
*/
|
|
81
|
+
export declare function annotateCommandCapabilities(commands: readonly LocalCommand[], capabilities: AgentCapabilities): LocalCommand[];
|
|
82
|
+
//# sourceMappingURL=capabilities.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../../../src/dsh-adapter/channel/capabilities.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AACnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAC/D,OAAO,KAAK,EAAE,iBAAiB,EAAqB,MAAM,6CAA6C,CAAA;AACvG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAWrD;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,8EAA8E;IAC9E,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,SAAS,CAAA;IACjC,4EAA4E;IAC5E,QAAQ,CAAC,cAAc,EAAE,cAAc,GAAG,SAAS,CAAA;IACnD,6EAA6E;IAC7E,QAAQ,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAA;IAC1C,6EAA6E;IAC7E,QAAQ,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAA;IAC/C,+EAA+E;IAC/E,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAA;CACtC;AAQD;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,iBAAiB,CAyCxF;AAED,gFAAgF;AAChF,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,SAAS,GAAG,kBAAkB,CAwBlG;AAiBD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,SAAS,YAAY,EAAE,EACjC,YAAY,EAAE,iBAAiB,GAC9B,YAAY,EAAE,CAShB"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One place that answers "can this agent actually do X?", with the evidence
|
|
3
|
+
* for every answer.
|
|
4
|
+
*
|
|
5
|
+
* The TUI used to answer that question three different ways: `/permission`
|
|
6
|
+
* read the merged command list or the permission-presets snapshot, `/plan`
|
|
7
|
+
* read the command list only, and `/compact` asked nothing at all — so a
|
|
8
|
+
* command could look available (Help, `/` completion) and then fail on use.
|
|
9
|
+
* Every consumer now reads these facts: Chat's command switch, the
|
|
10
|
+
* session-mode actions, and the Help/completion annotation applied where the
|
|
11
|
+
* command list is built (`annotateCommandCapabilities`).
|
|
12
|
+
*
|
|
13
|
+
* Resolution is FACT-based on purpose. Each fact is read from the live service
|
|
14
|
+
* the agent's own scope chain resolves (`presets.serviceForAgent`, which
|
|
15
|
+
* mirrors the official host's `agentPresets.serviceFor(agent, key) ??
|
|
16
|
+
* ctx.get(key)`), never from a preset-id table — a user preset that adds
|
|
17
|
+
* compaction/pruning back gets the full feature set with no TUI change. The
|
|
18
|
+
* single preset-id read left is the official Minimal `ask_user_question`
|
|
19
|
+
* carve-out, and it lives in `presets.ts` (one source, pinned by
|
|
20
|
+
* `verify:minimal-preset-tools`).
|
|
21
|
+
*
|
|
22
|
+
* Evidence per fact:
|
|
23
|
+
* compaction `serviceForAgent(ctx, agent, 'compaction')` exposing
|
|
24
|
+
* `compactNow` — the same seam the TUI transaction and the
|
|
25
|
+
* official `/compact` command both call;
|
|
26
|
+
* pruner `serviceForAgent(ctx, agent, 'toolResultPruner')`;
|
|
27
|
+
* skills `serviceForAgent(ctx, agent, 'skills')`;
|
|
28
|
+
* compact/plan the DSH command registry (`commands.find(agent, name)`,
|
|
29
|
+
* scope-correct: same name in another scope is not this
|
|
30
|
+
* agent's command). `/compact` prefers the TUI's own
|
|
31
|
+
* transaction whenever the compaction service exists, because
|
|
32
|
+
* that path owns the `tui/compact` decision event, the
|
|
33
|
+
* progress row, Esc cancellation and the session-switch
|
|
34
|
+
* settle; it falls back to the registry command only when the
|
|
35
|
+
* local path cannot run.
|
|
36
|
+
*/
|
|
37
|
+
import { presetHidesHostAskTool, runningPresetOf, serviceForAgent } from '../presets.js';
|
|
38
|
+
/** Whether `/compact` can run through the TUI's own transaction. */
|
|
39
|
+
function hasCompactNow(service) {
|
|
40
|
+
return typeof service?.compactNow === 'function';
|
|
41
|
+
}
|
|
42
|
+
/** Command name → the capability that gates its advertisement. */
|
|
43
|
+
const COMMAND_CAPABILITIES = new Map([
|
|
44
|
+
['compact', capabilities => capabilities.compact],
|
|
45
|
+
['plan', capabilities => capabilities.plan],
|
|
46
|
+
]);
|
|
47
|
+
/**
|
|
48
|
+
* Resolve the facts for one agent.
|
|
49
|
+
*
|
|
50
|
+
* @param evidence - The live reads described on {@link CapabilityEvidence}.
|
|
51
|
+
* @returns Facts plus, for a missing route, the i18n key naming the reason.
|
|
52
|
+
*/
|
|
53
|
+
export function resolveAgentCapabilities(evidence) {
|
|
54
|
+
const { agent, commandService, presetId } = evidence;
|
|
55
|
+
// The command service can be a partial shape (script fixtures, hosts whose row
|
|
56
|
+
// does not expose the whole surface), so read `find` structurally and call it
|
|
57
|
+
// as a method: a detached registry method loses `this` (see #864). A missing
|
|
58
|
+
// member and a throwing one both mean "no registry route", never a throw out
|
|
59
|
+
// of the capability read — this runs on the render path and inside bind()'s
|
|
60
|
+
// gap notice, where an exception disposes the whole channel.
|
|
61
|
+
const registered = (name) => {
|
|
62
|
+
// The unbound read is deliberate: the merged command list is built with the
|
|
63
|
+
// same scope (`skill-catalog` calls `commandService.list(agent)` before the
|
|
64
|
+
// first bind, which resolves the global-only view), so a registry command
|
|
65
|
+
// the user can already see in Help must not read as unavailable merely
|
|
66
|
+
// because no agent is bound yet — that is exactly the launchpad screen.
|
|
67
|
+
if (commandService === undefined)
|
|
68
|
+
return false;
|
|
69
|
+
const { find } = commandService;
|
|
70
|
+
if (typeof find !== 'function')
|
|
71
|
+
return false;
|
|
72
|
+
try {
|
|
73
|
+
return find.call(commandService, agent, name) !== undefined;
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
const compaction = hasCompactNow(evidence.service('compaction'));
|
|
80
|
+
return {
|
|
81
|
+
compact: compaction
|
|
82
|
+
? { route: 'local' }
|
|
83
|
+
: registered('compact')
|
|
84
|
+
? { route: 'registry' }
|
|
85
|
+
: { route: 'none', reasonKey: 'capability-reason-no-compaction' },
|
|
86
|
+
plan: registered('plan')
|
|
87
|
+
? { route: 'registry' }
|
|
88
|
+
: { route: 'none', reasonKey: 'capability-reason-no-plan-command' },
|
|
89
|
+
compaction,
|
|
90
|
+
pruner: evidence.service('toolResultPruner') !== undefined,
|
|
91
|
+
// The TUI mounts ask_user_question at the HOST layer, so the tool catalog
|
|
92
|
+
// alone is not evidence: the official Minimal preset's assembly filter
|
|
93
|
+
// strips it again (see `presets.presetHidesHostAskTool`).
|
|
94
|
+
questionTool: evidence.toolPresent('ask_user_question') && !presetHidesHostAskTool(presetId),
|
|
95
|
+
skills: evidence.service('skills') !== undefined,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
/** The live evidence bag for one agent, read through its preset scope chain. */
|
|
99
|
+
export function agentCapabilityEvidence(ctx, agent) {
|
|
100
|
+
const read = (key) => {
|
|
101
|
+
try {
|
|
102
|
+
return agent === undefined ? ctx.get(key) : serviceForAgent(ctx, agent, key);
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
// A failing scope read must degrade to "not mounted", never break the
|
|
106
|
+
// caller that is only describing what exists.
|
|
107
|
+
return undefined;
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
return {
|
|
111
|
+
agent,
|
|
112
|
+
commandService: ctx.get('commands'),
|
|
113
|
+
service: read,
|
|
114
|
+
toolPresent: name => {
|
|
115
|
+
try {
|
|
116
|
+
const tools = ctx.get('tools');
|
|
117
|
+
return tools?.get(name, agent) !== undefined;
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
return false;
|
|
121
|
+
}
|
|
122
|
+
},
|
|
123
|
+
presetId: agent === undefined ? undefined : recordedPresetId(agent),
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* The preset recorded for the agent, or undefined when the session cannot be
|
|
128
|
+
* read. `runningPresetOf` walks the live session contract and throws on a
|
|
129
|
+
* session that violates it; this bag must stay descriptive, so a bad read
|
|
130
|
+
* degrades to "no preset recorded" rather than escaping into the caller (where
|
|
131
|
+
* it would dispose the channel through bind()'s catch).
|
|
132
|
+
*/
|
|
133
|
+
function recordedPresetId(agent) {
|
|
134
|
+
try {
|
|
135
|
+
return runningPresetOf(agent.session);
|
|
136
|
+
}
|
|
137
|
+
catch {
|
|
138
|
+
return undefined;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Mark the commands whose capability route is `none` so Help and `/`
|
|
143
|
+
* completion state that instead of advertising a command that can only fail.
|
|
144
|
+
*
|
|
145
|
+
* The marker is a `descriptionKey` override, so `localizedDescription`
|
|
146
|
+
* resolves it at render time (`/lang` applies immediately) and every list
|
|
147
|
+
* consumer — Help menu, suggestion overlay, i18n verifier — picks it up with
|
|
148
|
+
* no new UI mode. The command stays dispatchable: removing it from the list
|
|
149
|
+
* would silently forward `/compact` to the model as a plain message.
|
|
150
|
+
*
|
|
151
|
+
* @param commands - The merged command list (locals + registry).
|
|
152
|
+
* @param capabilities - Facts for the agent the list is built for.
|
|
153
|
+
* @returns The same list, with `none`-route entries re-described.
|
|
154
|
+
*/
|
|
155
|
+
export function annotateCommandCapabilities(commands, capabilities) {
|
|
156
|
+
let annotated;
|
|
157
|
+
commands.forEach((command, index) => {
|
|
158
|
+
const gate = COMMAND_CAPABILITIES.get(command.name);
|
|
159
|
+
if (gate === undefined || gate(capabilities).route !== 'none')
|
|
160
|
+
return;
|
|
161
|
+
annotated ??= [...commands];
|
|
162
|
+
annotated[index] = { ...command, descriptionKey: `cmd-desc-${command.name}-unavailable` };
|
|
163
|
+
});
|
|
164
|
+
return annotated ?? commands;
|
|
165
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-completions.d.ts","sourceRoot":"","sources":["../../../../src/dsh-adapter/channel/command-completions.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8C,KAAK,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"command-completions.d.ts","sourceRoot":"","sources":["../../../../src/dsh-adapter/channel/command-completions.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8C,KAAK,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AAK1G,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAExD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE9C,wFAAwF;AACxF,wBAAgB,wBAAwB,CAAC,IAAI,EAAE;IAC7C,KAAK,EAAE,MAAM,YAAY,CAAA;IACzB,SAAS,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAA;IACjD,YAAY,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,qBAAqB,EAAE,CAAA;KAAE,CAAA;IACtF,iBAAiB,IAAI,SAAS;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IACnG,KAAK,EAAE;QACL,cAAc,IAAI,IAAI,CAAA;QACtB,UAAU,IAAI,SAAS,qBAAqB,EAAE,CAAA;QAC9C,iBAAiB,IAAI,IAAI,CAAA;QACzB,aAAa,IAAI,SAAS;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,WAAW,CAAC,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAC;YAAC,SAAS,CAAC,EAAE,OAAO,CAAA;SAAE,EAAE,CAAA;QACpG,gBAAgB,IAAI,IAAI,CAAA;KACzB,CAAA;CACF,IAES,OAAO,MAAM,qDA+EtB"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { completeCommands, isCommandCompletionToken } from '../../commands.js';
|
|
2
|
+
import { getSidePanelPanels, parseSidePanelIds } from '../../tuiDisplayPrefs.js';
|
|
2
3
|
import { SESSION_COLOR_NAMES } from '../../terminal-utils/sessionColors.js';
|
|
3
4
|
import { getLang, LANGS } from '../../i18n.js';
|
|
4
5
|
import { AUTO_THEME_NAME } from '../../theme.js';
|
|
@@ -83,6 +84,13 @@ export function createCommandCompletions(deps) {
|
|
|
83
84
|
...(snapshot.current?.kind === 'preset' && snapshot.current.value === option.value ? { tag: 'current' } : {}),
|
|
84
85
|
}));
|
|
85
86
|
}
|
|
87
|
+
if (path.length === 1 && path[0] === 'panel')
|
|
88
|
+
return [
|
|
89
|
+
{ name: 'toggle', description: 'Toggle the sidebar', descriptionKey: 'sugg-panel-toggle-desc' },
|
|
90
|
+
{ name: 'focus', description: 'Focus the side panel', descriptionKey: 'sugg-panel-focus-desc' },
|
|
91
|
+
{ name: 'zoom', description: 'Zoom the active panel', descriptionKey: 'sugg-panel-zoom-desc' },
|
|
92
|
+
...parseSidePanelIds(getSidePanelPanels()).map(id => ({ name: id, description: `Open the ${id} panel`, descriptionKey: 'sugg-panel-id-desc' })),
|
|
93
|
+
];
|
|
86
94
|
if (path.length === 1 && path[0] === 'plan')
|
|
87
95
|
return [
|
|
88
96
|
{ name: 'on', description: 'Enter plan mode: read-only, plan before acting', descriptionKey: 'plan-mode-on-desc' },
|
|
@@ -1,18 +1,10 @@
|
|
|
1
|
+
import type { ContextOccupancy } from '../../adapter/ports/channel-view.js';
|
|
1
2
|
import type { ComposerImageRef, PendingMessage } from './types.js';
|
|
2
3
|
/** Small mutable cells for Channel-local warning and pending-message state. */
|
|
3
4
|
export declare function createContextBookkeeping(state: () => {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
};
|
|
8
|
-
/** Last turn's billed token shape; the honest numerator for the
|
|
9
|
-
* context-low warning (input alone misses cached reads/writes, which
|
|
10
|
-
* resumed sessions replay back at full size). */
|
|
11
|
-
lastUsage: {
|
|
12
|
-
input: number;
|
|
13
|
-
cacheRead: number;
|
|
14
|
-
cacheWrite: number;
|
|
15
|
-
} | undefined;
|
|
5
|
+
/** The channel's single occupancy reading (projection first, sample
|
|
6
|
+
* fallback) — the honest numerator for the context-low warning. */
|
|
7
|
+
contextOccupancy: ContextOccupancy | undefined;
|
|
16
8
|
pending: PendingMessage[];
|
|
17
9
|
emit(): void;
|
|
18
10
|
}, notify: (text: string, options: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-bookkeeping.d.ts","sourceRoot":"","sources":["../../../../src/dsh-adapter/channel/context-bookkeeping.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAElE,+EAA+E;AAC/E,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,MAAM;IACX
|
|
1
|
+
{"version":3,"file":"context-bookkeeping.d.ts","sourceRoot":"","sources":["../../../../src/dsh-adapter/channel/context-bookkeeping.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAA;AAC3E,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAElE,+EAA+E;AAC/E,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,MAAM;IACX;wEACoE;IACpE,gBAAgB,EAAE,gBAAgB,GAAG,SAAS,CAAA;IAC9C,OAAO,EAAE,cAAc,EAAE,CAAA;IACzB,IAAI,IAAI,IAAI,CAAA;CACb,EACD,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,KAAK,OAAO,EACnF,cAAc,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,EAC3C,mBAAmB,EAAE,MAAM;;;;+BA6BK,IAAI;+BA1BJ,IAAI;4BAeL;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,SAAS,gBAAgB,EAAE,CAAA;KAAE,aAAa,cAAc,CAAC,WAAW,CAAC,KAAG,IAAI;gCAK7G,MAAM,KAAG,IAAI;EAQjD"}
|
|
@@ -3,14 +3,19 @@ export function createContextBookkeeping(state, notify, lowContextText, warningB
|
|
|
3
3
|
const warning = { value: false };
|
|
4
4
|
const checkContextWarning = () => {
|
|
5
5
|
const channel = state();
|
|
6
|
-
|
|
6
|
+
const occupancy = channel.contextOccupancy;
|
|
7
|
+
// No window (no route capacity) is the only reason to stay silent: the
|
|
8
|
+
// numerator is now the projected occupancy, which exists as soon as a
|
|
9
|
+
// meter (any normal deployment) or one settled request knows anything.
|
|
10
|
+
if (warning.value || occupancy === undefined || occupancy.contextWindow === undefined)
|
|
7
11
|
return;
|
|
8
|
-
|
|
9
|
-
|
|
12
|
+
if (occupancy.contextWindow <= 0)
|
|
13
|
+
return;
|
|
14
|
+
const remaining = occupancy.contextWindow - occupancy.usedTokens;
|
|
10
15
|
if (remaining >= warningBufferTokens)
|
|
11
16
|
return;
|
|
12
17
|
warning.value = true;
|
|
13
|
-
notify(lowContextText(Math.max(0, Math.round((remaining /
|
|
18
|
+
notify(lowContextText(Math.max(0, Math.round((remaining / occupancy.contextWindow) * 100))), {
|
|
14
19
|
color: 'warning', timeoutMs: 8000,
|
|
15
20
|
});
|
|
16
21
|
};
|
|
@@ -3,7 +3,7 @@ import type { Agent } from '@deepseek-ai/dsh-agent';
|
|
|
3
3
|
import { type UserMessage } from '@deepseek-ai/dsh-llm';
|
|
4
4
|
import { type ComposerImages } from './composer-images.js';
|
|
5
5
|
import type { ChannelOwner } from './owner.js';
|
|
6
|
-
import type { ChannelSelection, SelectionAttachment } from '../../adapter/ports/channel-view.js';
|
|
6
|
+
import type { AttachedContext, ChannelSelection, SelectionAttachment } from '../../adapter/ports/channel-view.js';
|
|
7
7
|
import type { ChannelImageBlock, ChannelState, ComposerImageRef, MentionAttachments, MentionFs, PendingMessage, StagedImageInput } from './types.js';
|
|
8
8
|
/** One submission's enqueue-time world: the session it was typed in, the
|
|
9
9
|
* services that resolve its references, and the capabilities live then. */
|
|
@@ -19,6 +19,10 @@ interface UserTextOrigin {
|
|
|
19
19
|
* selection made while the FIFO or mention expansion parks the delivery
|
|
20
20
|
* can never attach to this message. */
|
|
21
21
|
readonly selection: ChannelSelection | undefined;
|
|
22
|
+
/** "Send to Chat" contexts AT ENQUEUE, already taken off the channel (see
|
|
23
|
+
* `consumeAttachedContexts`): the same one-shot rule as the selection, and
|
|
24
|
+
* the reason a chip can never ride along with a second submission. */
|
|
25
|
+
readonly attachedContexts: readonly AttachedContext[];
|
|
22
26
|
}
|
|
23
27
|
/** Input FIFO, staged attachments and decision notice timers share one lifetime. */
|
|
24
28
|
export declare function createInputDelivery(ctx: Context, owner: ChannelOwner, binding: {
|
|
@@ -27,7 +31,14 @@ export declare function createInputDelivery(ctx: Context, owner: ChannelOwner, b
|
|
|
27
31
|
id: string;
|
|
28
32
|
text: string;
|
|
29
33
|
images?: readonly ComposerImageRef[];
|
|
30
|
-
}, placement: PendingMessage['placement']) => void, untrackPending: (id: string) => void, composer: ComposerImages, selection: () => ChannelSelection | undefined, rememberSelection: (messageId: string, info: SelectionAttachment) => void
|
|
34
|
+
}, placement: PendingMessage['placement']) => void, untrackPending: (id: string) => void, composer: ComposerImages, selection: () => ChannelSelection | undefined, rememberSelection: (messageId: string, info: SelectionAttachment) => void,
|
|
35
|
+
/**
|
|
36
|
+
* Take-and-clear the staged "Send to Chat" contexts for the submission being
|
|
37
|
+
* enqueued (side-panel §6.7). Optional so a bare embedder/fixture that owns
|
|
38
|
+
* only the decision seam stays constructible; with it absent the origin
|
|
39
|
+
* simply carries no contexts.
|
|
40
|
+
*/
|
|
41
|
+
consumeAttachedContexts?: () => readonly AttachedContext[]): {
|
|
31
42
|
dispatchUserText: (text: string, placement: PendingMessage["placement"], images?: readonly ComposerImageRef[], attach?: UserMessage) => void;
|
|
32
43
|
deliverUserText: (text: string, placement: PendingMessage["placement"], images?: readonly ComposerImageRef[], attach?: UserMessage) => void;
|
|
33
44
|
claimAttachments: (messages: readonly UserMessage[]) => UserMessage[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input-delivery.d.ts","sourceRoot":"","sources":["../../../../src/dsh-adapter/channel/input-delivery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AACnD,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAI1E,OAAO,EAIL,KAAK,cAAc,EACpB,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"input-delivery.d.ts","sourceRoot":"","sources":["../../../../src/dsh-adapter/channel/input-delivery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AACnD,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAI1E,OAAO,EAIL,KAAK,cAAc,EACpB,MAAM,sBAAsB,CAAA;AAM7B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAA;AACjH,OAAO,KAAK,EACV,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,SAAS,EACT,cAAc,EACd,gBAAgB,EACjB,MAAM,YAAY,CAAA;AAEnB;4EAC4E;AAC5E,UAAU,cAAc;IACtB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,EAAE,SAAS,GAAG,SAAS,CAAA;IAClC,QAAQ,CAAC,WAAW,EAAE,kBAAkB,GAAG,SAAS,CAAA;IACpD,QAAQ,CAAC,YAAY,EAAE,WAAW,CAAC,MAAM,EAAE,iBAAiB,CAAC,YAAY,CAAC,CAAC,CAAA;IAC3E;;4CAEwC;IACxC,QAAQ,CAAC,SAAS,EAAE,gBAAgB,GAAG,SAAS,CAAA;IAChD;;2EAEuE;IACvE,QAAQ,CAAC,gBAAgB,EAAE,SAAS,eAAe,EAAE,CAAA;CACtD;AAED,oFAAoF;AACpF,wBAAgB,mBAAmB,CAClC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE;IAAE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;CAAE,EACrE,KAAK,EAAE,MAAM,IAAI,CAAC,YAAY,EAAE,KAAK,GAAG,SAAS,GAAG,wBAAwB,CAAC,EAC7E,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,EAC9B,YAAY,EAAE,CAAC,OAAO,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,SAAS,gBAAgB,EAAE,CAAA;CAAE,EAAE,SAAS,EAAE,cAAc,CAAC,WAAW,CAAC,KAAK,IAAI,EAC3I,cAAc,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,EACpC,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,MAAM,gBAAgB,GAAG,SAAS,EAC7C,iBAAiB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,KAAK,IAAI;AACzE;;;;;GAKG;AACH,uBAAuB,CAAC,EAAE,MAAM,SAAS,eAAe,EAAE;6BA2RjD,MAAM,aACD,cAAc,CAAC,WAAW,CAAC,WAC9B,SAAS,gBAAgB,EAAE,WAC1B,WAAW,KACnB,IAAI;4BAcC,MAAM,aACD,cAAc,CAAC,WAAW,CAAC,WAC9B,SAAS,gBAAgB,EAAE,WAC1B,WAAW,KACnB,IAAI;iCA3R6B,SAAS,WAAW,EAAE,KAAG,WAAW,EAAE;kCAarC,MAAM,KAAG,IAAI;0BAgJrB,CAAC,QAAQ,MAAM,WAAW,OAAO,CAAC,CAAC,CAAC,WAAW,cAAc,KAAG,OAAO,CAAC,CAAC,CAAC;6BAkIzE,IAAI;wBAaZ,gBAAgB,KAAG,OAAO,CAAC,MAAM,CAAC;wBACpC,WAAW,CAAC,MAAM,EAAE,iBAAiB,CAAC,YAAY,CAAC,CAAC;;EAGzE"}
|
|
@@ -4,11 +4,19 @@ import { logForDebugging } from '../../utils/debug.js';
|
|
|
4
4
|
import { dispatchTuiDecision } from '../extension-events.js';
|
|
5
5
|
import { firstStaleComposerToken, formatMissingReference, orderedComposerImages, } from './composer-images.js';
|
|
6
6
|
import { expandComposerMentions } from './composer-mentions.js';
|
|
7
|
+
import { appendAttachedContextBlocks } from './attached-context.js';
|
|
7
8
|
import { normalizeInputDecision } from './decisions.js';
|
|
8
9
|
import { attachIdeSelection } from './ide-selection.js';
|
|
9
10
|
import { mentionAttachments, mentionFs } from './mentions.js';
|
|
10
11
|
/** Input FIFO, staged attachments and decision notice timers share one lifetime. */
|
|
11
|
-
export function createInputDelivery(ctx, owner, binding, state, notify, trackPending, untrackPending, composer, selection, rememberSelection
|
|
12
|
+
export function createInputDelivery(ctx, owner, binding, state, notify, trackPending, untrackPending, composer, selection, rememberSelection,
|
|
13
|
+
/**
|
|
14
|
+
* Take-and-clear the staged "Send to Chat" contexts for the submission being
|
|
15
|
+
* enqueued (side-panel §6.7). Optional so a bare embedder/fixture that owns
|
|
16
|
+
* only the decision seam stays constructible; with it absent the origin
|
|
17
|
+
* simply carries no contexts.
|
|
18
|
+
*/
|
|
19
|
+
consumeAttachedContexts) {
|
|
12
20
|
/**
|
|
13
21
|
* `@` file mentions (issue #15): expansion reads files asynchronously, so
|
|
14
22
|
* every user-text delivery (submit / steer / interrupt-requeue) funnels
|
|
@@ -84,6 +92,10 @@ export function createInputDelivery(ctx, owner, binding, state, notify, trackPen
|
|
|
84
92
|
attachments: mentionAttachments(ctx),
|
|
85
93
|
stagedImages: composer.snapshot(),
|
|
86
94
|
selection: selection(),
|
|
95
|
+
// Consumed (not merely read): the snapshot and the clear are one step, so
|
|
96
|
+
// the chips leave with the submission that owns them and a second,
|
|
97
|
+
// faster-typed message can never re-attach the same context.
|
|
98
|
+
attachedContexts: consumeAttachedContexts?.() ?? [],
|
|
87
99
|
});
|
|
88
100
|
/**
|
|
89
101
|
* Expand the text's `@` mentions and deliver ONE user message: the typed
|
|
@@ -113,6 +125,11 @@ export function createInputDelivery(ctx, owner, binding, state, notify, trackPen
|
|
|
113
125
|
// attached-file block — direct construction, never text parsing, failures
|
|
114
126
|
// silently skipped (an IDE-side extra must never block a send).
|
|
115
127
|
const selectionAttached = await attachIdeSelection(expansion.blocks, origin.cwd, origin.selection, origin.fs);
|
|
128
|
+
// "Send to Chat": append every context staged for THIS submission as its
|
|
129
|
+
// own `<attached-context …>` block, behind the typed text and the
|
|
130
|
+
// mention/selection attachments. Unlike the selection there is nothing to
|
|
131
|
+
// resolve and nothing that can fail — the body is already in hand.
|
|
132
|
+
appendAttachedContextBlocks(expansion.blocks, origin.attachedContexts);
|
|
116
133
|
const message = createUserMessage({
|
|
117
134
|
content: expansion.blocks,
|
|
118
135
|
source: { kind: 'user' },
|
|
@@ -28,9 +28,6 @@ export declare function createModeActions(ctx: Context, state: ModeState, deps:
|
|
|
28
28
|
runtime: AdapterRuntimeOptions;
|
|
29
29
|
binding: Pick<Binding, 'agent' | 'capture' | 'isCurrent'>;
|
|
30
30
|
sessionModes: readonly SessionModeSpec[];
|
|
31
|
-
commandService?: {
|
|
32
|
-
find(agent: Agent, name: string): unknown;
|
|
33
|
-
};
|
|
34
31
|
executeRegistryCommand(name: string, input: string): Promise<string | undefined>;
|
|
35
32
|
notify: ChannelState['notify'];
|
|
36
33
|
}): {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mode-actions.d.ts","sourceRoot":"","sources":["../../../../src/dsh-adapter/channel/mode-actions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;
|
|
1
|
+
{"version":3,"file":"mode-actions.d.ts","sourceRoot":"","sources":["../../../../src/dsh-adapter/channel/mode-actions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAG5D,OAAO,EAAmB,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAC7E,OAAO,EAAsB,KAAK,qBAAqB,EAAE,MAAM,iCAAiC,CAAA;AAChG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAG9C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAExD,KAAK,OAAO,GAAG,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAA;AACtD,KAAK,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC,CAAA;AAElE;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,OAAO,EACZ,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,EAC9B,WAAW,EAAE,MAAM,IAAI,EACvB,KAAK,EAAE,OAAO,GACb,IAAI,CAUN;AAED,iHAAiH;AACjH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,SAAS,EAChB,IAAI,EAAE;IACJ,KAAK,EAAE;QAAE,OAAO,IAAI,OAAO,CAAA;KAAE,CAAA;IAC7B,OAAO,EAAE,qBAAqB,CAAA;IAC9B,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,GAAG,WAAW,CAAC,CAAA;IACzD,YAAY,EAAE,SAAS,eAAe,EAAE,CAAA;IACxC,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IAChF,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAA;CAC/B;uBA8DqB,IAAI;qBA4JE,OAAO,CAAC,IAAI,CAAC;sBA1EV,eAAe,sDAA0B,OAAO,CAAC,IAAI,CAAC;8BAuFpD,KAAK,CAAC,SAAS,CAAC,SAAS,YAAY,KAAG,IAAI;EA4B9E"}
|
|
@@ -2,6 +2,7 @@ import { t } from '../../i18n.js';
|
|
|
2
2
|
import { modeDisplayName } from '../../sessionModes.js';
|
|
3
3
|
import { assertShadowPolicy } from '../../adapter/kernel/runtime.js';
|
|
4
4
|
import { snapshotLiveSessionEvents } from '../compat/liveSession.js';
|
|
5
|
+
import { agentCapabilityEvidence, resolveAgentCapabilities } from './capabilities.js';
|
|
5
6
|
/**
|
|
6
7
|
* Fail-soft reporting for a session-mode write. The mutation path reaches
|
|
7
8
|
* kernel-owned state (`session.append`, `approval.setPolicy` → the agent
|
|
@@ -28,7 +29,11 @@ export function reportModeSwitchFailure(ctx, notify, refreshMode, error) {
|
|
|
28
29
|
}
|
|
29
30
|
/** Durable session-mode folds and transitions. Construction is inert; root wires it after state construction. */
|
|
30
31
|
export function createModeActions(ctx, state, deps) {
|
|
31
|
-
const { owner, runtime, binding, sessionModes,
|
|
32
|
+
const { owner, runtime, binding, sessionModes, executeRegistryCommand, notify } = deps;
|
|
33
|
+
/** `/plan` is registry-only: read the shared capability facts for the agent
|
|
34
|
+
* instead of this module keeping its own registry lookup (the same fact
|
|
35
|
+
* `/plan` dispatch and the command-list annotation use). */
|
|
36
|
+
const planRoute = (agent) => resolveAgentCapabilities(agentCapabilityEvidence(ctx, agent)).plan.route;
|
|
32
37
|
const current = (capture) => owner.current() && binding.isCurrent(capture);
|
|
33
38
|
const capturedSession = (capture) => capture.agent.session;
|
|
34
39
|
// Session-mode folds: last-wins projections over the session log. The
|
|
@@ -188,7 +193,7 @@ export function createModeActions(ctx, state, deps) {
|
|
|
188
193
|
explicitPlanExits.delete(session);
|
|
189
194
|
}
|
|
190
195
|
if (spec.plan !== undefined && (planMode?.get?.(agent).pending ?? planActive) !== spec.plan) {
|
|
191
|
-
if (
|
|
196
|
+
if (planRoute(agent) === 'none') {
|
|
192
197
|
notify(t('mode-plan-unavailable'), { color: 'warning' });
|
|
193
198
|
return;
|
|
194
199
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Context } from '@deepseek-ai/cordis';
|
|
2
|
+
import type { Agent } from '@deepseek-ai/dsh-agent';
|
|
2
3
|
import { type SessionModeSpec } from '../../sessionModes.js';
|
|
3
4
|
import type { createChannelBinding } from './binding.js';
|
|
4
5
|
import { createModeActions } from './mode-actions.js';
|
|
@@ -21,8 +22,14 @@ type BaseModeActionDeps = Parameters<typeof createModeActions>[2];
|
|
|
21
22
|
* `createBindingEvents` can consume it unchanged, plus
|
|
22
23
|
* `runPermissionPreset` for the public `ChannelUi` surface.
|
|
23
24
|
*/
|
|
24
|
-
export declare function createPermissionModeActions(ctx: Context, state: ModeState, deps: Pick<BaseModeActionDeps, 'owner' | 'runtime' | 'binding' | 'sessionModes' | '
|
|
25
|
+
export declare function createPermissionModeActions(ctx: Context, state: ModeState, deps: Pick<BaseModeActionDeps, 'owner' | 'runtime' | 'binding' | 'sessionModes' | 'executeRegistryCommand' | 'notify'> & {
|
|
25
26
|
roster: PermissionModeRoster;
|
|
27
|
+
/** Only the permission identity reads the registry directly (#755 is the
|
|
28
|
+
* authoritative design for `/permission`); the plan route comes from the
|
|
29
|
+
* shared capability facts inside `createModeActions`. */
|
|
30
|
+
commandService?: {
|
|
31
|
+
find(agent: Agent, name: string): unknown;
|
|
32
|
+
};
|
|
26
33
|
}): {
|
|
27
34
|
refreshMode(): void;
|
|
28
35
|
cycleMode(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mode-permission-actions.d.ts","sourceRoot":"","sources":["../../../../src/dsh-adapter/channel/mode-permission-actions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"mode-permission-actions.d.ts","sourceRoot":"","sources":["../../../../src/dsh-adapter/channel/mode-permission-actions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAInD,OAAO,EAAmB,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAE7E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AACxD,OAAO,EAAE,iBAAiB,EAA2B,MAAM,mBAAmB,CAAA;AAC9E,OAAO,EAAkD,KAAK,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAC9G,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE9C,KAAK,OAAO,GAAG,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAA;AACtD,KAAK,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC,CAAA;AAClE,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAA;AACjD;gDACgD;AAChD,KAAK,kBAAkB,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAA;AAmEjE;;;;;;;;;GASG;AACH,wBAAgB,2BAA2B,CACzC,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,SAAS,EAChB,IAAI,EAAE,IAAI,CACR,kBAAkB,EAClB,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,cAAc,GAAG,wBAAwB,GAAG,QAAQ,CACvF,GAAG;IACF,MAAM,EAAE,oBAAoB,CAAA;IAC5B;;8DAE0D;IAC1D,cAAc,CAAC,EAAE;QAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAA;CAC/D,GACA;IACD,WAAW,IAAI,IAAI,CAAA;IACnB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1B,SAAS,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACtE,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAAA;IACtD,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACnD,UAAU,EAAE,kBAAkB,CAAA;CAC/B,CAqIA"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { ChannelState } from '../channel/types.js';
|
|
2
|
-
export declare function createPreferences(getState: () => Pick<ChannelState, 'diffLayout' | 'thinkingFold' | 'toolBackground' | 'scrollGutter' | 'pageMargin' | 'foldTerminalCommand' | 'promptSessionLabel' | 'expandEditor' | 'smoothStreaming' | 'statusBar' | 'whale' | 'whaleIdle' | 'whaleGirl' | 'splashFont' | 'minimalUi' | 'emit'>): Pick<ChannelState, 'setDiffLayout' | 'setThinkingFold' | 'setToolBackground' | 'setScrollGutter' | 'setPageMargin' | 'setFoldTerminalCommand' | 'setPromptSessionLabel' | 'setExpandEditor' | 'setSmoothStreaming' | 'setStatusBar' | 'setWhale' | 'setWhaleIdle' | 'setWhaleGirl' | 'setSplashFont' | 'setMinimalUi' | 'setMinimal'>;
|
|
2
|
+
export declare function createPreferences(getState: () => Pick<ChannelState, 'diffLayout' | 'thinkingFold' | 'jobGroupFold' | 'toolBackground' | 'scrollGutter' | 'pageMargin' | 'foldTerminalCommand' | 'promptSessionLabel' | 'expandEditor' | 'smoothStreaming' | 'statusBar' | 'whale' | 'whaleIdle' | 'whaleGirl' | 'splashFont' | 'minimalUi' | 'emit'>): Pick<ChannelState, 'setDiffLayout' | 'setThinkingFold' | 'setJobGroupFold' | 'setToolBackground' | 'setScrollGutter' | 'setPageMargin' | 'setFoldTerminalCommand' | 'setPromptSessionLabel' | 'setExpandEditor' | 'setSmoothStreaming' | 'setStatusBar' | 'setWhale' | 'setWhaleIdle' | 'setWhaleGirl' | 'setSplashFont' | 'setMinimalUi' | 'setMinimal'>;
|
|
3
3
|
//# sourceMappingURL=preferences.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preferences.d.ts","sourceRoot":"","sources":["../../../../src/dsh-adapter/channel/preferences.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAYvD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,YAAY,EAAE,YAAY,GAAG,cAAc,GAAG,gBAAgB,GAAG,cAAc,GAAG,YAAY,GAAG,qBAAqB,GAAG,oBAAoB,GAAG,cAAc,GAAG,iBAAiB,GAAG,WAAW,GAAG,OAAO,GAAG,WAAW,GAAG,WAAW,GAAG,YAAY,GAAG,WAAW,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,eAAe,GAAG,iBAAiB,GAAG,mBAAmB,GAAG,iBAAiB,GAAG,eAAe,GAAG,wBAAwB,GAAG,uBAAuB,GAAG,iBAAiB,GAAG,oBAAoB,GAAG,cAAc,GAAG,UAAU,GAAG,cAAc,GAAG,cAAc,GAAG,eAAe,GAAG,cAAc,GAAG,YAAY,CAAC,
|
|
1
|
+
{"version":3,"file":"preferences.d.ts","sourceRoot":"","sources":["../../../../src/dsh-adapter/channel/preferences.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAYvD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,YAAY,EAAE,YAAY,GAAG,cAAc,GAAG,cAAc,GAAG,gBAAgB,GAAG,cAAc,GAAG,YAAY,GAAG,qBAAqB,GAAG,oBAAoB,GAAG,cAAc,GAAG,iBAAiB,GAAG,WAAW,GAAG,OAAO,GAAG,WAAW,GAAG,WAAW,GAAG,YAAY,GAAG,WAAW,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE,eAAe,GAAG,iBAAiB,GAAG,iBAAiB,GAAG,mBAAmB,GAAG,iBAAiB,GAAG,eAAe,GAAG,wBAAwB,GAAG,uBAAuB,GAAG,iBAAiB,GAAG,oBAAoB,GAAG,cAAc,GAAG,UAAU,GAAG,cAAc,GAAG,cAAc,GAAG,eAAe,GAAG,cAAc,GAAG,YAAY,CAAC,CA+HhrB"}
|