# dsh-jmcomic

简体中文 · [English](./README.md)

一个 [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) 插件。
在侧栏加一个漫画按钮：搜索下载禁漫（JMComic / 18comic）、浏览本地漫画库，
并直接在 DSH 里开窗阅读。

插件自带下载内核和阅读器前端，不装 jmcomic 的 pip 包也能跑。

## 兼容性

在 **DSH 0.2.0-rc.2**（web profile）上实测通过，0.1.5-rc.1 与 0.1.2-rc.1 上也能正常运行。
这些版本就是 `package.json` 里 `dsh.engines.dsh` 声明的范围，宿主和插件管理器
不必解析这份文档就能读到同样的信息。

这里**故意不声明** `@deepseek-ai/*` 的 `peerDependencies`：预发布范围会排除掉更新的
DSH 版本，导致宿主的兼容门禁直接跳过本插件。

用到 `sidebar.footer.action` 与 `settings.section` 两个槽位、宿主的
`workspaces.pickDirectory`，以及 `webServer.register` 注册本地路由。
没有改动 DSH 本体。

## 安装

1. 安装插件 —— 从 npm：

   ```bash
   dsh plugin --profile web add dsh-jmcomic
   ```

   或直接从 GitHub：

   ```bash
   dsh plugin --profile web add github:lywusichen/dsh-jmcomic
   ```

2. 重启 DSH。

3. 侧栏底部（技能按钮上方）会出现漫画按钮。首次使用会让你选一个本地漫画库目录；
   如果没自动识别到 Python，去 **设置 → jmcomic 设置** 里填路径。

## 功能

- **小窗** —— 用编号或名称搜索并下载。绑定本地文件夹后，小窗会显示最近看的两三本
  封面，点封面直接开始读。
- **漫画库大窗** —— 本地文件夹里全部漫画的网格。点封面进去看章节列表。
- **阅读器** —— 拖任意边或角调整大小，拖标题栏移动，尺寸和位置会记住。重新打开
  同一本会回到上次读到的章节和页数，底部还有页码跳转框。
- 悬停卡片会出现删除按钮。只允许删库目录下的漫画，根目录和系统目录受保护。
- 下载进行时，窗口顶部显示 `downloading` 横幅。

## 截图

![侧栏漫画按钮](assets/comic-trigger.png)

![小窗：搜索与本地封面](assets/comic-pop.png)

![漫画库大窗](assets/comic-library.png)

## 离线运行

插件在 `vendor/` 下内置了四样东西，所以一台只有 DSH 和 Python 的机器就能跑：

- `jmcomic` 2.7.3 源码 —— 下载内核
- `commonX` —— 内核的支撑包
- `jmcomic-ai` —— 辅助脚本
- 阅读器前端

缺二进制依赖时会降级，而不是直接失败：

| 缺失 | 行为 |
|---|---|
| curl_cffi | 改用 `requests` |
| Pillow | 不解码图片，文件能下但不能预览 |
| pycryptodome | 提示安装 |

## 已知限制

- 需要 Python。插件通过一个 Python 桥接层调用下载内核，没有用 JavaScript 重写它。
- 下载直连禁漫的 APP API 域名，因此不需要代理，也不需要绕 Cloudflare。如果你的
  网络封了该域名，插件没有备用通道。
- 插件不替你管理漫画库：它只下载到你绑定的目录，并读取那里已有的内容。

## 构建

```bash
npm install   # esbuild
npm run build # 生成 lib/client.js 和 lib/server.cjs
```

两个产物都要提交进仓库。git 方式安装直接消费它们。

## 配置

- 设置文件：`~/.dsh/plugins/dsh-jmcomic/settings.json`（Windows）
- 目录规则：`Bd/{Atitle}/第{Pindex}話`
- 并发刻意压低：图片 3，写真集 1。

## 声明

下载内核、阅读器前端和部分辅助脚本来自 hect0x7 的项目，已内置在 `vendor/` 目录：

- [JMComic-Crawler-Python](https://github.com/hect0x7/JMComic-Crawler-Python) —— 下载内核
- [jm-view-server](https://github.com/hect0x7/jm-view-server) —— 阅读器前端
- [jmcomic-ai](https://github.com/hect0x7/jmcomic-ai) —— 辅助脚本

版权归原作者所有。

## 许可

[MIT](LICENSE)
