dsh-novel-writer 0.4.0 → 0.5.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 ADDED
@@ -0,0 +1,39 @@
1
+ # dsh-novel-writer v0.5.0 — 安装指南(v0.3.0 × v0.4.0 合并版)
2
+
3
+ 宿主端零第三方依赖;浏览器端依赖 Web GUI 自带的 react。
4
+ 本包 UI:侧边栏「句式分析」大开关面板(统一开关位置);设置 > 插件配置 卡片仅显示状态 + 跳转按钮。
5
+
6
+ ```
7
+ dsh-novel-writer-v0.5.0/
8
+ ├── lib/
9
+ │ ├── index.js # 宿主端(8 个 novel_* 工具 + state 路由)
10
+ │ ├── analysis.js # 句式模式分析引擎(九类/情感/节奏,零依赖)
11
+ │ └── client.js # 浏览器端(侧边栏面板 + 设置页卡片)
12
+ ├── test/ # 引擎与 client 契约测试
13
+ ├── package.json
14
+ ├── cordis.patch.yml
15
+ ├── README.md
16
+ ├── INSTALL.md
17
+ └── skills/novel-writing/SKILL.md
18
+ ```
19
+
20
+ ## 安装
21
+
22
+ 1. 把本文件夹放入 profile 的 node_modules(或 `dsh plugin --profile web add <路径>`);
23
+ 2. profile `package.json` 的 `dsh.profile.bundles` 加入 `dsh-novel-writer`;
24
+ 3. (可选)把 `skills/novel-writing` 复制到工作区 `.dsh/skills/`;
25
+ 4. **重启 web 应用**。
26
+
27
+ ## 验证
28
+
29
+ - 工具列表出现:novel_books / novel_chapters / novel_read / novel_keywords / novel_new_chapter /
30
+ novel_import / novel_sentence_analysis / novel_sentence_config;
31
+ - 侧边栏出现「句式分析」入口;设置 > 插件配置 出现 novel-writer 状态卡片;
32
+ - `GET /api/dsh-novel-writer/state` 返回 200 JSON。
33
+
34
+ ## 开关
35
+
36
+ - 默认开启;**唯一开关位置:侧边栏「句式分析」面板**(总开关 enabled + 子开关 autoAnalyze);
37
+ - 设置 > 插件配置 卡片仅显示状态并提供「打开开关面板」跳转;
38
+ - 持久化 `~/.dsh/dsh-novel-writer/state.json`;兼容读取 `~/.dsh/novel-writer.json`(v0.4.0 stylePattern);
39
+ - config 支持 `sentenceAnalysis.enabled / autoAnalyze` 与 `stylePattern`(v0.4.0 兼容)。
package/README.md CHANGED
@@ -1,78 +1,83 @@
1
- # dsh-novel-writer — 小说写作助手插件
1
+ # dsh-novel-writer — 小说写作助手插件(v0.5.0 合并版)
2
2
 
3
- DSH(DeepSeek Harness)小说写作助手 bundle 插件。零第三方依赖(仅 Node 内置模块),
4
- 为 AI 提供小说章节库管理、分析与续写辅助能力。
3
+ DSH(DeepSeek Harness)小说写作助手 bundle 插件。宿主端零第三方依赖(仅 Node 内置模块),
4
+ 浏览器端仅依赖 Web GUI 自带的 react。
5
+ **v0.5.0 = v0.3.0(深度句式分析 + 侧边栏开关)与 v0.4.0(批量导入 + 设置页卡片)的合并版**。
5
6
 
6
- ## 功能(对应需求)
7
+ ## 功能
7
8
 
8
9
  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` 精确指定文件。
10
+ `novel_books` / `novel_chapters` / `novel_read` 浏览与读取。
11
+ 章号任意位置 + 中文数字识别;UTF-8 / UTF-16 LE/BE / GBK 编码自动探测。
12
+ 2. **分析**:`novel_keywords` 提取全书/单章高频关键词(中文二字词组 + 英文词)。
13
+ 3. **句式模式分析**:`novel_sentence_analysis` 对全书/单章输出——
14
+ - 九类句式:陈述 / 环境 / 心理 / 对话 / 疑问 / 反问 / 感叹 / 祈使 / 省略留白(比例、句数、均长、例句);
15
+ - 排列规律:句式转移、2/3 连句高频模板、段首/段尾句式、**按章节的压缩节奏序列**(S×8 ENV×2 PSY×3…);
16
+ - 句长节奏:均值/中位数、短句/长句占比;
17
+ - 主观情感:情感词典(喜/怒/哀/惧/惊)+ 强度副词加权 → 主导情绪、情绪分布、情感曲线、主观性指数;
18
+ - 风格指纹 + 给模型的**节奏建议**(guidance)。
19
+ ⚠️ 风险约束:句式模式是"参考节奏"而非"模板套用",模型在机械复刻导致僵硬时会优先回归自然表达。
20
+ 4. **原稿件批量导入**:`novel_import` 扫描存放多本小说的文件夹(支持子文件夹、多编码、任意位置章号),
21
+ 从文件名与文件头双通道提取书名候选并分组(scan 预览),AI 确认后一键复制/移动到 `novels/<书名>/`(apply);
22
+ 支持 `book` 强制归并异名同书、`files` 精确指定、`move` 移动模式。
23
+ 5. **续写**:先读后写、保持文风与伏笔一致,`novel_new_chapter` 创建新章节文件。
23
24
 
24
25
  ## 提供的工具
25
26
 
26
27
  | 工具 | 说明 |
27
28
  |---|---|
28
- | `novel_books` | 列出章节库全部作品(章节数、总字数) |
29
- | `novel_chapters` | 列出某作品章节清单(章号/标题/字数/行数/更新时间) |
30
- | `novel_read` | 阅读某章正文(行号 + 字数统计,offset/limit 分段) |
31
- | `novel_keywords` | 提取高频关键词(可单章或全书) |
32
- | `novel_new_chapter` | 创建新章节文件(自动取下一个章号) |
33
- | `novel_import` | 扫描原稿件文件夹,自动识别/分类多本小说章节到 `novels/<书名>/`(scan 预览 / apply 执行,支持 book 强制归并与 files 精确导入) |
34
- | `novel_style_pattern` | **(受 stylePattern 开关控制)** 句式模式分析:把句子分为陈述/环境/心理/对话/疑问/反问/感叹七类,输出占比、高频组合与按章节的压缩排列序列,用于模仿原文叙事节奏 |
29
+ | `novel_books` | 列出章节库全部作品 |
30
+ | `novel_chapters` | 列出某作品章节清单 |
31
+ | `novel_read` | 阅读某章正文(offset/limit 分段) |
32
+ | `novel_keywords` | 提取高频关键词 |
33
+ | `novel_new_chapter` | 创建新章节文件 |
34
+ | `novel_import` | **原稿件批量导入/自动分类(v0.4.0)** |
35
+ | `novel_sentence_analysis` | **句式模式分析(v0.3.0 深度 + v0.4.0 节奏)** |
36
+ | `novel_sentence_config` | 查看/修改句式分析开关 |
37
+
38
+ ## UI 开关(统一在一处)
39
+
40
+ - **唯一开关位置:侧边栏「句式分析」面板**——状态横幅 + **总开关「启用句式分析」**(enabled)+ 子开关「分析作品时自动使用」(autoAnalyze);
41
+ - **设置 > 插件配置** 的 novel-writer 卡片仅**显示状态**(已启用/已关闭、自动分析开/关),并提供「打开开关面板」按钮跳转;
42
+ - 也可让 AI 用 `novel_sentence_config` 查看/修改。
43
+ - 状态写入 `~/.dsh/dsh-novel-writer/state.json`;同时**只读兼容** v0.4.0 的 `~/.dsh/novel-writer.json`(stylePattern)与 config.stylePattern。
44
+ - 开关默认**开启**;宿主端路由 `/api/dsh-novel-writer/state`(loopback 围栏 + 可选注入,headless 自动跳过)。
35
45
 
36
46
  ## 安装(web profile)
37
47
 
38
48
  ```sh
39
- dsh plugin --profile web add D:/Deep\ Seek插件库/novel-writer
49
+ dsh plugin --profile web add D:/tools/dsh-novel-writer
40
50
  ```
41
51
 
42
- 或手动等价操作:在 profile 的 `package.json` 的 `dsh.profile.bundles` 中加入
43
- `dsh-novel-writer`,并在 profile `node_modules` 中链接本包。安装后重启 web 应用生效。
52
+ 或手动:把本文件夹放入 profile 的 `node_modules`,并在 profile `package.json` 的
53
+ `dsh.profile.bundles` 中加入 `dsh-novel-writer`。安装后**重启 web 应用**生效。
44
54
 
45
55
  ## 配置
46
56
 
47
- 插件 config 支持 `root`:章节库根目录(默认取会话工作区,即 `novels/` 所在位置)。
48
- 在 profile 的 `cordis.patch.yml` 中可覆盖(顶层数组元素直接是条目,无需 `patch:` 包装):
49
-
50
57
  ```yaml
51
58
  - id: novel-writer
52
59
  config:
53
60
  root: 'D:/我的小说库'
61
+ sentenceAnalysis:
62
+ enabled: true
63
+ autoAnalyze: true
64
+ # stylePattern: true # v0.4.0 兼容写法(任一生效即开启)
54
65
  ```
55
66
 
56
- ### stylePattern 开关(句式模式仿写拓展)
57
-
58
- `stylePattern`(布尔,**默认 false 关闭**):控制 `novel_style_pattern` 工具与
59
- "句式模式仿写"提示词——分析原文陈述/反问/心理/对话等句子的排列节奏,引导续写时保持相近
60
- 叙事节奏。
67
+ ## 版本记录
61
68
 
62
- > ⚠️ **已知风险**:该功能可能让整体文风变得更僵硬(机械套用句式模板)。默认关闭;
63
- > 开启后模型侧也内置了"模式是参考、僵硬时优先自然表达"的约束,但仍建议按需使用。
69
+ ### v0.5.0(合并版)
70
+ - 合并 v0.3.0 与 v0.4.0:九类句式(新增"环境")、章节压缩节奏序列、guidance 节奏建议、采样上限;
71
+ - 新增 novel_import 批量导入(v0.4.0);开关同时出现在侧边栏面板与官方设置页;
72
+ - 路由改可选注入 ctx.inject(["webServer"]),headless 兼容;保留 loopback 围栏;
73
+ - 兼容读取 v0.4.0 的 novel-writer.json / config.stylePattern;提示词内置"僵硬时优先自然表达"约束。
64
74
 
65
- **Web 设置开关(推荐)**:重启 web 后,打开 **设置 > 插件配置**,会看到
66
- 「小说写作助手 novel-writer」卡片,勾选「开启句式模式仿写(stylePattern)」即可——
67
- 改动写入 `$DSH_HOME/novel-writer.json`,**即时生效,无需重启**(工具未开启时调用会返回明确提示)。
75
+ ### v0.4.0(他人改版,已并入)
76
+ - novel_import 批量导入自动分类;novel_style_pattern 轻量句式分析(环境类/压缩序列/guidance);
77
+ - 官方设置页插件配置卡片;ctx.inject 可选注入;开关默认关闭 + 风险提示。
68
78
 
69
- 也可在 profile 的 `cordis.patch.yml` 中配置(顶层数组元素直接是条目):
70
-
71
- ```yaml
72
- - id: novel-writer
73
- config:
74
- root: ''
75
- stylePattern: true
76
- ```
79
+ ### v0.3.0(本系列)
80
+ - 句式模式分析深度版(情感曲线/句长/段落/指纹);侧边栏开关面板;state 路由。
77
81
 
78
- 开关判定优先级:`$DSH_HOME/novel-writer.json` 中的持久化值 或 loader 配置的 `stylePattern`,任一为 true 即开启。
82
+ ### v0.2.0 / v0.1.0
83
+ - 章节库、关键词、新建章节;编码探测。
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 `name` is the plugin package
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'