dsh-book-deconstruct 1.1.4 → 1.1.7

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 CHANGED
@@ -35,6 +35,12 @@ dsh plugin --profile desktop add github:OWNER/dsh-book-deconstruct
35
35
  /book 思考,快与慢 | 丹尼尔·卡尼曼
36
36
  ```
37
37
 
38
+ 输出两段:
39
+
40
+ 1. **故事情节** — 讲清整本书(不是一句话短评,也不灌水)
41
+ 2. **一段有深度的思考** — 只写一整段
42
+
43
+
38
44
  也支持:
39
45
 
40
46
  ```text
package/index.js CHANGED
@@ -2,8 +2,8 @@
2
2
  * book-deconstruct — 输入书名 + 作者,直接输出成品级书籍解读。
3
3
  *
4
4
  * 输出只保留两部分:
5
- * 1. 这本书讲的是什么事(主体:详细讲清整本书的内容)
6
- * 2. 一段深度的思想(最后只写一段,不列条目)
5
+ * 1. 书籍的故事情节(讲清整本书,不要一句话短评,也不要灌水)
6
+ * 2. 一段有深度的思考(最后只写一段,不列条目)
7
7
  *
8
8
  * 两个入口共用同一套解读逻辑(工具 execute):
9
9
  * - `/book …` 斜杠命令:解析后 followup/steer 用户消息,让模型调用 book_deconstruct
@@ -144,9 +144,15 @@ export function parseBookInput(raw) {
144
144
 
145
145
  function buildSteerPrompt(parsed, raw) {
146
146
  if (parsed !== null) {
147
- return `请用 book_deconstruct 工具解读《${parsed.title}》,作者${parsed.author}`;
147
+ return (
148
+ `必须调用 book_deconstruct 工具解读《${parsed.title}》,作者${parsed.author}。` +
149
+ '不要自己直接写短评或一两句话概括;完整解读由该工具产出。'
150
+ );
148
151
  }
149
- return `请用 book_deconstruct 工具处理用户的书籍解读请求:${raw}`;
152
+ return (
153
+ `必须调用 book_deconstruct 工具处理用户的书籍解读请求:${raw}。` +
154
+ '不要自己直接写短评或一两句话概括;完整解读由该工具产出。'
155
+ );
150
156
  }
151
157
 
152
158
  /** 不依赖 @deepseek-ai/dsh-llm(本地 file: 插件 realpath 解析不到宿主包)。 */
@@ -176,39 +182,34 @@ function enqueueUserTurn(agent, message) {
176
182
  // ---------------------------------------------------------------------------
177
183
 
178
184
  const SYSTEM_PROMPT = [
179
- '你是一位有洞察力的书籍解读者。你的任务不是展示分析过程,而是直接交付高质量的成品:把一本书讲透,并在最后给出一段有深度的思想。',
185
+ '你是一位有洞察力的书籍解读者。只交付成品,不展示分析过程。',
186
+ '',
187
+ '输出有且仅有两部分:',
188
+ '1. 书籍的故事情节:把整本书讲清楚(小说讲清人物与情节推进;非虚构讲清主线内容与关键论点)。不要一句话短评,也不要灌水啰嗦。',
189
+ '2. 一段有深度的思考:全文最后只写一整段,不列条目、不加小标题。',
180
190
  '',
181
191
  '铁律:',
182
- '1. 只输出成品内容。不要写你的分析步骤、框架说明、知识边界声明、置信度清单、自我审校或任何元评论。',
183
- '2. 不编造。对不确定的事实、引文、页码、章节、销量、奖项、时间线,不要写;宁可少写,也不要虚构。',
184
- '3. 区分「书中明确观点」与「你的推论/评价」。属于你的推论时,用「由此可以推出」「这意味着」等措辞,不要冒充作者原话。',
185
- '4. 不写目录复述,不写百科词条。要写出这本书的骨架和真正的洞见。',
186
- '5. 用中文 Markdown,深度优先,语言干净利落,不堆砌空洞形容词。',
187
- '6. 如果对书名或作者没有可靠信息,直接说明「我无法可靠地解读这本书」,不要编造内容。',
192
+ '1. 只输出成品。不要写分析步骤、框架说明、知识边界、置信度、自我审校或元评论。',
193
+ '2. 不编造。不确定的事实、引文、页码、奖项、时间线不要写。',
194
+ '3. 你的推论须标明语气(如「由此可以推出」),勿冒充作者原话。',
195
+ '4. 禁止鸡汤短评、书腰简介、朋友圈文案;也禁止为凑字数而重复、注水。',
196
+ '5. 用中文 Markdown。若无法可靠解读该书,只写「我无法可靠地解读这本书」。',
188
197
  ].join('\n');
189
198
 
190
199
  function buildAnalysisPrompt(title, author) {
191
200
  return `书名:《${title}》
192
201
  作者:${author}
193
202
 
194
- 请直接输出成品,只写下面两部分,不要写任何分析过程或元信息。
195
-
196
- ## 这本书讲的是什么事
197
- 用 1000–1800 字,把整本书的内容讲透(这是主体部分):
198
- - 这本书的核心主题,以及它在回答什么问题;
199
- - 全书的结构与推进方式:大致分几部分/几条主线,每部分主要讲了什么;
200
- - 关键概念、核心论点、重要方法或案例(用自己的话转述,不编造引文);
201
- - 作者的基本立场与最终结论。
202
- 要求:按书的内容实际展开,让人读完这一段就基本掌握这本书讲了什么;不要只写一句概括,也不要写成目录清单。
203
+ 请直接输出成品,只写下面两部分,标题必须原样使用。不要写分析过程或元信息。
203
204
 
204
- ## 一段深度的思想
205
- 用 250–400 字写**一整段**(不要分条、不要小标题),从整本书里提炼一个最深的洞见或结论:
206
- - 它是什么;
207
- - 为什么成立(结合书中的内容);
208
- - 对读者意味着什么。
209
- 只写这一段,不要再列多条结论。
205
+ ## 故事情节
206
+ 把整本书讲清楚即可:
207
+ - 小说:主要人物、起因—发展—转折—结局,关键情节线;
208
+ - 非虚构:主线问题、各部分分别讲什么、关键论点/案例如何推进到结论。
209
+ 要求:读完能掌握全书在讲什么;禁止一句话短评;禁止灌水、重复、百科词条或目录清单。篇幅以讲清为准,通常大约 800–1500 字,够用就停。
210
210
 
211
- 要求:直接给结果,不要写「我如何分析」「我的知识边界」「置信度」这类内容。`;
211
+ ## 一段有深度的思考
212
+ 紧接着写**一整段**(约 200–350 字,不要分条、不要小标题):从全书提炼一个真正有深度的思考——它是什么、为何成立(扣住书中内容)、对读者意味着什么。除此之外不要再写别的部分。`;
212
213
  }
213
214
 
214
215
  // ---------------------------------------------------------------------------
@@ -321,6 +322,8 @@ export function apply(ctx, rawConfig) {
321
322
  return { kind: 'error', text: USAGE };
322
323
  }
323
324
 
325
+ // 桌面端:先 steer/followup 让会话调用工具(整行发送才有反应)。
326
+ // 不要在 handler 里长时间 await 模型,否则输入框像「点了没反应」。
324
327
  const prompt = buildSteerPrompt(parsed, raw);
325
328
  const agent = invocation.agent;
326
329
  const ok = enqueueUserTurn(agent, makeUserMessage(prompt));
@@ -328,13 +331,12 @@ export function apply(ctx, rawConfig) {
328
331
  if (parsed !== null) {
329
332
  return {
330
333
  kind: 'success',
331
- text: `已提交解读:《${parsed.title}》 / ${parsed.author}(将调用 book_deconstruct)`,
334
+ text: `已提交解读:《${parsed.title}》 / ${parsed.author}(请等待 book_deconstruct 产出完整解读,勿自行短评)`,
332
335
  };
333
336
  }
334
337
  return { kind: 'success', text: '已提交书籍解读请求(将调用 book_deconstruct)' };
335
338
  }
336
339
 
337
- // followup/steer 不可用时,直接跑工具逻辑,保证斜杠有反馈
338
340
  if (parsed === null) {
339
341
  return { kind: 'error', text: USAGE };
340
342
  }
@@ -355,7 +357,7 @@ export function apply(ctx, rawConfig) {
355
357
  ctx.tools.register({
356
358
  name: 'book_deconstruct',
357
359
  description:
358
- '深度解读一本书:输入书名与作者,先详细讲清整本书的内容,最后给出一段有深度的思想。当用户要求「解读/总结/拆解某本书」时使用。',
360
+ '深度解读一本书:先写「故事情节」(讲清整本书,勿一句话短评、勿灌水),再写「一段有深度的思考」。用户要求解读/拆解某书时必须调用本工具,禁止自己用短评代替。',
359
361
  parameters: {
360
362
  type: 'object',
361
363
  properties: {
package/locale/en.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "meta": {
3
3
  "title": "Book Deconstruct",
4
- "description": "Host plugin: /book and book_deconstruct in any session. Give a title and author for a full walkthrough plus one deep insight."
4
+ "description": "Host plugin: /book and book_deconstruct in any session. Clear plot of the whole book, then one deep reflection."
5
5
  }
6
6
  }
package/locale/zh.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "meta": {
3
3
  "title": "书籍拆解",
4
- "description": "Host 插件:任意会话可用 /book 与 book_deconstruct。输入书名与作者,把整本书讲透,最后给出一段有深度的思想。"
4
+ "description": "Host 插件:任意会话可用 /book 与 book_deconstruct。先讲清全书故事情节,再给出一段有深度的思考。"
5
5
  }
6
6
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-book-deconstruct",
3
- "version": "1.1.4",
3
+ "version": "1.1.7",
4
4
  "description": "DSH Host plugin: /book slash command + book_deconstruct tool for full book walkthroughs.",
5
5
  "keywords": [
6
6
  "dsh",