dsh-plugin-deck-studio 0.2.9 → 0.2.10

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
@@ -1,53 +1,91 @@
1
- # Deckline · `dsh-plugin-deck-studio`
1
+ ![Deckline](../../assets/logo/deckline-logo.png)
2
2
 
3
- DSH(DeepSeek Harness)的 **image deck 工作台插件**:左侧原生 Chat、中间整页图片 deck、右侧资料 / Designs / 资源 / 会话。
4
- 用对话改稿、按页出图(可点名批量连出)、版本留存、导出 PDF / PPTX / 交接包——不是又一个 PPT 编辑器。
3
+ # Deckline · 用对话制作整页图片幻灯片
4
+
5
+ **从「讲给谁、讲什么」到脚本、逐页出图、版本与交付,在 DSH 里完成。**
6
+
7
+ Deckline 是 DeepSeek Harness(DSH)的 **image deck 工作台插件**,不是独立应用,也不是可编辑图层的 PPT 编辑器。对话留在 DSH 原生 Chat;工作台负责脚本、图片、设计风格、版本和资料。
8
+
9
+ [安装与配置](../../docs/install.md) · [使用手册](../../docs/manual.md) · [示例 deck](../../samples/deckline-intro) · [English overview](../../README.en.md)
10
+
11
+ ## 先看看它怎么工作
12
+
13
+ ![Deckline 工作台:逐页图片、脚本编辑与版本操作](../../docs/assets/screenshots/02-deck-pages.png)
14
+
15
+ *上图为内置公开示例:中间浏览整页图片,右侧查看与修改这一页的正文、画面要求和提示词。截图展示对应拍摄版本,具体控件以当前版本为准。*
16
+
17
+ ### 从想法到可交付的 deck
18
+
19
+ | 你要做什么 | Deckline 提供什么 |
20
+ |---|---|
21
+ | 把想法讲清楚 | 从受众、意图与参考资料开始,组织故事线和逐页脚本 |
22
+ | 做出整页画面 | 按页生成图片;点名多页时可连续出图,每页保留 prompt 与版本 |
23
+ | 调整内容和画面 | 在 Chat 里改稿,查看提案;已有图片可做局部修图,生成新版本而不覆盖旧图 |
24
+ | 统一视觉风格 | 内置风格与样张预览,也可创建自己的 Design、添加参考图并跨 deck 复用 |
25
+ | 检查再交付 | 听众评审、资料与审稿文档;直接播放,或导出 PDF / PPTX / 交接包 |
26
+
27
+ > **导出的 PPTX 每页是一张整页图片,不是可逐项编辑的文本和图表。** 真实出图需要自行配置兼容的 image API;默认 fake 模式用于体验流程。
28
+
29
+ ## 写完就能讲:直接全屏播放
30
+
31
+ 在工作台点击「全屏演示」,用方向键翻页、Esc 退出;不必为了预览先导出文件。
32
+
33
+ ![Deckline 全屏演示:直接播放图片幻灯片](../../docs/assets/screenshots/08-presentation.png)
34
+
35
+ ## Designs:不只选风格,还能维护自己的风格库
36
+
37
+ 预览内置样张、为 deck 选择风格;也可以创建自己的风格,管理画面描述、参考图和样张。这里的 Design 是可复用的视觉定义,**不是固定布局的 PPT 母版**。
38
+
39
+ ![Deckline 风格库:预设样张与风格选择](../../docs/assets/screenshots/09-style-library.png)
40
+
41
+ ![Deckline 风格管理:定义、提示词、样张与关联会话](../../docs/assets/screenshots/10-style-management.png)
42
+
43
+ 更多画面与流程见 [仓库首页](../../README.md)、[风格指南](../../docs/styles.md) 和 [完整示例](../../docs/sample-deck.md)。以上图片均来自公开示例或演示数据。
5
44
 
6
45
  ## 安装
7
46
 
47
+ 前置:Node.js `^22.19 或 ≥24`、pnpm 10+、DSH `≥0.2.1-rc.2 <0.3`。详细兼容范围见 [兼容说明](../../docs/compat.md)。
48
+
8
49
  ```sh
9
50
  # 1) 新建一个 profile(基于 DSH 自带 web 模板)
10
51
  dsh --profile deckline --from-default-profile web
11
52
 
12
- # 2) 安装本插件(安装后会自动注册 bundle,无需手动改配置文件)
13
- dsh plugin --profile deckline add dsh-plugin-deck-studio@0.2.4
53
+ # 2) 安装 npm 最新版;安装后自动注册 bundle
54
+ dsh plugin --profile deckline add dsh-plugin-deck-studio@latest
14
55
 
15
- # 国内网络建议走镜像(否则从 npmjs.org 拉 20 MB 包可能很慢)
16
- npm_config_registry=https://registry.npmmirror.com dsh plugin --profile deckline add dsh-plugin-deck-studio@0.2.4
56
+ # 国内网络可按需使用镜像,注意镜像版本同步可能有延迟
57
+ # npm_config_registry=https://registry.npmmirror.com dsh plugin --profile deckline add dsh-plugin-deck-studio@latest
17
58
 
18
- # 3) 启动,浏览器打开终端打印的带 token 链接
59
+ # 3) 启动,打开终端打印的带 token 链接
19
60
  dsh --profile deckline --port 13090
20
61
  ```
21
62
 
22
- 确认装上了(输出 `1` 才对):
63
+ 也可以在 DSH「插件 → 发现」中添加索引源:
23
64
 
24
- ```sh
25
- dsh --profile deckline --dump-config | grep -c "preset-deck-critic"
65
+ ```text
66
+ https://cdn.jsdelivr.net/gh/yuna78/dsh-deck-studio@main/market-index.json
26
67
  ```
27
68
 
28
- 在 npmjs.com 搜 `deckline` 或 `ppt dsh` 也能找到。也可以在 DSH「插件 → 发现」里加索引源 `https://cdn.jsdelivr.net/gh/yuna78/dsh-deck-studio@main/market-index.json` 后点安装。
29
-
30
- 从源码 / Git 安装、Windows、以及完整配置(数据目录 / deck 源 / 出图节点 / key)见仓库文档:
69
+ 从源码 / Git 安装、Windows、模型与出图配置及排障见 [中文安装指南](../../docs/install.md) / [English installation](../../docs/install.en.md)。升级后重启 DSH;听众审稿由插件内部调用,不需要单独选择审稿 Mode。
31
70
 
32
- - [docs/install.md](https://github.com/yuna78/dsh-deck-studio/blob/main/docs/install.md)(中文)
33
- - [docs/install.en.md](https://github.com/yuna78/dsh-deck-studio/blob/main/docs/install.en.md)(English)
34
- - [示例 deck 与效果](https://github.com/yuna78/dsh-deck-studio/tree/main/samples/deckline-intro)
71
+ ## 快速开始
35
72
 
36
- ## 快速开始(fake 模式,无需 key)
73
+ 1. 首页点「+ 新建 Deck」,填写标题、受众和一句话意图,选择视觉风格。
74
+ 2. 在 Chat 中补充资料、起草故事线与逐页脚本,再按需修改和出图。
75
+ 3. 默认 fake 模式生成占位图;真实图片请在「设置」配置出图节点 endpoint、模型与 key。
76
+ 4. 在工作台查看页面和版本,直接全屏演示,或导出文件交付。
37
77
 
38
- 1. 首页点「+ 新建 Deck」,填标题 / 受众 / 一句话意图;
39
- 2. 在 Chat 里让 Agent 起草 `intent.md` / `script.md`,确认后逐页出图;
40
- 3. 默认 fake 模式出占位图,能走完整个流程;要看真图再进「设置」填出图节点 endpoint / 模型 / key。
78
+ 出图节点不内置。真实渲染需要配置 OpenAI 兼容的 `/v1/images/generations` 地址。节点 key 保存在本机数据目录的 `render-settings.json`(0600,不回显);不要将 key 提交到 Git。
41
79
 
42
- 出图节点不内置:real 模式必须自己配 OpenAI 兼容的 `/v1/images/generations` 地址(key 存本机,
43
- `~/.dsh/deckline/render-settings.json`,0600,不进 git、不回显)。
80
+ ## 数据与边界
44
81
 
45
- ## 数据在哪
82
+ - 工作副本、图片、版本与事件默认写 `$DSH_HOME/deckline`,可通过 `dataRoot` 覆盖。
83
+ - 受控源 deck 的 `sourceRoot` **只读**;本机新建 deck 位于 `projectsRoot` 或 `<dataRoot>/projects/<deckId>/source`,有独立写入流程。
84
+ - 每次出图保留版本,旧图片不会因新图生成而被覆盖。
85
+ - 这是 DSH 插件,运行时依赖宿主与用户配置的模型服务;不承诺离线真实出图。
46
86
 
47
- - 运行数据(工作副本 / 出图 / 事件):`$DSH_HOME/deckline`(可用 `dataRoot` 覆盖);
48
- - 受控源 deck:`decks[].sourceRoot` 指向的目录,**只读**,Deckline 永不回写;
49
- - 新建 deck:`projectsRoot` 或 `<dataRoot>/projects/<deckId>/source`。
87
+ ## 许可与反馈
50
88
 
51
- ## 许可
89
+ MIT © 2026 Yuna (Deckline) · [LICENSE](../../LICENSE)
52
90
 
53
- MIT © 2026 Yuna (Deckline)。见仓库 [LICENSE](https://github.com/yuna78/dsh-deck-studio/blob/main/LICENSE)。
91
+ [报告问题 / 提建议](https://github.com/yuna78/dsh-deck-studio/issues) · [发布记录](https://github.com/yuna78/dsh-deck-studio/releases)
package/lib/render.js CHANGED
@@ -80,6 +80,9 @@ export function onImageText(slide) {
80
80
  }
81
81
 
82
82
  const ON_IMAGE_HEAD = "【这一页必须在画面上印出的文字:逐字照排,不要改写、翻译、缩写或省略】";
83
+ /** 反装饰:图例 / 清单面板 / 英文角标这类「看起来专业但跟本页无关」的元素,模型最容易凭空造。 */
84
+ const CANVAS_DISCIPLINE =
85
+ "画面纪律:只画上面【图上文字】与「画面要求」点名的元素;不要新增图例 / 清单面板 / 装饰性英文标签 / 示意数据 / 与内容无关的图标;同一元素不要既画出来又列进清单(重复两遍);同一信息只写一次,不要用双层括号,也不要既加括注又写注释行。";
83
86
 
84
87
  /** 把清单渲染成 prompt 行(QA 只检查 head 存在与关键行逐字命中)。 */
85
88
  function onImageLines(list) {
@@ -88,9 +91,10 @@ function onImageLines(list) {
88
91
  if (list.subtitle) lines.push(`副标题(标题下方一行,字号小于主标题):${list.subtitle}`);
89
92
  if (list.claim) lines.push(`一句话主张:${list.claim}`);
90
93
  if (list.bullets.length) {
91
- lines.push("要点(逐条列出,每条一行短句):");
94
+ lines.push("要点(原句只作理解;画面上每条压成 ≤12 字短语贴到对应模块):");
92
95
  list.bullets.forEach((point, index) => lines.push(`${index + 1}. ${point}`));
93
96
  }
97
+ lines.push("版式与字号预算:主标题最大;副标题紧接其下、约标题的 45% 字号;一句话主张做成通栏一行(字号小于副标题、大于要点)——这三项都必须完整印出,不得省略或用别的话替代。");
94
98
  return lines;
95
99
  }
96
100
 
@@ -113,6 +117,7 @@ export function buildPrompt(slide, styleBrief, context = {}) {
113
117
  parts.push(...coverPromptLines(brief));
114
118
  parts.push("版式纪律:只放主标题 / 副标题 / 作者 / 日期;正文不超过一行;不要目录、要点清单、数据图表、大段文字;留白为主。");
115
119
  if (slide?.visualBrief) parts.push(`画面要求:${slide.visualBrief}`);
120
+ parts.push(CANVAS_DISCIPLINE);
116
121
  parts.push("文字优先:上面【图上文字】的每一行都必须出现在画面里;画面要求与它冲突时,以上面为准。");
117
122
  return parts.filter(Boolean).join("\n");
118
123
  }
@@ -120,7 +125,8 @@ export function buildPrompt(slide, styleBrief, context = {}) {
120
125
  const body = String(slide?.body ?? "").trim();
121
126
  if (body) parts.push(`讲述用正文(不要整段排进画面,只提炼成上面的要点;用来把握语气与例子):${body.slice(0, 300)}`);
122
127
  if (slide?.visualBrief) parts.push(`画面要求:${slide.visualBrief}`);
123
- parts.push("文字优先:上面【图上文字】的每一行都必须印出来(可换行、可分层,但不得省略);画面要求若写「只出现 XX」,XX 之外仍要保留主标题与副标题。");
128
+ parts.push(CANVAS_DISCIPLINE);
129
+ parts.push("文字优先:上面【图上文字】的主标题 / 副标题 / 主张必须完整印出(可换行、可分层,但不得省略、不得改写成别的说法);画面要求若写「只出现 XX」,XX 之外仍要保留这三项与要点短语。");
124
130
  parts.push(...briefPromptLines(brief));
125
131
  return parts.filter(Boolean).join("\n");
126
132
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-plugin-deck-studio",
3
- "version": "0.2.9",
3
+ "version": "0.2.10",
4
4
  "description": "Deckline:DSH 的 image deck / PPT 工作台插件——原生 Chat + 整页图片 deck 工作区 + 设计风格库;用对话做 PPT、按页出图、版本可追踪、导出 PDF/PPTX。",
5
5
  "homepage": "https://github.com/yuna78/dsh-deck-studio#readme",
6
6
  "repository": {
@@ -4,7 +4,7 @@
4
4
  "description": "科技蓝图风:深海军蓝网格底、青白技术线条、等距系统/架构图、等宽字体标签、发光节点;像工程蓝图和架构白皮书。",
5
5
  "constraints": "不要照片、不要卡通、不要渐变光效泛滥、不要彩色斑块、不要写实人物、不要真实品牌 logo。",
6
6
  "reference": "架构白皮书 / 工程蓝图",
7
- "styleBrief": "科技蓝图 / 等距架构图:深海军蓝底 #0A1628,叠加极淡青色网格(#1E3A5F);主体是等距(isometric)线框模块:节点、服务器、数据库、云、客户端,用青白色 #7DD3FC 细线与发光边,节点间正交折线连接 + 小箭头;标签用等宽字体(monospace)全大写小字,外加带边框的图例 / 清单面板(不发光)。点缀极少量暖色 #F59E0B 强调关键节点。整体像工程蓝图 / 架构白皮书,信息密度高但网格秩序强;无照片、无卡通、无廉价霓虹。",
7
+ "styleBrief": "科技蓝图 / 等距架构图:深海军蓝底 #0A1628,叠加极淡青色网格(#1E3A5F);主体是等距(isometric)线框模块:节点、服务器、数据库、云、客户端,用青白色 #7DD3FC 细线与发光边,节点间正交折线连接 + 小箭头;标签用等宽字体(monospace)全大写小字。图例 / 清单面板只在画面里确实有多种连线或符号需要解释时才加,且只列本页出现过的元素,不要为填充版面编造图例项。点缀极少量暖色 #F59E0B 强调关键节点。整体像工程蓝图 / 架构白皮书,信息密度高但网格秩序强;无照片、无卡通、无廉价霓虹。",
8
8
  "baselineBriefs": [
9
9
  {
10
10
  "title": "架构总览",