Skip to content

Releases: mihomooo/dsh-persona-panel

v0.5.2

Choose a tag to compare

@mihomooo mihomooo released this 25 Oct 14:59

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

Choose a tag to compare

@mihomooo mihomooo released this 25 Oct 14:51

「导入会话记录」换成「回忆并写入」:不再把对话导出成文件让模型去读,而是直接给它一条回忆的指令。

为什么换

上一版是把工作区的会话记录写成一份 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 排序稳住,导入读全

Choose a tag to compare

@mihomooo mihomooo released this 25 Oct 14:32

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

Choose a tag to compare

@mihomooo mihomooo released this 25 Oct 12:05

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.tgz

0.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 — 小修

Choose a tag to compare

@mihomooo mihomooo released this 25 Oct 10:35

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.tgz

0.4.6 — 记忆按挡位读取

Choose a tag to compare

@mihomooo mihomooo released this 25 Oct 10:02

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_recall gained depth: 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.