dsh-novel-writer 0.4.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/INSTALL.md +36 -0
- package/README.md +44 -61
- package/cordis.patch.yml +7 -1
- package/lib/analysis.js +716 -0
- package/lib/client.js +561 -0
- package/lib/index.js +998 -457
- package/package.json +15 -8
- package/skills/novel-writing/SKILL.md +50 -0
- package/test/client-test.mjs +34 -0
- package/test/e2e-test.mjs +78 -0
- package/test/pattern-test.mjs +48 -0
- package/client.js +0 -72
- package/lib/pattern.js +0 -125
package/INSTALL.md
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# dsh-novel-writer v0.6.0 — 安装指南
|
|
2
|
+
|
|
3
|
+
基于 v0.5.0 合并版的工程化升级。新增:分析缓存/报告导出、风格自检、伏笔登记表、关键词三字组与疑似人名、情感词典去噪、局域网开关可选放行。
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
dsh-novel-writer-v0.6.0/
|
|
7
|
+
├── lib/
|
|
8
|
+
│ ├── index.js # 宿主端(10 个工具 + state 路由 + 缓存)
|
|
9
|
+
│ ├── analysis.js # 句式模式分析引擎(含 fingerprintSimilarity / styleDiffs)
|
|
10
|
+
│ └── client.js # 浏览器端(侧边栏面板 + 设置页状态卡片)
|
|
11
|
+
├── test/ # 引擎 + client + e2e 测试
|
|
12
|
+
├── package.json / cordis.patch.yml / README.md / INSTALL.md
|
|
13
|
+
└── skills/novel-writing/SKILL.md
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## 安装
|
|
17
|
+
|
|
18
|
+
1. 放入 profile 的 node_modules(或 `dsh plugin --profile web add <路径>`);
|
|
19
|
+
2. profile `package.json` 的 `dsh.profile.bundles` 加入 `dsh-novel-writer`;
|
|
20
|
+
3. (可选)复制 `skills/novel-writing` 到工作区 `.dsh/skills/`;
|
|
21
|
+
4. 重启 web 应用。
|
|
22
|
+
|
|
23
|
+
## 验证
|
|
24
|
+
|
|
25
|
+
- 工具列表出现 10 个 novel_* 工具(含 novel_style_check / novel_plot);
|
|
26
|
+
- `novel_sentence_analysis` 返回含 `reportFile` / `cache` 字段;
|
|
27
|
+
- 缓存目录 `~/.dsh/dsh-novel-writer/cache/` 出现报告 JSON;
|
|
28
|
+
- 伏笔表文件 `<root>/.novel-writer/<书名>.json`。
|
|
29
|
+
|
|
30
|
+
## 数据位置
|
|
31
|
+
|
|
32
|
+
| 数据 | 路径 |
|
|
33
|
+
|---|---|
|
|
34
|
+
| 开关状态 | `~/.dsh/dsh-novel-writer/state.json` |
|
|
35
|
+
| 分析报告缓存 | `~/.dsh/dsh-novel-writer/cache/<书>-<hash>.json` |
|
|
36
|
+
| 伏笔登记表 | `<书库根>/.novel-writer/<书>.json` |
|
package/README.md
CHANGED
|
@@ -1,78 +1,61 @@
|
|
|
1
|
-
# dsh-novel-writer —
|
|
1
|
+
# dsh-novel-writer — 小说写作助手插件(v0.6.0 工程化版)
|
|
2
2
|
|
|
3
|
-
DSH(DeepSeek Harness)小说写作助手 bundle
|
|
4
|
-
|
|
3
|
+
DSH(DeepSeek Harness)小说写作助手 bundle 插件。宿主端零第三方依赖(仅 Node 内置模块),
|
|
4
|
+
浏览器端仅依赖 Web GUI 自带的 react。
|
|
5
|
+
**v0.6.0 在 v0.5.0(合并版)基础上完成工程化升级**:分析缓存与报告导出、风格自检、伏笔登记表、
|
|
6
|
+
关键词三字组/疑似人名、情感词典去噪、祈使句与环境分类改进、局域网开关可选放行。
|
|
5
7
|
|
|
6
|
-
##
|
|
7
|
-
|
|
8
|
-
1. **章节库**:章节存于 `novels/<书名>/第N章.md`(或 `.txt`/`.markdown`),
|
|
9
|
-
插件提供 `novel_books` / `novel_chapters` / `novel_read` 让 AI 浏览并读取每一章内容。
|
|
10
|
-
章节文件名中的序号支持任意位置与多种写法,例如:
|
|
11
|
-
`第01章.md`、`01-标题.md`、`原稿件-单章-…第一章.txt`、`原稿件-单章-第25章 .txt`
|
|
12
|
-
(阿拉伯数字与中文数字"第一章/第十四章/第三十章"均可识别,自动按章号排序)。
|
|
13
|
-
文件编码自动探测:UTF-8(含/不含 BOM)、UTF-16 LE/BE(含 BOM 或启发式识别)、GBK/GB18030(无 BOM),
|
|
14
|
-
无需手动转码即可读取(如记事本另存的 Unicode 文本)。
|
|
15
|
-
2. **分析**:`novel_keywords` 确定性提取全书/单章高频关键词(中文相邻二字词组 + 高频单字 + 英文词),
|
|
16
|
-
配合系统提示词引导 AI 分析剧情脉络、写作手法、词汇偏好与意象母题。
|
|
17
|
-
3. **续写**:系统提示词规定续写工作流(先读后写、保持文风与伏笔一致),
|
|
18
|
-
`novel_new_chapter` 创建新章节文件。
|
|
19
|
-
4. **原稿件批量导入/自动分类**:`novel_import` 扫描存放多本小说稿件的文件夹
|
|
20
|
-
(支持子文件夹、UTF-16/GBK 等编码、任意位置章号),从文件名与文件头内容双通道
|
|
21
|
-
提取书名候选并聚合成分组建议(scan 模式),AI 确认后可一键按书分类复制/移动到
|
|
22
|
-
`novels/<书名>/`(apply 模式);支持 `book` 强制归并异名同书、`files` 精确指定文件。
|
|
23
|
-
|
|
24
|
-
## 提供的工具
|
|
8
|
+
## 工具清单(10 个)
|
|
25
9
|
|
|
26
10
|
| 工具 | 说明 |
|
|
27
11
|
|---|---|
|
|
28
|
-
| `novel_books` |
|
|
29
|
-
| `novel_chapters` |
|
|
30
|
-
| `novel_read` |
|
|
31
|
-
| `novel_keywords` |
|
|
32
|
-
| `novel_new_chapter` |
|
|
33
|
-
| `novel_import` |
|
|
34
|
-
| `
|
|
35
|
-
|
|
36
|
-
|
|
12
|
+
| `novel_books` | 列出章节库全部作品 |
|
|
13
|
+
| `novel_chapters` | 列出某作品章节清单 |
|
|
14
|
+
| `novel_read` | 阅读某章正文(offset/limit 分段,编码自动探测) |
|
|
15
|
+
| `novel_keywords` | 关键词:二字组 + **三字组** + **疑似人名** + 英文词 |
|
|
16
|
+
| `novel_new_chapter` | 创建新章节文件 |
|
|
17
|
+
| `novel_import` | 原稿件批量导入/自动分类(含**异名同书提示**) |
|
|
18
|
+
| `novel_sentence_analysis` | 句式模式分析(九类/情感曲线/章节节奏/指纹,**带缓存与报告文件**) |
|
|
19
|
+
| `novel_sentence_config` | 查看/修改句式分析开关 |
|
|
20
|
+
| `novel_style_check` | **风格自检(v0.6.0 新增)**:章节 vs 全书指纹对比 + 偏差清单 |
|
|
21
|
+
| `novel_plot` | **伏笔/剧情线登记表(v0.6.0 新增)**:list/add/update/done/delete |
|
|
22
|
+
|
|
23
|
+
## v0.6.0 新增能力
|
|
24
|
+
|
|
25
|
+
1. **分析缓存 + 报告导出**:novel_sentence_analysis 结果自动缓存到 `~/.dsh/dsh-novel-writer/cache/<书名>-<hash>.json`,
|
|
26
|
+
返回值带 `reportFile` / `cache`(hit/miss)字段;章节未改动时重复分析秒回,传 `fresh=true` 强制重算。
|
|
27
|
+
2. **风格自检 novel_style_check**:任意章节 vs 全书其余章节 → 余弦相似度 + 句式/句长/情绪偏差清单 + 续写建议(写完新章自动查一次,防止文风漂移)。
|
|
28
|
+
3. **伏笔登记表 novel_plot**:`novels 根目录/.novel-writer/<书名>.json` 持久化;续写前 list 查看未回收伏笔。
|
|
29
|
+
4. **关键词升级**:新增三字组与疑似人名("XX说/道/问"与"XX小姐/导师"模式),人名不再被拆成"露西+西亚"。
|
|
30
|
+
5. **情感词典去噪**:单字词搭配排除("叹气"不算"气"、"笑道"不算"笑")、否定过滤("不害怕"不计)、副词距离窗口化("非常开心"才加权)。
|
|
31
|
+
6. **分类改进**:祈使句支持"快睡吧,明天还要上班"式(命令动词开头+吧);环境词表扩充(晚风/晨曦/森林/群山…)。
|
|
32
|
+
7. **情感曲线粒度可调**:`curveSegments` 参数(1-50,默认 20)。
|
|
33
|
+
8. **novel_import 异名同书提示**:scan 结果中组名包含/高重合时列出 `maybe` 字段,提示用 `book` 合并。
|
|
34
|
+
9. **局域网开关可选放行**:config `allowLanState: true` 时,state 路由对同源局域网请求放行(默认仍仅 loopback)。
|
|
35
|
+
|
|
36
|
+
## UI 开关(与 v0.5.0 相同,统一在一处)
|
|
37
|
+
|
|
38
|
+
- 唯一开关位置:侧边栏「句式分析」面板(总开关 enabled + 子开关 autoAnalyze);
|
|
39
|
+
- 设置 > 插件配置 卡片仅显示状态 + 「打开开关面板」跳转;
|
|
40
|
+
- 持久化 `~/.dsh/dsh-novel-writer/state.json`;兼容 v0.4.0 的 novel-writer.json / config.stylePattern;
|
|
41
|
+
- 默认开启;路由 `/api/dsh-novel-writer/state`(loopback 围栏,可选局域网放行)。
|
|
42
|
+
|
|
43
|
+
## 安装
|
|
37
44
|
|
|
38
45
|
```sh
|
|
39
|
-
dsh plugin --profile web add D:/
|
|
46
|
+
dsh plugin --profile web add D:/tools/dsh-novel-writer
|
|
40
47
|
```
|
|
41
48
|
|
|
42
|
-
|
|
43
|
-
`dsh-novel-writer`,并在 profile `node_modules` 中链接本包。安装后重启 web 应用生效。
|
|
49
|
+
或手动:放入 profile 的 node_modules + `dsh.profile.bundles` 加 `dsh-novel-writer`;重启 web 应用。
|
|
44
50
|
|
|
45
51
|
## 配置
|
|
46
52
|
|
|
47
|
-
插件 config 支持 `root`:章节库根目录(默认取会话工作区,即 `novels/` 所在位置)。
|
|
48
|
-
在 profile 的 `cordis.patch.yml` 中可覆盖(顶层数组元素直接是条目,无需 `patch:` 包装):
|
|
49
|
-
|
|
50
53
|
```yaml
|
|
51
54
|
- id: novel-writer
|
|
52
55
|
config:
|
|
53
56
|
root: 'D:/我的小说库'
|
|
57
|
+
sentenceAnalysis:
|
|
58
|
+
enabled: true
|
|
59
|
+
autoAnalyze: true
|
|
60
|
+
allowLanState: false # true=局域网访问 GUI 时也允许保存开关
|
|
54
61
|
```
|
|
55
|
-
|
|
56
|
-
### stylePattern 开关(句式模式仿写拓展)
|
|
57
|
-
|
|
58
|
-
`stylePattern`(布尔,**默认 false 关闭**):控制 `novel_style_pattern` 工具与
|
|
59
|
-
"句式模式仿写"提示词——分析原文陈述/反问/心理/对话等句子的排列节奏,引导续写时保持相近
|
|
60
|
-
叙事节奏。
|
|
61
|
-
|
|
62
|
-
> ⚠️ **已知风险**:该功能可能让整体文风变得更僵硬(机械套用句式模板)。默认关闭;
|
|
63
|
-
> 开启后模型侧也内置了"模式是参考、僵硬时优先自然表达"的约束,但仍建议按需使用。
|
|
64
|
-
|
|
65
|
-
**Web 设置开关(推荐)**:重启 web 后,打开 **设置 > 插件配置**,会看到
|
|
66
|
-
「小说写作助手 novel-writer」卡片,勾选「开启句式模式仿写(stylePattern)」即可——
|
|
67
|
-
改动写入 `$DSH_HOME/novel-writer.json`,**即时生效,无需重启**(工具未开启时调用会返回明确提示)。
|
|
68
|
-
|
|
69
|
-
也可在 profile 的 `cordis.patch.yml` 中配置(顶层数组元素直接是条目):
|
|
70
|
-
|
|
71
|
-
```yaml
|
|
72
|
-
- id: novel-writer
|
|
73
|
-
config:
|
|
74
|
-
root: ''
|
|
75
|
-
stylePattern: true
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
开关判定优先级:`$DSH_HOME/novel-writer.json` 中的持久化值 或 loader 配置的 `stylePattern`,任一为 true 即开启。
|
package/cordis.patch.yml
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
# dsh-novel-writer bundle patch: mounts the novel-writing assistant plugin
|
|
2
|
-
# into the profile's loader tree. The entry's
|
|
2
|
+
# into the profile's loader tree. The entry's name is the plugin package
|
|
3
3
|
# itself, resolved from the profile's node_modules.
|
|
4
|
+
#
|
|
5
|
+
# v0.3.0: the same row now carries BOTH halves — the node half (exports ".")
|
|
6
|
+
# runs in the host process (novel_* tools + /api/dsh-novel-writer/state
|
|
7
|
+
# routes for the UI switch), and the dsh.client declaration in package.json
|
|
8
|
+
# makes the browser half (exports "./client") load in the web GUI, mounting
|
|
9
|
+
# the 「句式分析」 sidebar entry with the enable switch.
|
|
4
10
|
- insert:
|
|
5
11
|
- id: novel-writer
|
|
6
12
|
name: 'dsh-novel-writer'
|