Skip to content
dsh.fish
Bundle

dsh-plugin-claude-import

Import Claude Code sessions into DeepSeek Harness: agent tools (claude_session_list / claude_session_import) plus a Web GUI one-click import dock.

Source
changhang155
stars
1 stars
License
MIT
Updated
Updated 14 days ago

Readme

# dsh-plugin-claude-import

Import [Claude Code](https://docs.anthropic.com/en/docs/claude-code) sessions (`~/.claude/projects/*.jsonl`) into [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) as **continuable context** — an auto-summary chain, the last task, the file footprint, and the tail state — rather than an event replay.

The plugin is the DSH-native port of [claude-code-to-dsh](https://github.com/changhang155/claude-code-to-dsh) (a zero-dependency Python CLI that produces the same seed / markdown documents).

## Features

- **Agent tools** (host half):
  - `claude_session_list` — list sessions under `~/.claude/projects` (id / project / title / mtime / size / message stats).
  - `claude_session_import` — import one session as a **seed** context block (paste-ready for a new session) or a full **markdown** continuation document; with `createSession=true` it creates a new DSH session in the Claude session's project directory and delivers the context as its first message.
- **Web GUI** (client half): a "Claude 导入" action in the conversation header — enter a session id (empty = most recent) and the plugin creates a new DSH session, opens it, and seeds the import instruction.

## Requirements

- `dsh` ≥ `0.1.0-rc.6` (npm: `npx @deepseek-ai/dsh web`), Node.js ≥ 18.
- A local Claude Code installation with sessions under `~/.claude/projects` (the plugin reads them from the dsh host process).

## Installation

### One command (bundle flow, recommended)

```sh
dsh plugin --profile web add dsh-plugin-claude-import
```

The package declares `dsh.bundle`, so `dsh plugin` links it, appends it to the profile's bundles, and applies its patch layer (which inserts the plugin row). Restart `dsh web` and verify:

```sh
dsh --profile web --dump-config | grep claude
```

### Manual (into an existing profile)

```sh
cd ~/.dsh/profiles/web
pnpm add dsh-plugin-claude-import
```

Then register the row in `~/.dsh/profiles/web/cordis.patch.yml`:

```yaml
- insert:
    - id: claude-import
      name: 'dsh-plugin-claude-import'
```

Restart `dsh web`.

### From GitHub

No build step is required (plain JS), so a git install works without a `prepare` script:

```sh
dsh plugin --profile web add github:changhang155/dsh-plugin-claude-import#<sha>
```

If pnpm refuses to run scripts, allow the build in the profile's `pnpm-workspace.yaml` (`allowBuilds: dsh-plugin-claude-import: true`) and re-run the add.

### Peer dependencies

The plugin uses `@deepseek-ai/cordis`, `@deepseek-ai/dsh-tools`, `@deepseek-ai/dsh-host-apiproxy`, and `@deepseek-ai/schemastery` as peers, resolved from the dsh installation. When installing into a fresh profile, ensure those are present (the web profile already bundles them; a bare profile may need `pnpm add` of the peers or symlinks to the dsh install's `node_modules/@deepseek-ai`).

## Usage

**From the agent:** ask for the list, then import:

```
请列出 Claude Code 的历史会话。
把会话 <id> 导入为 seed,并在其项目目录下新建一个 DSH 会话。
```

The tool `claude_session_import` accepts:

| parameter | meaning |
|---|---|
| `sessionId` | 8-char prefix, full id, or a full `.jsonl` path |
| `format` | `seed` (default) or `markdown` |
| `createSession` | create a new DSH session in the Claude project dir and deliver the context as its first message |

**From the Web GUI:** click **Claude 导入** in the conversation header, optionally type a session id, and press 导入. A new session is created and opened; its agent reports the title, touched files, and open threads.

## Compatibility

DeepSeek Harness is in developer preview — **compatibility-breaking changes are expected**. This plugin targets the `0.1.0-rc.6` npm line (peer ranges use `^0.1.0-rc.6`). If a later rc breaks the client contract (`window.__ModuleLoader__` / slot injection), update the plugin or pin your dsh version.

The import is heuristic: session titles come from Claude's `ai-title` / `summary` rows; the "touched files" list only covers Write/Edit (and Read) tool calls; local-command-mode sessions (mostly command injection) are detected and annotated rather than misread as conversation.

## Development

```sh
git clone https://github.com/changhang155/dsh-plugin-claude-import
cd dsh-plugin-claude-import
npm test            # node --test tests/ (no dependencies)
node --check lib/index.js lib/client.js lib/parse.js
```

Layout:

- `lib/index.js` — host half: registers the two agent tools (`defineTool` from `@deepseek-ai/dsh-tools`).
- `lib/client.js` — client half: the Web GUI dock (loaded via the client runner).
- `lib/parse.js` — pure-Node Claude Code JSONL parser (no dependencies).
- `cordis.patch.yml` — the bundle patch layer that activates the plugin.

## License

MIT — see [LICENSE](LICENSE). Mark the repository with the [`dsh-plugin`](https://github.com/topics/dsh-plugin) topic for discoverability.

Install

dsh plugin --profile web add github:changhang155/dsh-plugin-claude-import

Profile: web

  • This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.
Source