Skip to content

About

Unofficial local patch: ZCode session titles in the 「category emoji + object|goal」 style, re-evaluated every turn

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

Repository files navigation

zcode-session-title-patch

Unofficial local patch for ZCode: session titles in the category emoji + object|goal style, re-evaluated after every turn.

给 ZCode 的会话标题换一套更适合"扫一眼找会话"的命名规范,并让它随着工作推进自动更新。属于非官方本地补丁(改的是应用自己的运行时文件),升级应用后会失效,重跑一次即可。

原来的标题 补丁后的标题
回应中文问候 🧩 邮箱验证码|过期排查
确认注册功能 🧩 支付回调|重复发货修复
feature 当前进度查询 🧩 报价服务|补齐进度查询
继续修改 🎨 登录表单|布局优化

它改了什么

ZCode 的会话名是一次额外的模型调用生成的,那段"起名说明"写死在运行时代码里,界面没有开关。这个补丁在文件里做五处精确替换:

位置 原来 补丁后
起名说明(提示词) Generate a concise title...:3–7 个词,无格式约束 类别 emoji + 对象|目标;含类别表、语言判定、48 字符上限、提示注入防护
触发时机 只在第 0 轮跑一次 每轮用户输入后重新评估
模型看到的材料 只有首条用户输入 原始输入、当前标题、项目名、最近 4 条用户消息 + 2 条助手消息、本次输入
跳过规则 无 手动改过名(custom)不覆盖;已有标题且本次输入 <10 字符不重新评估;还没正经标题的会话任何消息都补一次
辅助调用思考档位 取模型档位列表的第一个值(可能被网关拒收) 跳过 off/disabled/nothink/adaptive/default/auto,取第一个可用档位

最后一条值得单独说:ZCode 用同一个函数给所有辅助调用(会话标题、测试连接、网页抓取后处理、项目记忆抽取)绑定思考档位,取的是"最省的那一档"。有些自建 / OpenAI 兼容网关会直接 400 拒收 off 这类取值,导致这些功能全部静默失败、会话标题永远停在第一句话。补丁顺手把这条修好。

环境要求

  • 装了 Node.js(能跑 node -v 即可,脚本只用标准库)
  • 有权限写 ZCode 安装目录(Windows 默认装在 C:\Program Files\zcode 或 D:\Program Files\zcode)
  • 只在本机改文件,不需要联网、不需要任何密钥

快速开始

git clone https://github.com/easonlao/zcode-session-title-patch.git
cd zcode-session-title-patch

node patch.mjs --check     # 先看能不能找到 ZCode 的运行时代码
node patch.mjs             # 打补丁(自动找安装位置)
# 重启 ZCode
node status.mjs            # 自检:补丁状态 + 最近会话标题 + 最近几次起名调用

找不到安装位置或装在别处时显式指定:

node patch.mjs --target "/path/to/zcode/resources/glm/zcode.cjs"
node patch.mjs --revert --target "/path/to/zcode/resources/glm/zcode.cjs"

安全设计

  • 只在这五处固定文本都能匹配到时才动手;有一处对不上就整体报错退出,不写入。
  • 写入前先对结果跑 node --check 语法校验,校验不过不写盘。
  • 打补丁 / 还原走同一套"原版写法 ↔ 补丁写法"替换,互为逆操作(实测:打→还原后文件哈希与原始一致)。
  • 首次打补丁会备份为 zcode.cjs.bak-titlepatch;应用升级过之后再次打补丁会把备份刷新为当前版本。

ZCode 升级后

升级会替换运行时文件,补丁随之消失。三步:node patch.mjs → 重启 → node status.mjs。

如果脚本报「有位置匹配不上」,说明这一版改了标题相关代码,补丁不会写入(应用保持官方状态)。此时需要按报错列出的名字更新 patch.mjs 里的匹配文本。

命名规范要点

  • 结构:一个类别 emoji + 空格 + 对象 + 全角「|」+ 核心目标,恰好一个分隔符
  • 类别:🎬 内容制作 / 🧩 工具开发 / 🔎 对比调研 / 🎨 页面设计 / 📝 方法整理 / 📅 日程安排 / ⚙️ 环境配置 / 💬 一般讨论
  • 长度:中文优先 10–26 个可见字符;所有标题上限 48 个 Unicode 字符
  • 语言:跟随最近几轮用户自己表达需求的语言;助手输出、代码、日志不算证据
  • 稳定:当前标题仍准确时原样返回(keep),只有工作目标实质变化才改写;格式不符时只做一次格式迁移,不许缩成最近的子问题

完整提示词见 patch.mjs 里的 NEW_PROMPT。

工具清单

文件 用途
patch.mjs 打补丁 / 还原 / 查状态(幂等,可反复执行)
status.mjs 自检:补丁状态、最近会话标题、最近几次标题调用的档位与结果
verify-title.mjs 从打过补丁的文件里抽出真实的提示词与上下文构造器,用真实会话数据走一遍并真调一次模型(会消耗少量额度,provider 可用 ZCODE_TITLE_TEST_PROVIDER 指定)
debug-instrument.mjs 排查用插桩:打印触发判断的输入、请求体里的思考档位

已知边界

  • 只作用于主会话(interactive):子会话、定时 / 闲时任务不参与;手动改过名的会话永远不会被覆盖。
  • 标题在本轮对话结束时才写库,所以要看效果请在回复出现之后再看会话列表。
  • 从不打开的旧会话不会被批量刷新(侧边栏靠运行时事件更新,外部改数据库不会即时反映)。
  • 每次刷新是一次极短的模型调用(无工具,只带最近几轮上下文),用当前会话的模型。

免责声明

非官方工具,与 ZCode 官方无关,未获其授权或认可;不包含也不分发 ZCode 的任何程序代码,只在匹配用的短代码片段上做文本替换。修改应用的运行时文件可能存在风险(升级后行为变化、极端情况下应用异常),请自行评估并保留备份(脚本会自动备份,--revert 可还原)。作者不对任何损失负责。

致谢

命名规范(类别 emoji + 对象|目标、类别划分、长度与稳定性规则)参考并改编自 oil-oil/oil-codex-title(MIT License, Copyright (c) 2026 oil)。本项目的提示词是针对 ZCode 的这一份实现独立改写的,详见 NOTICE.md。

License

MIT

About

Unofficial local patch: ZCode session titles in the 「category emoji + object|goal」 style, re-evaluated every turn

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages