Repository navigation
Releases: lifangjin/dsh-maoying
Release list
v0.1.37
写手委派改名 draft,修复 preset 挂载失败(#2)
DSH ≥ 0.2.1-rc.3 下毛颖 preset 整体挂载失败的根因:委派组件为每个 toolName 注册 prompt section tool:${toolName},写手行 toolName: write 与 tool-fs 注册的 tool:write section 在同一 preset scope 撞名,第二次注册抛错 tool:write is already registered in this scope。写手委派改以 draft 注册(根因分析与改名方案来自 issue #2 报告者 @Cipher208,致谢)。
预设
agent.cordis.yml/agent.cordis.v2.yml:写手委派行toolName: write → draft(行 id 同步delegation-draft),主编 persona 的分工表 / Writing 六步法 ③⑤ / 共创模式措辞同步,原「一名双义」注释改写为 prompt section 撞名机理说明restrict.mjsMAIN_AGENT_ALLOW:'draft'进「角色委派」区,'write'移入「主编亲笔」区按文件写本义放行——'write' 一名双义解除delegation-labelsroles 映射键、preset.yml与 v2 preset 的 description 同步- preset id(
maoying-write)、显示名(写手)、persona 内容均不变,只改委派注册的工具名;委派名自此避开 tool-fs / tool-fs-search 工具名集合{read, write, edit, glob, grep}整类撞名
文档与测试
docs/design.md§4 角色表 / 主编工具面 / delegation-labels 映射、docs/spec.md五维字段三阶段与圣域两处、README.md五帮手介绍契约同步- 测试
ROLES/ROLE_CN/EXPECTED_V1_ALLOW改draft;新增PRESET_ID映射解耦 toolName 与历史 preset id(maoying-write保留,不动已装声明面)
门禁:npm test 241 tests 240 pass / 0 fail / 1 skip(yaml 条件类);npm run smoke 通过。
升级:DSH 0.2.1-rc.3+ 宿主重启 dsh web 即自动重装新版;#2 报告者的本地 patchedDependencies 补丁可移除(本修复与其等价)。
v0.1.36
角色卡 psychology 标准字段
角色心理曲线从零散附页升为角色卡标准字段,全链纳入。
数据规范
- 角色卡 frontmatter 新增
psychology(心理曲线):总轴+分段心理变化的长文本;主角卡建议写全,配角可缺省 - docs/spec.md、templates/novel/README.md 规范与模板同步
创作台面板
- 快照契约(parseStateSnapshot)characters 字段白名单纳入 psychology
- 全卡弹层新增「心理曲线」行(中英 i18n 同步);角色墙列表行保持轻量不加
工程化
- test/panel-core.test.mjs 字段键断言+值断言;test/fixtures.mjs 补真路径 fixture
- docs/design.md、docs/creator-panel.md 契约同步(字段清单、快照 JSON)
门禁:npm test 241 tests 240 pass / 0 fail / 1 skip(yaml 条件类);npm run smoke 通过。
v0.1.35
借鉴 dsh-superagent-prototype 的十项编排与工程化改造
编排纪律(presets,v1/v2 双源同步)
- 主编委派给指针不给转述:任务描述只写章节号、文件路径与用户原话引用,大纲要点、设定细节由帮手读原文自取;主编不替帮手写实现方案、不改写需求、不加验收标准
- 一次一问:向用户提问一次只问一个具体问题,拍板请求让人能直接答
- 缺口清单固定格式:定稿维护中断按「缺口清单:①未落盘项 ②……」逐条列报,续跑逐条勾销;无台账增量的定稿视为未定稿
- handback 协议:五帮手收到超范围请求一句话理由退回主编,不自行扩大解释;主编不自行把退回事项升级为新任务
- 节奏参数外置:单章字数档位、伏笔清理阈值以 novel/style.md「节奏」节为准(缺省 2000-4000 字 / 15 条),persona 不再写死
- 长命令后台纪律:index 重建、export、批量统计用后台 job 跑,不阻塞主编推进
拍板账(novel/decisions.yml)
方向性拍板(设定共创、分卷规划、基调与金手指变更、共创模式切换)经用户确认后落账,只增不改;越出既有拍板范围的重大变更须先再拍板——「这次改动是否越权」从记忆问题变成查账问题。maoying check 新增拍板账静态校验(id 重复 / date 格式 / source 枚举)。
创作台面板
- 状态徽章悬停显示**「在等谁」**提示:等开写 / 写作中 / 等审校报告 / 已定稿;author-draft 模式待写章显示「等作者交稿」——面板向「只展示需要人的事」靠拢
- 编辑器「阅读模式」按钮(上版遗留未发版项随本版发出):编辑态一键回只读,脏稿先确认;修复全屏取消后 fsFull 残留
工程化
- 新增
test/docs-sync.test.mjs(12 断言):README 中英 CLI 命令集与数量字样、技能表 ↔ skills/ 目录、模板文件 ↔ 速查规范双向覆盖、拍板账键集——文档漂移从人工纪律变机器门禁 - docs/design.md 增「不做清单(被否方案)」九条:不做数据库/API 层、主编写正文、自动发版、自动开写、多书并行、prompt 硬编码节奏参数、深嵌套 YAML、面板健康详情、多 Source 接入
门禁:npm test 241 tests 240 pass / 0 fail / 1 skip(yaml 条件类);npm run smoke 通过。
v0.1.34
新增
编辑器字体选择器
章节阅读页正文编辑卡工具行、字号 A−/A+ 之前加字体下拉(全屏编辑头部同款),六档:系统默认 / 黑体 / 宋体 / 楷体 / 仿宋 / 霞鹜文楷。本机未装的字体沿回落栈逐级降级(霞鹜文楷最终落 Noto Serif CJK SC → serif);选择全局记忆一份(localStorage,跨章共享),阅读与书写同源生效——只读正文与编辑器同字体切换;行号数字维持 UI 字体不动,行高公式不随字体变。
修复
行号缩放错位(时序加固)
面板缩放非 100% 档位下按 A−/A+ 调字号后行号与正文错位且不恢复。镜像测量机制经全矩阵复验无病,症状指向宿主 webview 迟到布局/绘制时序,本版三重加固:
- 测量 effect 改
useLayoutEffect(绘制前重排行号,消灭缩放后旧坐标可见帧) - 双 rAF 复测兜字体换装、zoom 迟到应用等场景(不依赖 ResizeObserver 是否触发)
- 滚动钳位重同步:缩放后内容变矮、浏览器夹紧 scrollTop 不发 scroll 事件时,行号层 transform 按当前值对齐
- 附一次性发散告警(
[maoying]前缀 console.warn),异常环境留现场数据
句式重复检查误报与显示
「。" 收尾 + 换行分段」的对话排版不再误报连续句式重复(前缀跳过空白字符);消息里的前缀转义控制字符并附 U+XXXX 码点——中文引号显示不再依赖字体,半角/全角引号一眼分清。
完整变更: v0.1.33...v0.1.34
v0.1.33
修复
Android compat 壳重启损坏 home patch(#1)
Android compat 壳(DeepSeekHarnessCompat)每次重启会重写 home 层 cordis.patch.yml 并把托管块拍成坏 YAML,导致宿主启动 fatal。本版把托管块写入层改为可配置,兼容壳环境默认改写 profile 层(壳不碰):
- 层选择
resolvePatchLayer:环境变量DSH_MAOYING_PATCH_LAYER=home|profile覆盖优先;启发式——platform==='android'或 DSH_HOME 含com.deepseek.harness.compat//payload/段时默认 profile 层 resolveProfilePatchPath:按--profile参数(兜底web)解析<home>/profiles/<name>/cordis.patch.yml,目录缺失自动退回 home 层removeManagedBlockFromHome:切 profile 层时清掉 home 层遗留托管块,防双声明;块外内容逐字节保留- 写前自检:落盘前整文件
yaml.parse回验(先中和!!js表达式,不误判宿主合法手工条目),解析失败拒写半截、保留旧文件并 warn - 坏块检测:托管块之外出现
- id: <预设显示名>形状的坏行时 warn 并给出手工清理指引
壳每次启动会把 profile patch 重置成 seed,插件每次启动自动补写——自愈(真机已验,见 issue #1 第七节)。
Full changelog: v0.1.32...v0.1.33
v0.1.32
修复
- 模型缓存命中率:compaction
thresholdRatio0.45 → 0.8(宿主默认)、tool-result-prunerthresholdChars8192 → 32768(head 8192 / tail 2048),v1/v2 双源同步。根因:压力点上 pruner 以 surface replace 改写已发送的超预算工具结果、compaction 再摘要改写中段历史,两者都使 DeepSeek 前缀缓存从改写点起整体 miss;五本账(foreshadows/memories/index/clue-board/timeline)随章节累积普遍超旧阈值 8192 字符,是反复被剪的大头。重启 DSH 后安装器逐字节比较自动换新 preset,无需重装。
面板
- 编辑器字号缩放:A−/A+,9–27px 档位、比例常显、localStorage 记忆,行号镜像同源联动
- 全屏编辑:MaskPortal 覆盖层,Esc / 遮罩 / 按钮三路退出(不走 Fullscreen API)
- 字数统计双口径并显:不含标点(CJK,与全库同口径)/ 含标点(去空白全部码点,u 标志防代理对双计)
测试
npm test 214 pass / 0 fail(1 skip 为 yaml 条件跳过);npm run smoke 通过。
v0.1.31
本版聚焦方法论技能库两轮扩编与一轮全面审查:起点编辑子良经验 + 龙空/阅文编辑/大神访谈/免费平台三路调研收编,方法论技能 4 → 6。
方法论技能 4 → 6
新增 maoying-suspense-craft(悬疑与对比)(8e36e01)
- 悖论式悬念定义(「当前世界观下不可能发生却发生了」,与反转/冲突划清界限)、悬念-行动-线索循环(线索只解答一部分、新悬念两个来源、行动段必须带卖点)、堵死读者猜测、对比表现力杠杆(修真四万年列车战层层对比/反差消解/专业衬托)
- 数据落账接口写明:线索/悬问/误导进 clue-board.yml,主线悬念排期进 foreshadows.yml
新增 maoying-volume-craft(卷纲与单元结构)(8bdb1f9)
- 卷四定:主题(每卷一部独立小说)/收获/实力上限/刻度(约 20 万字一个大目标、6-7 万一个中目标,全书大纲不锁死)
- 情节五步循环 + 卷内三幕嵌套;支线字数红线(无伏笔 6000 字内、带伏笔最长 3 万字)+ 高潮埋坑 2-3
- 换地图三纪律 + 旧角保温、群像戏份账、期待线并行(3-5 条、静止 ≤3 章)
既有四技能扩充(8e36e01、8bdb1f9)
- golden-opening:动笔前三件事(题材元素/对标拆解 3-5 本火书/平台开篇刻度)、开篇四型(大奉/大师兄/大王/亏成)、对抗格局聚焦(两势力单一矛盾)、金手指两原则、冲突内生原则、主角生活代入
- beat-pacing:即时正反馈环(目标-行动-收获 + 升级文四拍)、期待感管理(双要素判据/打破平衡)、打脸节拍两档(单元小打脸对齐中爽点 1:2:1:1、大打脸弧按平台分档 飞卢3/番茄5-8/起点15-20 章)
- review-checklist:镜头感检查(视角污染/情绪直给/心理超 3 句/无视线落点)、毒点(回忆杀>300 字/被压超 2 章)、阵营纪律红线(主角不懦弱 P0/同阵营不拖后腿/反派不降智)、群像蒸发
- foreshadow-discipline:铺垫 vs 伏笔之辨(铺垫=预期管理拉高跌落,伏笔=串联呼应,诡秘总结章/大奉串案手法)
全面审查修正(fb5ab2b)
- 打脸节拍两档重构,消解装逼四拍/中爽点/平台分档三方刻度矛盾
- 落账职责对齐:埋坑/关系网/主线悬念登记归设定管理员,大纲师只点名(对齐 persona 落盘职权)
- 章尾钩子四型统一到 beat-pacing 类型库原名;前 300 字加平台口径注;期待线 vs 活跃主线、中目标 vs 中爽点口径澄清
- 核实通过:技能计数、design.md 文件数与 PRESET_FILES 一致、伏笔阈值三处同源、P0/P1/P2 校准
persona 同步(5c1688d、8bdb1f9)
- v1/v2 双源同句同步(composition.test 逐字节断言):主编方法论清单四→六、大纲师加载 suspense-craft 与 volume-craft、写手加载悬疑/对比场景、Collab ① 题材对齐接「动笔前三件事」
文档
- README/README.en 技能表 4→6、卸载清理措辞同步;style.md 通用基线新增「镜头」节与单章字数平台分档注(新书冷启动即生效)
升级
面板「一键升级」(「检测更新」可强制现测)或 pnpm --dir <profileDir> add dsh-maoying@0.1.31,装完重启 DeepSeek 生效。
v0.1.30
本版聚焦右栏窄 pane 的文章页排版:容器查询自适应 + 文档全面对账。
代码变更汇总
右栏 tab 正文补留白 + 窄 pane 自适应(c711db8、925a6b4)
- 留白:文章页在侧栏打开后元素全顶 pane 边框——
.myt-viewTab(右栏两 tab 正文根)补padding: 14px 16px+box-sizing: border-box;顺修.myt-page中栏minWidth: 720px在窄 pane 内顶出横向滚动(创作台 tab 同病) - 窄 pane 自适应:全页样式核对后定位四处断点(约 330–420px 可用宽)——①顶栏四个带字按钮一行挤爆帽签 ②章纲头(标题/字数/编辑/删除/箭头)互挤裁切 ③状态流转行同险 ④五维卡双列 ~160px 过挤。修法:
.myt-viewTab设container-type: inline-size+@container (max-width: 560px)收拢——帽签独占一行、按钮次行右靠、三处容器放行 wrap、五维卡单列;窗口宽 pane 窄,media query 无效,必须容器查询;作用域全部钉在.myt-viewTab,中栏 overlay 零影响。核对无恙:--dsw-alias-*变量全局 body 作用域(非变量缺失)、正文/章纲文本换行、行号编辑卡、确认弹层宽度
打开形态陈旧 state 清扫(1d56315、e96f279)
- 实测「右侧栏改分栏后关了重开,设置仍显示右侧栏」:overlay 关闭只是
display:none、React 实例常驻不卸载,state 停在旧值。修复显示/路由双活读:设置弹层形态显示值现读 localStorage;openChapterExternal路由判定改getOpenMode()现读(同源隐患:陈旧 state 会让分栏点章不走路由) - 同类系统性排查后另修两处:工作区选择 activate 重开时回读 localStorage 记忆(防
effectiveWs回落第一个 hasNovel);设置弹层字号/语言显示值同改活读。面板数据(ACTIVATE_EVENT 三重重拉)、文章页 params、DIRTY_EXIT(已知边界)核对无恙
文档对账(d3d0b2e)
- README.en.md 补四处:打开方式三选一整段(三形态 + 0.2.x 要求 + 0.1.x 降级 + tab 草稿保活/重开现拉/换章重挂 30s 窗口)、功能特性条打开方式句、章节条目正文自动保存全套口径(0.1.22 起非手动保存)、顶栏设置枚举
- README.md 功能特性条补界面语言可切;creator-panel.md i18n 键数 258 → 310(漏随)+ 窄 pane 自适应条目
- 路由 23 条 / 九 tab / CLI 六命令 / 伏笔阈值 15 条全部与代码实况核对吻合
升级
面板「一键升级」(「检测更新」可强制现测)或 pnpm --dir <profileDir> add dsh-maoying@0.1.30,装完重启 DeepSeek 生效。
v0.1.29
本版三条体验修复:右栏 tab 正文留白、打开形态显示劈叉、常驻实例陈旧状态清扫。
代码变更汇总
右栏 tab 正文补留白(c711db8)
- 文章页在侧栏打开后元素全顶 pane 边框(章题条/正文/分隔线贴边)观感差:
.myt-viewTab补padding: 14px 16px+box-sizing: border-box(对齐官方 tab 紧凑观感、按文档型页面放宽;toast 掩体定位不受影响) - 顺修:
.myt-page的中栏minWidth: 720px在窄 pane 内顶出横向滚动——tab 作用域内置 0(创作台 tab 同病)
打开形态陈旧 state(1d56315)
- 实测:右侧栏改分栏后关闭创作台再开,开在中栏(正确)但设置弹层仍显示「右侧栏」
- 根因:overlay「关闭」只是 display:none,React 实例常驻不卸载,
openModestate 停在旧值 - 修复(显示/路由双活读):设置弹层形态显示值弹层开着现读 localStorage;
openChapterExternal路由判定改getOpenMode()现读(同源隐患:陈旧 state 会让分栏点章不走路由)
常驻实例陈旧 state 清扫(e96f279)
- 同类 bug 系统性排查后修两处:
- 工作区选择:activate 重开时回读 localStorage 记忆——陈旧
selWs会让effectiveWs匹配失败回落「第一个 hasNovel」,不认用户选的工作区 - 设置弹层字号/语言:弹层开着现读 localStorage(校验回落同初值逻辑),同活读口径
- 工作区选择:activate 重开时回读 localStorage 记忆——陈旧
- 排查确认无恙:面板数据(ACTIVATE_EVENT 三重重拉)、文章页 params(navigation 现值)、sbReady(0.1.28 已活探测)、DIRTY_EXIT(已知边界,文档已声明)
其他
- 测试 214 pass / 0 fail / 1 skip(yaml 条件跳过),smoke 通过
升级
面板「一键升级」(「检测更新」可强制现测)或 pnpm --dir <profileDir> add dsh-maoying@0.1.29,装完重启 DeepSeek 生效。
v0.1.28
本版修复 0.1.27 右侧栏服务探测的一个时序性误判:设置里「分栏/右侧栏」异常置灰、分栏点章开在中栏。
代码变更汇总
右侧栏服务探测双路化 + 懒挂载(4510ca9…4510ca3)
用户实测:设置点「中间栏」后分栏/右侧栏灰死;分栏模式点章开在中栏。两症状同源——
- 根因:宿主右侧栏服务由 sidebar-right 经
ctx.reflect.provide("sidebarRightTabs"/"sidebarRight", …)发布,而 cordis 的ctx.get(name)默认strict=true——提供者 fiber 非活跃态时静默返回 undefined。插件 apply 时严格探测拿空 →sbReady=false→ ①设置除中间栏全置灰 ②右栏句柄永不挂载 → 分栏点章走回落开中栏。对照组:官方 files 插件(实证可用)从不ctx.get,直读ctx.sidebarRight属性 - 双路探测
probeSbService:非严格ctx.get(name, false)优先,ctx.sidebarRightTabs/ctx.sidebarRight属性直读兜底,各自 try/catch;探测失败落logger.warn(注明宿主 <0.2 还是服务晚到) - 活探测
sbProbe():设置置灰判定与形态切换守卫改为用点现探(弹层每渲染现探)——服务晚到时下次交互自动解锁,不再 apply 时拍死快照 - 懒挂载
ensureSbHandle():apply 先试挂,此后入口点击/点章路由/overlay ensure 三处兜底重试(mountSidebarTab 失败自清理,重试安全;成功后 ref 挡重复注册) - 回归测试:smoke 新增场景③——严格 get 装死 + 属性直读可用的假 ctx 下,两个 tab 类型与两个 keyed seat 必须照常注册且不落降级 warn(复刻本次线上坑)
其他
- docs/creator-panel.md §4.1 同步探测口径(eaebcff)
- 测试 214 pass / 0 fail / 1 skip(yaml 条件跳过),smoke(含新场景)通过
升级
面板「一键升级」(「检测更新」可强制现测)或 pnpm --dir <profileDir> add dsh-maoying@0.1.28,装完重启 DeepSeek 生效。