dsh-mixxed / dsh-client-ui-filesystem-manager

목록에 있음

A customized DeepSeek Harness filetree manager UI plugin.

master도구 소스 보기

설치

npm pack # produces dsh-mixxed-dsh-client-ui-filesystem-manager-<version>.tgz

이 명령은 GitHub 저장소 주소에서 생성됩니다. 실행 전에 업스트림 README와 소스를 검토하고 재현성이 필요하면 release 또는 commit을 고정하세요.

README

유지 관리자가 작성한 문서 스냅샷입니다.

GitHub에서 보기 ↗
커밋 58a27ed동기화 2026. 8. 18.

dsh-client-ui-filesystem-manager

English · 中文

A dsh plugin that adds a Files (文件) tab to the conversation window. Pick the tab and the session area becomes a VSCode-style explorer: a file tree of the current workspace on the left, and a file viewer on the right.

Built as a fully out-of-tree plugin — the deepseek-harness source stays untouched. It registers into the same conversation.view ring as the shipped Trajectory tab, serves the tree and file contents over its own HTTP routes (ctx.webServer), and is styled entirely with the dsh design tokens (--dsw-*) and ui-primitives components.

Install

  1. Install the plugin from npm (published as @dsh-mixxed/dsh-client-ui-filesystem-manager):

    dsh plugin --profile web add @dsh-mixxed/dsh-client-ui-filesystem-manager
    

    The package declares dsh.bundle (its bundled cordis.patch.yml), so dsh plugin add automatically appends it to the profile's dsh.profile.bundles layer stack and the plugin mounts on the next boot — no manual cordis.patch.yml editing.

  2. Restart the profile (new plugins are discovered at boot), open a session, and click the 文件 / Files tab.

Building from source (development / offline)

pnpm install
pnpm run typecheck
pnpm test
pnpm run build
npm pack          # produces dsh-mixxed-dsh-client-ui-filesystem-manager-<version>.tgz
dsh plugin --profile <name> add ./dsh-mixxed-dsh-client-ui-filesystem-manager-<version>.tgz

Features

  • Third conversation tab: 对话 / 轨迹 / 文件, registered into the conversation.view ring (order 20, after Trajectory)
  • VSCode-style split view: draggable divider, left = file tree, right = file viewer
  • Lazy file tree: directories expand on demand (one listing request per directory), directories-first stable ordering, indent guides, VSCode-style language glyphs (JS/TS, HTML, CSS, JSON, Shell, scripting, compiled languages, config, and Markdown each use a distinct dsh built-in icon), hidden files shown, empty/loading/error states, refresh button
  • Type-aware viewer:
    • Markdown (.md) rendered through the house MarkdownText (no line numbers)
    • Every other text file (code/JSON included) through the house ReadBlock: VSCode-style line-number gutter + per-extension shiki highlighting (unknown extensions fall back to plain monospace), with a copy button
    • Images inlined as base64 (png/jpg/jpeg/gif/webp/svg/bmp/ico/avif)
    • Binary files and oversized files get a clear state (with size) and an "open in system app" shortcut
  • Viewer toolbar: refresh, open in system default app, copy relative path, download
  • Full-height independent scrolling: the input dialog hides while Files is active; the two panes stretch to the column bottom (level with the app sidebar) and the tree and the file content scroll independently, the content card itself filling the pane with the scrollbar inside it
  • Chat links open in the Files tab: read / edit / write tool rows, produced-file chips, and prose file mentions switch to the Files tab and open the file there — workspace-contained paths only; paths outside the workspace keep the system default open
  • Per-session caching: listings and file contents are fetched once per session (single-flight); connection/reset clears the caches; tab re-entry is instant
  • Workspace-contained access: every request resolves against the session's workspace root through ctx.fs and enforces canonical containment — no raw path from the browser is ever trusted
  • i18n: 中文 / English, theme tokens follow the active light/dark theme

Usage notes (harness behavior, accepted as-is)

  • The tree always shows the current session's workspace; switching workspace/session rebuilds the tree.
  • Listings and contents are cached for the session — file changes on disk appear after a manual refresh (tree header or viewer toolbar).
  • Files larger than the text cap (512 KiB by default) are not streamed into the viewer; use "open in system app" instead.
  • Viewing is read-only: no edit/write/rename/delete, no code indexing or search.

Verify

dsh --profile <name> --dump-config | Select-String ui-filesystem-manager

The composed config shows the ui-filesystem-manager row, and $DSH_HOME/profiles/<name>/package.json lists @dsh-mixxed/dsh-client-ui-filesystem-manager under dsh.profile.bundles (auto-appended by dsh plugin add).

End-to-end (boot the profile on a spare port, then):

dsh --profile <name> --port 3800   # in one shell
node scripts/e2e.mjs               # drives Chrome: tabs → tree → expand → viewer

Config (optional)

Tune the read caps from your profile's own cordis.patch.yml — the user layer is applied after the bundle layer, so an id-targeted patch overrides the bundled mount row:

- id: ui-filesystem-manager
  name: "@dsh-mixxed/dsh-client-ui-filesystem-manager"
  config:
    maxTextBytes: 524288     # text file cap before "file too large" (default 512 KiB)
    maxImageBytes: 8388608   # image byte cap for the inline viewer (default 8 MiB)

License

MIT

프로젝트 파일 및 신호

표시된 항목은 디렉터리 스냅샷에서 감지된 공개 저장소 신호입니다.

테스트감지됨

저장소 정보

언어
TypeScript
라이선스
NOASSERTION
마지막 업데이트
2026. 8. 16. 오전 11:45

신중하게 설치하기

소스 코드, 권한, 수명 주기 스크립트, 의존성 및 네트워크 접근을 검토하고 신뢰하지 않는 플러그인은 격리 환경에서 테스트하세요.