一键把草稿打磨成可执行的提示词并回填
29.9/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/9/16 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/shengyvself/narrative-prompt-polish.git状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
生态插件
可安装,未声明 dsh 能力
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 49 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查⚠ 装前注意未发布到 npm registry,仅可从源码安装
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✗npm 包narrative-prompt-polish(未发布到 npm,仅可源码安装)
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/9/30 15:17:09
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件发起外部网络请求
查看扫描证据(共 9 处,展示前 9 条)
- 发起网络请求lib/client.js:43
response = await fetch(ROUTE + "/" + method, { - 写入本地文件lib/trace-recorder.js:42
mkdirSync(dirname(file), { recursive: true }) - 写入本地文件lib/trace-recorder.js:43
appendFileSync(file, JSON.stringify(trace) + "\n", "utf8") - 读取本地文件lib/trace-recorder.js:64
if (!existsSync(file)) continue - 读取本地文件lib/trace-recorder.js:66
const dayLines = readFileSync(file, "utf8").split("\n").filter(Boolean) - 写入本地文件src/trace-recorder.js:42
mkdirSync(dirname(file), { recursive: true }) - 写入本地文件src/trace-recorder.js:43
appendFileSync(file, JSON.stringify(trace) + "\n", "utf8") - 读取本地文件src/trace-recorder.js:64
if (!existsSync(file)) continue - 读取本地文件src/trace-recorder.js:66
const dayLines = readFileSync(file, "utf8").split("\n").filter(Boolean)
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 一键润色草稿
- 生成可执行提示词
- 侧栏多轮打磨回填
DSH 插件:主输入框 ✨ 一键把草稿润色成清晰、可执行的提示词,经 better-sidebar 侧栏对话多轮打磨后回填。
README
由 DeepSeek 最新模型翻译生成[!IMPORTANT]
本仓已迁移 → 请使用 dsh-prompt-only-forge(v0.3.0+,2026-09-14 首发)。
旧仓 narrative-prompt-polish 保持只读状态,不再接受新提交;历史版本(v0.0.26 / v0.0.27 / v0.1.0 / v0.2.0)仍可通过 Releases 页获取。
新仓定位:纯注入(no send action)提示词润色,独立于 better-sidebar 侧栏对话,架构与 API 完全重写。
— shengyv, 2026-09-14
narrative-prompt-polish
Shengyv's Writing Architecture 的提示词优化插件:主会话输入框右座 ✨ 一键起一个可对话的子代理,把草稿打磨成清晰、具体、可直接交给 AI Agent 执行的提示词——在子代理会话里多轮追问,满意后手动复制回主输入框。
展开完整文档(README 剩余 1 节)
[!IMPORTANT]
本仓已迁移 → 请使用 dsh-prompt-only-forge(v0.3.0+,2026-09-14 首发)。
旧仓 narrative-prompt-polish 保持只读状态,不再接受新提交;历史版本(v0.0.26 / v0.0.27 / v0.1.0 / v0.2.0)仍可通过 Releases 页获取。
新仓定位:纯注入(no send action)提示词润色,独立于 better-sidebar 侧栏对话,架构与 API 完全重写。
— shengyv, 2026-09-14
narrative-prompt-polish
Shengyv's Writing Architecture 的提示词优化插件:主会话输入框右座 ✨ 一键起一个可对话的子代理,把草稿打磨成清晰、具体、可直接交给 AI Agent 执行的提示词——在子代理会话里多轮追问,满意后手动复制回主输入框。
核心特性
- 主框 ✨ → 可对话子代理打磨(默认主流程,0.2.0+):点击主框 ✨ 不直接改草稿,而是由服务端 POST /api/polish.start 在主会话下起一个 continuable 子代理(ctx.subagents.startContinuable,provider 默认 fork:seed 主会话已完成轮、继承父 Agent 的 provider/model/推理档与预设),把「任务书 + 草稿」投进它的首轮;客户端随后 ctx.sessions.openSubagent 打开该子代理会话——它是原生会话界面,输入框可写,可多轮追问,满意后复制回主输入框。子代理起不来时显式报错(红线 9:绝不静默降级到单次 polish)。
- 0.2.0 前该主流程依赖 better-sidebar 的 sidechat;better-sidebar 已从本部署架构移除(0.1.5 起右侧栏面板一律走官方 keyed 槽位),故主路径改为内核原生子代理。
- C 方案(full,默认):ctx.sessions.get() → deriveMessages() + requestHeader().system/config,
完整复刻 [system]+[...history] 前缀直调 ctx.llm.stream——前缀与主会话一致即命中 prompt cache,
只增量计算草稿与润色指令。非 live 会话走 sessionQuery.readSession() 离线折叠兜底。
- 降级链:full → partial(readSurface 近期对话)→ none(裸草稿),每次降级在响应 fallbackReasons 与 trace 中留痕;strictFull: true 可改为硬失败(no-session)。
- 意图骨架:本地正则分类 debug/implement/explain/chat;partial/none 下骨架进 system, full 下骨架折进末尾 user 指令(不动 system 前缀以保缓存)。
- CAS 写回(历史单次 polish 路径):点击时捕获草稿指纹,返回后若草稿已变则弹「草稿已变,未应用润色」且不覆盖。
- 错误细分:rejected(empty/references/too-large)、no-session、route-unavailable、 stream-failed、empty-result、context-fallback、settings-unavailable。
- trace:每次调用追加 JSONL 到 lore/traces/prompt-polish/YYYY-MM-DD.jsonl (intent/contextMode/fallbacks/cacheHit/tokens/hash 等;hash 不落全文)。设置页可关。
- 事件总线(外部模块联动,0.2.0 收窄):window 上广播
narrative:prompt-polish:trigger({triggerSource, draft?, targetElement?})→ 本插件代跑
单次 /api/polish(不占用子代理)→ CAS 回写 target → 广播 …:result;不带 targetElement 则只广播、模块自理回写。契约见 docs/sidebar-integration.md。
- sidebar 浮按钮(0.2.0 已移除):随 better-sidebar 一并删除(宿主 DOM 标记 [data-dsh-better-sidebar] 在本部署已不存在);配置键 sidebarFloatingButtonEnabled 仅保留以免已存设置文档失配,无任何行为。
红线遵守
- 不写主会话历史:无 append、llm.stream 不传 sessionId(不进会话调度)。
- 无野生 DOM 注入:UI 走官方 slot conversation.input.right + settings.section。
- 服务端零 @deepseek-ai/ 静态 import(dsh-session 仅离线路径动态 import 且失败自动降级),杜绝缺依赖崩 web。
API
| 方法 | 说明 |
| POST /narrative-prompt-polish/api/polish.start | {sessionId,text,triggerSource?,provider?} → {childId,messageId,intent,subagentProvider}(主路径:起可对话子代理,任务书投首轮) |
| POST /narrative-prompt-polish/api/polish | {sessionId,text,mode?,strictFull?,triggerSource?,mergeSidebarContext?,sidebarContext?}(单次直调路径:事件总线 / headless / 自动化) |
| POST .../api/config /config.get /config.update | 配置读改(settings 服务缺位时 update 返回 503) |
| POST .../api/traces.recent | {limit} 最近 trace |
| POST .../api/apply-report | 客户端 CAS 结果回传(applied/changed),trace 行按 traceTs 配对 |
独立安装(GitHub)
dsh plugin --profile web add github:shengyvself/narrative-prompt-polish
或克隆后:
dsh plugin --profile web add ./narrative-prompt-polish
安装后重启 DSH Web 即生效。无第三方依赖:主路径走内核原生 ctx.subagents(continuable)
+ ctx.sessions.openSubagent,要求内核版本含子代理编排服务(DSH ≥ 0.1.5 实测)。
默认配置开箱即用(子代理继承当前会话的 provider/model/预设;trace 写入 /lore/traces/prompt-polish/,可在设置页改为绝对路径锚定你的工作区)。
License
本项目以 MIT 发布。
开发
npm run build # src → lib 直拷
npm test # node --test tests/
验证链(改插件红线):node --check → preflight 4 关 → build → import 冒烟 → 加 bundle → 重启 → 3 连测 200 → dump-config → 日志扫描。
文件结构 src/index.js host 入口(围栏路由 + settings 防御式注册) src/api.js 方法表 + polish 主流程(校验→意图→上下文→直调→清洗→trace) src/context-assembler.js C 方案探测链 full→partial→none src/surface-fold.js readSurface 过滤折叠(纯函数) src/intent.js 4 类意图骨架 src/polish.js 流组装/输出清洗/usage 提取(纯函数) src/trace-recorder.js JSONL trace src/trust-fence.js 浏览器信任围栏 src/wire.js JSON 信封 src/taskbook.js 主路径任务书文本(服务端;与 /api/polish 共用意图判定) src/client.bundle.js 客户端(PolishButton/PolishSettings + 事件总线 + startPolishSubagent 子代理打磨) tests/unit.test.mjs 32 例单测(node --test) scripts/smoke-apply.mjs 服务端 apply 冒烟(真 apply + 假 cordis ctx,16 断言) docs/decisions.md 设计决策记录 docs/sidebar-integration.md 联动层集成指南架构概览
本插件按职责划分为以下子层:
| 层 | 文件 | 职责 |
| 入口 | src/index.js | DSH host 半边挂载点 + trust fence 围栏 |
| API 路由 | src/api.js | /api/polish /api/config /api/traces.recent /api/apply-report 方法表 |
| 上下文 | src/context-assembler.js | C 方案: deriveMessages + requestHeader 复刻 [system]+[history] |
| 表面 | src/surface-fold.js | partial 降级时 readSurface 读近期对话 |
| 意图 | src/intent.js | 4 类意图骨架: debug / implement / explain / chat |
| 流组装 | src/polish.js | 拼请求 + 调 ctx.llm.stream + 清洗 |
| Trace | src/trace-recorder.js | 每次调用追加 JSONL 到 lore/traces/prompt-polish/YYYY-MM-DD.jsonl |
| 错误细分 | src/wire.js + src/api.js | rejected / no-session / route-unavailable / stream-failed / empty-result / context-fallback / settings-unavailable |
| 主路径 | src/taskbook.js + src/api.js#polish.start | 任务书 → ctx.subagents.startContinuable(continuable 子代理) |
| 客户端 | src/client.bundle.js | PolishButton + PolishSettings + 事件总线 + startPolishSubagent |
构建流程: src/.js → scripts/build.mjs 直拷 → lib/.js (md5 一致; 用 scripts/preflight.sh 防回归)。
测试策略
- 单元测试: node --test tests/unit.test.mjs (32 用例, 全绿)
- Preflight: bash scripts/preflight.sh (build 前 5 关: 语法 / 大小无异常翻倍 / 单一 __ModuleLoader__.load / 核心防御未丢 / better-sidebar 耦合为 0)
- apply 冒烟: node scripts/smoke-apply.mjs (真 apply + 假 cordis ctx: 围栏 403 / 405 / polish.start 200 / no-live-agent 409 / rejected 400)
- 端到端: DSH web 装上 plugin → 主框输入草稿 → 点 ✨ → 子代理会话被打开(任务书进首轮)→ 多轮追问 → 手动复制回填
- 回归:8/27 incident 教训——client.bundle.js 56K 重复 bug,由 preflight 关 3(单一 __ModuleLoader__.load)防回归;关 4 守 slots 服务防御
故障排查
| 现象 | 可能原因 | 处置 |
| 点 ✨ 报「sessions 服务未注入」 | 客户端插件未挂载(0.1.5 需重启生效) | 重启 DSH Web 后刷新页面 |
| 点 ✨ 报「主会话没有 live agent」 | 会话未激活 / agent 已被回收 | 在当前会话里重试 |
| 报「子代理已创建但客户端目录未就绪」 | 客户端会话目录刷新延迟 | 在会话列表的「子代理」目录里手动打开该 childId |
| 子代理起不来 | 内核缺 ctx.subagents / provider 未注册 | dsh --profile web --dump-config \| grep subagent 核对 |
| 提示词无变化 | strictFull=true 但会话非 live | 改 strictFull=false(允许降级到 partial/none) |
| 草稿被覆盖 | 草稿在 polish 期间被用户改了 | CAS 拒绝覆盖,重试时用最新草稿 |
| TRACE 太大 | 没设置 pageSize 限制 | 设置页可关 / 设保留天数 |
| slots 注入失败(console.warn) | DSH 启动顺序 race | 正常降级,主壳照常加载,✨ 与设置页暂时不可见 |
前置依赖
无第三方依赖(0.2.0 起)。主路径需要内核提供 ctx.subagents(continuable 子代理)与 ctx.sessions.openSubagent;本部署(DSH 0.1.5-rc.2)已具备。子代理 provider 默认 fork (dsh-subagent-fork-in-process,seed 母会话已完成轮),可在设置里切 spawn(全新子代理)。
自检:两个 provider 在组合树里
dsh --profile web --dump-config | grep -A2 subagent
降级说明:/api/polish 单次直调路径仍在(事件总线 / headless / 自动化用),但主框 ✨ 不会*在子代理失败时退到它(红线 9)。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
shengyvself/narrative-prompt-polish
一键把草稿打磨成可执行的提示词并回填
相关插件 · 浏览器
智能体插件框架deepseek-ai/deepseek-harness
DeepSeek Harnessdsh是由 DeepSeek AI 开发的开源 agent harness智能体框架。
★ 270,422已汉化DSH
71.9
多设备 Agent 看板YaoApp/yao
✨ 所有 Agent 和工作区集中管理,覆盖你的每一台设备。任务看板追踪进度,桌面端、移动端、浏览器、API…
★ 8,147已汉化DSH
71.2
可扩展侧边栏工作台omdsh-dev/DSH-better-sidebar
DSH 的双工作台:原生右侧栏 + 自绘底部面板,并把 ctx.betterSidebar 服务开放给所有插件
★ 4,761已汉化DSH
71.1
浏览器自动化桥Tencent/BrowserSkill
你的 Agent。你的浏览器。连接,就能协作。
★ 9,967已汉化DSH
71
AI 小说创作工作台EthanYoQ/AI-Novel-Writer
AI 小说作家 / AI Novel Writer
★ 1,591已汉化DSH
70.7
智能体浏览器引擎platonai/Browser4
DeepSeek Harness 集成
★ 1,175已汉化DSH
70.4
这是你的仓库?认领条目