Skip to content

Releases: Signalight/codex-to-dsh-pet

v0.5.0 — 自动读取本机的Codex桌宠

Choose a tag to compare

@Signalight Signalight released this 23 Oct 11:37

v0.5.0 — 自动读取本机的 Codex 桌宠

这一版是个大改版:不用再手动导入,插件会自己去 ~/.codex/pets 找你已有的 Codex 桌宠。

新增

  • 自动读取本机 Codex 桌宠:扫描 ~/.codex/pets(可用环境变量 CODEX_HOME 指向别处),把每个 Codex 桌宠(pet.json + spritesheet.webp)原地读进选宠列表——不复制、不搬家、不占额外磁盘。
  • 带缩略图的选择面板:设置 → 桌宠 里原来的下拉框换成画廊,按「我的桌宠 / Codex 桌宠 / 内置桌宠」分组,每只宠物显示首帧缩略图、名字和 v1 / v2 徽章,点一下即换。
  • v1 / v2 自动识别:按图集实际尺寸判断版本(1536×1872 = v1,九行;1536×2288 = v2,十一行),渲染时使用与版本匹配的尺寸与动作表,v2 才会有 16 个「看向鼠标」的格子。
  • 开关「读取本机 Codex 桌宠(默认开启)」:想只看内置宠物时说一声就能关掉;「还原全部设定」会把它恢复为开启。
  • 重名规则:我的桌宠 > Codex 桌宠 > 内置桌宠。所以你导入过同名宠物时,以你的为准;Codex 目录里的 nastya 会盖掉插件自带的示例。

细节与取舍

  • 缩略图只在卡片接近视口时加载、滚开即卸载(IntersectionObserver,提前 300px)。一张图集解码后约 14 MB,十几张常驻会把设置页拖卡。
  • 关掉 Codex 源时,若当前选中的宠物只存在于 Codex 目录,选择会就地回落到一只真实存在的宠物,而不是留下一只加载不出来的名字。
  • 只读、不外传:插件只读取这些目录里的 pet.json 与图集文件,不上传、不修改。

升级

dsh plugin add @signalight/dsh-codex-pet@0.5.0

或在 DSH 的插件市场点「更新」;桌面版重启后生效。

测试

74 项单元测试通过(新增 test/registry.test.js,覆盖 CODEX_HOME 优先级、三个来源、v1/v2 判定与重名覆盖;服务层与设置页各有新用例)。

Full Changelog: v0.4.2...v0.5.0

v0.4.2 — 定期总结不再说「在空转」

Choose a tag to compare

@Signalight Signalight released this 23 Oct 10:40

v0.4.2 — 定期总结不再说「在空转」

问题

桌宠的「定期总结」每 5 次请求都会生成一条,但内容一直是「这批请求没有动作、没有工具调用、记录是空的、像在空转」。总结模型没说错——是喂给它的数据是空的。

根因

0.3.3 起,插件从 hooks.trajectory 的 eventNodes 重建会话节点时,读的是带包装的形状 { data: { kind, node } }。

而 dsh-client-ui-trajectory 的快照构建器是把最终节点本身直接放进 eventNodes 的:

finalized.push(data.node);   // 快照里 eventNodes[i] 就是节点

节点形状实际是:

{ kind: "user" | "assistant" | "tool-result", seq, turn, step,
  blocks: [{ kind: "tool-call", callId, name, argsRaw }, …] }

于是 entry.data 恒为 undefined,节点数组恒为空 —— 总结请求里的 user(用户指令)、assistant(模型的回复文字)、actions(工具调用)全都为空,模型只能如实回答「看起来什么都没干」。

修复

  • 两种形状都接受:优先直读最终节点,旧的包装形状保留为回退;
  • 顺带修好同源的静默问题:「遇到错误」场景语音与「完成」提示音的门禁依赖 turn-error 节点,而 0.2 线不发这种节点。现在由 requests 里每一轮最新那次请求失败合成(重试成功的轮次不会被误判成错误);
  • 桌宠气泡文字不受影响(它读的是 partial,一直正常)。

新增测试

3 个单元测试:直读最终节点的投影、端到端总结载荷(用户指令 / 回复文字 / 工具调用 / 失败标记)、turn-error 合成。测试总数 64。

升级

dsh plugin --profile desktop add @signalight/dsh-codex-pet@0.4.2

或在插件市场点「更新」,然后重启桌面版。

完整差异:v0.4.1...v0.4.2

v0.4.1

Choose a tag to compare

@Signalight Signalight released this 07 Oct 10:22

0.4.1 —— 修掉「总结气泡闪在屏幕左上角」

问题

从 设置 面板返回后,桌宠的总结气泡偶尔出现在屏幕 左上角(总结记录面板、右键菜单同理)。

根因

气泡、总结记录面板与右键菜单在 CSS 里都是绝对定位,没有任何默认坐标 —— 每个的坐标都靠「显示之前先按桌宠当前位置算一次」。而 离开设置面板 会让桌宠所在的宿主层重建,在这个瞬间桌宠的实时位置读不到;旧代码却仍然把气泡置为可见,于是它就以「从未被定位」的状态停在宿主原点,也就是屏幕左上角。

修复

  • 先定位、再显示:几何优先取桌宠的实时位置;取不到时回退到宠物控制器记录的上一次落位;两者都没有就 保持隐藏并每 100ms 重试,最多 1.2 秒 —— 宁可晚一点出现,也绝不闪到角落。
  • 顺带修掉同类隐患:九宫格「位置」为空或取值不认识时,桌宠 自己 也会停在左上角,现在一律回退到「右下」。
  • 落位数学拆成两个纯函数(pinPlacement / bubblePlacement),新增 4 个单元测试;测试 61/61 通过。

升级

npm i @signalight/dsh-codex-pet@0.4.1

或在 DSH 插件市场里对 @signalight/dsh-codex-pet 点 更新。

完整对比:v0.4.0...v0.4.1

v0.4.0

Choose a tag to compare

@Signalight Signalight released this 04 Oct 06:09

🧭 桌宠跑到屏幕外,再也拖不回来?现在有两个「还原」按钮了

调整桌面分辨率后,如果桌宠停在了视口之外,它就再也拖不回来了。

根因:拖拽后的位置以 left / top 持久化,而它优先于设置里的「位置(九宫格)」——
所以分辨率一变,保存的像素坐标就落在了新视口之外,九宫格设置被永久忽略。

新增

  • 「还原位置」 — 清掉已保存的拖拽坐标,交回九宫格摆位。
    • 设置 → 桌宠 → 还原 Reset → 「还原位置」(副标题:把桌宠移回默认角落)
    • 桌宠还在屏幕内时,也可以右键点它 → 菜单里选「还原位置」
  • 「还原全部设定」 — 把位置、大小、显示开关、鼠标追踪、气泡颜色/透明度、定期总结与场景提示音一次性恢复默认。
    • 宠物选择、已导入的宠物文件、自定义提示音都会保留(点击前有二次确认)

实现

浏览器端只在「换宠 / 显隐 / 大小 / 位置」变化时才重建桌宠,而清掉 left / top 不改动这些字段,
因此新增 display.layoutRev:主机每次重排自增一次,浏览器端据此原地重新落位(不重建、不闪烁)。
首次加载只记录基线、不动作,所以硬刷新不会误清你辛苦拖好的位置。

新接口

方法 路径 说明
POST /api/codex-pet/reset-position 清掉拖拽坐标并自增 layoutRev
POST /api/codex-pet/reset-all 恢复全部默认设置(保留宠物与文件)

升级

dsh plugin --profile web add @signalight/dsh-codex-pet@latest

桌面版也可以在插件市场里点更新。装好后硬刷新(Ctrl + Shift + R);若仍没出现,完全退出并重启 DSH。

完整改动:v0.3.4...v0.4.0

v0.3.4

Choose a tag to compare

@Signalight Signalight released this 29 Sep 16:35

0.3.4

修复 0.3.3 在 DSH 0.2.0-rc.1 下**「思考中…」能出现、却看不到模型实时输出文字**的问题。

根因:DSH 0.2 把会话内容拆成多个视图 target,流式 step 的实时 tail(partial.blocks)挂在 chat target 上,由 dsh-client-ui-chat 通过 ctx.uiSession.provide({ hooks: ['chat'], … }) 暴露。0.3.3 只读了 hooks.trajectory,而它自己的 partial 要等该 target 累积到 chunk 才有值 —— 于是实时文字恒为空;运行 / 待处理状态仍来自 hooks.session,所以「思考中…」看起来是正常的。

修复

  • 气泡文字与工具名优先读 hooks.chat,hooks.trajectory 退为回退;
  • turnEnds 同时接受 chat 的 Map<turn, seq> 形态(完成提示音因此恢复);
  • 0.1.x 与 0.2.0-rc.1+ 共用同一份代码,旧宿主行为不变。

说明:0.3.3 未单独发布到 npm,其修复随本版本一并提供。

升级

dsh plugin --profile web add @signalight/dsh-codex-pet@0.3.4

v0.3.2 — 兼容 DSH 0.2.0-rc.1(修复插件在 0.2.0-rc.1 上被禁用的问题)

Choose a tag to compare

@Signalight Signalight released this 29 Sep 05:07

修复:兼容 DSH 0.2.0-rc.1 及以后版本

此前 0.3.1 在 DSH 0.2.0-rc.1 上会被启动门禁整行禁用 —— 桌宠和「设置 → 桌宠」会一起消失。

原因

DSH 启动时会校验插件 package.json 中所有 @deepseek-ai/dsh* 的 peerDependencies。0.3.1 声明了 @deepseek-ai/dsh-client-runtime: ^0.1.0-rc.6,而该包在 DSH 0.2 线已被拆分下线(npm 上的最后版本是 0.1.1-rc.2),于是校验失败:

Plugin @signalight/dsh-codex-pet@0.3.1 is incompatible with dsh 0.2.0-rc.1:
peerDependencies {"@deepseek-ai/dsh-client-runtime":"^0.1.0-rc.6"}

修复

  • 移除已废弃的 @deepseek-ai/dsh-client-runtime peer;
  • 改为只声明真正存在、真正在用的 DSH 包,并放宽为开放区间:@deepseek-ai/dsh-client-ui-slots 与 @deepseek-ai/dsh-host-webserver(均为 >=0.1.0-rc.6);
  • dsh.client.inject 由废弃包名改为 @deepseek-ai/dsh-client-ui-slots;
  • 补上 dsh.manifestVersion: 1。

验证

用 DSH 自身的 evaluatePluginCompatibility 逐版本判定:

DSH 版本 0.3.1 0.3.2
0.1.0-rc.6 通过 通过
0.1.1-rc.2 通过 通过
0.1.7-rc.2 通过 通过
0.2.0-rc.1 被禁用 通过
0.3.0 被禁用 通过
1.0.0 被禁用 通过

npm test:48/48 通过。

升级

dsh plugin --profile web add @signalight/dsh-codex-pet@0.3.2

若你暂时不便升级,也可以用 dsh plugin --profile web allow-version 为旧版本单独放行。

v0.3.1

Choose a tag to compare

@Signalight Signalight released this 27 Aug 15:46

修复 (Fix)

  • 🐛 桌宠不再被侧边栏/面板遮挡(issue #8):桌宠宿主层改用 React portal 挂到最顶层 document.body(position:fixed + 极高 z-index),桌宠(及气泡/菜单/总结面板)始终显示在侧边栏、面板之上;宿主层仍为 pointer-events:none,不会挡住其它操作。
  • 安装脚本幂等 + 自动去重(PR #7):新增共享模块 cordis-patch.ps1,确保同一插件在 cordis.patch.yml 里恰好一条 - insert: 条目,避免重复安装导致 cordis 启动卡死。

说明 (Notes)

  • 修复提交:bb04b3f(issue #8)与 PR #7;版本升至 0.3.1。

兼容 (Compatibility)

  • 无新增运行时依赖。

v0.3.0

Choose a tag to compare

@Signalight Signalight released this 25 Aug 05:36

新增 (New)

  • 📝 定期总结:可选地按设定节奏,用你选定的 LLM 汇总模型请求进展,并以气泡形式播报;悬停桌宠可查看每个会话的总结记录面板。默认关闭;开启前需先选择 Provider 和 Model。
  • 🔊 场景提示音:任务完成 / 出错 / 被中断三类提示音(完成音多条轮换),默认开启、可试听、可单独调音量、可上传自定义音频替换。设置项位于「设置 → 完成提示音」。

版权与许可 (License)

  • 内置 8 个场景提示音由贡献者 @yabo083 用 Qwen3-TTS VoiceDesign 生成,随插件按 MIT 提供(Qwen3-TTS 本身为 Apache-2.0,不代表 Qwen 背书)。
  • 这些提示音与示例角色分离:角色 nastya(娜斯佳) 的图集仍按 CC BY-NC 4.0(非商业) 授权。详见 LEGAL.md。

兼容 (Compatibility)

  • 无新增运行时依赖;API 表新增 /api/codex-pet/models、/summarize、/journal、音效上传/重置与 /codex-pet-sound 等端点。

v0.2.0

Choose a tag to compare

@Signalight Signalight released this 25 Aug 05:03

新增 (New)

  • 🎯 鼠标/视线跟随开关:可手动开启或关闭「桌宠眼睛跟随鼠标」效果。仅 v2 图集支持(v1 图集没有视线格子),设置面板里有明确提示,默认开启。

说明 (Notes)

  • v2 图集包含 16 个视线朝向格子(第 9–10 行),开启后桌宠会实时看向你的鼠标;v1 图集(9 行)无此能力。
  • 关闭开关后,桌宠回到默认朝向,不影响其它动画。

兼容 (Compatibility)

  • 纯前端运行时插件,无新增运行时依赖;API 表新增 set-config { ..., mouseTracking? }。