# dsh-deliverables-toggle **Add manual expand and collapse controls to the produced-files row at the end of a DeepSeek Harness turn.** **English** | [简体中文](README.md) ## What problem does it solve? DeepSeek Harness shows a produced-files row under a finished assistant turn when the turn created or modified files such as `package.json`, `tauri.conf.json`, or `Cargo.toml`. When there are too many files or the file names are long, the built-in row automatically collapses into one line and shows a label such as `+ 3 files`. The default UI tells you that more files exist, but it does not let you expand the row manually. `dsh-deliverables-toggle` replaces that produced-files row with an expandable version: - The default view still uses the one-line adaptive summary. - When files are hidden, clicking `+ N files` expands the full list. - The expanded list shows every produced file as a chip and wraps across lines. - Clicking `Collapse` returns to the adaptive collapsed view. - File chips still open their files. - `Show in folder` remains available. ## Preview Collapsed: ![Produced-files collapsed state](docs/assets/collapsed.png) Expanded: ![Produced-files expanded state](docs/assets/expanded.png) ## Installation Install the local plugin into a DeepSeek Harness web profile: ```sh dsh plugin --profile web add dsh-deliverables-toggle ``` If you launch DSH through `pnpm dsh`, use: ```sh pnpm dsh plugin --profile web add dsh-deliverables-toggle ``` Restart the DSH Web server after installation, then refresh the existing Web page. > The default Web URL is usually `http://127.0.0.1:3080`. Do not start a replacement Web server for verification; let the current DSH Web profile load this plugin. ## Development ```sh pnpm install pnpm run typecheck pnpm run build pnpm run check ``` Build outputs are written to `lib/`: - `lib/index.js`: host-side plugin entry. - `lib/client.js`: Web client plugin entry. - `lib/types/`: TypeScript declaration files. ## How it works The built-in produced-files row is provided by `@deepseek-ai/dsh-client-ui-deliverables`. It registers into the Web client's `conversation.chat.turnTail` chain slot. This plugin registers another `conversation.chat.turnTail` entry with a higher priority: ```ts priority: -100 ``` When a finished turn has produced files, this plugin is selected before the built-in produced-files row. Turns without produced files are not claimed by this plugin and fall through to later chain entries. The plugin reads the existing turn-scoped `deliverables` data. It does not add model-visible data, does not modify the session log, and does not register tools. ## Model Experience | Aspect | Effect | | --- | --- | | Token cost | None. The plugin only changes Web UI rendering and never enters a model request. | | Tool calls | None. The plugin registers no tool. | | Session log | Unchanged. The plugin only reads existing `deliverables` turn data. | | Prompt | Unchanged. The plugin registers no system-prompt content. | ## Known limitations - This is an override UI plugin. It duplicates the built-in produced-files row's selection and measuring behavior, so it may need updates when upstream `ui-deliverables` changes. - The plugin depends on the `conversation.chat.turnTail` chain slot and turn-scoped `deliverables` data. If DSH renames these client interfaces, the plugin must be updated. - The plugin only changes the produced-files row at the end of a turn. It does not change file links inside assistant prose. ## License MIT