편집자 노트

会话删除

Recoverable conversation deletion for DeepSeek Harness: adds a Delete conversation item to the session row … menu and registers the /delete-conversation human command.

이것은 DeepSeek Harness(DSH) 플러그인입니다. 이 사이트는 GitHub README, 설치 정보, 유지보수 상태, 공개 보안 시그널을 모아 보여줍니다.

업스트림에서 중국어 README를 제공하지 않아 저장소 원본 내용을 표시합니다.

DSH-DELETE

English | 中文

Recoverable conversation deletion for DeepSeek Harness: adds a Delete conversation item to the session row menu and registers the /delete-conversation human command. After confirmation the target Session enters a deletion queue and is immediately hidden from the list through the Workspace persisted archive projection; on the next DSH startup the plugin validates the Session's full lifecycle before the Web Workspace builds its session index, then atomically moves its log directory into a recoverable trash.

Derived from omdsh-dev/dsh-essential (MIT, Copyright (c) 2026 ExDragine). This repository renames the package / Remote IDs / UI class names to dsh-delete and adds a stateDir default (~/.dsh/conversation-trash) so marketplace one-click installs need no manual config.

Why deletion is two-phase

DSH's Session persistence is append-only and the public services expose no delete method; an active Agent's destroy handle belongs to its creator only. The plugin cannot safely move logs out from under an active writer. Deletion therefore happens in two phases: the running process only writes a durable request and hides the row immediately; the next startup completes the log move before any session recovery. This boundary avoids log rebuilds, partial writes, and lifecycle races.

Install

Option 1: DSH plugin marketplace (recommended)

This repository ships built artifacts (lib/), so marketplace one-click install needs no build and no config:

  1. DSH Web GUI → Settings → DSH plugin marketplace
  2. Search DSH-DELETE, click Install
  3. Restart DSH

Option 2: official bundle install

node /path/to/DSH/apps/cli/lib/bin.js plugin --profile web add /path/to/DSH-DELETE

Restart DSH afterwards. The bundle mounts dsh-delete and makes the Web Workspace wait for the conversationDeletion service to finish startup recovery before building the Session index.

Option 3: write cordis.patch.yml directly

- insert:
    - id: dsh-delete
      name: dsh-delete
      config:
        stateDir: /absolute/path/to/conversation-trash
- id: workspace
  inject: [conversationDeletion]

stateDir must be absolute and outside Session artifact directories; it defaults to ~/.dsh/conversation-trash.

Usage

  • Open the target session's menu in the session list and choose Delete conversation. Confirmation is an in-page card (title "Confirm deleting this conversation?", actions "Cancel / Delete conversation") — no native browser dialogs.
  • A confirmed request archives the Session immediately, hiding it across all session groups (the row disappearing is the success feedback).
  • If the request was written but the archive call failed, the card reports "queued but cannot hide yet" instead of misreporting a failed deletion.
  • Human command: /delete-conversation CONFIRM (deletes the current conversation); /delete-conversation <session-id> CONFIRM (deletes another conversation by Session id).

After confirming, restart DSH; logs are moved to <stateDir>/trash/<session-lifecycle-key>/. deletion.json inside records the original directory.

Recovery

Stop DSH, delete the deletion.json inside the recovery directory, then move that directory back to originalDirectory. Do not recover while DSH is running.

Config

FieldTypeDefaultDescription
stateDirstring~/.dsh/conversation-trashDirectory holding pending requests and the recoverable trash; must be absolute and outside Session artifact directories
commandNamestringdelete-conversationOptional human-command alias (no leading /); the menu always uses the stable /delete-conversation

Safety and recovery semantics

  • The command requires the literal CONFIRM; nothing is written without it.
  • Requests bind sessionId, createdAt, and cwd; a reused id will not delete a new Session lifecycle.
  • The move re-validates the persisted list, backend location, and full inspect results.
  • The product operation uses same-filesystem directory rename, never unlink of Session logs; post-move crashes are recoverable.
  • Validation/move failures keep the pending request and record an error; the original log stays untouched.
  • Per-Session JSONL backends only: SQLite has no independent artifact location, and the plugin refuses it explicitly.
  • Not permanent erasure: logs go to a recoverable trash; retention and final cleanup are deployment-administrator policy.

Building from source

Requires Node ^22.19.0 || >=24.0.0 (tsdown needs Promise.withResolvers). On Windows keep the Node 22+ used for building first in PATH:

pnpm install
pnpm add -D -w unrun   # optional peer of tsdown; must be explicit when autoInstallPeers=false
pnpm run build
pnpm run verify:self-contained
pnpm run typecheck
pnpm test

License

MIT. Original copyright belongs to dsh-essential (Copyright (c) 2026 ExDragine); see LICENSE.

REPOSITORY SIGNALS

보안 및 설치 증거

이 점수는 공개 저장소 메타데이터와 이 사이트에 등록된 설치 증거에만 기반하며, 코드 보안 감사와 다릅니다.

출처 추적 가능

공개 플러그인 카탈로그에서 왔으며, 공개 GitHub 저장소로 연결됩니다.

라이선스

저장소가 MIT 라이선스를 선언했습니다.

유지보수 활동

최근 180일 내 코드 업데이트가 있습니다.

설치 증거

재현 가능한 정확한 설치 메타데이터가 아직 등록되지 않았습니다. 저장소 설명에 따라 직접 확인하세요.

설치 라이프사이클 스크립트

검사한 패키지 메타데이터에 설치 라이프사이클 스크립트가 선언되지 않았습니다.