Skip to content

Releases: sugarmaster666/dsh-persona-forge

v0.8.4 — 审查面板显示不全的完整修复

Choose a tag to compare

@sugarmaster666 sugarmaster666 released this 18 Oct 18:27

面板显示不全的完整修复

Fixed

  • 面板跑到屏幕底部、盖住了输入框。 上一版为了腾出高度,把面板改成
    position:fixed 并锚在视口底部(bottom:124px)。这是个错误的锚点:
    固定定位是相对视口摆放的,不是相对输入框。新会话开头输入框在屏幕
    中部,面板却贴到了窗口底部——于是它离输入框很远,还压住了输入框本身。

    改回留在文档流里:flex:0 0 auto 让面板拿到它想要的高度、不被压缩栈
    挤扁;max-height:calc(100dvh - var(--pf-panel-reserve)) 让它不会超过
    头部和输入框之外剩下的空间。在流里,它天然就紧贴输入框上方——不管输入框
    在哪。

    在 1559×770(输入框居中)和 1176×359(矮窗口)两种情况下都验证过:面板
    紧贴输入框、按钮可见、输入框不被遮挡。

  • 新会话开头,面板整个被顶出屏幕——这次找到了真正的原因。

    前两次修复都盯在面板内部(限高、滚动、按钮位置),但症状只在新会话开头出现,
    而那是 hero 模式:对话区为空、输入区垂直居中,宿主的 composerSeat 是
    position:absolute; bottom:0。面板脱离了文档流,所以它变高时没有任何东西
    会把它压回去,只能向上溢出视口,连自己的标题栏一起被裁掉。

    实测:359px 高的窗口里,头部 76px + 输入框 96px + 间距,面板只剩约 169px;
    而面板内部光标题栏、页脚、提示行就超过这个数——文本区在算术上就是负数。
    这就是"永远只能滚动"的根源:不是布局没调好,是可用空间根本不够。

    改法是让面板浮起来:position:fixed,锚在输入框上方,按视口而不是
    按输入框剩余空间来计算高度。359px 窗口下文本区从约 10px 变成约 100px,正文
    完整可读;280px 的极矮窗口也仍然完整可见,只是文本区变矮。

  • 面板里的辅助信息挪到页脚,正文只留改写结果。 提示行、模型/耗时、标签原本
    是正文里三块竖排内容,各占一行高度——在只有 169px 的预算里,它们把文本区挤成
    了负值。现在它们是页脚里一行横向排布的小字。

Changed

  • 删掉了正文里的"改写后"标签和失去引用的 .pf-col-title。 面板只有一个
    结果栏,标签不再有区分作用;无障碍标签仍在 textarea 的 aria-label 上。

  • 面板不再重复显示你的草稿。 它原本是左右两栏,左边"你写的"、右边"改写后"
    ——可草稿就在面板正下方的输入框里,左栏只是把同一段话再说一遍,却占掉一半
    宽度、并把按钮往下推。现在只显示改写结果,文本区因此宽了一倍。

    顺带删掉了失去引用的 panel.original 文案键(中英各一条)。

  • "本地检查通过"从三行说明收成一行,边界改成悬停提示。 那段话每次改写都
    常驻显示,占掉面板约三分之一的高度,而面板高度正是按钮被挤出去的原因。
    它现在是一行结论,鼠标悬停才展开"这个检查看不出什么"。

    0.5.0 就定过这条规则(说明改成 tooltip,不堆常驻文字),面板这里没有遵守。

Added

  • 检查套件新增"审查面板布局"一节(11 项),钉住这一串失败:

    • 动作行必须在页脚里、且在滚动区之外(放回去,3 项变红)
    • 面板不得重复显示草稿(把左栏加回来,2 项变红)
    • 常驻文案按显示宽度限长(一个中文字约等于两个西文字符,按字符数算会
      放过一条 74 字符、实际渲染三行的中文说明——这个 bug 是写检查时才发现的)
    • 面板必须由输入框定位、而不是由视口定位:不得用 position:fixed
      (固定定位是相对窗口摆放的,新会话里会把面板甩到屏幕底部、压住输入框)

Added

  • 发布变成一条命令。 npm run release 依次做:改版本号、把 [Unreleased]
    提成带日期的版本节、重写底部链接、把版本号和 CHANGELOG 放进同一个 commit、
    打 annotated tag、发布、推送,最后核对 npm 记录的 gitHead 等于 HEAD。

    它会拒绝八种不该发布的状态:工作区不干净、不在 main 上、origin 不是本包
    仓库(副本会继承真实 origin,在副本里发布会直接推到线上)、自检不过、只有
    文档改动、[Unreleased] 是空的、tag 或 npm 版本号已存在、package.json
    和最近的 tag 对不上。

    发布中途失败(比如打好了 tag 但 publish 失败)会被认出来,重跑只补做剩下的步骤。

  • AGENTS.md 和 RELEASING.md。 前者是给下一个接手的人(或 AI)的入口:
    三条硬约束、改完必须跑什么、提交信息怎么前缀;后者是发版规则:什么时候该发、
    版本号怎么定、七步流程,以及历史欠账清单。

Fixed

  • 发布指向正确的 registry。 本机 .npmrc 为了速度指向 npmmirror 镜像,
    而镜像不接受发布。发布目标现在是项目属性而不是机器属性:npm publish 和
    每一次版本探测都显式带上 --registry https://registry.npmjs.org。

Note

同一症状此前修过两次,都只动了面板内部:先限高+滚动(按钮落在滚动区里),
再把按钮移进页脚(但面板用 flex:none 拒绝缩小,被外层裁掉)。两次都没问
"面板到底有多少可用空间"——在 359px 的窗口里答案是 169px,扣掉标题栏和页脚后
文本区为负。换布局之前先算清可用空间,这是这一轮真正的教训。


安装 / 升级

dsh plugin --profile web add dsh-persona-forge@0.8.4

桌面版:插件页 → 添加插件 → 填 dsh-persona-forge。

v0.3.1 — 改写等待显示实时秒数 · 移除三处冗余控件

Choose a tag to compare

@sugarmaster666 sugarmaster666 released this 09 Oct 14:04

对应 npm 上的 dsh-persona-forge@0.3.1。

修复

等待慢模型时的改写不再像是卡死了。

此前面板只显示「改写中」,没有任何时间感 —— 一次耗时的改写和真正卡住无法区分,只能报告为"卡住"。宿主其实一直有 120 秒超时(所以面板并非真的永远卡住),但两分钟无反馈的转圈,看起来和冻结一模一样。

现在面板会:

  • 实时显示已等待的秒数 —— 免费的进度感,让"在跑"和"挂了"一眼可分
  • 超过 45 秒时明说「已经 N 秒了,模型可能较慢」以及放弃的办法

移除

  • 设置页的「开启模型校验」复选框。 它和插件行配置里的 factCheck 重复 —— 同一个设置有两个地方,还放在一个讲卡片的页面上。宿主配置是唯一开关,且默认已关闭。复选框、它的字典键、背后的客户端偏好一并删除。
  • 常驻的「检查是否有改动」说明行。 按钮的悬浮提示已经写了同一句话。现在页面只保留检查结果(真实反馈),而不是把同一段文案放两遍。
  • 三个没有任何路由或组件引用的字典键:settings.ai.briefLabel、settings.changed、error.busy。

说明

本次全部为客户端改动(lib/client.js)—— 客户端半边会热重载,刷新页面即可,无需重启 DSH。

验证:195 项单元自检 + 90 项宿主集成自检,中英字典保持 117/117 完全一致。

v0.3.0 — AI 代填 · 免费本地校验 · 模型如实告知

Choose a tag to compare

@sugarmaster666 sugarmaster666 released this 09 Oct 12:46

对应 npm 上的 dsh-persona-forge@0.3.0。

新增

  • AI 代填。 用一句话描述角色思路,模型会填好整张卡:风格描述、名称、图标、简介,以及四档强度各自的转换范例。它就在「新建角色卡」打开的表单顶部,设置页有一行提示告诉你它存在,不用靠点按钮去发现。生成结果只填表单、绝不自动保存,并且走和手动保存完全相同的校验,所以不可能产出存不下去的卡。
  • 免费的本地技术事实检查。 在插件进程里比对草稿与改写结果的技术记号 —— 标识符、路径、版本号、数字、--flag、API 这类缩写 —— 丢了哪个就点名告诉你。不调用模型,所以不花 token、不加延迟,也关不掉。
  • 输入框菜单新增三个按会话记住的开关:改写方式(跟随卡片 / 模型改写 / 模板套用)、保真度、模型校验。
  • 卡片表单现在可以编辑分强度范例。它们本来就是卡的一部分,但界面里看不见 —— 这正是下面那个 bug 的成因。

变更

  • 模型校验默认关闭,并可在菜单里开关。 它是唯一能看出「需求被悄悄改弱」或「用散文追加了约束」的东西,但会让每一次发送都多一次模型调用(延迟与 token 翻倍);而最常见、最伤人的失败(丢掉文件名 / 数字 / 版本号)已经被免费的本地检查证明了。为它每次都付一次调用是浪费。配置里的 factCheck 现在只设默认值,且只有显式 true 才开启。
  • 中文 README 成为主 README.md,英文版为 README.en.md。

修复

  • 改写方式与保真度的按会话覆盖。 保真度只能收窄、不能放宽:让 strategy 卡临时只改语气,只是拿走它追加约束的权力,永远更安全;而让 style 卡开始追加约束,会超出卡片作者的授权 —— 那该去改卡,不该由「发送前顺手一点」授权。服务端强制同一条规则。
  • 收窄后的保真度根本没进提示词。 路由算出了收窄值、也写进了响应,但 buildSystemPrompt 直接读 card.fidelity —— 设置看起来生效、实际什么都没做。现在把生效值传进提示词构造函数,并且测试改为断言提示词本身,而不只是响应。
  • 改卡会静默丢掉四档范例。 表单没带 examplesByIntensity,所以任何一次保存都会把它重建丢;光改个名字就能丢掉全部四档。现已可见并可往返保存。
  • 每张内置卡都被标成「自定义」。 内置卡会被播种进用户目录,标签却按「这个 id 有没有用户文件」来判 —— 对从没人碰过的卡也是真。现在按内容判定,与「检查是否有改动」用同一套语义比较,因此两者从构造上不再互相矛盾;并新增「已修改」状态。
  • 「删除」出现在它根本无效的地方。 内容等于内置版的卡没有属于你的文件,删掉之后下次启动会被写回。现在只在该出现的地方出现。
  • 内置 肌肉集团 · 硬邦邦 卡有 3 条范例把输入里的「bug」丢了 —— 正是这个插件最想防的「用氛围替换需求」。测试现在也校验分强度范例,这才逮到它们。
  • 修好 CHANGELOG 里 4 个 404 的版本链接:补建 v0.1.0 / v0.1.1 / v0.1.2 / v0.2.0 tag。

说明

settings.section 这个插槽从 shell 只收到 { close },拿不到会话 id,所以设置页的 AI 代填用的是 harness 默认模型,无法跟随当前会话 —— 之前的 README 说错了。现在目录接口会返回解析到的模型,设置页在生成前后都把它显示出来,两份 README 也用表格说清这个区别。改写本身仍然跟随当前会话。

验证:185 项单元自检 + 90 项宿主集成自检。

v0.2.1 — 发送即改写 · 四档强度 · 角色卡差异检查

Choose a tag to compare

@sugarmaster666 sugarmaster666 released this 09 Oct 11:02

对应 npm 上的 dsh-persona-forge@0.2.1。

新增

  • 输入框的原生发送按钮、以及 Enter,就是改写触发器。 审查模式弹出对比面板;直接发出模式改写后立即发送。菜单里那个单独的改写按钮已删除 —— 发送动作取代了它。
  • Enter 有独立的监听。 Enter 不经过按钮(编辑器 keymap 直接提交),所以需要单独拦截。Shift+Enter(换行)、输入法组字中、以及 shell 忽略的修饰键组合都不受影响。
  • 强度增加第四档「重」。 原来是 轻 → 中 → 狂热,中间缺一档,无法要求「语气充分但还没到通篇仪式化」。现在是 轻 / 中 / 重 / 狂热,两张内置卡都为四档补齐了范例。
  • 「检查是否有改动」 —— 一次比完所有角色卡,只有真正偏离内置版本的卡才出现「还原为内置」。

修复

  • 播种的角色卡会把内置卡冻结在首次发布的版本。 副本会遮蔽内置卡,导致后续版本改进的内置卡永远传不到老用户手里。现在会记录播种时写入内容的哈希:没动过的副本随升级刷新,编辑过的副本永不覆盖。
  • 种子账本被当成角色卡加载,每次读目录都报一条假的诊断。已改为跳过点文件。
  • 角色卡行的描述文字与按钮重叠。 描述是 <span>(行内元素),而 overflow:hidden / text-overflow 对行内元素无效,长描述直接撑出卡片。改为 flex column + 两行截断。
  • \check.mjs\ 会读开发者的真实角色卡目录,导致测试结果取决于本地状态。已隔离 \DSH_HOME\。

说明

发送拦截没有官方钩子(宿主按钮直接调用 shell 提交方法),所以靠无障碍名称与 \data-composer-card\ 识别。所有判断都朝「放行原生发送」失败:任何一环对不上就什么都不做,消息照常发出;关闭插件则彻底移除拦截。

验证:125 项单元自检 + 60 项宿主集成自检。