turtle-uiDeepSeek Harness plugin
as is, no warranty
- Stars
- 10
- Forks
- 3
- License
- BSD-3-Clause
- Last commit
- Aug 13, 2026
Overview
as is, no warranty
Original README
Cached from the project repository on Sep 3, 2026. This is source content, separate from the Agents.md review above.
Turtle UI
The very first UI of dsh in a Friday afternoon
This repository contains the former packages/ui/tui implementation, its unit and terminal snapshot tests, and a dsh profile bundle patch. The TUI owns terminal presentation and input; DeepSeek Harness owns the agent, model, tools, persistence, and dsh launcher.
Development
Keep this repository and DeepSeek Harness as siblings:
~/git/deepseek-harness ~/git/turtle-ui
Install and build the sibling Harness, then Turtle UI:
sh(cd ../deepseek-harness && pnpm install && pnpm run build) pnpm install pnpm run build
The peer APIs come from the sibling Harness checkout. The standalone TypeScript and Vitest configurations intentionally resolve those sources through ../deepseek-harness; Vitest uses the Harness build for the goal host module instead of mixing that source module with transitive built packages. The patched @earendil-works/pi-tui is a devDependency bundled into lib/ at build time, so consumers install no pi-tui and need no patchedDependencies.
Run
Turtle UI is a dsh profile bundle: its package.json declares "dsh": { "bundle": { "patch": "./cordis.patch.yml" } }, so installing it into a profile activates the patch layer automatically.
From a local checkout, build and install a copied file: package so its Harness peers resolve through the profile's managed fallback. Re-run the add after rebuilding to refresh the copy:
shpnpm run build dsh plugin --profile tui add file:. dsh --profile tui
From git, with no checkout: the prepare script transpiles lib/ on the consumer's machine during install. pnpm ≥10 blocks that build until you allow it, so the first add fails with an allowBuilds hint; copy the exact key pnpm prints into the profile's pnpm-workspace.yaml and re-run:
shdsh plugin --profile tui add github:deepseek-harness/turtle-ui # fails with the allowBuilds key # add the printed key under allowBuilds in ~/.dsh/profiles/tui/pnpm-workspace.yaml dsh plugin --profile tui add github:deepseek-harness/turtle-ui # builds and activates dsh --profile tui
The prepare build (tsdown.prepare.config.ts) transpiles without type checking — the repo's type graph needs the sibling harness checkout, which consumers don't have. pnpm run typecheck in a sibling-checkout environment remains the type gate.
The bundle layer rides over @deepseek-ai/dsh-base and binds the TUI and configured agent to one durable session. The ordinary tui-startup provider injects the launcher's immutable ctx.cmdlineArgs, parses --resume, --session, and this app's --help, then provides tuiStartup; session-bound rows inject that service and read it from lazy config, so they cannot activate on the wrong session. A bare dsh --profile tui mints a fresh session id on every launch, --session <id> names a fresh session explicitly, and --resume <session> continues a persisted session. In-app /resume handoff and exit-message behavior still need the removed TUI-specific launcher and remain unavailable.
Checks
shpnpm run typecheck pnpm test pnpm run build