Repository navigation
Releases: mihomooo/dsh-persona-panel
Release list
v0.5.2
v0.5.2
persona_recall 多了 query:按词找,不按日子找。
为什么
上一版把「常驻」收窄到人设和画像以后,事件和日记就只剩「按时间挡位翻」这一种查法(depth=index/shallow/medium/deep/all)。日记一多,想「上次聊到猫的那件事」就得先扫目录再逐段试——那不是回想,那是翻档案。
人回想用的是词:一个名字、一个地点、一句听过的话。日期反而是最后才想起来的。
怎么用
persona_recall({ query: "猫" })
persona_recall({ query: "猫 生日" }) ← 两个词都要命中
persona_recall({ query: "10-25" }) ← 日期片段也算词
- 搜索范围:脾气、人格补充(含
[硬]规则)、画像、事件、日记、别人的印象与事件。 - 规则:空格分词,每个词都要命中才列出;不够具体时加词,太窄时减词。
- 输出按类分组,每条带 id(要删就用它),最多列 60 条,多出来的会写明还剩几条。
- 什么都没命中就直说「没有」,并提示换个词,不会编一条凑数。
- 不带
query时行为完全不变(全量 + 按时间挡位看日记)。
顺带
- 常驻提示词里那两句改成「想不起日子就带 query」。
- 工具描述补上
query的用法与「人都这么回想」。 - 新增
demo/query-test.mjs(8 项):一词网住四类、两词是交集、日期片段、无命中不编、不带 query 仍是全量。
v0.5.1
「导入会话记录」换成「回忆并写入」:不再把对话导出成文件让模型去读,而是直接给它一条回忆的指令。
为什么换
上一版是把工作区的会话记录写成一份 imports/*.md,提示词再要模型「读这个文件、回忆你自己」。三个问题:
- 多一道手:先扫会话、解 zstd、写成 32 万字的文件,再让模型分段读回来。每一次都是成本。
- 读成了别人的材料:一份讲对话 transcripts 的文档,模型很容易当成「要总结的聊天记录」,而不是「我自己的过去」。提示词里写多少遍「别总结对话」都是在跟文件的语气较劲。
- 跨会话其实读不全:默认只收最近 20 场,更早的直接丢,而用户以为「读取会话记录」就是全部。
现在怎么做
点「回忆并写入…」,面板给这个工作区正在开着的会话发一条指令:
- 停下别的事,做一次回忆;不要复述我们聊过什么,也不要总结这段对话。
- 四类各写:
kind=self脾气(label 一两个词、intensity 1–5)、kind=self+hard=true不可改的规矩(原话照抄)、kind=user对这个人的画像、kind=event约定与时刻(约好的带 date)。 - 动手前先
persona_recall看已经有什么:写过的别重复,要改的直接改。 - 第一人称、短句、具体;宁可少写三条也不写泛泛的摘要。
- 手上没有对话就不许编:直接说「我手上没有这段记忆」然后停。
会话开着 → 当场执行;没开着 → 面板直接说「先在这里开一个会话,再点一次」,不再静默排队等下一次开口。
顺带
- 删除导出链路:
sessionKeyFor、readZstdFrames、transcriptOf共 143 行,以及node:zlib的依赖。 - 提示词里原来那段「有一份你自己的会话记录等着你回忆」改成只服务人设卡:「有一份材料等着你拆」。
demo/import-test.mjs→demo/recall-test.mjs(13 项):钉住指令真的送进会话、四类都点名、禁止编造、磁盘上不再落转写、没有开着会话时说实话。- README 三处随之改写。
升级
~/.dsh/persona-panel/imports/ 下旧的转写不会被删,也不会再被读取——想清掉直接删目录。
0.5.0 排序稳住,导入读全
0.5.0
工作区列表不再乱动。 打开面板、点一下别的行,列表就重新排序——因为你点谁,谁就被当成「最近用过」顶到最上面。现在顺序只跟真的在那里说过话有关:读取是惰性的,一轮对话才会前移;从没说过话的工作区按名字排。
导入会话记录,读得更全,话说得更对。
- 以前只收 6 场会话、总共 12 万字、单轮截 1200 字,长会话读到一半就到顶。现在默认最近 20 场、单轮 2000 字、总量 32 万字(可传参数放宽到 60 场 / 60 万字),每场带日期头,文件开头写明一共几场、有没有更早的没收进来。
- 提示词改了:不是「把这份材料拆成条目」,而是**「这是你自己的过去,回忆你自己」**——别总结对话、别复述他说了什么,去写脾气、称呼、答应过的事、他是什么人。文件长就分段读到结尾再动笔。
- 修掉一个会让导入整个落空的 bug:工作区还是空的时候,提示词提前返回了,把「有一份转写等着你读」那段吞掉了。最常见的导入时机恰恰是空工作区——于是模型根本不知道有文件。
新增 demo/sort-test.mjs(6 项)和 demo/import-test.mjs(12 项);十二个套件全绿。
v0.4.9
0.4.8 与 0.4.9 一起发:0.4.8 没单独出过 Release,这里一并说明。
0.4.8
起因是别人拿仓库做了一次代码评审,四条里三条半成立。这一版修的是真问题:
- 记忆进系统提示前先压平(评审第 1 条,属实)。之前人设、画像、事件的文本原样拼进提示,只做了长度截断,没有处理换行——一条带
\n的记忆可以在提示里另起一段,读起来像指令。现在所有写入路径(四个工具、面板新增/编辑、导入拆出来的条目)统一过一遍:控制字符与零宽字符换成空格、空白压成单个空格、按字段截断(人设补充 800 / 画像 600 / 事件 600 / 日记 500 / 类目说明 300 / 称呼 40)。空行和列表结构因此不再能伪造。 - README 不再承诺还没发生的事(评审第 3 条,属实)。安装表原来写着「插件市场搜 persona panel」和「npm 安装」,可 PR 没提、包没发。现在市场一栏写明条目已备好但还没提交(仓库未满 1 天),npm 一栏直接写「尚未发布」。
demo/check-tarball.mjs的断言是真的错的(评审第 4 条,属实)。它找inject:['slots'],实际代码是inject: ['slots'](有空格),所以永远报 MISSING。修了字符串,另外加了 bundle 清单、client 平台、main 文件、截图四项检查,并且有缺失就以非零码退出——只打印不失败的自检等于没有。- 新增
demo/clean-test.mjs(13 项):换行压平、零宽字符清除、超长截断、面板编辑同样过滤、工具写入同样过滤。
评审另外两条不算 bug,但值得记下来:
- 依赖 harness 内部结构(第 2 条,部分属实)。
agent.session.header.cwd确实不是公开契约,是从prompt-debug.log反推出来的;layout.selectPanel在客户端也是先typeof判断再用。失效时的退路是lastDir,写错工作区的条目会带src: 'guess'标记,面板里能看到。这条是设计上的已知代价:没有公开 API 就只能在内部结构上加一层判断。 - 提示注入本身无法根治(第 1 条的后半)。记忆插件的文本最终都要进模型上下文,压平换行能挡住「伪造段落」,挡不住「这段文字本身在教模型做事」。所以记录仍是可回溯的:每条都有来历,能撤回。
安装:
dsh plugin install https://github.com/mihomooo/dsh-persona-panel/releases/latest/download/dsh-persona-panel.tgz0.4.9
一个洞:归档只进不出。
- 面板「归档…」会把这个人设、画像、事件整份收进「无主记忆」,但设置页里那几行只有「永久删除」——宿主早就有
restoreArchive,界面一直没给入口。现在每行多一个「找回…」,点开再确认一次,并回当前工作区。 - 找回是合并不是覆盖:归档之后新写的条目留着,同 id 的只留一份;重复点不会写出两份。
- 找得到才算有找回。归档之后,被归档的工作区顶部直接显示一条横幅「这个工作区的 N 条记忆在某时被归档了」,旁边就是「找回」;设置里的「无主记忆」补了一行说明,写清「找回…」并回当前工作区、「永久删除」不可逆;归档确认框里也点明了这两条路。
- 新增
demo/archive-test.mjs(19 项):归档后清空、无主记忆计数、带着原工作区路径、新条目存活、找回不重不漏、二次找回是空操作、客户端确实发了restoreArchive、横幅与两处文案路径都在。
顺带把 0.4.8 那条「记忆文本压平」的检查补齐到十个套件,全绿。
没有一步到位的删除。「永久删除」原来点一下就没了,现在改成两段:第一下把按钮变成「真要永久删?」并变红,第二下才动手,4 秒不点自己复位。同一条规则套到面板里的单条删除、群友印象/事件的删除;删除人设仍是渐进降权,不走这条路。demo/render-test.mjs 加了 7 项:把守卫单独渲染出来,点一次断言「只武装、不开火」,点两次断言「只开火一次」,再扫源码确认没有任何不可逆操作还挂在单击上(27 项)。
dsh-persona-panel.tgz
0.4.7 — 小修
0.4.7
两个小修,都是 0.4.6 用起来才暴露的:
- 只有日记的工作区不再被当成「空的」。 之前提示段判断「这一节还是空的」只看人设/画像/事件,于是只有日记的工作区在非开场回合会收到空工作区的引导语。现在任何一类有条目都算非空。
persona_recall的描述里把工具名写错了(person_remember),改回persona_remember。
安装仍是:
dsh plugin install https://github.com/mihomooo/dsh-persona-panel/releases/latest/download/dsh-persona-panel.tgz0.4.6 — 记忆按挡位读取
0.4.6
记忆按挡位读取,不再每轮全塞。
- 每轮常驻只有人设卡与画像;事件只在会话开场按总量读取(≤8 条全读、≤20 条读 80%、更多读 60%),之后只剩「三天内到期」的提醒。
- 日记在会话开场读最近 21 天(不足 21 条则读最新 21 条);不够时用
persona_recall按段往回翻。 persona_recall新增depth:index(按月目录)、shallow/medium/deep(各四分之一)、all(全部)。目录先看,再挑一段,最后才全部展开。- 事件容量默认 20 条、可调、0 = 不限;标
★ 重要的事件不占名额,注入时排最前。 - 自我日记(0.4.0):第一人称、只能往下写,面板只读,改不了也删不了。
- 工程事件(0.3.0):项目推进、定下的方案、做完并验收的工作记为
work;踩过的坑与「别再这样做」写进 AGENTS.md,不进记忆。 - 共生工作区同步:上限、称呼、开关、词库随共享的 store 一起变;记录挡位(manual/half/active/auto)故意不同步。
- 多用户画像:默认关闭;开启后按昵称区分群友,可检索、可单独删除。
安装:
dsh plugin install https://github.com/mihomooo/dsh-persona-panel/releases/latest/download/dsh-persona-panel.tgz或用市场里的「记忆」分类。纯本地存储,~/.dsh/persona-panel/db.json,卸载不删数据。
English
- Standing prompt now carries persona + impression only. Events load at session start as 100% / 80% / 60% of the drawer (by size), then only what comes due within three days.
- Diary loads the last 21 days at session start.
persona_recallgaineddepth:index(a month-by-month table of contents),shallow/medium/deep(a quarter each),all. - Event cap: 20 by default, configurable, 0 = unlimited; entries marked ★ important are exempt and sorted first.
- Self-diary (append-only, read-only in the panel), work events, symbiote sharing, and multi-user profiles for group chats.