Skip to content
dsh.fish
Bundle

@lijian-ui/dsh-term

Panel-style local + SSH terminal for the DSH web GUI: real PTY sessions (node-pty), multi-tab terminal panel with xterm.js, workspace-cwd shells — hot-pluggable via a profile bundle without any dsh source changes

Source
lijian-ui
stars
1 stars
License
Apache-2.0
Updated
Updated yesterday

Readme

# @lijian-ui/dsh-term

Panel-style local terminal for the DSH web GUI.

- **Real PTY sessions** via [`node-pty`](https://github.com/microsoft/node-pty) — a genuine local shell, not a curated command runner.
- **Multi-tab terminal panel** built on [xterm.js](https://xtermjs.org/), docked in the right-side panel (alongside `@lijian-ui/dsh-file-manager`).
- **Workspace cwd** — each session starts in the current workspace root.
- **Hot-pluggable** — loaded as a profile bundle; no changes to DSH source are required.

> This is the **A edition**: local user terminal only. A planned **B edition** adds SSH connections and per-session shell selection.

## Install

```bash
dsh plugin add @lijian-ui/dsh-term
```

Or add `@lijian-ui/dsh-term` to your profile's `bundles` / `dependencies` and reference it from `cordis.yml`.

## Behavior

- Default state is **collapsed** (closed). Open it from the right-side panel launcher (the "终端" button) — it docks as the rightmost column next to the file-manager panel.
- Sessions are managed by a host-side service (`src/host/pty-service.ts`) exposed over loopback-only HTTP + SSE routes (`src/host/routes.ts`). The client renders them with xterm.js and syncs resize/input.

## Development

```bash
npm install
npm run build      # tsc -b && tsdown -> lib/
npm run watch      # rebuild on change
npm test           # vitest
```

## License

Apache-2.0

Install

dsh plugin --profile web add github:lijian-ui/dsh-term

Profile: web

  • This package builds from source on install. pnpm will ask you to allow its build script — that is permission to run the package’s code on your machine, outside the agent sandbox. Only allow sources you trust.
  • This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.
Source