dsh-novel-generator 0.1.36 → 0.1.37
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/README.md +6 -2
- package/client.js +13 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -98,12 +98,16 @@ dsh plugin --profile web add dsh-novel-generator
|
|
|
98
98
|
|
|
99
99
|
## 章节故事页
|
|
100
100
|
|
|
101
|
-
-
|
|
101
|
+
- 正文可以直接编辑、保存;工具条上还有三个按钮:
|
|
102
102
|
- **「同步章节大纲」**:确认后把当前正文交给模型,**按这一章的实际内容重算整份大纲**——故事梗概、故事时间长度(天)、章节最低字数、章节最多字数、梗概最低字数,然后直接保存覆盖旧大纲(正文不动)。
|
|
103
103
|
- 字数范围一定会把正文实际字数包在里面;梗概下限不会超过新梗概本身的长度。
|
|
104
104
|
- 时间长度只有在不破坏时间线时才会改:末章可以直接改;后面还有章节时,只有「下一章起始日 = 本章起始日 + 新时长」才采纳,否则保留原时长并在提示里说明模型建议值。
|
|
105
|
+
- **「提取行文风格」**:模型读这一章,提炼视角与人称、句式、用词、节奏、描写比例,输出条目式说明(≤600 字)。
|
|
106
|
+
- 分析期间整个工坊被锁定,无法点别的按钮;正文不足 300 字时按钮不可点,接口也返回 400。
|
|
107
|
+
- 完成后弹面板:只读文本 + 「复制」(贴到作品列表的「前置」里)+ 「写入前置」。
|
|
108
|
+
- 「写入前置」会先弹确认,**明确告知要用 AI 整理**:模型把这段风格与你现有前置合并成一段统一的写作约束(≤2000 字)后保存为本书前置,覆盖旧的那份。
|
|
105
109
|
- **「AI 修改」**:填入修改意见后,模型按意见重写整章,结果只放进编辑区、不自动保存。
|
|
106
|
-
-
|
|
110
|
+
- 正文为空时按钮不可点,接口也会拒绝(400);修改意见为空同样拒绝。
|
|
107
111
|
|
|
108
112
|
## 章节大纲页
|
|
109
113
|
|
package/client.js
CHANGED
|
@@ -166,6 +166,7 @@ body[data-ds-dark-theme] .dsn-shell{color-scheme:dark}
|
|
|
166
166
|
border:1px solid var(--dsw-alias-state-error-primary);color:var(--dsw-alias-state-error-primary)}
|
|
167
167
|
.dsn-note{margin:0;padding:8px 12px;border-radius:10px;font-size:12px;
|
|
168
168
|
border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-1)}
|
|
169
|
+
.dsn-note-row{display:flex;align-items:center;gap:10px;justify-content:space-between}
|
|
169
170
|
.dsn-empty{padding:32px;text-align:center;color:var(--dsw-alias-label-secondary);font-size:13px}
|
|
170
171
|
.dsn-toast{position:absolute;top:58px;left:50%;transform:translateX(-50%);z-index:30;
|
|
171
172
|
padding:8px 16px;border-radius:999px;font-size:12px;border-left:3px solid var(--dsw-alias-state-success-primary);
|
|
@@ -1576,7 +1577,18 @@ body[data-ds-dark-theme] .dsn-shell{color-scheme:dark}
|
|
|
1576
1577
|
? h('div', { className: 'dsn-empty' }, t('还没有章节。点右上角「+ 新建章节」开始第一章。', "No chapters yet. Use \"+ New chapter\" at the top right to start the first one."))
|
|
1577
1578
|
: h(React.Fragment, null,
|
|
1578
1579
|
h('div', { className: 'dsn-editor' },
|
|
1579
|
-
!chapter.outline
|
|
1580
|
+
!chapter.outline
|
|
1581
|
+
? (String(text || '').trim() === ''
|
|
1582
|
+
? h('div', { className: 'dsn-note' }, t('这一章还没有章节大纲:先去「章节大纲」填写,再回来生成正文。', 'This chapter has no outline yet — fill one in under "Outline", then generate from there.'))
|
|
1583
|
+
: h('div', { className: 'dsn-note dsn-note-row' },
|
|
1584
|
+
h('span', null, t('这一章是导入的,没有章节大纲记录:点「同步章节大纲」会根据正文生成梗概与字数范围。', 'This chapter came from an import and has no outline recorded — “Sync outline” builds one from the text.')),
|
|
1585
|
+
h('button', {
|
|
1586
|
+
className: 'dsn-btn ghost',
|
|
1587
|
+
type: 'button',
|
|
1588
|
+
disabled: saving || Boolean(summarizing),
|
|
1589
|
+
onClick: onSummarize,
|
|
1590
|
+
}, t('现在同步', 'Sync now'))))
|
|
1591
|
+
: null,
|
|
1580
1592
|
h('textarea', {
|
|
1581
1593
|
className: 'dsn-textarea dsn-story',
|
|
1582
1594
|
value: text,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-novel-generator",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.37",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Novel studio for DeepSeek Harness: a draggable story timeline, world snapshots, chapter outlines, and chapters written by the work's own agent.",
|
|
6
6
|
"license": "MIT",
|