@deepseek-harness-tui/dsh-tui 0.11.2 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +60 -8
- package/assets/deepy/README.md +60 -0
- package/assets/deepy/frames.json +1 -0
- package/assets/whale-girl/whale-girl-happy.png +0 -0
- package/assets/whaleGirl/README.md +7 -0
- package/assets/whaleGirl/frames.json +1 -0
- package/assets/whaleGirl/img/building/00.png +0 -0
- package/assets/whaleGirl/img/building/01.png +0 -0
- package/assets/whaleGirl/img/building/02.png +0 -0
- package/assets/whaleGirl/img/building/03.png +0 -0
- package/assets/whaleGirl/img/building/04.png +0 -0
- package/assets/whaleGirl/img/building/05.png +0 -0
- package/assets/whaleGirl/img/building/06.png +0 -0
- package/assets/whaleGirl/img/building/07.png +0 -0
- package/assets/whaleGirl/img/building/08.png +0 -0
- package/assets/whaleGirl/img/building/09.png +0 -0
- package/assets/whaleGirl/img/building/10.png +0 -0
- package/assets/whaleGirl/img/building/11.png +0 -0
- package/assets/whaleGirl/img/building/12.png +0 -0
- package/assets/whaleGirl/img/building/13.png +0 -0
- package/assets/whaleGirl/img/building/14.png +0 -0
- package/assets/whaleGirl/img/building/15.png +0 -0
- package/assets/whaleGirl/img/building/16.png +0 -0
- package/assets/whaleGirl/img/building/17.png +0 -0
- package/assets/whaleGirl/img/building/18.png +0 -0
- package/assets/whaleGirl/img/building/19.png +0 -0
- package/assets/whaleGirl/img/building/20.png +0 -0
- package/assets/whaleGirl/img/building/21.png +0 -0
- package/assets/whaleGirl/img/building/22.png +0 -0
- package/assets/whaleGirl/img/building/23.png +0 -0
- package/assets/whaleGirl/img/carrying/00.png +0 -0
- package/assets/whaleGirl/img/carrying/01.png +0 -0
- package/assets/whaleGirl/img/carrying/02.png +0 -0
- package/assets/whaleGirl/img/carrying/03.png +0 -0
- package/assets/whaleGirl/img/carrying/04.png +0 -0
- package/assets/whaleGirl/img/carrying/05.png +0 -0
- package/assets/whaleGirl/img/carrying/06.png +0 -0
- package/assets/whaleGirl/img/carrying/07.png +0 -0
- package/assets/whaleGirl/img/compacting/00.png +0 -0
- package/assets/whaleGirl/img/compacting/01.png +0 -0
- package/assets/whaleGirl/img/compacting/02.png +0 -0
- package/assets/whaleGirl/img/compacting/03.png +0 -0
- package/assets/whaleGirl/img/compacting/04.png +0 -0
- package/assets/whaleGirl/img/compacting/05.png +0 -0
- package/assets/whaleGirl/img/compacting/06.png +0 -0
- package/assets/whaleGirl/img/compacting/07.png +0 -0
- package/assets/whaleGirl/img/compacting/08.png +0 -0
- package/assets/whaleGirl/img/compacting/09.png +0 -0
- package/assets/whaleGirl/img/conducting/00.png +0 -0
- package/assets/whaleGirl/img/conducting/01.png +0 -0
- package/assets/whaleGirl/img/conducting/02.png +0 -0
- package/assets/whaleGirl/img/conducting/03.png +0 -0
- package/assets/whaleGirl/img/conducting/04.png +0 -0
- package/assets/whaleGirl/img/conducting/05.png +0 -0
- package/assets/whaleGirl/img/conducting/06.png +0 -0
- package/assets/whaleGirl/img/conducting/07.png +0 -0
- package/assets/whaleGirl/img/conducting/08.png +0 -0
- package/assets/whaleGirl/img/conducting/09.png +0 -0
- package/assets/whaleGirl/img/conducting/10.png +0 -0
- package/assets/whaleGirl/img/conducting/11.png +0 -0
- package/assets/whaleGirl/img/drag/00.png +0 -0
- package/assets/whaleGirl/img/drag/01.png +0 -0
- package/assets/whaleGirl/img/drag/02.png +0 -0
- package/assets/whaleGirl/img/drag/03.png +0 -0
- package/assets/whaleGirl/img/drag/04.png +0 -0
- package/assets/whaleGirl/img/drag/05.png +0 -0
- package/assets/whaleGirl/img/drag/06.png +0 -0
- package/assets/whaleGirl/img/drag/07.png +0 -0
- package/assets/whaleGirl/img/drag/08.png +0 -0
- package/assets/whaleGirl/img/drag/09.png +0 -0
- package/assets/whaleGirl/img/error/00.png +0 -0
- package/assets/whaleGirl/img/error/01.png +0 -0
- package/assets/whaleGirl/img/error/02.png +0 -0
- package/assets/whaleGirl/img/error/03.png +0 -0
- package/assets/whaleGirl/img/error/04.png +0 -0
- package/assets/whaleGirl/img/error/05.png +0 -0
- package/assets/whaleGirl/img/error/06.png +0 -0
- package/assets/whaleGirl/img/error/07.png +0 -0
- package/assets/whaleGirl/img/error/08.png +0 -0
- package/assets/whaleGirl/img/error/09.png +0 -0
- package/assets/whaleGirl/img/happy/00.png +0 -0
- package/assets/whaleGirl/img/happy/01.png +0 -0
- package/assets/whaleGirl/img/happy/02.png +0 -0
- package/assets/whaleGirl/img/happy/03.png +0 -0
- package/assets/whaleGirl/img/happy/04.png +0 -0
- package/assets/whaleGirl/img/happy/05.png +0 -0
- package/assets/whaleGirl/img/happy/06.png +0 -0
- package/assets/whaleGirl/img/happy/07.png +0 -0
- package/assets/whaleGirl/img/happy/08.png +0 -0
- package/assets/whaleGirl/img/happy/09.png +0 -0
- package/assets/whaleGirl/img/happy/10.png +0 -0
- package/assets/whaleGirl/img/idle/00.png +0 -0
- package/assets/whaleGirl/img/idle/01.png +0 -0
- package/assets/whaleGirl/img/idle/02.png +0 -0
- package/assets/whaleGirl/img/idle/03.png +0 -0
- package/assets/whaleGirl/img/idle/04.png +0 -0
- package/assets/whaleGirl/img/idle/05.png +0 -0
- package/assets/whaleGirl/img/idle/06.png +0 -0
- package/assets/whaleGirl/img/idle/07.png +0 -0
- package/assets/whaleGirl/img/idle/08.png +0 -0
- package/assets/whaleGirl/img/idle/09.png +0 -0
- package/assets/whaleGirl/img/idle/10.png +0 -0
- package/assets/whaleGirl/img/idle/11.png +0 -0
- package/assets/whaleGirl/img/idle/12.png +0 -0
- package/assets/whaleGirl/img/idle/13.png +0 -0
- package/assets/whaleGirl/img/idle/14.png +0 -0
- package/assets/whaleGirl/img/idle/15.png +0 -0
- package/assets/whaleGirl/img/idle/16.png +0 -0
- package/assets/whaleGirl/img/idle/17.png +0 -0
- package/assets/whaleGirl/img/idle/18.png +0 -0
- package/assets/whaleGirl/img/idle/19.png +0 -0
- package/assets/whaleGirl/img/idle/20.png +0 -0
- package/assets/whaleGirl/img/idle-look/00.png +0 -0
- package/assets/whaleGirl/img/idle-look/01.png +0 -0
- package/assets/whaleGirl/img/idle-look/02.png +0 -0
- package/assets/whaleGirl/img/idle-look/03.png +0 -0
- package/assets/whaleGirl/img/idle-look/04.png +0 -0
- package/assets/whaleGirl/img/idle-look/05.png +0 -0
- package/assets/whaleGirl/img/idle-look/06.png +0 -0
- package/assets/whaleGirl/img/idle-look/07.png +0 -0
- package/assets/whaleGirl/img/idle-look/08.png +0 -0
- package/assets/whaleGirl/img/idle-look/09.png +0 -0
- package/assets/whaleGirl/img/idle-look/10.png +0 -0
- package/assets/whaleGirl/img/idle-look/11.png +0 -0
- package/assets/whaleGirl/img/idle-look/12.png +0 -0
- package/assets/whaleGirl/img/idle-spout/00.png +0 -0
- package/assets/whaleGirl/img/idle-spout/01.png +0 -0
- package/assets/whaleGirl/img/idle-spout/02.png +0 -0
- package/assets/whaleGirl/img/idle-spout/03.png +0 -0
- package/assets/whaleGirl/img/idle-spout/04.png +0 -0
- package/assets/whaleGirl/img/idle-spout/05.png +0 -0
- package/assets/whaleGirl/img/idle-spout/06.png +0 -0
- package/assets/whaleGirl/img/idle-spout/07.png +0 -0
- package/assets/whaleGirl/img/idle-spout/08.png +0 -0
- package/assets/whaleGirl/img/idle-spout/09.png +0 -0
- package/assets/whaleGirl/img/idle-spout/10.png +0 -0
- package/assets/whaleGirl/img/music/00.png +0 -0
- package/assets/whaleGirl/img/music/01.png +0 -0
- package/assets/whaleGirl/img/music/02.png +0 -0
- package/assets/whaleGirl/img/music/03.png +0 -0
- package/assets/whaleGirl/img/music/04.png +0 -0
- package/assets/whaleGirl/img/music/05.png +0 -0
- package/assets/whaleGirl/img/music/06.png +0 -0
- package/assets/whaleGirl/img/music/07.png +0 -0
- package/assets/whaleGirl/img/notification/00.png +0 -0
- package/assets/whaleGirl/img/notification/01.png +0 -0
- package/assets/whaleGirl/img/notification/02.png +0 -0
- package/assets/whaleGirl/img/notification/03.png +0 -0
- package/assets/whaleGirl/img/notification/04.png +0 -0
- package/assets/whaleGirl/img/notification/05.png +0 -0
- package/assets/whaleGirl/img/notification/06.png +0 -0
- package/assets/whaleGirl/img/notification/07.png +0 -0
- package/assets/whaleGirl/img/poke-left/00.png +0 -0
- package/assets/whaleGirl/img/poke-left/01.png +0 -0
- package/assets/whaleGirl/img/poke-left/02.png +0 -0
- package/assets/whaleGirl/img/poke-left/03.png +0 -0
- package/assets/whaleGirl/img/poke-left/04.png +0 -0
- package/assets/whaleGirl/img/poke-left/05.png +0 -0
- package/assets/whaleGirl/img/poke-left/06.png +0 -0
- package/assets/whaleGirl/img/poke-left/07.png +0 -0
- package/assets/whaleGirl/img/poke-left/08.png +0 -0
- package/assets/whaleGirl/img/poke-left/09.png +0 -0
- package/assets/whaleGirl/img/poke-left/10.png +0 -0
- package/assets/whaleGirl/img/poke-right/00.png +0 -0
- package/assets/whaleGirl/img/poke-right/01.png +0 -0
- package/assets/whaleGirl/img/poke-right/02.png +0 -0
- package/assets/whaleGirl/img/poke-right/03.png +0 -0
- package/assets/whaleGirl/img/poke-right/04.png +0 -0
- package/assets/whaleGirl/img/poke-right/05.png +0 -0
- package/assets/whaleGirl/img/poke-right/06.png +0 -0
- package/assets/whaleGirl/img/poke-right/07.png +0 -0
- package/assets/whaleGirl/img/poke-right/08.png +0 -0
- package/assets/whaleGirl/img/poke-right/09.png +0 -0
- package/assets/whaleGirl/img/poke-right/10.png +0 -0
- package/assets/whaleGirl/img/sleeping/00.png +0 -0
- package/assets/whaleGirl/img/sleeping/01.png +0 -0
- package/assets/whaleGirl/img/sleeping/02.png +0 -0
- package/assets/whaleGirl/img/sleeping/03.png +0 -0
- package/assets/whaleGirl/img/sleeping/04.png +0 -0
- package/assets/whaleGirl/img/sleeping/05.png +0 -0
- package/assets/whaleGirl/img/smile-hearts/00.png +0 -0
- package/assets/whaleGirl/img/smile-hearts/01.png +0 -0
- package/assets/whaleGirl/img/smile-hearts/02.png +0 -0
- package/assets/whaleGirl/img/smile-hearts/03.png +0 -0
- package/assets/whaleGirl/img/smile-hearts/04.png +0 -0
- package/assets/whaleGirl/img/smile-hearts/05.png +0 -0
- package/assets/whaleGirl/img/smile-hearts/06.png +0 -0
- package/assets/whaleGirl/img/smile-hearts/07.png +0 -0
- package/assets/whaleGirl/img/smile-hearts/08.png +0 -0
- package/assets/whaleGirl/img/smile-hearts/09.png +0 -0
- package/assets/whaleGirl/img/smile-hearts/10.png +0 -0
- package/assets/whaleGirl/img/smile-hearts/11.png +0 -0
- package/assets/whaleGirl/img/smile-hearts/12.png +0 -0
- package/assets/whaleGirl/img/smile-hearts/13.png +0 -0
- package/assets/whaleGirl/img/smile-hearts/14.png +0 -0
- package/assets/whaleGirl/img/smile-hearts/15.png +0 -0
- package/assets/whaleGirl/img/swim/00.png +0 -0
- package/assets/whaleGirl/img/swim/01.png +0 -0
- package/assets/whaleGirl/img/swim/02.png +0 -0
- package/assets/whaleGirl/img/swim/03.png +0 -0
- package/assets/whaleGirl/img/swim/04.png +0 -0
- package/assets/whaleGirl/img/swim/05.png +0 -0
- package/assets/whaleGirl/img/swim/06.png +0 -0
- package/assets/whaleGirl/img/swim/07.png +0 -0
- package/assets/whaleGirl/img/thinking/00.png +0 -0
- package/assets/whaleGirl/img/thinking/01.png +0 -0
- package/assets/whaleGirl/img/thinking/02.png +0 -0
- package/assets/whaleGirl/img/thinking/03.png +0 -0
- package/assets/whaleGirl/img/thinking/04.png +0 -0
- package/assets/whaleGirl/img/thinking/05.png +0 -0
- package/assets/whaleGirl/img/thinking/06.png +0 -0
- package/assets/whaleGirl/img/thinking/07.png +0 -0
- package/assets/whaleGirl/img/thinking/08.png +0 -0
- package/assets/whaleGirl/img/thinking/09.png +0 -0
- package/assets/whaleGirl/img/thinking/10.png +0 -0
- package/assets/whaleGirl/img/thinking/11.png +0 -0
- package/assets/whaleGirl/img/thinking/12.png +0 -0
- package/assets/whaleGirl/img/thinking/13.png +0 -0
- package/assets/whaleGirl/img/thinking/14.png +0 -0
- package/assets/whaleGirl/img/thinking/15.png +0 -0
- package/assets/whaleGirl/img/thinking/16.png +0 -0
- package/assets/whaleGirl/img/thumbs-up/00.png +0 -0
- package/assets/whaleGirl/img/thumbs-up/01.png +0 -0
- package/assets/whaleGirl/img/thumbs-up/02.png +0 -0
- package/assets/whaleGirl/img/thumbs-up/03.png +0 -0
- package/assets/whaleGirl/img/thumbs-up/04.png +0 -0
- package/assets/whaleGirl/img/thumbs-up/05.png +0 -0
- package/assets/whaleGirl/img/thumbs-up/06.png +0 -0
- package/assets/whaleGirl/img/thumbs-up/07.png +0 -0
- package/assets/whaleGirl/img/thumbs-up/08.png +0 -0
- package/assets/whaleGirl/img/thumbs-up/09.png +0 -0
- package/assets/whaleGirl/img/thumbs-up/10.png +0 -0
- package/assets/whaleGirl/img/thumbs-up/11.png +0 -0
- package/assets/whaleGirl/img/thumbs-up/12.png +0 -0
- package/assets/whaleGirl/img/tickle/00.png +0 -0
- package/assets/whaleGirl/img/tickle/01.png +0 -0
- package/assets/whaleGirl/img/tickle/02.png +0 -0
- package/assets/whaleGirl/img/tickle/03.png +0 -0
- package/assets/whaleGirl/img/tickle/04.png +0 -0
- package/assets/whaleGirl/img/tickle/05.png +0 -0
- package/assets/whaleGirl/img/tickle/06.png +0 -0
- package/assets/whaleGirl/img/tickle/07.png +0 -0
- package/assets/whaleGirl/img/tickle/08.png +0 -0
- package/assets/whaleGirl/img/tickle/09.png +0 -0
- package/assets/whaleGirl/img/tickle/10.png +0 -0
- package/assets/whaleGirl/img/tickle/11.png +0 -0
- package/assets/whaleGirl/img/tickle/12.png +0 -0
- package/assets/whaleGirl/img/tickle/13.png +0 -0
- package/assets/whaleGirl/img/timings.json +1 -0
- package/assets/whaleGirl/img/typing/00.png +0 -0
- package/assets/whaleGirl/img/typing/01.png +0 -0
- package/assets/whaleGirl/img/typing/02.png +0 -0
- package/assets/whaleGirl/img/typing/03.png +0 -0
- package/assets/whaleGirl/img/typing/04.png +0 -0
- package/assets/whaleGirl/img/typing/05.png +0 -0
- package/assets/whaleGirl/img/typing/06.png +0 -0
- package/assets/whaleGirl/img/typing/07.png +0 -0
- package/assets/whaleGirl/img/typing/08.png +0 -0
- package/assets/whaleGirl/img/typing/09.png +0 -0
- package/assets/whaleGirl/img/typing/10.png +0 -0
- package/assets/whaleGirl/img/typing/11.png +0 -0
- package/assets/whaleGirl/img/typing/12.png +0 -0
- package/assets/whaleGirl/img/typing/13.png +0 -0
- package/assets/whaleGirl/img/waking/00.png +0 -0
- package/assets/whaleGirl/img/waking/01.png +0 -0
- package/assets/whaleGirl/img/waking/02.png +0 -0
- package/assets/whaleGirl/img/waking/03.png +0 -0
- package/assets/whaleGirl/img/waking/04.png +0 -0
- package/assets/whaleGirl/img/waking/05.png +0 -0
- package/assets/whaleGirl/img/waking/06.png +0 -0
- package/assets/whaleGirl/img/waking/07.png +0 -0
- package/assets/whaleGirl/img/waking/08.png +0 -0
- package/assets/whaleGirl/img/waking/09.png +0 -0
- package/assets/whaleGirl/img/waking/10.png +0 -0
- package/bin/dsh-tui.js +38 -6
- package/cordis.patch.yml +31 -6
- package/guide/dsh-tui-guide/SKILL.md +37 -0
- package/guide/dsh-tui-guide/configuration.en.md +415 -0
- package/guide/dsh-tui-guide/configuration.md +354 -0
- package/guide/dsh-tui-guide/getting-started.en.md +401 -0
- package/guide/dsh-tui-guide/getting-started.md +399 -0
- package/guide/dsh-tui-guide/interaction.en.md +738 -0
- package/guide/dsh-tui-guide/interaction.md +793 -0
- package/guide/dsh-tui-guide/migrate.en.md +166 -0
- package/guide/dsh-tui-guide/migrate.md +132 -0
- package/guide/dsh-tui-guide/plugins.en.md +78 -0
- package/guide/dsh-tui-guide/plugins.md +64 -0
- package/guide/dsh-tui-guide/themes.en.md +197 -0
- package/guide/dsh-tui-guide/themes.md +188 -0
- package/guide/dsh-tui-guide/user-guide.en.md +711 -0
- package/guide/dsh-tui-guide/user-guide.md +666 -0
- package/guide/dsh-tui-guide/vscode.en.md +301 -0
- package/guide/dsh-tui-guide/vscode.md +272 -0
- package/lib/settings.json +219 -5
- package/lib/types/adapter/channel/ui-policy.d.ts +7 -2
- package/lib/types/adapter/channel/ui-policy.d.ts.map +1 -1
- package/lib/types/adapter/channel/ui-policy.js +18 -1
- package/lib/types/adapter/index.d.ts +1 -1
- package/lib/types/adapter/index.js +1 -1
- package/lib/types/adapter/kernel/host-facade.d.ts +4 -1
- package/lib/types/adapter/kernel/host-facade.d.ts.map +1 -1
- package/lib/types/adapter/kernel/host-facade.js +8 -1
- package/lib/types/adapter/kernel/runtime.d.ts.map +1 -1
- package/lib/types/adapter/kernel/runtime.js +13 -0
- package/lib/types/adapter/kernel/slices/index.d.ts +1 -0
- package/lib/types/adapter/kernel/slices/index.d.ts.map +1 -1
- package/lib/types/adapter/kernel/slices/index.js +3 -0
- package/lib/types/adapter/kernel/slices/panels.d.ts +3 -0
- package/lib/types/adapter/kernel/slices/panels.d.ts.map +1 -0
- package/lib/types/adapter/kernel/slices/panels.js +14 -0
- package/lib/types/adapter/ports/channel-capabilities.d.ts +48 -0
- package/lib/types/adapter/ports/channel-capabilities.d.ts.map +1 -0
- package/lib/types/adapter/ports/channel-capabilities.js +2 -0
- package/lib/types/adapter/ports/channel-catalog.d.ts +7 -0
- package/lib/types/adapter/ports/channel-catalog.d.ts.map +1 -1
- package/lib/types/adapter/ports/channel-display.d.ts +10 -0
- package/lib/types/adapter/ports/channel-display.d.ts.map +1 -1
- package/lib/types/adapter/ports/channel-settings.d.ts +2 -1
- package/lib/types/adapter/ports/channel-settings.d.ts.map +1 -1
- package/lib/types/adapter/ports/channel-ui.d.ts +91 -4
- package/lib/types/adapter/ports/channel-ui.d.ts.map +1 -1
- package/lib/types/adapter/ports/channel-view.d.ts +137 -9
- package/lib/types/adapter/ports/channel-view.d.ts.map +1 -1
- package/lib/types/adapter/ports/channel.d.ts +1 -1
- package/lib/types/adapter/ports/channel.js +1 -1
- package/lib/types/adapter/ports/descriptor.d.ts +1 -1
- package/lib/types/adapter/ports/descriptor.js +1 -1
- package/lib/types/adapter/ports/index.d.ts +1 -1
- package/lib/types/adapter/ports/index.js +1 -1
- package/lib/types/adapter/ports/panels.d.ts +28 -0
- package/lib/types/adapter/ports/panels.d.ts.map +1 -0
- package/lib/types/adapter/ports/panels.js +8 -0
- package/lib/types/adapter/ports/workspace.d.ts +1 -1
- package/lib/types/adapter/ports/workspace.js +1 -1
- package/lib/types/adapter/spec/index.d.ts +2 -2
- package/lib/types/adapter/spec/index.js +2 -2
- package/lib/types/adapter/spec/profile.d.ts +6 -6
- package/lib/types/adapter/spec/profile.d.ts.map +1 -1
- package/lib/types/adapter/spec/profile.js +6 -6
- package/lib/types/adapter/spec/protocol-constants.d.ts +3 -3
- package/lib/types/adapter/spec/protocol-constants.d.ts.map +1 -1
- package/lib/types/adapter/spec/protocol-constants.js +5 -5
- package/lib/types/adapter/spec/tui-contributions.d.ts +4 -4
- package/lib/types/adapter/spec/tui-contributions.d.ts.map +1 -1
- package/lib/types/adapter/spec/tui-contributions.js +5 -5
- package/lib/types/adapter/standard/descriptor.js +1 -1
- package/lib/types/adapter/standard/index.d.ts +3 -3
- package/lib/types/adapter/standard/index.js +3 -3
- package/lib/types/adapter/standard/registry.d.ts +3 -2
- package/lib/types/adapter/standard/registry.d.ts.map +1 -1
- package/lib/types/adapter/standard/registry.js +6 -5
- package/lib/types/adapter/standard/tui-extension.d.ts +1 -1
- package/lib/types/adapter/standard/tui-extension.js +1 -1
- package/lib/types/adapter/upstream/index.d.ts +1 -0
- package/lib/types/adapter/upstream/index.d.ts.map +1 -1
- package/lib/types/adapter/upstream/index.js +1 -0
- package/lib/types/adapter/upstream/panels-driver.d.ts +18 -0
- package/lib/types/adapter/upstream/panels-driver.d.ts.map +1 -0
- package/lib/types/adapter/upstream/panels-driver.js +159 -0
- package/lib/types/api.d.ts +2 -0
- package/lib/types/api.d.ts.map +1 -1
- package/lib/types/api.js +3 -1
- package/lib/types/commands.d.ts.map +1 -1
- package/lib/types/commands.js +12 -4
- package/lib/types/components/ActivityLine.d.ts +6 -9
- package/lib/types/components/ActivityLine.d.ts.map +1 -1
- package/lib/types/components/ActivityLine.js +7 -8
- package/lib/types/components/Chat/JobCard.d.ts +27 -1
- package/lib/types/components/Chat/JobCard.d.ts.map +1 -1
- package/lib/types/components/Chat/JobCard.js +128 -33
- package/lib/types/components/Chat/JobGroupHeader.d.ts +27 -0
- package/lib/types/components/Chat/JobGroupHeader.d.ts.map +1 -0
- package/lib/types/components/Chat/JobGroupHeader.js +62 -0
- package/lib/types/components/Chat/SubagentMessage.js +6 -6
- package/lib/types/components/GoalTodoPanel.d.ts +13 -1
- package/lib/types/components/GoalTodoPanel.d.ts.map +1 -1
- package/lib/types/components/GoalTodoPanel.js +55 -14
- package/lib/types/components/JobsPanel.d.ts +42 -2
- package/lib/types/components/JobsPanel.d.ts.map +1 -1
- package/lib/types/components/JobsPanel.js +220 -40
- package/lib/types/components/LogoV2.d.ts +43 -3
- package/lib/types/components/LogoV2.d.ts.map +1 -1
- package/lib/types/components/LogoV2.js +42 -15
- package/lib/types/components/MessageList.d.ts +8 -2
- package/lib/types/components/MessageList.d.ts.map +1 -1
- package/lib/types/components/MessageList.js +215 -21
- package/lib/types/components/OverlayAbove.d.ts +11 -1
- package/lib/types/components/OverlayAbove.d.ts.map +1 -1
- package/lib/types/components/OverlayAbove.js +2 -12
- package/lib/types/components/PageMargin.d.ts.map +1 -1
- package/lib/types/components/PageMargin.js +3 -1
- package/lib/types/components/PluginSceneBoundary.d.ts +1 -1
- package/lib/types/components/PluginSceneBoundary.js +1 -1
- package/lib/types/components/PresetPicker.d.ts +4 -0
- package/lib/types/components/PresetPicker.d.ts.map +1 -1
- package/lib/types/components/PresetPicker.js +5 -1
- package/lib/types/components/PromptInput.d.ts +20 -22
- package/lib/types/components/PromptInput.d.ts.map +1 -1
- package/lib/types/components/PromptInput.js +425 -157
- package/lib/types/components/SearchBox.d.ts +22 -5
- package/lib/types/components/SearchBox.d.ts.map +1 -1
- package/lib/types/components/SearchBox.js +17 -13
- package/lib/types/components/StarPrompt.d.ts +6 -0
- package/lib/types/components/StarPrompt.d.ts.map +1 -1
- package/lib/types/components/StarPrompt.js +45 -0
- package/lib/types/components/SubagentCard.d.ts.map +1 -1
- package/lib/types/components/SubagentCard.js +24 -9
- package/lib/types/components/SubagentDashboard.d.ts +18 -3
- package/lib/types/components/SubagentDashboard.d.ts.map +1 -1
- package/lib/types/components/SubagentDashboard.js +53 -5
- package/lib/types/components/SubagentDetailScene.d.ts +7 -1
- package/lib/types/components/SubagentDetailScene.d.ts.map +1 -1
- package/lib/types/components/SubagentDetailScene.js +160 -13
- package/lib/types/components/SurfaceEdges.d.ts +21 -0
- package/lib/types/components/SurfaceEdges.d.ts.map +1 -0
- package/lib/types/components/SurfaceEdges.js +7 -0
- package/lib/types/components/ThemePicker.d.ts +9 -0
- package/lib/types/components/ThemePicker.d.ts.map +1 -1
- package/lib/types/components/ThemePicker.js +74 -10
- package/lib/types/components/ThemePreviewPane.d.ts +26 -0
- package/lib/types/components/ThemePreviewPane.d.ts.map +1 -0
- package/lib/types/components/ThemePreviewPane.js +99 -0
- package/lib/types/components/WhaleGirl.d.ts +6 -0
- package/lib/types/components/WhaleGirl.d.ts.map +1 -1
- package/lib/types/components/WhaleGirl.js +18 -0
- package/lib/types/components/design-system/Divider.d.ts.map +1 -1
- package/lib/types/components/design-system/Divider.js +14 -9
- package/lib/types/components/launchpadActions.d.ts +73 -0
- package/lib/types/components/launchpadActions.d.ts.map +1 -0
- package/lib/types/components/launchpadActions.js +111 -0
- package/lib/types/components/launchpadLayout.d.ts +62 -0
- package/lib/types/components/launchpadLayout.d.ts.map +1 -0
- package/lib/types/components/launchpadLayout.js +176 -0
- package/lib/types/components/messages/AssistantThinkingMessage.js +4 -4
- package/lib/types/components/onboardingModel.d.ts +83 -0
- package/lib/types/components/onboardingModel.d.ts.map +1 -0
- package/lib/types/components/onboardingModel.js +128 -0
- package/lib/types/components/sidePanel/InfoPanel.d.ts +17 -0
- package/lib/types/components/sidePanel/InfoPanel.d.ts.map +1 -0
- package/lib/types/components/sidePanel/InfoPanel.js +124 -0
- package/lib/types/components/sidePanel/PanelBar.d.ts +45 -0
- package/lib/types/components/sidePanel/PanelBar.d.ts.map +1 -0
- package/lib/types/components/sidePanel/PanelBar.js +104 -0
- package/lib/types/components/sidePanel/PanelErrorBoundary.d.ts +21 -0
- package/lib/types/components/sidePanel/PanelErrorBoundary.d.ts.map +1 -0
- package/lib/types/components/sidePanel/PanelErrorBoundary.js +30 -0
- package/lib/types/components/sidePanel/PanelHost.d.ts +36 -0
- package/lib/types/components/sidePanel/PanelHost.d.ts.map +1 -0
- package/lib/types/components/sidePanel/PanelHost.js +81 -0
- package/lib/types/components/sidePanel/PanelPicker.d.ts +24 -0
- package/lib/types/components/sidePanel/PanelPicker.d.ts.map +1 -0
- package/lib/types/components/sidePanel/PanelPicker.js +45 -0
- package/lib/types/components/sidePanel/PanelStore.d.ts +55 -0
- package/lib/types/components/sidePanel/PanelStore.d.ts.map +1 -0
- package/lib/types/components/sidePanel/PanelStore.js +109 -0
- package/lib/types/components/sidePanel/SidePanelColumn.d.ts +31 -0
- package/lib/types/components/sidePanel/SidePanelColumn.d.ts.map +1 -0
- package/lib/types/components/sidePanel/SidePanelColumn.js +70 -0
- package/lib/types/components/sidePanel/SidePanelLayout.d.ts +54 -0
- package/lib/types/components/sidePanel/SidePanelLayout.d.ts.map +1 -0
- package/lib/types/components/sidePanel/SidePanelLayout.js +81 -0
- package/lib/types/components/sidePanel/SidePanelRuntimeContext.d.ts +43 -0
- package/lib/types/components/sidePanel/SidePanelRuntimeContext.d.ts.map +1 -0
- package/lib/types/components/sidePanel/SidePanelRuntimeContext.js +26 -0
- package/lib/types/components/sidePanel/TrajectoryPanel.d.ts +7 -0
- package/lib/types/components/sidePanel/TrajectoryPanel.d.ts.map +1 -0
- package/lib/types/components/sidePanel/TrajectoryPanel.js +263 -0
- package/lib/types/components/sidePanel/WorkspacePanel.d.ts +4 -0
- package/lib/types/components/sidePanel/WorkspacePanel.d.ts.map +1 -0
- package/lib/types/components/sidePanel/WorkspacePanel.js +171 -0
- package/lib/types/components/sidePanel/builtinPanels.d.ts +3 -0
- package/lib/types/components/sidePanel/builtinPanels.d.ts.map +1 -0
- package/lib/types/components/sidePanel/builtinPanels.js +229 -0
- package/lib/types/components/sidePanel/companion/CompanionPanel.d.ts +53 -0
- package/lib/types/components/sidePanel/companion/CompanionPanel.d.ts.map +1 -0
- package/lib/types/components/sidePanel/companion/CompanionPanel.js +528 -0
- package/lib/types/components/sidePanel/companion/SplashMascot.d.ts +32 -0
- package/lib/types/components/sidePanel/companion/SplashMascot.d.ts.map +1 -0
- package/lib/types/components/sidePanel/companion/SplashMascot.js +103 -0
- package/lib/types/components/sidePanel/companion/deepy.d.ts +75 -0
- package/lib/types/components/sidePanel/companion/deepy.d.ts.map +1 -0
- package/lib/types/components/sidePanel/companion/deepy.js +222 -0
- package/lib/types/components/sidePanel/companion/mood.d.ts +176 -0
- package/lib/types/components/sidePanel/companion/mood.d.ts.map +1 -0
- package/lib/types/components/sidePanel/companion/mood.js +212 -0
- package/lib/types/components/sidePanel/companion/pose.d.ts +43 -0
- package/lib/types/components/sidePanel/companion/pose.d.ts.map +1 -0
- package/lib/types/components/sidePanel/companion/pose.js +34 -0
- package/lib/types/components/sidePanel/companion/skins.d.ts +102 -0
- package/lib/types/components/sidePanel/companion/skins.d.ts.map +1 -0
- package/lib/types/components/sidePanel/companion/skins.js +408 -0
- package/lib/types/components/sidePanel/dimensions.d.ts +60 -0
- package/lib/types/components/sidePanel/dimensions.d.ts.map +1 -0
- package/lib/types/components/sidePanel/dimensions.js +75 -0
- package/lib/types/components/sidePanel/jobsFocusStore.d.ts +21 -0
- package/lib/types/components/sidePanel/jobsFocusStore.d.ts.map +1 -0
- package/lib/types/components/sidePanel/jobsFocusStore.js +30 -0
- package/lib/types/components/sidePanel/panelBridge.d.ts +44 -0
- package/lib/types/components/sidePanel/panelBridge.d.ts.map +1 -0
- package/lib/types/components/sidePanel/panelBridge.js +55 -0
- package/lib/types/components/sidePanel/pluginPanelAdapter.d.ts +22 -0
- package/lib/types/components/sidePanel/pluginPanelAdapter.d.ts.map +1 -0
- package/lib/types/components/sidePanel/pluginPanelAdapter.js +148 -0
- package/lib/types/components/sidePanel/types.d.ts +110 -0
- package/lib/types/components/sidePanel/types.d.ts.map +1 -0
- package/lib/types/components/sidePanel/types.js +1 -0
- package/lib/types/components/sidePanel/usePanelInput.d.ts +5 -0
- package/lib/types/components/sidePanel/usePanelInput.d.ts.map +1 -0
- package/lib/types/components/sidePanel/usePanelInput.js +44 -0
- package/lib/types/components/sidePanel/useSidePanel.d.ts +47 -0
- package/lib/types/components/sidePanel/useSidePanel.d.ts.map +1 -0
- package/lib/types/components/sidePanel/useSidePanel.js +284 -0
- package/lib/types/components/trajectory/MiniWake.d.ts +11 -1
- package/lib/types/components/trajectory/MiniWake.d.ts.map +1 -1
- package/lib/types/components/trajectory/MiniWake.js +9 -3
- package/lib/types/components/workspaces/HomeWorkspaceRow.d.ts +3 -1
- package/lib/types/components/workspaces/HomeWorkspaceRow.d.ts.map +1 -1
- package/lib/types/components/workspaces/HomeWorkspaceRow.js +3 -2
- package/lib/types/deepseekPricing.d.ts +10 -9
- package/lib/types/deepseekPricing.d.ts.map +1 -1
- package/lib/types/deepseekPricing.js +18 -11
- package/lib/types/dsh-adapter/channel/attached-context.d.ts +58 -0
- package/lib/types/dsh-adapter/channel/attached-context.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/attached-context.js +109 -0
- package/lib/types/dsh-adapter/channel/binding-events.d.ts +6 -0
- package/lib/types/dsh-adapter/channel/binding-events.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/binding-events.js +43 -0
- package/lib/types/dsh-adapter/channel/capabilities.d.ts +82 -0
- package/lib/types/dsh-adapter/channel/capabilities.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/capabilities.js +165 -0
- package/lib/types/dsh-adapter/channel/command-completions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/command-completions.js +8 -0
- package/lib/types/dsh-adapter/channel/context-bookkeeping.d.ts +4 -12
- package/lib/types/dsh-adapter/channel/context-bookkeeping.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/context-bookkeeping.js +9 -4
- package/lib/types/dsh-adapter/channel/external-commands.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/external-commands.js +8 -2
- package/lib/types/dsh-adapter/channel/input-delivery.d.ts +13 -2
- package/lib/types/dsh-adapter/channel/input-delivery.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/input-delivery.js +18 -1
- package/lib/types/dsh-adapter/channel/job-projection.d.ts +1 -0
- package/lib/types/dsh-adapter/channel/job-projection.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/job-projection.js +88 -3
- package/lib/types/dsh-adapter/channel/mode-actions.d.ts +13 -3
- package/lib/types/dsh-adapter/channel/mode-actions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/mode-actions.js +55 -9
- package/lib/types/dsh-adapter/channel/mode-permission-actions.d.ts +8 -1
- package/lib/types/dsh-adapter/channel/mode-permission-actions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/mode-permission-actions.js +25 -10
- package/lib/types/dsh-adapter/channel/preferences.d.ts +1 -1
- package/lib/types/dsh-adapter/channel/preferences.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/preferences.js +26 -8
- package/lib/types/dsh-adapter/channel/projection.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/projection.js +42 -37
- package/lib/types/dsh-adapter/channel/reports.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/reports.js +13 -4
- package/lib/types/dsh-adapter/channel/session-reset.d.ts +5 -1
- package/lib/types/dsh-adapter/channel/session-reset.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/session-reset.js +1 -0
- package/lib/types/dsh-adapter/channel/state.d.ts +21 -3
- package/lib/types/dsh-adapter/channel/state.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/state.js +3 -2
- package/lib/types/dsh-adapter/channel/subagent-projection.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/subagent-projection.js +5 -0
- package/lib/types/dsh-adapter/channel/types.d.ts +1 -1
- package/lib/types/dsh-adapter/channel/types.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/usage.d.ts +18 -1
- package/lib/types/dsh-adapter/channel/usage.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/usage.js +97 -2
- package/lib/types/dsh-adapter/channel.d.ts +1 -1
- package/lib/types/dsh-adapter/channel.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel.js +72 -4
- package/lib/types/dsh-adapter/context-occupancy.d.ts +204 -0
- package/lib/types/dsh-adapter/context-occupancy.d.ts.map +1 -0
- package/lib/types/dsh-adapter/context-occupancy.js +299 -0
- package/lib/types/dsh-adapter/contract.d.ts +19 -4
- package/lib/types/dsh-adapter/contract.d.ts.map +1 -1
- package/lib/types/dsh-adapter/contract.js +33 -3
- package/lib/types/dsh-adapter/index.d.ts +32 -0
- package/lib/types/dsh-adapter/index.d.ts.map +1 -1
- package/lib/types/dsh-adapter/index.js +20 -1
- package/lib/types/dsh-adapter/jobs.d.ts +82 -16
- package/lib/types/dsh-adapter/jobs.d.ts.map +1 -1
- package/lib/types/dsh-adapter/jobs.js +104 -9
- package/lib/types/dsh-adapter/migrate/sessionize.d.ts.map +1 -1
- package/lib/types/dsh-adapter/migrate/sessionize.js +11 -12
- package/lib/types/dsh-adapter/oauth/bonus.d.ts +27 -0
- package/lib/types/dsh-adapter/oauth/bonus.d.ts.map +1 -0
- package/lib/types/dsh-adapter/oauth/bonus.js +69 -0
- package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/command.d.ts +2 -1
- package/lib/types/dsh-adapter/oauth/command.d.ts.map +1 -0
- package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/command.js +7 -4
- package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/credentials.d.ts +13 -10
- package/lib/types/dsh-adapter/oauth/credentials.d.ts.map +1 -0
- package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/credentials.js +61 -23
- package/lib/types/dsh-adapter/oauth/deepseek.d.ts +39 -0
- package/lib/types/dsh-adapter/oauth/deepseek.d.ts.map +1 -0
- package/lib/types/dsh-adapter/oauth/deepseek.js +189 -0
- package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/index.d.ts +24 -16
- package/lib/types/dsh-adapter/oauth/index.d.ts.map +1 -0
- package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/index.js +34 -20
- package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/interaction.d.ts +14 -12
- package/lib/types/dsh-adapter/oauth/interaction.d.ts.map +1 -0
- package/lib/types/dsh-adapter/oauth/interaction.js +283 -0
- package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/opener.d.ts +2 -1
- package/lib/types/dsh-adapter/oauth/opener.d.ts.map +1 -0
- package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/opener.js +1 -1
- package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/pi-ai.d.ts +10 -3
- package/lib/types/dsh-adapter/oauth/pi-ai.d.ts.map +1 -0
- package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/pi-ai.js +8 -3
- package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/profiles.d.ts +6 -3
- package/lib/types/dsh-adapter/oauth/profiles.d.ts.map +1 -0
- package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/profiles.js +11 -3
- package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/service.d.ts +14 -7
- package/lib/types/dsh-adapter/oauth/service.d.ts.map +1 -0
- package/{node_modules/@deepseek-harness-tui/dsh-auth/lib → lib/types/dsh-adapter/oauth}/service.js +82 -17
- package/lib/types/dsh-adapter/panel-runtime-registry.d.ts +39 -0
- package/lib/types/dsh-adapter/panel-runtime-registry.d.ts.map +1 -0
- package/lib/types/dsh-adapter/panel-runtime-registry.js +84 -0
- package/lib/types/dsh-adapter/panels.d.ts +251 -0
- package/lib/types/dsh-adapter/panels.d.ts.map +1 -0
- package/lib/types/dsh-adapter/panels.js +407 -0
- package/lib/types/dsh-adapter/plugin-host.js +1 -1
- package/lib/types/dsh-adapter/plugin.d.ts +25 -2
- package/lib/types/dsh-adapter/plugin.d.ts.map +1 -1
- package/lib/types/dsh-adapter/plugin.js +241 -44
- package/lib/types/dsh-adapter/presets.d.ts +26 -4
- package/lib/types/dsh-adapter/presets.d.ts.map +1 -1
- package/lib/types/dsh-adapter/presets.js +29 -5
- package/lib/types/dsh-adapter/providerWizard.d.ts.map +1 -1
- package/lib/types/dsh-adapter/providerWizard.js +6 -2
- package/lib/types/dsh-adapter/startup-args.d.ts +8 -0
- package/lib/types/dsh-adapter/startup-args.d.ts.map +1 -0
- package/lib/types/dsh-adapter/startup-args.js +34 -0
- package/lib/types/dsh-adapter/subagents.d.ts +1 -0
- package/lib/types/dsh-adapter/subagents.d.ts.map +1 -1
- package/lib/types/dsh-adapter/subagents.js +10 -1
- package/lib/types/history.d.ts +24 -7
- package/lib/types/history.d.ts.map +1 -1
- package/lib/types/history.js +77 -18
- package/lib/types/i18n.d.ts +908 -33
- package/lib/types/i18n.d.ts.map +1 -1
- package/lib/types/i18n.js +355 -17
- package/lib/types/ink/components/App.d.ts +14 -1
- package/lib/types/ink/components/App.d.ts.map +1 -1
- package/lib/types/ink/components/App.js +71 -61
- package/lib/types/ink/components/TerminalSizeContext.d.ts +7 -0
- package/lib/types/ink/components/TerminalSizeContext.d.ts.map +1 -1
- package/lib/types/ink/hooks/use-input.d.ts +11 -0
- package/lib/types/ink/hooks/use-input.d.ts.map +1 -1
- package/lib/types/ink/hooks/use-input.js +8 -2
- package/lib/types/ink/hooks/use-terminal-viewport.d.ts.map +1 -1
- package/lib/types/ink/hooks/use-terminal-viewport.js +3 -1
- package/lib/types/ink/ink.d.ts +18 -0
- package/lib/types/ink/ink.d.ts.map +1 -1
- package/lib/types/ink/ink.js +51 -8
- package/lib/types/ink/output.d.ts +10 -1
- package/lib/types/ink/output.d.ts.map +1 -1
- package/lib/types/ink/output.js +3 -3
- package/lib/types/ink/parse-keypress.d.ts +71 -3
- package/lib/types/ink/parse-keypress.d.ts.map +1 -1
- package/lib/types/ink/parse-keypress.js +815 -133
- package/lib/types/ink/render-node-to-output.d.ts +1 -1
- package/lib/types/ink/render-node-to-output.d.ts.map +1 -1
- package/lib/types/ink/render-node-to-output.js +37 -5
- package/lib/types/ink/screen.d.ts +26 -1
- package/lib/types/ink/screen.d.ts.map +1 -1
- package/lib/types/ink/screen.js +96 -1
- package/lib/types/ink/selection.d.ts +23 -1
- package/lib/types/ink/selection.d.ts.map +1 -1
- package/lib/types/ink/selection.js +102 -26
- package/lib/types/ink/sixel-codec.d.ts +11 -0
- package/lib/types/ink/sixel-codec.d.ts.map +1 -1
- package/lib/types/ink/sixel-codec.js +42 -8
- package/lib/types/ink/terminal-querier.d.ts +25 -0
- package/lib/types/ink/terminal-querier.d.ts.map +1 -1
- package/lib/types/ink/terminal-querier.js +42 -0
- package/lib/types/ink/update-overflow-guard.d.ts +24 -0
- package/lib/types/ink/update-overflow-guard.d.ts.map +1 -1
- package/lib/types/ink/update-overflow-guard.js +25 -3
- package/lib/types/math/renderer.d.ts +2 -0
- package/lib/types/math/renderer.d.ts.map +1 -1
- package/lib/types/math/renderer.js +4 -0
- package/lib/types/minimalUiMode.d.ts +19 -0
- package/lib/types/minimalUiMode.d.ts.map +1 -0
- package/lib/types/minimalUiMode.js +23 -0
- package/lib/types/oauth.d.ts +5 -10
- package/lib/types/oauth.d.ts.map +1 -1
- package/lib/types/oauth.js +5 -10
- package/lib/types/onboardingPrefs.d.ts +52 -0
- package/lib/types/onboardingPrefs.d.ts.map +1 -0
- package/lib/types/onboardingPrefs.js +107 -0
- package/lib/types/panels.d.ts +4 -0
- package/lib/types/panels.d.ts.map +1 -0
- package/lib/types/panels.js +4 -0
- package/lib/types/screens/Chat.d.ts +25 -1
- package/lib/types/screens/Chat.d.ts.map +1 -1
- package/lib/types/screens/Chat.js +1149 -302
- package/lib/types/screens/Launchpad.d.ts +194 -0
- package/lib/types/screens/Launchpad.d.ts.map +1 -0
- package/lib/types/screens/Launchpad.js +607 -0
- package/lib/types/screens/Onboarding.d.ts +37 -0
- package/lib/types/screens/Onboarding.d.ts.map +1 -0
- package/lib/types/screens/Onboarding.js +492 -0
- package/lib/types/screens/SessionSupervisor.d.ts.map +1 -1
- package/lib/types/screens/SessionSupervisor.js +18 -12
- package/lib/types/screens/StatusLine.d.ts +4 -0
- package/lib/types/screens/StatusLine.d.ts.map +1 -1
- package/lib/types/screens/StatusLine.js +43 -25
- package/lib/types/screens/StatusMetrics.d.ts +22 -0
- package/lib/types/screens/StatusMetrics.d.ts.map +1 -1
- package/lib/types/screens/StatusMetrics.js +20 -0
- package/lib/types/screens/chatOverlay.d.ts +18 -1
- package/lib/types/screens/chatOverlay.d.ts.map +1 -1
- package/lib/types/screens/chatOverlay.js +3 -0
- package/lib/types/screens/sessionSupervisor/model.d.ts +1 -2
- package/lib/types/screens/sessionSupervisor/model.d.ts.map +1 -1
- package/lib/types/screens/sessionSupervisor/model.js +4 -2
- package/lib/types/screens/sessionSupervisor/useSessionSupervisor.d.ts.map +1 -1
- package/lib/types/screens/sessionSupervisor/useSessionSupervisor.js +7 -3
- package/lib/types/settings/definitions.d.ts +93 -0
- package/lib/types/settings/definitions.d.ts.map +1 -1
- package/lib/types/settings/definitions.js +87 -4
- package/lib/types/tips.d.ts.map +1 -1
- package/lib/types/tips.js +13 -7
- package/lib/types/tuiDisplayPrefs.d.ts +42 -2
- package/lib/types/tuiDisplayPrefs.d.ts.map +1 -1
- package/lib/types/tuiDisplayPrefs.js +74 -0
- package/lib/types/update.d.ts +53 -9
- package/lib/types/update.d.ts.map +1 -1
- package/lib/types/update.js +103 -46
- package/lib/types/utils/bmp.d.ts.map +1 -1
- package/lib/types/utils/bmp.js +8 -1
- package/lib/types/utils/clipboard.d.ts.map +1 -1
- package/lib/types/utils/clipboard.js +25 -6
- package/lib/types/utils/credentials.d.ts.map +1 -1
- package/lib/types/utils/credentials.js +5 -1
- package/lib/types/utils/draftWordBoundary.d.ts +23 -0
- package/lib/types/utils/draftWordBoundary.d.ts.map +1 -0
- package/lib/types/utils/draftWordBoundary.js +161 -0
- package/lib/types/utils/fileTarget.d.ts.map +1 -1
- package/lib/types/utils/fileTarget.js +7 -9
- package/lib/types/utils/inputPaste.d.ts +62 -0
- package/lib/types/utils/inputPaste.d.ts.map +1 -0
- package/lib/types/utils/inputPaste.js +111 -0
- package/lib/types/utils/intl.d.ts +8 -0
- package/lib/types/utils/intl.d.ts.map +1 -1
- package/lib/types/utils/intl.js +11 -0
- package/lib/types/utils/keymap.d.ts +13 -3
- package/lib/types/utils/keymap.d.ts.map +1 -1
- package/lib/types/utils/keymap.js +27 -5
- package/lib/types/utils/pastedImagePath.d.ts +8 -0
- package/lib/types/utils/pastedImagePath.d.ts.map +1 -1
- package/lib/types/utils/pastedImagePath.js +29 -5
- package/package.json +128 -106
- package/presets/liangshen/agent.cordis.yml +4 -1
- package/presets/liangshen/preset.yml +1 -1
- package/{dsh-ecosystem-spec → tui-profile}/registry/README.md +1 -1
- package/{dsh-ecosystem-spec → tui-profile}/registry/registry-0.15.json +1 -1
- package/lib/types/minimalMode.d.ts +0 -13
- package/lib/types/minimalMode.d.ts.map +0 -1
- package/lib/types/minimalMode.js +0 -17
- package/node_modules/@deepseek-harness-tui/dsh-auth/LICENSE +0 -21
- package/node_modules/@deepseek-harness-tui/dsh-auth/README.md +0 -143
- package/node_modules/@deepseek-harness-tui/dsh-auth/cordis.patch.yml +0 -11
- package/node_modules/@deepseek-harness-tui/dsh-auth/dsh-plugin.json +0 -44
- package/node_modules/@deepseek-harness-tui/dsh-auth/lib/interaction.js +0 -193
- package/node_modules/@deepseek-harness-tui/dsh-auth/package.json +0 -69
- /package/{dsh-ecosystem-spec → tui-profile}/protocols/profile-definitions.d.ts +0 -0
- /package/{dsh-ecosystem-spec → tui-profile}/protocols/profile-definitions.js +0 -0
- /package/{dsh-ecosystem-spec → tui-profile}/protocols/tui-channel-http.d.ts +0 -0
- /package/{dsh-ecosystem-spec → tui-profile}/protocols/tui-channel-http.js +0 -0
- /package/{dsh-ecosystem-spec → tui-profile}/protocols/tui-channel.d.ts +0 -0
- /package/{dsh-ecosystem-spec → tui-profile}/protocols/tui-channel.js +0 -0
- /package/{dsh-ecosystem-spec → tui-profile}/protocols/tui-contributions.d.ts +0 -0
- /package/{dsh-ecosystem-spec → tui-profile}/protocols/tui-contributions.js +0 -0
- /package/{dsh-ecosystem-spec → tui-profile}/registry/contracts/decision-events-v1alpha1.json +0 -0
- /package/{dsh-ecosystem-spec → tui-profile}/registry/contracts/scene-v1alpha1.json +0 -0
- /package/{dsh-ecosystem-spec → tui-profile}/registry/contracts/settings-section-v1alpha1.json +0 -0
- /package/{dsh-ecosystem-spec → tui-profile}/registry/contracts/tui-channel-v1alpha1.json +0 -0
- /package/{dsh-ecosystem-spec → tui-profile}/registry/contracts/workspace-provider-v1alpha1.json +0 -0
- /package/{dsh-ecosystem-spec → tui-profile}/registry/host-descriptor.tui.example.json +0 -0
- /package/{dsh-ecosystem-spec → tui-profile}/registry/permissions-0.1.json +0 -0
- /package/{dsh-ecosystem-spec → tui-profile}/schemas/conformance-claim.schema.json +0 -0
- /package/{dsh-ecosystem-spec → tui-profile}/schemas/effect-ledger-record.schema.json +0 -0
- /package/{dsh-ecosystem-spec → tui-profile}/schemas/host-descriptor.schema.json +0 -0
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Attached contexts ("Send to Chat", side-panel design §6.7): a panel stages
|
|
3
|
+
* one of its rows on the channel, the composer renders a chip for it, and the
|
|
4
|
+
* NEXT submission carries the model-facing `<attached-context …>` block.
|
|
5
|
+
*
|
|
6
|
+
* Deliberately the same seam as the IDE-selection channel next door
|
|
7
|
+
* (`ide-selection.ts`): a projection the composer renders, an ENQUEUE-time
|
|
8
|
+
* snapshot consumed exactly once by the submit path, and a block builder that
|
|
9
|
+
* never goes through text parsing. The one difference is where the body comes
|
|
10
|
+
* from — a panel hands it over in-process, so there is no disk read and no
|
|
11
|
+
* failure mode to swallow. The only policy left is the shared mention size cap.
|
|
12
|
+
*/
|
|
13
|
+
import { escapeSnippetAttr } from './ide-selection.js';
|
|
14
|
+
import { MENTION_MAX_FILE_CHARS } from './mentions.js';
|
|
15
|
+
/**
|
|
16
|
+
* Cap one panel body at the shared mention limit. Truncation is recorded ON the
|
|
17
|
+
* entry (`truncated`) rather than re-derived from the body later: the block
|
|
18
|
+
* builder appends the visible `[… truncated]` marker from that flag, so a body
|
|
19
|
+
* that legitimately fills the cap is never mislabelled as cut — and `chars`
|
|
20
|
+
* stays "the length of what the model will actually receive".
|
|
21
|
+
*/
|
|
22
|
+
function capContent(content) {
|
|
23
|
+
if (content.length <= MENTION_MAX_FILE_CHARS)
|
|
24
|
+
return { content, truncated: false };
|
|
25
|
+
return { content: content.slice(0, MENTION_MAX_FILE_CHARS), truncated: true };
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Build one model-facing block, shaped like the selection channel's
|
|
29
|
+
* `<attached-file …>`: escaped attributes, one body, the close tag. The
|
|
30
|
+
* attribute values reuse `escapeSnippetAttr` — a title or source id carrying
|
|
31
|
+
* `"`/`&`/`<`/`>` must not break out of the attribute or smuggle markup
|
|
32
|
+
* into the model-facing block.
|
|
33
|
+
*/
|
|
34
|
+
export function buildAttachedContextBlock(context) {
|
|
35
|
+
const body = context.truncated ? `${context.content}\n[… truncated]` : context.content;
|
|
36
|
+
return `<attached-context source="${context.source}" sourceId="${escapeSnippetAttr(context.sourceId)}" title="${escapeSnippetAttr(context.title)}">\n${body}\n</attached-context>`;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Append every staged context as its own block, in stage order (the order the
|
|
40
|
+
* chips render in), after the typed text and every other attachment. The caller
|
|
41
|
+
* passes the ENQUEUE-time snapshot: a panel that stages something while the
|
|
42
|
+
* delivery FIFO is parked can never ride along with a message it was not typed
|
|
43
|
+
* for. Returns how many blocks were appended (telemetry/assertions).
|
|
44
|
+
*/
|
|
45
|
+
export function appendAttachedContextBlocks(blocks, contexts) {
|
|
46
|
+
for (const context of contexts) {
|
|
47
|
+
blocks.push({ type: 'text', text: buildAttachedContextBlock(context) });
|
|
48
|
+
}
|
|
49
|
+
return contexts.length;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Registry behind `ChannelUi.attachedContexts` / `attachContext` /
|
|
53
|
+
* `detachContext`. It owns no state of its own: every entry lives in the
|
|
54
|
+
* channel state's array, so the session-scoped reset that clears the other
|
|
55
|
+
* projections (`resetSessionProjection`) clears this one by assignment.
|
|
56
|
+
*
|
|
57
|
+
* Duplicate `sourceId` + `title` REPLACES the existing entry (keeping its id
|
|
58
|
+
* and position) instead of stacking a second chip: a panel row re-sent after it
|
|
59
|
+
* changed — or sent twice by a double 's' keypress — is the same attachment, and
|
|
60
|
+
* a stable id keeps chip keys and any future detach-by-sender valid across the
|
|
61
|
+
* update. Distinct titles under one id stay separate chips.
|
|
62
|
+
*/
|
|
63
|
+
export function createAttachedContextRegistry(holder, emit) {
|
|
64
|
+
let sequence = 0;
|
|
65
|
+
/** NUL cannot appear in either part, so the join is unambiguous. */
|
|
66
|
+
const keyOf = (sourceId, title) => `${sourceId}\u0000${title}`;
|
|
67
|
+
return {
|
|
68
|
+
attach(input) {
|
|
69
|
+
const capped = capContent(input.content);
|
|
70
|
+
const list = holder().attachedContexts;
|
|
71
|
+
const key = keyOf(input.sourceId, input.title);
|
|
72
|
+
const index = list.findIndex(item => keyOf(item.sourceId, item.title) === key);
|
|
73
|
+
const existing = index === -1 ? undefined : list[index];
|
|
74
|
+
const next = {
|
|
75
|
+
id: existing === undefined ? `ctx-${++sequence}` : existing.id,
|
|
76
|
+
source: input.source,
|
|
77
|
+
sourceId: input.sourceId,
|
|
78
|
+
title: input.title,
|
|
79
|
+
content: capped.content,
|
|
80
|
+
chars: capped.content.length,
|
|
81
|
+
truncated: capped.truncated,
|
|
82
|
+
};
|
|
83
|
+
holder().attachedContexts = index === -1
|
|
84
|
+
? [...list, next]
|
|
85
|
+
: list.map((item, at) => (at === index ? next : item));
|
|
86
|
+
// The projection is read through the detached read view, which keys its
|
|
87
|
+
// frozen snapshots on `version`: every change must bump it or the
|
|
88
|
+
// composer keeps rendering the previous array.
|
|
89
|
+
emit();
|
|
90
|
+
},
|
|
91
|
+
detach(id) {
|
|
92
|
+
const list = holder().attachedContexts;
|
|
93
|
+
const remaining = list.filter(item => item.id !== id);
|
|
94
|
+
if (remaining.length === list.length)
|
|
95
|
+
return;
|
|
96
|
+
holder().attachedContexts = remaining;
|
|
97
|
+
emit();
|
|
98
|
+
},
|
|
99
|
+
consume() {
|
|
100
|
+
const list = holder().attachedContexts;
|
|
101
|
+
if (list.length === 0)
|
|
102
|
+
return [];
|
|
103
|
+
const taken = [...list];
|
|
104
|
+
holder().attachedContexts = [];
|
|
105
|
+
emit();
|
|
106
|
+
return taken;
|
|
107
|
+
},
|
|
108
|
+
};
|
|
109
|
+
}
|
|
@@ -21,6 +21,12 @@ export declare function createBindingEvents(ctx: Context, deps: {
|
|
|
21
21
|
* The line's semantics live in the working-activity plugin: this app folds
|
|
22
22
|
* nothing itself and forwards no events. */
|
|
23
23
|
seedActivity?(session: unknown): void;
|
|
24
|
+
/** Read the context-occupancy projection's current value for a freshly bound
|
|
25
|
+
* session, for the same reason (and with the same plumbing) as
|
|
26
|
+
* `seedActivity`: the value only arrives when it changes, so a resumed
|
|
27
|
+
* session needs one baseline read to show its occupancy before the next
|
|
28
|
+
* request reports usage. */
|
|
29
|
+
seedContextOccupancy?(session: unknown): void;
|
|
24
30
|
inputConvergence: InputConvergence;
|
|
25
31
|
selection: ModelSelectionRef;
|
|
26
32
|
modelActions: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"binding-events.d.ts","sourceRoot":"","sources":["../../../../src/dsh-adapter/channel/binding-events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC5F,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"binding-events.d.ts","sourceRoot":"","sources":["../../../../src/dsh-adapter/channel/binding-events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC5F,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAKlD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAC9C,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,iBAAiB,CAAA;AAE9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE9C;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE;IACtD,KAAK,EAAE,YAAY,CAAA;IACnB,OAAO,EAAE,cAAc,CAAA;IACvB,KAAK,EAAE,YAAY,CAAA;IACnB;;;;iDAI6C;IAC7C,YAAY,CAAC,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;IACrC;;;;iCAI6B;IAC7B,oBAAoB,CAAC,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;IAC7C,gBAAgB,EAAE,gBAAgB,CAAA;IAClC,SAAS,EAAE,iBAAiB,CAAA;IAC5B,YAAY,EAAE;QAAE,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;QAAC,SAAS,EAAE,iBAAiB,CAAA;KAAE,CAAA;IACrF,WAAW,EAAE;QAAE,WAAW,IAAI,IAAI,CAAC;QAAC,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAAA;KAAE,CAAA;IAC5F,SAAS,EAAE,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAA;IACrD,SAAS,EAAE;QACT,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAA;QACzD,aAAa,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAA;QACpE,OAAO,CAAC,IAAI,EAAE;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAC;YAAC,KAAK,CAAC,EAAE,OAAO,CAAA;SAAE,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAA;QAC7G,KAAK,CAAC,IAAI,EAAE;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,CAAC;YAAC,UAAU,EAAE,MAAM,CAAC;YAAC,oBAAoB,CAAC,EAAE,OAAO,EAAE,CAAA;SAAE,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAA;QAC9H,MAAM,CAAC,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAA;KAC5B,CAAA;IACD,SAAS,EAAE;QAAE,QAAQ,IAAI,IAAI,CAAA;KAAE,CAAA;IAC/B,eAAe,CAAC,EAAE;QAAE,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAAA;KAAE,CAAA;IACrE;;;sCAGkC;IAClC,gBAAgB,CAAC,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CAC3C;gBAqEkB,IAAI;EAsJtB"}
|
|
@@ -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
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"external-commands.d.ts","sourceRoot":"","sources":["../../../../src/dsh-adapter/channel/external-commands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AACnD,OAAO,KAAK,EAAoB,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAKjF,OAAO,EAAkD,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAC1G,OAAO,KAAK,EAAqB,gBAAgB,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAcjH;0DAC0D;AAC1D,wBAAgB,4BAA4B,CAC1C,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE;IACJ,cAAc,EAAE,cAAc,GAAG,SAAS,CAAA;IAC1C,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,CAAA;IACpD,KAAK,IAAI,KAAK,CAAA;IACd,OAAO,IAAI,OAAO,CAAA;IAClB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAA;IACzC,MAAM,CAAC,OAAO,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAA;IAC3G,QAAQ,EAAE,cAAc,CAAA;IACxB,WAAW,IAAI,kBAAkB,GAAG,SAAS,CAAA;IAC7C,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;CACtG;mBA+HO,MAAM,YACF,MAAM,cACL,SAAS,gBAAgB,EAAE,KACrC,OAAO,CAAC,sBAAsB,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"external-commands.d.ts","sourceRoot":"","sources":["../../../../src/dsh-adapter/channel/external-commands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AACnD,OAAO,KAAK,EAAoB,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAKjF,OAAO,EAAkD,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAC1G,OAAO,KAAK,EAAqB,gBAAgB,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAcjH;0DAC0D;AAC1D,wBAAgB,4BAA4B,CAC1C,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE;IACJ,cAAc,EAAE,cAAc,GAAG,SAAS,CAAA;IAC1C,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,CAAA;IACpD,KAAK,IAAI,KAAK,CAAA;IACd,OAAO,IAAI,OAAO,CAAA;IAClB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAA;IACzC,MAAM,CAAC,OAAO,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAA;IAC3G,QAAQ,EAAE,cAAc,CAAA;IACxB,WAAW,IAAI,kBAAkB,GAAG,SAAS,CAAA;IAC7C,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAA;CACtG;mBA+HO,MAAM,YACF,MAAM,cACL,SAAS,gBAAgB,EAAE,KACrC,OAAO,CAAC,sBAAsB,GAAG,SAAS,CAAC;uBAiFtC,MAAM,YACF,MAAM,cACL,SAAS,gBAAgB,EAAE,KACrC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;EAG/B"}
|
|
@@ -111,8 +111,6 @@ export function createExternalCommandInvoker(ctx, deps) {
|
|
|
111
111
|
/** Run one DSH registry command (`/plan`, …) on the live agent while
|
|
112
112
|
* preserving its settled result kind for composer admission. */
|
|
113
113
|
const invoke = async (name, rawInput, imageRefs = []) => {
|
|
114
|
-
const capture = deps.capture();
|
|
115
|
-
assertCapabilityShadowPolicy('host.commands.invoke', deps.runtime.mode, deps.runtime.slices);
|
|
116
114
|
const service = deps.commandService;
|
|
117
115
|
if (service === undefined)
|
|
118
116
|
return undefined;
|
|
@@ -123,6 +121,14 @@ export function createExternalCommandInvoker(ctx, deps) {
|
|
|
123
121
|
// apply another scope's owner policy.
|
|
124
122
|
const definition = service.find(commandAgent, name);
|
|
125
123
|
try {
|
|
124
|
+
// The channel-lifetime capture and the shadow/capability policy check
|
|
125
|
+
// live INSIDE the try: both can throw (a lease that ended between
|
|
126
|
+
// keystrokes, a shadow-mode denial), and `invoke` is an async action
|
|
127
|
+
// whose callers treat a rejection as unhandled — the same refusal must
|
|
128
|
+
// degrade to the settled `{ kind: 'error' }` outcome every other
|
|
129
|
+
// failure below uses.
|
|
130
|
+
const capture = deps.capture();
|
|
131
|
+
assertCapabilityShadowPolicy('host.commands.invoke', deps.runtime.mode, deps.runtime.slices);
|
|
126
132
|
const signal = new AbortController().signal;
|
|
127
133
|
const line = `/${name}${rawInput}`;
|
|
128
134
|
const batch = await registryCommandImages(service, line, deps.composer.includeLegacyImageRefs(line, imageRefs), stagedSnapshot, signal);
|
|
@@ -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"}
|