@yiln-dsh/dsh-plugin-terminal-tab
v0.1.12
Published
DSH Web bundle plugin that adds per-session persistent terminal tabs.
Readme
@yiln-dsh/dsh-plugin-terminal-tab
A DSH Web bundle plugin that adds persistent shell terminals to each live conversation session.
- Shows a
+button inside the terminal tab bar for creating another terminal. - Automatically names new terminals as
终端 1,终端 2, and so on; double-click an existing tab to rename it. - Shows a closing spinner and filters stale list responses while a terminal is being closed, so a fast click cannot resurrect the tab.
- Contributes the terminal as a page tab in the DSH Web right Sidebar (
ctx.sidebarRightTabs+ thesidebar.right.pane.tabseat), so the conversation keeps only its own 对话 / 轨迹 tabs. Because the pane is a sibling column of the conversation rather than a view inside it, the plugin no longer touches the conversation composer or its width handles. - Renders multiple shell tabs inside the terminal view with the actual
@xterm/xtermterminal emulator. xterm.js owns ANSI rendering, scrollback, cursor, keyboard input and composition; there is no separate input bar. - Each PTY tab opens its own WebSocket at
/_dsh/terminal-tab/ws; xterm.jsonDatabytes flow to that socket and PTY output is written back withterminal.write(). - The terminal content stays in the same center conversation area; it does not create a details column or a separate layout panel.
- A stale terminal id from a Host/client update is treated as an empty read, so polling cannot surface a terminal-ownership error after a hot reload.
Layout
| File | Content |
| --- | --- |
| index.js | Host HTTP routes plus the /_dsh/terminal-tab/ws upgrade route, backed by agents and each Agent's scoped subprocess.spawnTerminal PTY primitive. |
| client.js | Browser bundle that loads @xterm/xterm, registers the terminal page kind in ctx.sidebarRightTabs and its body in the sidebar.right.pane.tab seat, and binds one xterm.js instance to each WebSocket. |
| cordis.patch.yml | Web-profile composition patch for the Host row. |
Install
The published package is @yiln-dsh/[email protected].
Local source directory:
dsh plugin --profile web add file:/path/to/dsh-plugin-terminal-tabThe plugin requires the web profile's built-in subprocess.spawnTerminal PTY
primitive and installs @xterm/xterm plus ws as runtime dependencies.
Restart dsh web after installing or changing the bundle composition.
