Skip to content

Releases

0.18.0 — Codex continuity and memory evidence

Choose a tag to compare

@shenA2024 shenA2024 released this 14 Oct 16:40

0.18.0 新增 Codex 开场连续性:独立私有配置、全局开场读取指针、本地 CLI 兜底、四个只读 MCP 工具和管理技能。首次安装为空白,填写自己的身份与约定后重启 Codex、新开会话。

记忆支持来源、依据、原文指针、适用条件、内容指纹与自检。待确认的替代保留旧条目,确认后才换版。保留原文与追加式历史,无模型 API 调用、无新运行时依赖。修复了 Windows 中文目录与归档文件名的发布检查。

下载 whale-persona-0.18.0.tgz 并解包,在 package 目录运行 node scripts/install-codex.mjs --dry-run,检查后运行 node scripts/install-codex.mjs。源码克隆安装方法见 README。已有配置可加 --config <绝对路径>。

验证:22 套功能检查(含新增 17 组连续性行为检查)、安全探针及其自测、私有词表扫描、MCP SDK 1.32.1 真通信与解包安装。候选确认仍依赖用户操作;共享文件权限不是安全隔离。词面检索会漏召回,安装也不能保证宿主和模型在所有会话中始终加载。实际新会话加载需重启后核对。

公开包只含通用引擎、示例和文档,不含维护者的私有人格、形象、关系或记忆。

English: Adds opt-in Codex continuity, an explicit private config, a startup pointer, CLI fallback, four read-only MCP tools, scoped memory evidence and review reports. Pending replacements retain the confirmed original until approval. Unpack the archive and run node scripts/install-codex.mjs --dry-run, then install, fill your own persona and restart Codex. Local regression and package checks pass; host loading and model compliance are not guaranteed. No private persona data is distributed.

v0.17.7 · 人设引擎 0.17.7

Choose a tag to compare

@shenA2024 shenA2024 released this 29 Sep 06:34

0.17.7 —— 桌面版把人设预设直接写进 profile 组合

触发来源(2026-09-29,真实用户截图):用户在桌面版装完插件,面板报
「✗ 这个 profile 里还没有挂着 whale-persona 的预设」,下面给的是照抄用的 YAML 步骤。

这不是误报。桌面版没有任何「插件装好人设就生效」的路径 —— 会话跑的是
agent-preset-registry 的 default 预设,那里面没有人设行;而让用户自己照抄一段几十行的 YAML,
等于没做。0.17.7 把这条路补上了。

面板上点一下,就写进去

  • 按钮从「看手工步骤」改成「写入这个 profile」。
  • 写的内容不是手写模板 —— 从基座 preset(shipped standard)克隆整个插件行数组,
    再把人设行换进去。桌面版 preset 里那一串插件行就是「这个预设下加载什么」,
    只挂人设行=那个预设下没有工具(连 shell、文件都点不动)。
  • 缩进按目标位置算:- insert:(0) → - id: preset-*(4) → config:(6) → plugins:(8) → 插件行(10)。

三道闸

  1. 只在确无 persona 行时动手,只追加、绝不重排既有行。
  2. 写前把整份原文备份成 cordis.patch.yml.bak-<时间戳>。
  3. 写前 + 写后各跑一次自检:原有内容纯追加 / registry 段还在 / 人设行解析得出来 /
    无制表符 / 缩进是 2 的倍数。写前不过就一个字节都不写;写后不过就回滚。

自检抓不到「某个字段名在这个桌面版版本里不被认」—— 那条只有宿主启动才能验,
所以面板会把 .bak 路径一并给出来:万一宿主起不来,把它改名回 cordis.patch.yml 即可。

验证

npm test exit 0(DP5 组按新语义重写:纯追加 / 备份 / 块形状照真机 / 写入后读数就绪 /
再点幂等 / 不抢用户已有默认)· npm run sec PASS(fail=0)· 发布闸门通过(87 文件)· 行尾无 CRLF 污染。

完整对比:v0.17.6...v0.17.7

⚠️ 升级后要重启宿主:插件代码只在启动时加载。

v0.17.6 · 人设引擎 0.17.6

Choose a tag to compare

@shenA2024 shenA2024 released this 29 Sep 06:26

0.17.6 —— 给用户照抄的 YAML 步骤,缩进被 HTML 折叠成顶格

触发来源(2026-09-29 真机截图):面板上那份手工步骤里,- insert: 及其内层全是顶格的 ——
逐行 h('div', …) 渲染把前导空格吃掉了。照抄下去是一份层级不对的 YAML,
而桌面版对坏 patch 的反应是宿主起不来,所以这不是排版毛病、是会把人带进坑里的错。

修了什么

  • 步骤块改成一个 <pre>(用 \n 连接),并新增 .wpr-pre{white-space:pre;overflow-x:auto;} ——
    缩进是 YAML 的语义,必须活到浏览器里。
  • tests/ui-panel.mjs 新增 AP7:钉住渲染方式是 <pre>、且保留空白的样式在。步骤文本是点按钮之后
    由 POST 响应填进 st.hint 的(静态渲染测不到内容),所以判据钉在渲染方式上。

另记:面板报「缺」不等于你没装人设

同一张截图里的那个面板,patchFile 指向的是另一个 Windows 账号的 home
(同一个桌面版被另一个账号启动过)—— 那个 home 里确实没有人设预设,面板没撒谎。
profileName 与 patchFile 现在原样写在卡片上,就是给这种时候用的:先看它在量哪个 home,再决定要不要动手。

验证

npm test exit 0(AP7 true)· npm run sec PASS(fail=0)· 行尾无 CRLF 污染。

完整对比:v0.17.5...v0.17.6

⚠️ 升级后要重启宿主:插件代码只在启动时加载。

v0.17.5 · 人设引擎 0.17.5

Choose a tag to compare

@shenA2024 shenA2024 released this 29 Sep 05:11

0.17.5 —— 面板不再量错平面

触发来源(2026-09-29 真机):0.17.4 修好「没拿到状态就说没有」之后,桌面版上看到的是
isDefault: false /「新任务默认未设」,而同一台机器上人设确实在生效、新会话确实用的是那个预设 ——
面板量的是 .agent-presets 平面,桌面版用的是 profile 平面,两边各说各的。

修了什么

  • 平面探测:currentProfileName() 从宿主进程 argv 里认出 <DSH_HOME>/profiles/<name>;
    detectPresetPlane() 再看该 profile 的 cordis.patch.yml 有没有 agent-preset-registry 段
    (有=profile 平面,没有=agent-presets 平面)。对照实测:desktop 有、web 没有。
  • 读数分派:presetState() 两套平面返回同形状字段,外加 plane / planeWhy / profileName /
    patchFile / presetIdInPlane。真机读数:plane:"profile" · presetIdInPlane:"whale" ·
    isDefault:true(旧口径是 false)。
  • 写入分派:setDefaultPreset() 在 profile 平面只改 selectedDefault 一行,改前先写
    cordis.patch.yml.bak-<时间戳>;installPreset() 在 profile 平面返回 action:'manual' + 手工步骤 ——
    不自动插块:那份组合里挂着的不只是人设行、还有整个工具面,插坏了宿主起不来,能力边界明说不假装。
  • 面板:卡片头点名机制(桌面版 profile 机制)、就绪态带上 profile 预设 whale、
    缺人设行时说"这个 profile 里还没有挂着 whale-persona 的预设"、按钮改成「看手工步骤」并把步骤摊开;
    目录行显示 cordis.patch.yml 本身,不再引你去找一个不存在的 .agent-presets 目录。
  • 同一种坑顺手堵上:adapters/dsh-ui/index.js 的 /summary 也是显式白名单,一并补上这五个字段 ——
    0.17.4 那次红字就是这条白名单漏了 preset 造成的。

验证

npm test / npm run sec(fail=0)/ npm run prepublish-check 全绿;
tests/preset-install.mjs 新增 DP1–DP6、tests/ui-panel.mjs 新增 AP5/AP6。

完整对比:v0.17.4...v0.17.5

⚠️ 升级后要重启宿主:插件代码只在启动时加载。

v0.17.4 · 人设引擎 0.17.4

Choose a tag to compare

@shenA2024 shenA2024 released this 29 Sep 04:50

whale-persona 0.17.4

修复:设置面板把「没拿到宿主半身的状态」说成了「你还没有预设」

症状:用户在设置页看到红字「✗ 还没有 Agent 预设」,而同一时刻宿主半身
GET /whale-persona/api/summary 报的是 installed: true / hasPersonaRow: true —— 人设明明在,面板在说反话。

两条根因:

  1. 字段被白名单吞掉。adapters/dsh-ui/client.js 的 normalize() 是显式字段白名单,漏搬 preset,
    面板因此永远读不到真实状态,只能把空对象当默认值渲染(与 2026-09-19 的 memory.inboxPending
    是同一类坑)。现在补 preset,并新增 presetKnown —— 区分「宿主没答这个问题」
    (旧宿主半身 / 路由还没注册完)与「答了、但是空」。
  2. 卡片只有两态。以前「拿不到」与「确实没有」渲染成同一句红字,等于用猜测吓人。现在三态:
    答了就按答的说(已就绪 / 缺这一步);没答只说「没拿到宿主半身的人设状态」,
    给一次「重新检查」,且不出现写盘按钮。

文案:记忆提醒里的命令补上「在仓目录下跑」

core/edit.js(vendor 副本同步)的待确认候选提醒,现在写明「在 whale-persona 仓目录下跑
node scripts/memory.mjs status」—— 真机实测在别处跑会报找不到脚本,命令静默无效、
收件箱一个字节没变,人还以为改成功了。

测试

  • tests/ui-panel.mjs 新增 AP1–AP4b 五条:就绪 / 真缺 / 拿不到三态文案各一条,
    外加 normalize 必须透传 preset 与 presetKnown(钉住这次的白名单回归)。

升级

npm i whale-persona@0.17.4

已装过的话重启宿主(插件代码只在启动时加载)。

完整对比:v0.17.3...v0.17.4

v0.17.3 · 人设引擎 0.17.3

Choose a tag to compare

@shenA2024 shenA2024 released this 29 Sep 04:28

新增:走插件市场装完,人设就能生效 —— 面板自检 Agent 预设 + 一键创建

插件市场(以及 dsh plugin add、tarball 通道)只把包挂进 profile 平面:包在、设置面板在,
但 agent preset 平面是空的 —— 人设本体只认 <DSH_HOME>/.agent-presets/<id>/agent.cordis.yml 里那行,
官方市场通道也不会替你建它。0.17.2 及以前只有 scripts/install-dsh.mjs 会建 preset,
等于要你装完再手工跑一次脚本。

  • 0.17.3 起不用再跑脚本:重启后进 设置 → 人设 → 「Agent 预设」卡片,卡片会直说「缺这一步」,
    点一下「建人设预设」即可(可勾「同时设为新任务默认」),然后新开会话。命令行照旧可用。
  • 基座跟随你当前的默认 preset(不写死 standard,免得把 PTC 用户的能力面悄悄换掉);
    你另有默认 preset 时不动,拒绝原因原样显示在卡片上。
  • 幂等:已有 preset 只补显示名/描述,你自己改过的显示名、加的行都保留;
    旧包名 @shenA2024/whale-persona 就地改名迁移。
  • 写入面已登记在 .github/SECURITY.md(安全探针 S15 的判据)。

验证读数:node tests/preset-install.mjs 31 条 · tests/ui-panel.mjs 新增 14 条 ·
隔离 home 单包安装端到端(summary 报 installed:false → 面板 API 建出 created → 状态转 healthy,
宿主自己的 discoverPresets 在同一 home 上扫出 id=whale-persona / trust=user)·
npm test 21 个脚本全绿 · npm run sec PASS · prepublish-check 通过(87 文件、词表零命中)。

v0.17.2

Choose a tag to compare

@shenA2024 shenA2024 released this 29 Sep 03:51

修复:插件市场单包安装时面板行解析失败(Failed to import whale-persona-ui)

  • 面板行
    name 由裸包名 'whale-persona-ui' 改为包内相对路径 './adapters/dsh-ui/index.js';
  • 走插件市场 / 只装 whale-persona 一个包时,profile/node_modules 顶层没有 whale-persona-ui,裸名解析必然失败
    (命令行宿主整个插件树起不来;桌面版降级为 warning: 1 entry did not activate);
  • 验证:隔离 home 用 npm pack 出的 tgz 单包安装 —— 启动 stderr 零告警、boot HTML 含 whale-persona-ui/client.js、
    GET /whale-persona/api/summary → 200(2215 字节);改前同环境复现 plugin tree failed to load;
  • 闸门:npm test 20 个脚本全绿、prepublish-check 与 sec 通过;包内容 85 文件。

走插件市场的用户重装一次即可拿到本版;市场装完仍需跑一次包内安装脚本 scripts/install-dsh.mjs(创建 agent preset,人设本体才生效)。

v0.17.1

Choose a tag to compare

@shenA2024 shenA2024 released this 26 Sep 06:50

新增

  • SPEC.en.md —— 格式规范的英译:SPEC.md(628 行)的完整英译,逐节对应;注入文案块逐字保留中文原文(互操作要复现的是那些字节),头部声明「中文版是规范真源,冲突以中文为准」。
  • tests/spec-i18n.mjs —— 四条「不漂移」机器判据(随 npm test 一起跑):I1 章节号序列与中文版完全一致;I2 中文版反引号标识符集合 ⊆ 英译;I3 MUST/MUST NOT/SHOULD/MAY 条数英译 ≥ 中文;I4 固定文案块在英译中逐字存在。读数:章节 41/41 · 围栏 40/40 · 标识符 233/236 · MUST 49/52。

变更

  • README.md / README.en.md:测试文件数 19 → 20,文件树补上 SPEC.en.md,并指向上面那个校验。
  • package.json:files 收录 SPEC.en.md。

修复

  • 清掉示例文案换中性值时留下的重复文案(core/defaults.js 与 README.md 各一处:资深后端工程师,后端工程师 → 资深后端工程师)。
  • 台账更正:CHANGELOG.md 与 qa/security-审查.md 里「0.17.0 未发 npm」的过时标注改为已发,并补上发布事实。

完整变更见 CHANGELOG.md。

v0.17.0 — 记忆分层(core / hot / cold)+ 形象卡

Choose a tag to compare

@shenA2024 shenA2024 released this 26 Sep 06:26

新增

  • 记忆分层(core / hot / cold)+【记忆目录】按需读:判据不是常用度,而是缺席成本 —— 安全边界、终局契约、指针类「去哪查」一旦缺席代价不可逆,该留 core(免限常驻、不参与 maxEntries 竞争);cold 只进【记忆目录】(一行一条摘要,正文不搬进提示词,要读按序号读全文)。超出上限的条目不再静默消失。事实行新增可省字段 tier,重放新增只追加、永不改写的操作行 {"op":"retier",…};scripts/memory.mjs 新增 show / search / tier 三个命令。
  • 形象卡(persona.appearance.cards):形象分三方(自己 / 用户本人 / 第三方),每张卡可标常驻或只进目录 —— 摘要常驻、正文按需读,照片只注入路径(图片永不进提示词)。默认值按「谁」推:self / user 常驻并展开全文,other 默认只进目录。换预设不会抹掉你的卡(形象卡是个人存档,不是人设内容包)。
  • 英文导读 README.en.md:给非中文用户的入口页(配置定位链、注入契约、CLI 入口、与 SPEC 的对应关系)。
  • scripts/appearance.mjs(只读不改配置):list / show <id> / media <id> / check(体检:重复 id、空卡、路径不存在、开关没开)。

变更

  • 安全探针 16 组 → 17 组:新增 S16(把「入库纪律」渲染出来做断言,钉住文案与引擎语义同向)、S17(示例里不得出现「年龄 / 性别 + 身高」这类可指认的外貌组合,以及外观硬规格词)。
  • prepublish-check 新增 P5 软检查:本版 CHANGELOG 提到的配置键若不在 SPEC.md 里就报黄牌。
  • SPEC.md 补齐 0.17.0 的三个新字段(memory.index、事实行 tier、操作行 retier),并写明「未指定 ≠ core,走竞争池」。

修复

  • 整改外部评审(GLM5.3,184 行报告)报出的 2 个 P0 + 4 个 MED + 2 个 LOW:入库纪律文案与引擎语义相反(原文写「tier 可省,缺省 core」,引擎按「缺省 = 竞争池」执行)、SPEC 字段漂移、死代码、四处口径不一致、measure.js 预算提醒关闭时仍整套重渲染、reflex 双日志实例等。
  • 隐私整改:README 的 appearance 示例、两张文档截图与测试 fixture 原来用的是同一个真实形象(年龄 + 性别 + 身高三要素齐全),已统一换成中性通用示例,两张截图按新文案重出。判据 S17 就是为这类复发设的。

安装

npx -y whale-persona

完整变更见 CHANGELOG.md。

v0.16.1

Choose a tag to compare

@shenA2024 shenA2024 released this 22 Sep 14:02

修复

  • 安装器不再拿宿主整段输出当「本包没声明 dsh.bundle」的判据(判据落在本包 manifest 上)
  • 安全探针 S11 判据收窄:放行 docs/images/ 下的文档截图并限体积(单文件 600KB / 整目录 1.5MB)

变更

  • package.json 的 bin 路径按 npm 规范去掉 ./ 前缀(与线上 0.16.0 包内保持一致)
  • README 补三张真实截图(编辑器全景 / 命令行预览 / 预设卡总览)

完整变更见 CHANGELOG.md。