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;应用升级过之后再次打补丁会把备份刷新为当前版本。
升级会替换运行时文件,补丁随之消失。三步: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。