DSH 演示文稿:HTML / 可编辑 PPTX / 工程包、工程检索与轻量编辑、数字溯源和现场推演,可选 AI…
44/100
综合分
21
GitHub 星标
9,723
npm 周下载
—/5
用户评分
数据截至 2026/10/30 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/STARDUSTLC666/dsh-ppt.git状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
生态插件
可安装,未声明 dsh 能力
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 5 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包dsh-ppt @ 0.20.3
✓Node 引擎要求 ^22.19.0 || >=24.0.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/31 02:19:05
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 89 处,展示前 84 条)
- 读取本地文件skills/dsh-ppt/scripts/deck-core.mjs:32
const pkg = JSON.parse(readFileSync(new URL(file, import.meta.url), 'utf8')) - 写入本地文件skills/dsh-ppt/scripts/deck-core.mjs:346
mkdirSync(outputDir, { recursive: true }) - 读取本地文件skills/dsh-ppt/scripts/deck-core.mjs:350
if (overwrite || !existsSync(first)) return first - 读取本地文件skills/dsh-ppt/scripts/deck-core.mjs:353
if (!existsSync(candidate)) return candidate - 写入本地文件skills/dsh-ppt/scripts/deck-core.mjs:358
writeFileSync(htmlPath, renderThemePreviewHtml(language.id), 'utf8') - 写入本地文件skills/dsh-ppt/scripts/deck-core.mjs:361
writeFileSync(svgPath, renderThemeSvg(id, language.id), 'utf8') - 读取本地文件skills/dsh-ppt/scripts/deck-core.mjs:442
const existing = new Set(readdirSync(outputDir).map((name) => name.toLowerCase())) - 删除本地文件skills/dsh-ppt/scripts/deck-core.mjs:912
rmSync(item.tempPath, { force: true }) - 读取本地文件skills/dsh-ppt/scripts/deck-core.mjs:919
if (!existsSync(item.path)) continue - 读取本地文件skills/dsh-ppt/scripts/deck-core.mjs:921
previous.set(item.path, readFileSync(item.path)) - 写入本地文件skills/dsh-ppt/scripts/deck-core.mjs:931
writeFileSync(item.tempPath, item.data, item.encoding) - 写入本地文件skills/dsh-ppt/scripts/deck-core.mjs:943
renameSync(item.tempPath, item.path) - 删除本地文件skills/dsh-ppt/scripts/deck-core.mjs:952
if (previousData === undefined) rmSync(item.path, { force: true }) - 写入本地文件skills/dsh-ppt/scripts/deck-core.mjs:953
else writeFileSync(item.path, previousData) - 读取本地文件skills/dsh-ppt/scripts/deck-advanced.mjs:91
try { size = statSync(path).size } catch { fail(`${page} 图片不存在:${path}`) } - 读取本地文件skills/dsh-ppt/scripts/deck-advanced.mjs:93
try { bytes = readFileSync(path) } catch { fail(`${page} 图片无法读取:${path}`) } - 删除本地文件skills/dsh-ppt/scripts/deck-advanced.mjs:311
try { return commit() } finally { closeSync(fd); rmSync(lock, { force: true }) } - 读取本地文件skills/dsh-ppt/scripts/deck-advanced.mjs:354
try { if (hash(readFileSync(paths[kind])) === manifest.artifacts[kind]) continue } catch {} - 写入本地文件skills/dsh-ppt/scripts/deck-advanced.mjs:379
mkdirSync(normalized.outputDir, { recursive: true }) - 读取本地文件skills/dsh-ppt/scripts/deck-advanced.mjs:390
if (statSync(path).size > MAX_DOCUMENT) fail('工程文件超过 64 MiB') - 读取本地文件skills/dsh-ppt/scripts/deck-advanced.mjs:391
const bytes = readFileSync(path) - 读取本地文件skills/dsh-ppt/scripts/deck-advanced.mjs:433
if (hash(readFileSync(state.path)) !== state.fingerprint) fail('工程已被其他操作修改,请重新读取后重试') - 读取本地文件skills/dsh-ppt/scripts/deck-render.mjs:29
const info = lstatSync(path) - 读取本地文件skills/dsh-ppt/scripts/deck-render.mjs:32
const bytes = readFileSync(path) - 读取本地文件skills/dsh-ppt/scripts/deck-render.mjs:113
try { manifest = JSON.parse(readFileSync(candidate, 'utf8')) } catch (error) { if (error.code === 'ENOENT') continue; throw error } - 写入本地文件skills/dsh-ppt/scripts/deck-render.mjs:121
mkdirSync(dirname(base), { recursive: true }) - 写入本地文件skills/dsh-ppt/scripts/deck-render.mjs:124
try { mkdirSync(candidate); return candidate } catch (error) { if (error.code !== 'EEXIST') throw error } - 删除本地文件递归skills/dsh-ppt/scripts/deck-render.mjs:131
if (root && owned && dirname(resolve(owned)) === resolve(root) && (basename(owned).startsWith('.partial-') || basename(owned) === 'artifacts')) rmSync - 删除本地文件skills/dsh-ppt/scripts/deck-render.mjs:132
if (root) { try { rmdirSync(root) } catch (error) { if (!['ENOENT', 'ENOTEMPTY', 'EEXIST'].includes(error.code)) throw error } } - 写入本地文件skills/dsh-ppt/scripts/deck-render.mjs:176
mkdirSync(staging) - 写入本地文件skills/dsh-ppt/scripts/deck-render.mjs:178
writeFileSync(snapshot, input, { flag: 'wx' }) - 写入本地文件skills/dsh-ppt/scripts/deck-render.mjs:201
writeFileSync(manifestPath, JSON.stringify(manifest, null, 2) + '\n') - 删除本地文件skills/dsh-ppt/scripts/deck-render.mjs:214
unlinkSync(snapshot) - 写入本地文件skills/dsh-ppt/scripts/deck-render.mjs:215
writeFileSync(join(staging, 'render-receipt.json'), JSON.stringify(receipt, null, 2) + '\n', { flag: 'wx' }) - 读取本地文件skills/dsh-ppt/scripts/deck-render.mjs:221
if (existsSync(destination)) fail('本次渲染提交目录发生冲突') - 发起网络请求lib/client.js:292
const response = await fetch(route, { method: 'POST', credentials: 'same-origin', cache: 'no-store', signal: controller.signal, headers: { 'content-ty - 发起网络请求lib/client.js:309
const close = () => { void fetch(route, { method: 'POST', credentials: 'same-origin', keepalive: true, headers: { 'content-type': 'application/json', - 发起网络请求lib/client.js:808
const response = await fetch(new URL(ROUTE, document.baseURI), { method: 'POST', credentials: 'same-origin', signal, - 写入剪贴板lib/client.js:1634
navigator.clipboard?.writeText(text).then(() => setMessage(t("已复制示例"))).catch(() => { }); - 读取本地文件skills/dsh-ppt/scripts/build-deck.mjs:102
function readJson(value) { return JSON.parse(value.startsWith('@') ? readFileSync(resolvePath(value.slice(1)), 'utf8') : value) } - 读取本地文件skills/dsh-ppt/scripts/build-deck.mjs:148
content = readFileSync(resolvePath(content.slice(1)), 'utf8') - 读取本地文件skills/dsh-ppt/scripts/build-deck.mjs:149
} else if (content.trim() !== '' && existsSync(resolvePath(content.trim()))) { - 读取本地文件skills/dsh-ppt/scripts/build-deck.mjs:151
content = readFileSync(resolvePath(content.trim()), 'utf8') - 读取本地文件lib/skill.js:48
const text = readFileSync(join(dir, 'SKILL.md'), 'utf8'); - 读取本地文件lib/workbench.js:29
const stat = lstatSync(path); - 读取本地文件lib/workbench.js:32
return readFileSync(path); - 读取本地文件lib/workbench.js:79
if (!existsSync(this.catalogPath)) - 读取本地文件lib/workbench.js:81
if (lstatSync(this.catalogPath).size > 8 * 1024 * 1024) - 读取本地文件lib/workbench.js:84
for (const line of readFileSync(this.catalogPath, 'utf8').split('\n')) { - 写入本地文件lib/workbench.js:114
mkdirSync(dirname(this.catalogPath), { recursive: true }); - 读取本地文件lib/workbench.js:115
if (existsSync(this.catalogPath) && lstatSync(this.catalogPath).size >= 8 * 1024 * 1024) - 写入本地文件lib/workbench.js:117
appendFileSync(this.catalogPath, JSON.stringify(row) + '\n'); - 发起网络请求lib/workbench.js:390
async fetch(request) { - 发起网络请求lib/workbench.js:433
host.connection?.fetch?.register({ path: PPT_WORKBENCH_ROUTE, methods: ['POST'], requestBody: 'buffered', fetch: (request) => workbench.fetch(request) - 读取本地文件skills/dsh-ppt/scripts/deck-data.mjs:30
const path = resolve(cwd, input.path), stat = lstatSync(path) - 读取本地文件skills/dsh-ppt/scripts/deck-data.mjs:34
content = readFileSync(path, 'utf8'); name = input.name || basename(path) - 读取本地文件lib/coaching.js:40
const path = this.path(id), stat = lstatSync(path); - 读取本地文件lib/coaching.js:43
const run = JSON.parse(readFileSync(path, 'utf8')); - 写入本地文件lib/coaching.js:53
mkdirSync(this.directory, { recursive: true, mode: 0o700 }); - 删除本地文件lib/coaching.js:67
unlinkSync(path); - 写入本地文件lib/coaching.js:77
writeFileSync(tmp, serialized, { flag: 'wx', mode: 0o600 }); - 写入本地文件lib/coaching.js:78
renameSync(tmp, destination); - 读取本地文件lib/coaching.js:81
if (existsSync(tmp)) - 删除本地文件lib/coaching.js:82
unlinkSync(tmp); - 读取本地文件lib/coaching.js:94
if (!existsSync(this.directory)) - 读取本地文件lib/coaching.js:96
return readdirSync(this.directory).filter(name => uuid(name.slice(0, -5)) && name.endsWith('.json')).flatMap(name => { try { - 写入本地文件lib/coaching.js:148
mkdirSync(this.directory, { recursive: true, mode: 0o700 }); - 读取本地文件lib/coaching.js:149
if (this.list(context).length >= 20 || readdirSync(this.directory).filter(f => f.endsWith('.json')).length >= 200) - 删除本地文件lib/coaching.js:279
throw new Error('请先停止当前调用 / Stop the active call first'); this.locked(run.id, () => unlinkSync(this.path(run.id))); return { removed: true }; } - 读取本地文件lib/visual.js:9
const stat = lstatSync(path); - 读取本地文件lib/visual.js:12
return readFileSync(path); - 写入本地文件lib/visual.js:42
mkdirSync(this.directory, { recursive: true, mode: 0o700 }); - 删除本地文件lib/visual.js:56
unlinkSync(path); - 写入本地文件lib/visual.js:65
writeFileSync(temp, data, { flag: 'wx', mode: 0o600 }); - 写入本地文件lib/visual.js:66
renameSync(temp, this.path(run.id)); - 读取本地文件lib/visual.js:69
if (existsSync(temp)) - 删除本地文件lib/visual.js:70
unlinkSync(temp); - 读取本地文件lib/visual.js:107
if (!existsSync(this.directory)) - 读取本地文件lib/visual.js:109
return readdirSync(this.directory).filter(n => n.endsWith('.json') && uuid(n.slice(0, -5))).flatMap(n => { try { - 写入本地文件lib/visual.js:163
mkdirSync(this.directory, { recursive: true, mode: 0o700 }); - 读取本地文件lib/visual.js:164
if (this.list(context).length >= 20 || readdirSync(this.directory).filter(n => n.endsWith('.json')).length >= 200) - 写入本地文件lib/visual.js:216
mkdirSync(root, { recursive: true, mode: 0o700 }); - 删除本地文件递归lib/visual.js:364
rmSync(root, { recursive: true, force: true }); - 删除本地文件lib/visual.js:366
this.locked(run.id, () => unlinkSync(this.path(run.id)));
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/libreoffice-kit给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
界面预览
1 张 · 点击查看大图功能亮点
- 导出可编辑PPTX
- 长表格自动分页
DSH 演示文稿插件:Markdown 生成网页放映与可编辑 PPTX,长表格自动分页,内置 5 套主题、备注与转场动画。
README
由 DeepSeek 最新模型翻译生成dsh-ppt
dsh-ppt 鲸鱼娘插件封面
把材料制作成可直接交付的 HTML 放映、可编辑 PPTX 与工程包。可在 DSH 工作台轻量编辑、核对数字来源和现场推演;AI 预审、模拟答辩与看图修复均按需选择,也可直接下载成品。
downloads total downloads
下载统计说明
欢迎使用,遇到问题或有改进建议,请提交 issues 和 PR。
从 DSH 原生侧栏打开工作台;配置与操作边界见工作台说明。
功能
- 工程库按关键词搜索,按最近 / 最早更新或标题排序;返回列表时保留筛选条件。
- 生成图文、表格、原生图表和品牌化演示文稿。
- 可选数字溯源与现场推演:点击数字追到原始材料、CSV 单元格或公式;调整假设、预览影响并确认保存。HTML 保留交互,PPTX 保存静态结果及公式 / 假设,见数据说明。
- 在设置页编辑文字和图片、调整顺序、复制或删除页面,并支持撤销。
- 提供质量检查与可选的最终 PPTX 图片 / PDF 渲染。
- 可选 AI 视觉检查:看实际 PPTX 图片,标记问题区域,调整排版并另存副本,重新渲染复查;支持前后对比、停止、撤销与检查记录。见看图修复。
- 下载按页整理的 Markdown 讲稿,保留当前版本的标题与演讲备注。
展开完整文档(README 剩余 1 节)
dsh-ppt dsh-ppt 鲸鱼娘插件封面 把材料制作成可直接交付的 HTML 放映、可编辑 PPTX 与工程包。可在 DSH 工作台轻量编辑、核对数字来源和现场推演;AI 预审、模拟答辩与看图修复均按需选择,也可直接下载成品。 downloads total downloads 下载统计说明 欢迎使用,遇到问题或有改进建议,请提交 issues 和 PR。 从 DSH 原生侧栏打开工作台;配置与操作边界见工作台说明。 功能 - 工程库按关键词搜索,按最近 / 最早更新或标题排序;返回列表时保留筛选条件。 - 生成图文、表格、原生图表和品牌化演示文稿。 - 可选数字溯源与现场推演:点击数字追到原始材料、CSV 单元格或公式;调整假设、预览影响并确认保存。HTML 保留交互,PPTX 保存静态结果及公式 / 假设,见数据说明。 - 在设置页编辑文字和图片、调整顺序、复制或删除页面,并支持撤销。 - 提供质量检查与可选的最终 PPTX 图片 / PDF 渲染。 - 可选 AI 视觉检查:看实际 PPTX 图片,标记问题区域,调整排版并另存副本,重新渲染复查;支持前后对比、停止、撤销与检查记录。见看图修复。 - 下载按页整理的 Markdown 讲稿,保留当前版本的标题与演讲备注。 - 下载时可选「分享成品包」(PPTX、离线 HTML、当前讲稿)或「完整工程包」(含 JSON 工程)。分享包仍保留已绑定的来源摘录与用户填写内容,详见下载说明。 - 可选 AI 预审与模拟答辩:复用 DSH 已配置模型,按需提问、比较改稿、另存可撤销副本,并导出问答与待补充材料清单。默认关闭,直接下载成品无需预审。 - 键盘操作:Ctrl/⌘+S 保存、Esc 取消或返回、Alt+←/→ 切换页面;有未保存修改时离开会提示。 安装 桌面版可在「插件」面板按包名 dsh-ppt 安装。已配置 dsh 命令时也可使用: dsh plugin --profile desktop add dsh-ppt 网页版把命令中的 desktop 改为 web。安装后重启 DSH。 开始使用 1. 在目标工作区提供材料、用途、听众和页数,例如“做成可交付的演示文稿,生成 HTML、PPTX 和工程文件”。 2. 从左侧栏打开“演示文稿”,在工程库搜索或选择生成的项目。 3. 选择页面编辑文字、图片或顺序,保存后核对预览;需要时渲染当前 PPTX 检查实际画面。 4. 按需要主动开启 AI 预审、模拟答辩或看图修复;直接下载成品不要求这些步骤。 5. 下载“分享成品包”交付,或下载“完整工程包”保留编辑能力;在目标播放器或 Office 中再核对一次。 Office 中的修改不会同步回 JSON。插件检测到成品在外部修改,或旧工程没有校验记录时,会拒绝直接覆盖;可用面板「另存副本」或 ppt_edit(saveAs:true) 从 JSON 生成新文件,保留原成品。副本不包含 Office 手工修改。 成品页下方可主动开启「AI 预审」或「模拟答辩」。前者根据材料模拟质疑与回答,后者由 AI 一次问一题、你来回答。可以先选模型、听众、强度和范围,再决定是否发送。具体流程与调用上限见演练说明。AI 建议不等于事实核验;普通成品生成、编辑和下载仍不要求配置模型。 依赖与配置 普通生成不需要 Office。最终 PPTX 渲染使用可选的官方 LibreOffice Kit;依赖版本、字体环境和安装方法见使用说明。 详细配置、工具参数与排错见使用说明。从源码独立开发时,Node 要求以 package.json 为准。 文档 - 使用与排错 - 更新记录 - 验证范围与历史记录 - 问题反馈与功能建议 插件更新 需要 DSH 0.2.1-rc.3 或更新版本。更新控件直接位于原有工作台内容末尾;没有工作台的插件,位于原生插件详情页底部。检查、更新记录和偏好在原地展开,不增加独立更新页面或设置菜单。自动检查默认开启;自动安装默认关闭,明确授权后才会在空闲且没有未保存修改时安装兼容的稳定补丁。开关按插件独立保存,可关闭、推迟或忽略提醒;不会强制重启 DSH、升级 DSH 本体或替换本地源码安装。Suite 组件在当前页面底部明确说明并操作 Suite 整包更新。 旧版用户先在官方插件管理中手动更新一次,之后才会获得此入口。发布到 npm 不会直接替换用户已经安装的版本。 License MIT
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
STARDUSTLC666/dsh-ppt
DSH 演示文稿:HTML / 可编辑 PPTX / 工程包、工程检索与轻量编辑、数字溯源和现场推演,可选 AI…
相关插件 · 其他
模型破甲清洗YuJunZhiXue/dsh-purge
⚔️ DeepSeek Harness 网络安全红队工具dsh-purge
★ 16,148已汉化DeepSeek 客户端
73
女娲蒸馏alchaincyf/nuwa-skill
输入名人名字,提炼其思维模型与决策方式供你调用
★ 37,308已汉化DSH
72
逆向分析桥接Fanqi89/dsh-rea
REA(Reverse Engineer Anything)MCP 桥接,用来把 REA 逆向工具接入 DSH 插件
★ 51已汉化DSH
72
语音女友beiyege-01/dsh-voice-ai-girlfriend
语音 AI 女友Voice AI girlfriend for DeepSeek Harness:Whisper…
★ 888已汉化DSH
71.6
红队越狱测试套件Minglink/dsh-infinite-gen-5
DeepSeek v4.1 flash 逆向工具无限五代 求 Star 收藏 ⭐欢迎大家提交项目的改进
★ 3,759已汉化DSH
71.4
协同办公空间dream-num/univer-workspace
一个让人类与 AI Agent 共同创作、协作和审阅的开源 Office 工作空间。
★ 2,266已汉化DSH
70.7