@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,263 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { Box, Text } from '../../ui.js';
|
|
4
|
+
import { useAnimationFrame } from '../../ink/hooks/use-animation-frame.js';
|
|
5
|
+
import { WaveBand } from '../trajectory/WaveBand.js';
|
|
6
|
+
import { Ledger } from '../trajectory/Ledger.js';
|
|
7
|
+
import { Inspector } from '../trajectory/Inspector.js';
|
|
8
|
+
import { HotspotView, hotspotRows } from '../trajectory/HotspotView.js';
|
|
9
|
+
import { Divider } from '../design-system/Divider.js';
|
|
10
|
+
import { MOTION_TICK_MS } from '../../trajectory/motion.js';
|
|
11
|
+
import { truncateWidth } from '../../trajectory/format.js';
|
|
12
|
+
import { stringWidth } from '../../ink/stringWidth.js';
|
|
13
|
+
import { t } from '../../i18n.js';
|
|
14
|
+
import { aggregate, columnOfIndex, emptyTrajectory, inspectNode, projectWave, HOTSPOT_SORTS, WAVE_PROJECTIONS, } from '../../dsh-adapter/trajectory/index.js';
|
|
15
|
+
import { SidePanelRuntimeContext, useSidePanelTrajectory } from './SidePanelRuntimeContext.js';
|
|
16
|
+
import { usePanelInput } from './usePanelInput.js';
|
|
17
|
+
/**
|
|
18
|
+
* The trajectory as a side-panel form of the fullscreen TrajectoryScene.
|
|
19
|
+
*
|
|
20
|
+
* This is deliberately a THIN ADAPTER, not a variant of the scene: the scene
|
|
21
|
+
* is tuned end-to-end for owning the whole alternate screen (its own query
|
|
22
|
+
* editor, exit chrome, page-sized chrome math against the terminal size), and
|
|
23
|
+
* re-parameterizing every one of those decisions would risk drifting the
|
|
24
|
+
* fullscreen behavior. Instead the panel composes the very same leaf regions
|
|
25
|
+
* — WaveBand / Ledger / Inspector / HotspotView — over the same projection
|
|
26
|
+
* utilities (aggregate / projectWave / inspectNode / columnOfIndex), so the
|
|
27
|
+
* two forms can never disagree about what a session looks like.
|
|
28
|
+
*
|
|
29
|
+
* What changes for the narrow column: no query line, no exit chrome (the host
|
|
30
|
+
* PanelBar owns ⤢ / Esc), Enter expands the inspector in place, and every
|
|
31
|
+
* line is clipped to the panel width via truncateWidth — never bare slice.
|
|
32
|
+
*/
|
|
33
|
+
/** Inspector rows in the collapsed layout (header + 3 body lines). */
|
|
34
|
+
const INSPECTOR_ROWS = 4;
|
|
35
|
+
/** Tabs row, the wake's two rows, the ledger/inspector divider, the hint. */
|
|
36
|
+
const CHROME_ROWS = 5;
|
|
37
|
+
export function TrajectoryPanel({ width, height, focused, visible }) {
|
|
38
|
+
// The channel comes from the same runtime context the trajectory build
|
|
39
|
+
// does. Reading it tolerantly (rather than via useSidePanelChannel, which
|
|
40
|
+
// throws) keeps the component mountable in headless fallback probes.
|
|
41
|
+
const channel = React.useContext(SidePanelRuntimeContext)?.channel;
|
|
42
|
+
const build = useSidePanelTrajectory();
|
|
43
|
+
const nodes = build?.nodes;
|
|
44
|
+
const empty = nodes === undefined || nodes.length === 0;
|
|
45
|
+
// visible=false (inactive tab / collapsed sidebar) stops the motion clock:
|
|
46
|
+
// zero animation-frame subscriptions, the store keeps folding underneath.
|
|
47
|
+
const [ref, time] = useAnimationFrame(visible && !empty ? MOTION_TICK_MS : null);
|
|
48
|
+
const tick = Math.floor(time / MOTION_TICK_MS);
|
|
49
|
+
const [view, setView] = React.useState('timeline');
|
|
50
|
+
const [cursor, setCursor] = React.useState(0);
|
|
51
|
+
const [hotCursor, setHotCursor] = React.useState(0);
|
|
52
|
+
const [projection, setProjection] = React.useState('compressed');
|
|
53
|
+
const [sort, setSort] = React.useState('duration');
|
|
54
|
+
const [expanded, setExpanded] = React.useState(false);
|
|
55
|
+
const [inspectScroll, setInspectScroll] = React.useState(0);
|
|
56
|
+
const [switchTick, setSwitchTick] = React.useState(0);
|
|
57
|
+
const [alertTick, setAlertTick] = React.useState(0);
|
|
58
|
+
const [arrivalTick, setArrivalTick] = React.useState(0);
|
|
59
|
+
const [arrivalFrom, setArrivalFrom] = React.useState(Number.MAX_SAFE_INTEGER);
|
|
60
|
+
/** Cursor pinned to the tail until the user scrolls away from it. */
|
|
61
|
+
const [follow, setFollow] = React.useState(true);
|
|
62
|
+
const [hoverTab, setHoverTab] = React.useState(null);
|
|
63
|
+
const [hoverAxis, setHoverAxis] = React.useState(false);
|
|
64
|
+
// ── projection (no query in the panel form: the filtered list is the
|
|
65
|
+
// ledger itself, and the column index map is the identity) ─────────────
|
|
66
|
+
const filtered = nodes ?? [];
|
|
67
|
+
const indexes = React.useMemo(() => filtered.map((_, index) => index), [filtered.length]);
|
|
68
|
+
// `emptyTrajectory()` keeps the memo body total: hooks run before the
|
|
69
|
+
// empty-state early return, so the aggregators must tolerate a missing
|
|
70
|
+
// build rather than throwing on first paint.
|
|
71
|
+
const agg = React.useMemo(
|
|
72
|
+
// oxlint-disable-next-line react-hooks/exhaustive-deps
|
|
73
|
+
() => aggregate(build ?? emptyTrajectory(), sort), [build, filtered.length, sort]);
|
|
74
|
+
// ── arrival + alert detection (same contract as the scene) ───────────────
|
|
75
|
+
const seenRef = React.useRef(0);
|
|
76
|
+
const errorsRef = React.useRef(0);
|
|
77
|
+
React.useEffect(() => {
|
|
78
|
+
if (empty)
|
|
79
|
+
return;
|
|
80
|
+
if (filtered.length > seenRef.current) {
|
|
81
|
+
setArrivalFrom(seenRef.current);
|
|
82
|
+
setArrivalTick(tick);
|
|
83
|
+
seenRef.current = filtered.length;
|
|
84
|
+
if (follow)
|
|
85
|
+
setCursor(Math.max(0, filtered.length - 1));
|
|
86
|
+
}
|
|
87
|
+
if (agg.totals.errors > errorsRef.current) {
|
|
88
|
+
errorsRef.current = agg.totals.errors;
|
|
89
|
+
setAlertTick(tick);
|
|
90
|
+
}
|
|
91
|
+
// oxlint-disable-next-line react-hooks/exhaustive-deps
|
|
92
|
+
}, [filtered.length, agg.totals.errors, tick, follow]);
|
|
93
|
+
// ── geometry (all against the panel's own width/height, never the screen)
|
|
94
|
+
const contentWidth = Math.max(1, width - 2);
|
|
95
|
+
const bandWidth = contentWidth;
|
|
96
|
+
const inspectorRows = expanded
|
|
97
|
+
? Math.max(4, height - CHROME_ROWS - 1)
|
|
98
|
+
: Math.max(3, Math.min(INSPECTOR_ROWS, height - CHROME_ROWS - 2));
|
|
99
|
+
const ledgerRows = Math.max(1, height - CHROME_ROWS - inspectorRows);
|
|
100
|
+
const clampedCursor = filtered.length === 0 ? 0 : Math.min(cursor, filtered.length - 1);
|
|
101
|
+
const windowStart = Math.max(0, Math.min(clampedCursor - Math.floor(ledgerRows / 2), filtered.length - ledgerRows));
|
|
102
|
+
const band = React.useMemo(
|
|
103
|
+
// oxlint-disable-next-line react-hooks/exhaustive-deps
|
|
104
|
+
() => projectWave(nodes ?? emptyTrajectory().nodes, bandWidth, projection), [nodes, filtered.length, bandWidth, projection]);
|
|
105
|
+
const focusedNode = filtered[clampedCursor];
|
|
106
|
+
const detail = React.useMemo(() => focusedNode === undefined || channel === undefined
|
|
107
|
+
? undefined
|
|
108
|
+
: inspectNode(focusedNode, channel.traceEvents()), [focusedNode, channel]);
|
|
109
|
+
// ── navigation helpers (mirroring the scene's semantics) ─────────────────
|
|
110
|
+
const move = React.useCallback((delta) => {
|
|
111
|
+
setExpanded(false);
|
|
112
|
+
setInspectScroll(0);
|
|
113
|
+
setCursor(previous => {
|
|
114
|
+
const next = Math.max(0, Math.min(filtered.length - 1, previous + delta));
|
|
115
|
+
setFollow(next >= filtered.length - 1);
|
|
116
|
+
return next;
|
|
117
|
+
});
|
|
118
|
+
}, [filtered.length]);
|
|
119
|
+
const switchView = React.useCallback((next) => {
|
|
120
|
+
setView(next);
|
|
121
|
+
setSwitchTick(tick);
|
|
122
|
+
setExpanded(false);
|
|
123
|
+
setInspectScroll(0);
|
|
124
|
+
// oxlint-disable-next-line react-hooks/exhaustive-deps
|
|
125
|
+
}, [tick]);
|
|
126
|
+
/** Jump back to the timeline positioned on a hotspot group's first member. */
|
|
127
|
+
const jumpFromHotspot = React.useCallback((row) => {
|
|
128
|
+
switchView('timeline');
|
|
129
|
+
if (row !== undefined) {
|
|
130
|
+
const target = indexes.indexOf(row.firstIndex);
|
|
131
|
+
setCursor(target >= 0 ? target : 0);
|
|
132
|
+
setFollow(false);
|
|
133
|
+
}
|
|
134
|
+
}, [indexes, switchView]);
|
|
135
|
+
const jumpTo = React.useCallback((index) => {
|
|
136
|
+
setInspectScroll(0);
|
|
137
|
+
setCursor(index);
|
|
138
|
+
setFollow(index >= filtered.length - 1);
|
|
139
|
+
}, [filtered.length]);
|
|
140
|
+
const handleWheel = React.useCallback((event) => {
|
|
141
|
+
if (view === 'hotspot') {
|
|
142
|
+
const total = hotspotRows(agg).length;
|
|
143
|
+
const direction = event.deltaY >= 0 ? 1 : -1;
|
|
144
|
+
setHotCursor(previous => Math.max(0, Math.min(total - 1, previous + direction)));
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
if (expanded) {
|
|
148
|
+
const direction = event.deltaY >= 0 ? 1 : -1;
|
|
149
|
+
setInspectScroll(previous => Math.max(0, previous + direction * Math.max(1, inspectorRows - 2)));
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
move(event.deltaY);
|
|
153
|
+
}, [view, agg, expanded, inspectorRows, move]);
|
|
154
|
+
// ── keys (v2.1 panel contract: true = consumed; Esc is NEVER consumed —
|
|
155
|
+
// the host owns the return-to-chat key) ────────────────────────────────
|
|
156
|
+
const onKey = React.useCallback((input, key) => {
|
|
157
|
+
if (key.escape)
|
|
158
|
+
return false;
|
|
159
|
+
// Tab toggles the two views. ←/→ are deliberately NOT consumed: the
|
|
160
|
+
// host owns them for cycling the ACTIVE PANEL (v2.1 contract — the
|
|
161
|
+
// user expects ←/→ to switch panels everywhere in the column, and the
|
|
162
|
+
// tabs above are already the mouse path). ink delivers Tab as
|
|
163
|
+
// input='' + key.tab (no '\t' character) and the host's
|
|
164
|
+
// SidePanelKeyFlags does not carry a tab field, so both shapes count.
|
|
165
|
+
const tabKey = key.tab === true || input === '\t';
|
|
166
|
+
if (tabKey) {
|
|
167
|
+
switchView(view === 'timeline' ? 'hotspot' : 'timeline');
|
|
168
|
+
return true;
|
|
169
|
+
}
|
|
170
|
+
if (view === 'hotspot') {
|
|
171
|
+
const total = hotspotRows(agg).length;
|
|
172
|
+
if (key.upArrow) {
|
|
173
|
+
setHotCursor(previous => Math.max(0, previous - 1));
|
|
174
|
+
return true;
|
|
175
|
+
}
|
|
176
|
+
if (key.downArrow) {
|
|
177
|
+
setHotCursor(previous => Math.min(total - 1, previous + 1));
|
|
178
|
+
return true;
|
|
179
|
+
}
|
|
180
|
+
if (input === 't' && !key.ctrl && !key.meta) {
|
|
181
|
+
setSort(previous => HOTSPOT_SORTS[(HOTSPOT_SORTS.indexOf(previous) + 1) % HOTSPOT_SORTS.length]);
|
|
182
|
+
setSwitchTick(tick);
|
|
183
|
+
return true;
|
|
184
|
+
}
|
|
185
|
+
if (key.return_) {
|
|
186
|
+
jumpFromHotspot(hotspotRows(agg)[hotCursor]);
|
|
187
|
+
return true;
|
|
188
|
+
}
|
|
189
|
+
return false;
|
|
190
|
+
}
|
|
191
|
+
if (key.upArrow) {
|
|
192
|
+
move(-1);
|
|
193
|
+
return true;
|
|
194
|
+
}
|
|
195
|
+
if (key.downArrow) {
|
|
196
|
+
move(1);
|
|
197
|
+
return true;
|
|
198
|
+
}
|
|
199
|
+
if (key.pageUp) {
|
|
200
|
+
move(-ledgerRows);
|
|
201
|
+
return true;
|
|
202
|
+
}
|
|
203
|
+
if (key.pageDown) {
|
|
204
|
+
move(ledgerRows);
|
|
205
|
+
return true;
|
|
206
|
+
}
|
|
207
|
+
if (input === 'm' && !key.ctrl && !key.meta) {
|
|
208
|
+
setProjection(previous => WAVE_PROJECTIONS[(WAVE_PROJECTIONS.indexOf(previous) + 1) % WAVE_PROJECTIONS.length]);
|
|
209
|
+
setSwitchTick(tick);
|
|
210
|
+
return true;
|
|
211
|
+
}
|
|
212
|
+
if (key.return_) {
|
|
213
|
+
setExpanded(previous => !previous);
|
|
214
|
+
setInspectScroll(0);
|
|
215
|
+
return true;
|
|
216
|
+
}
|
|
217
|
+
if (expanded && (input === 'j' || input === 'k')) {
|
|
218
|
+
setInspectScroll(previous => Math.max(0, previous + (input === 'j' ? inspectorRows - 2 : -(inspectorRows - 2))));
|
|
219
|
+
return true;
|
|
220
|
+
}
|
|
221
|
+
return false;
|
|
222
|
+
// oxlint-disable-next-line react-hooks/exhaustive-deps
|
|
223
|
+
}, [view, agg, hotCursor, expanded, inspectorRows, ledgerRows, move, switchView, jumpFromHotspot, tick]);
|
|
224
|
+
usePanelInput(onKey, { active: focused && visible });
|
|
225
|
+
// ── empty state ───────────────────────────────────────────────────────────
|
|
226
|
+
if (empty) {
|
|
227
|
+
return (_jsxs(Box, { ref: ref, flexDirection: "column", width: "100%", paddingX: 1, children: [_jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "subtle", wrap: "truncate", children: t('panel-trajectory-empty') }) }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, italic: true, wrap: "truncate", children: truncateWidth(t('panel-trajectory-hint'), contentWidth) }) })] }));
|
|
228
|
+
}
|
|
229
|
+
// ── tabs row: two clickable segments + the axis label (cycle on click) ───
|
|
230
|
+
const tabTimelineText = `${view === 'timeline' ? '●' : '○'} ${t('traj-tab-timeline')}`;
|
|
231
|
+
const tabHotspotText = `${view === 'hotspot' ? '●' : '○'} ${t('traj-tab-hotspot')}`;
|
|
232
|
+
const axisText = view === 'hotspot' ? t(`traj-sort-${sort}`) : t(`traj-proj-${projection}`);
|
|
233
|
+
const axisRoom = contentWidth - stringWidth(tabTimelineText) - stringWidth(tabHotspotText) - 3;
|
|
234
|
+
const axisShown = axisRoom >= stringWidth(axisText) ? axisText : '';
|
|
235
|
+
const tabs = (_jsxs(Box, { width: "100%", height: 1, flexShrink: 0, children: [_jsx(Box, { flexShrink: 0, width: stringWidth(tabTimelineText), onClick: (event) => {
|
|
236
|
+
event.stopImmediatePropagation();
|
|
237
|
+
switchView('timeline');
|
|
238
|
+
}, onMouseEnter: () => setHoverTab('timeline'), onMouseLeave: () => setHoverTab(previous => (previous === 'timeline' ? null : previous)), children: _jsx(Text, { color: view === 'timeline' ? 'permission' : hoverTab === 'timeline' ? 'text' : 'subtle', bold: view === 'timeline', children: tabTimelineText }) }), _jsx(Box, { flexShrink: 0, width: stringWidth(tabHotspotText), onClick: (event) => {
|
|
239
|
+
event.stopImmediatePropagation();
|
|
240
|
+
switchView('hotspot');
|
|
241
|
+
}, onMouseEnter: () => setHoverTab('hotspot'), onMouseLeave: () => setHoverTab(previous => (previous === 'hotspot' ? null : previous)), children: _jsx(Text, { color: view === 'hotspot' ? 'permission' : hoverTab === 'hotspot' ? 'text' : 'subtle', bold: view === 'hotspot', children: tabHotspotText }) }), _jsx(Box, { flexGrow: 1, flexShrink: 1, children: _jsx(Text, { children: " " }) }), axisShown !== '' && (_jsx(Box, { flexShrink: 0, width: stringWidth(axisShown) + 1, onClick: (event) => {
|
|
242
|
+
event.stopImmediatePropagation();
|
|
243
|
+
if (view === 'hotspot') {
|
|
244
|
+
setSort(previous => HOTSPOT_SORTS[(HOTSPOT_SORTS.indexOf(previous) + 1) % HOTSPOT_SORTS.length]);
|
|
245
|
+
}
|
|
246
|
+
else {
|
|
247
|
+
setProjection(previous => WAVE_PROJECTIONS[(WAVE_PROJECTIONS.indexOf(previous) + 1) % WAVE_PROJECTIONS.length]);
|
|
248
|
+
}
|
|
249
|
+
setSwitchTick(tick);
|
|
250
|
+
}, onMouseEnter: () => setHoverAxis(true), onMouseLeave: () => setHoverAxis(false), children: _jsx(Text, { color: hoverAxis ? 'text' : 'subtle', children: axisShown }) }))] }));
|
|
251
|
+
return (_jsxs(Box, { ref: ref, flexDirection: "column", width: "100%", height: height, paddingX: 1, overflow: "hidden", children: [tabs, _jsx(WaveBand, { band: band, width: bandWidth, cursorColumn: columnOfIndex(band, clampedCursor), viewportStart: columnOfIndex(band, windowStart), viewportEnd: columnOfIndex(band, Math.min(filtered.length - 1, windowStart + ledgerRows - 1)), tick: tick, alertTick: alertTick, onColumnClick: (column, event) => {
|
|
252
|
+
event.stopImmediatePropagation();
|
|
253
|
+
const nodeIndex = band.buckets[column]?.firstIndex ?? -1;
|
|
254
|
+
if (nodeIndex < 0)
|
|
255
|
+
return;
|
|
256
|
+
const target = indexes.indexOf(nodeIndex);
|
|
257
|
+
if (target >= 0)
|
|
258
|
+
jumpTo(target);
|
|
259
|
+
} }), _jsx("ink-box", { style: { flexDirection: 'column', flexGrow: 1, flexShrink: 1, overflow: 'hidden', width: '100%' }, onWheel: handleWheel, children: view === 'timeline' ? (_jsxs(_Fragment, { children: [_jsx(Ledger, { rows: filtered, start: windowStart, height: ledgerRows, cursor: clampedCursor, width: contentWidth, tick: tick, arrivalTick: arrivalTick, arrivalFrom: arrivalFrom, onRowClick: (index, event) => {
|
|
260
|
+
event.stopImmediatePropagation();
|
|
261
|
+
jumpTo(index);
|
|
262
|
+
} }), _jsx(Divider, { color: "permission", width: bandWidth }), _jsx(Inspector, { node: focusedNode, detail: detail, height: inspectorRows, width: contentWidth, expanded: expanded, scroll: inspectScroll })] })) : (_jsx(HotspotView, { agg: agg, sort: sort, width: contentWidth, height: ledgerRows + inspectorRows + 1, cursor: hotCursor, tick: tick, switchTick: switchTick, onRowClick: index => jumpFromHotspot(hotspotRows(agg)[index]) })) }), _jsx(Box, { width: "100%", height: 1, flexShrink: 0, children: _jsx(Text, { dimColor: true, italic: true, wrap: "truncate", children: truncateWidth(t('panel-trajectory-hint'), contentWidth) }) })] }));
|
|
263
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkspacePanel.d.ts","sourceRoot":"","sources":["../../../../src/components/sidePanel/WorkspacePanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAWzB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAgD5C,wBAAgB,cAAc,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,UAAU,GAAG,KAAK,CAAC,SAAS,CAgK/F"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { Box, Text } from '../../ui.js';
|
|
4
|
+
import { t } from '../../i18n.js';
|
|
5
|
+
import { truncateWidth, spreadRow } from '../../sessions/format.js';
|
|
6
|
+
import { stringWidth } from '../../ink/stringWidth.js';
|
|
7
|
+
import { normalizeWorkspaceCwd } from '../../sessions/view.js';
|
|
8
|
+
import { useSidePanelChannel, useSidePanelFullscreen } from './SidePanelRuntimeContext.js';
|
|
9
|
+
import { usePanelInput } from './usePanelInput.js';
|
|
10
|
+
/**
|
|
11
|
+
* 工作目录(工作区)面板:侧栏里的当前 cwd 概览 + 持久工作区账本
|
|
12
|
+
* (channel.listWorkspaceRegistry()——整屏工作区主页左栏用的同一份数据,
|
|
13
|
+
* 见 SessionSupervisor),同时是进入整屏「工作区主页」的入口
|
|
14
|
+
* (Enter → openFullscreen('workspace');⬢ 按钮由宿主 PanelBar 画)。
|
|
15
|
+
*
|
|
16
|
+
* 行契约:每行恒定 2 行(标题+会话数 / 路径+缺失标记),所有文本经
|
|
17
|
+
* truncateWidth / spreadRow / elideMiddle 按列宽裁剪——28 列也不折行、
|
|
18
|
+
* 不裸 slice。当前工作区行用 normalizeWorkspaceCwd 归一化后比较(与
|
|
19
|
+
* /resume 的工作区分组同一口径,不自己写路径比较)。
|
|
20
|
+
*/
|
|
21
|
+
/** Each ledger row is exactly two terminal lines (selection math depends on it). */
|
|
22
|
+
const ROW_LINES = 2;
|
|
23
|
+
/** Middle elision for one unbreakable path line: keep both ends, drop the
|
|
24
|
+
* middle. Cheaper to scan than a two-line hanging indent and keeps the
|
|
25
|
+
* drive prefix and the leaf directory visible at once. CJK-aware via
|
|
26
|
+
* stringWidth; never a bare slice. */
|
|
27
|
+
function elideMiddle(text, maxWidth) {
|
|
28
|
+
if (maxWidth <= 1)
|
|
29
|
+
return maxWidth <= 0 ? '' : '…';
|
|
30
|
+
if (stringWidth(text) <= maxWidth)
|
|
31
|
+
return text;
|
|
32
|
+
const chars = [...text];
|
|
33
|
+
// Keep roughly 40% head / 60% tail (the leaf matters more than the root).
|
|
34
|
+
const headRoom = Math.max(1, Math.floor((maxWidth - 1) * 0.4));
|
|
35
|
+
let head = '';
|
|
36
|
+
let headWidth = 0;
|
|
37
|
+
for (const char of chars) {
|
|
38
|
+
const w = stringWidth(char);
|
|
39
|
+
if (headWidth + w > headRoom)
|
|
40
|
+
break;
|
|
41
|
+
head += char;
|
|
42
|
+
headWidth += w;
|
|
43
|
+
}
|
|
44
|
+
let tail = '';
|
|
45
|
+
let tailWidth = 0;
|
|
46
|
+
const tailRoom = maxWidth - 1 - headWidth;
|
|
47
|
+
for (let at = chars.length - 1; at >= 0; at -= 1) {
|
|
48
|
+
const char = chars[at];
|
|
49
|
+
const w = stringWidth(char);
|
|
50
|
+
if (tailWidth + w > tailRoom)
|
|
51
|
+
break;
|
|
52
|
+
tail = char + tail;
|
|
53
|
+
tailWidth += w;
|
|
54
|
+
}
|
|
55
|
+
return head + '…' + tail;
|
|
56
|
+
}
|
|
57
|
+
export function WorkspacePanel({ width, height, focused, visible }) {
|
|
58
|
+
const channel = useSidePanelChannel();
|
|
59
|
+
const openFullscreen = useSidePanelFullscreen();
|
|
60
|
+
// ── 数据:只在首次 visible 时起第一次拉取(visible=false 不发请求);
|
|
61
|
+
// 'r' 手动重拉;nonce 过期或卸载后不落 state。 ───────────────────────
|
|
62
|
+
const [entries, setEntries] = React.useState(null);
|
|
63
|
+
const [loadError, setLoadError] = React.useState(null);
|
|
64
|
+
const [fetchTick, setFetchTick] = React.useState(0);
|
|
65
|
+
const startedRef = React.useRef(false);
|
|
66
|
+
const nonceRef = React.useRef(0);
|
|
67
|
+
React.useEffect(() => {
|
|
68
|
+
if (visible === false || startedRef.current)
|
|
69
|
+
return;
|
|
70
|
+
startedRef.current = true;
|
|
71
|
+
setFetchTick(tick => tick + 1);
|
|
72
|
+
}, [visible]);
|
|
73
|
+
React.useEffect(() => {
|
|
74
|
+
if (fetchTick === 0)
|
|
75
|
+
return;
|
|
76
|
+
const nonce = nonceRef.current + 1;
|
|
77
|
+
nonceRef.current = nonce;
|
|
78
|
+
let live = true;
|
|
79
|
+
setLoadError(null);
|
|
80
|
+
channel.listWorkspaceRegistry()
|
|
81
|
+
.then(list => {
|
|
82
|
+
if (!live || nonce !== nonceRef.current)
|
|
83
|
+
return;
|
|
84
|
+
setEntries(list);
|
|
85
|
+
})
|
|
86
|
+
.catch((error) => {
|
|
87
|
+
if (!live || nonceRef.current !== nonce)
|
|
88
|
+
return;
|
|
89
|
+
setLoadError(error instanceof Error ? error.message : String(error));
|
|
90
|
+
});
|
|
91
|
+
return () => { live = false; };
|
|
92
|
+
}, [channel, fetchTick]);
|
|
93
|
+
// ── 选中 / hover / 自管窗口滚动 ──────────────────────────────────────────
|
|
94
|
+
// 不用 ScrollBox:它的内容平移/裁剪会让滚动后的指针事件错位
|
|
95
|
+
// (TrajectoryPanel 的 ledger 同样自己管窗口)。行恒定 2 行,
|
|
96
|
+
// 窗口按面板高度算出,滚轮/↑↓/点击都在同一个 scrollTop 上收口。
|
|
97
|
+
const [selected, setSelected] = React.useState(0);
|
|
98
|
+
const [hovered, setHovered] = React.useState(null);
|
|
99
|
+
const [scrollTop, setScrollTop] = React.useState(0);
|
|
100
|
+
const list = entries ?? [];
|
|
101
|
+
const listEmpty = entries !== null && entries.length === 0;
|
|
102
|
+
const currentKey = normalizeWorkspaceCwd(channel.cwd);
|
|
103
|
+
const focus = list.length === 0 ? 0 : Math.min(selected, list.length - 1);
|
|
104
|
+
const contentWidth = Math.max(4, width - 2);
|
|
105
|
+
const branch = channel.gitBranch;
|
|
106
|
+
// header(1) + cwd(1) + branch(0/1) + margin(1) + list title(1) + hint(1)
|
|
107
|
+
const chromeRows = 5 + (branch !== undefined && branch !== '' ? 1 : 0);
|
|
108
|
+
const visibleRows = Math.max(1, Math.floor(Math.max(4, height - chromeRows) / ROW_LINES));
|
|
109
|
+
const maxScroll = Math.max(0, list.length - visibleRows);
|
|
110
|
+
const top = Math.min(scrollTop, maxScroll);
|
|
111
|
+
const clampScroll = (next) => Math.max(0, Math.min(maxScroll, next));
|
|
112
|
+
// 选中跟随:↑/↓ 把窗口带过去。
|
|
113
|
+
const bringIntoView = (index) => {
|
|
114
|
+
setScrollTop(current => {
|
|
115
|
+
const base = Math.min(current, maxScroll);
|
|
116
|
+
if (index < base)
|
|
117
|
+
return index;
|
|
118
|
+
if (index >= base + visibleRows)
|
|
119
|
+
return index - visibleRows + 1;
|
|
120
|
+
return current;
|
|
121
|
+
});
|
|
122
|
+
};
|
|
123
|
+
React.useEffect(() => { bringIntoView(focus); }, [focus]); // eslint-disable-line react-hooks/exhaustive-deps -- 窗口跟随只看选中位
|
|
124
|
+
// ── 键盘(v2.1 分发器):↑/↓ 移动选中、Enter 开整屏主页、r 重拉;
|
|
125
|
+
// Esc 返回 false 让宿主把焦点还回聊天。 ─────────────────────────────────────
|
|
126
|
+
usePanelInput((input, key) => {
|
|
127
|
+
if (key.escape === true)
|
|
128
|
+
return false;
|
|
129
|
+
if (key.upArrow === true) {
|
|
130
|
+
setSelected(i => Math.max(0, (list.length === 0 ? 0 : Math.min(i, list.length - 1)) - 1));
|
|
131
|
+
return true;
|
|
132
|
+
}
|
|
133
|
+
if (key.downArrow === true) {
|
|
134
|
+
setSelected(i => list.length === 0 ? 0 : Math.min(list.length - 1, Math.min(i, list.length - 1) + 1));
|
|
135
|
+
return true;
|
|
136
|
+
}
|
|
137
|
+
if (key.return_ === true) {
|
|
138
|
+
openFullscreen?.('workspace');
|
|
139
|
+
return true;
|
|
140
|
+
}
|
|
141
|
+
// ctrl/meta 修饰时不认(Ctrl+R 是输入历史搜索,落到面板会变成误重拉)。
|
|
142
|
+
if (input === 'r' && !key.ctrl && !key.meta) {
|
|
143
|
+
setFetchTick(tick => tick + 1);
|
|
144
|
+
return true;
|
|
145
|
+
}
|
|
146
|
+
return false;
|
|
147
|
+
}, { active: focused && visible });
|
|
148
|
+
// ── 几何:只按面板自身的 width/height,不读终端尺寸 ─────────────────────────────
|
|
149
|
+
const cwd = channel.displayCwd !== '' ? channel.displayCwd : channel.cwd;
|
|
150
|
+
const branchLabel = t('info-row-branch');
|
|
151
|
+
return (_jsxs(Box, { flexDirection: "column", paddingX: 1, width: width, height: height, overflow: "hidden", children: [_jsxs(Box, { flexDirection: "column", flexShrink: 0, marginBottom: 1, children: [_jsx(Text, { color: "accent", bold: true, children: t('panel-workspace-current') }), _jsx(Box, { paddingLeft: 1, children: _jsx(Text, { color: "inactive", wrap: "truncate", children: elideMiddle(cwd, contentWidth - 1) }) }), branch !== undefined && branch !== '' && (_jsxs(Box, { paddingLeft: 1, flexDirection: "row", gap: 1, children: [_jsx(Text, { color: "inactive", children: branchLabel }), _jsx(Text, { wrap: "truncate", children: truncateWidth(branch, Math.max(1, contentWidth - stringWidth(branchLabel) - 3)) })] }))] }), _jsx(Box, { flexShrink: 0, children: _jsx(Text, { dimColor: true, children: truncateWidth(t('panel-workspace-list', { n: list.length }), contentWidth) }) }), loadError !== null ? (_jsx(Box, { paddingLeft: 1, marginTop: 1, children: _jsx(Text, { color: "error", wrap: "truncate", children: truncateWidth(t('panel-workspace-failed', { err: loadError }), contentWidth - 1) }) })) : entries === null ? (_jsx(Box, { paddingLeft: 1, marginTop: 1, children: _jsx(Text, { dimColor: true, children: truncateWidth(t('panel-workspace-loading'), contentWidth - 1) }) })) : listEmpty ? (_jsx(Box, { paddingLeft: 1, marginTop: 1, children: _jsx(Text, { dimColor: true, wrap: "truncate", children: truncateWidth(t('panel-workspace-empty'), contentWidth - 1) }) })) : (_jsx(Box, { flexDirection: "column", flexGrow: 1, flexShrink: 1, overflow: "hidden", onWheel: (event) => {
|
|
152
|
+
setScrollTop(current => clampScroll(Math.min(current, maxScroll) + (event.deltaY > 0 ? 1 : event.deltaY < 0 ? -1 : 0)));
|
|
153
|
+
}, children: list.slice(top, top + visibleRows).map((entry, offset) => {
|
|
154
|
+
const index = top + offset;
|
|
155
|
+
return (_jsx(WorkspaceRow, { index: index, entry: entry, current: normalizeWorkspaceCwd(entry.path) === currentKey, selected: index === focus, hovered: hovered === index, width: contentWidth, onSelect: () => { setSelected(index); setScrollTop(clampScroll(Math.min(top, maxScroll))); setHovered(index); }, onHoverChange: setHovered }, entry.id));
|
|
156
|
+
}) })), _jsx(Box, { flexShrink: 0, children: _jsx(Text, { dimColor: true, italic: true, wrap: "truncate", children: truncateWidth(t('panel-workspace-hint'), contentWidth) }) })] }));
|
|
157
|
+
}
|
|
158
|
+
/** One registered-workspace ledger row: title + session count on line 1,
|
|
159
|
+
* directory (dim) + missing marker on line 2. Exactly two lines, always —
|
|
160
|
+
* spreadRow/truncateWidth everywhere, never a bare slice, never a fold. */
|
|
161
|
+
function WorkspaceRow({ entry, index, current, selected, hovered, width, onSelect, onHoverChange }) {
|
|
162
|
+
const body = Math.max(4, width - 2);
|
|
163
|
+
const countLabel = t('panel-workspace-sessions', { n: entry.sessionCount });
|
|
164
|
+
const head = spreadRow(entry.title, countLabel, body);
|
|
165
|
+
const missingLabel = entry.present === false ? t('panel-workspace-missing') : '';
|
|
166
|
+
const tail = spreadRow(entry.path, missingLabel, body);
|
|
167
|
+
return (_jsxs(Box, { flexDirection: "column", flexShrink: 0, onClick: (event) => {
|
|
168
|
+
event.stopImmediatePropagation();
|
|
169
|
+
onSelect();
|
|
170
|
+
}, onMouseEnter: () => onHoverChange(index), onMouseLeave: () => onHoverChange(prev => (prev === index ? null : prev)), children: [_jsxs(Box, { height: 1, flexShrink: 0, overflow: "hidden", children: [_jsx(Box, { width: 2, flexShrink: 0, children: _jsxs(Text, { color: selected || hovered ? 'accent' : undefined, children: [selected || hovered ? '❯' : ' ', current ? '●' : ' '] }) }), _jsx(Text, { bold: selected, color: selected || hovered ? 'accent' : undefined, wrap: "truncate-end", children: head.left + ' '.repeat(head.gap) + head.right })] }), _jsxs(Box, { height: 1, paddingLeft: 2, flexShrink: 0, overflow: "hidden", children: [_jsx(Text, { dimColor: true, wrap: "truncate-end", children: tail.left + ' '.repeat(tail.gap) }), tail.right !== '' && _jsx(Text, { color: "warning", children: tail.right })] })] }));
|
|
171
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builtinPanels.d.ts","sourceRoot":"","sources":["../../../../src/components/sidePanel/builtinPanels.tsx"],"names":[],"mappings":"AAsLA,2BAA2B;AAC3B,wBAAgB,qBAAqB,IAAI,IAAI,CAwF5C"}
|