Skip to content

Releases: cayan0x/Lume

v0.8.4 — 本版主线是让「机制到底跑没跑过」变成可读的数据,并把散落的词法判据收成一张带正/反例的表;另清掉一批死代码与过期文档。

Choose a tag to compare

@cayan0x cayan0x released this 28 Sep 09:04

本版主线是让「机制到底跑没跑过」变成可读的数据,并把散落的词法判据收成一张带正/反例的表;另清掉一批死代码与过期文档。三者都指向同一个病根——「静默失效」在本项目反复出现,而修法不该是再加功能。

新增:机制健康自检(治「机制从来没响过」)

  • 新增 core/mechanisms.ts:提示槽 + 触发器 + lume_* 工具的唯一机制目录。度量聚合据此回答两个问题——每类机制命中几次、哪些从未命中(0 只代表样本期内没被触发过,不代表机制失效)。
  • 提示槽命中随状态快照落盘(SessionRuntime.mechanismFires,与配额 used 分开:forceNotice 绕过配额,混用会让触发器类机制永远显示 0);lume_metrics 摘要新增「机制健康」一段。
  • 启动期新增能力矩阵日志(layered / project / identity / reflection / rpc 的降级状态一行可 grep),把「静默降级」变成可核对的事实。

重构:机械判据集中化 + fixture 驱动

  • 新增 core/criteria.ts:16 条词法判据(敏感 / 锚点 / 死路 / 构建 / 测试 / 约定 / 形状闸 / 命令 / 清单 / 问句 / 拒绝 / 用户规范…)从各模块收口到一处,每条带正/反例。
  • 新增 test/criteria.test.ts:强制每条例都有正/反例且行为正确——加判据必须同时写清「挡什么、不挡什么」,替代「误报就加一张例外表」的旧修法。
  • core/knowledge.ts 改为消费该注册表,行为不变(正反例沿用真机事故句子)。

清理:死代码与文档漂移

  • 删未调用函数 existingTarget、冗余字段 lastQuery,以及靠 allow-unused 挂着的死依赖 ProjectAccessDeps.config / LumeRpcDeps.personalities;架构检查的「依赖声明」由 2 个未使用转为 0。
  • 修 ARCHITECTURE.md 过期的行数/字段数;修 RELEASING.md「本仓没有 prepare」的过期说明(0.8.3 已补)。

后续补入(同日)

  • 类型门禁:tsconfig 开 noUnusedLocals(纳入 npm run lint),一次清掉 88 处死导入/死局部——其中 index.ts 62 处是 wiring.ts 抽取后的遗留。这类「死代码能一路活到真机」从此变成编译期错误。
  • 触发器跨轮窗口:TriggerCounters 增加 48 步滑动窗口(不随 turn/end 清零),converge 判据改为 max(轮内连击, 窗口尾部连续只读探查)——跨轮的撒网不再测不到(此前轮边界清零连击,长任务的收敛提醒永远不触发)。
  • 宿主自愈前置(观测):新增宿主能力矩阵(apply 时探测 API 面 + 点名降级项)与工具事件形状漂移检测(入参/名字持续解不出且过半即告警 + 落 host-shape-drift 度量)——把「六功能静默失效」那类事故变成当场可查,而不是事后反推。

后续补入(同日·二)

  • 提示槽幂等:setNotice 文本逐字未变时不算新命中——否则调用方每步重生成同一句就会把每会话配额烧光,而配额正是防噪音用的。
  • 工具使用纳入度量:lume_* 工具调用计入机制健康(回答「模型到底调没调 lume_contract / lume_hypothesis」这个历史上多次全部落空的问题);旧记录没有 mechanismFires 时不再误报「从未命中」(只统计触发器并注明)。
  • 注入选条与预算:项目知识超过上限时按相关性(主导)+ 新近度(平局)+ 死路优先取 top-k(空 query 退化为最近 N 条);块预算新增 weight,超限时先丢低权重可丢块——方法指令(1)先于会话记忆(2)、项目知识(3)被丢,事实回显在预算紧张时优先保住。
  • 撤销入口:新增 lume_forget 工具与 deleteProjectEntry RPC——自动入账的改动/假设/设计/需求此前没有定点删除入口(facts 有 lume_project_forget),出错只能整库清空;现在可按 kind + ref 撤销,模型可代用户执行。

工程

  • 机制覆盖 52/52(新增 mechanism-health / criteria-fixtures / host-capabilities / host-shape-drift / lume_forget,均由行为测试锁定);全量测试 715 条(以 npm test 当场输出为准);npm run lint(架构 / 格式 / 类型 / 机制覆盖)全绿。

安装:dsh plugin add lume-dsh-plugin(指定版本:dsh plugin add github:cayan0x/Lume#v0.8.4)
npm:https://www.npmjs.com/package/lume-dsh-plugin/v/0.8.4

v0.8.3 — 本版主线:把「证据时效」(P2)从一个只会躺在系统提示里的死条款,变成选条与机械兜底两处真会动的东西;另加一串发布工具链

Choose a tag to compare

@cayan0x cayan0x released this 28 Sep 03:44

本版主线:把「证据时效」(P2)从一个只会躺在系统提示里的死条款,变成选条与机械兜底两处真会动的东西;另加一串发布工具链的补课。

修复:证据时效此前等于没有

  • 问答轮从来没加权过它(选条缺口):question 原来给「事实优先 + 提问纪律 + 证据来源」,而「引用日志 / 历史 / 旧结论」恰恰最常发生在问答轮。现在换成「事实优先 + 提问纪律 + 证据时效」;纠正轮与纠正闭环的保底顺位也一并补上——插「对齐」不再把它挤出三条之外。
  • 机械兜底补第三类判据(bulk):recency 槽原来要求「历史名词 + 过去时间 + 归因词」三样同句,实测漏掉最要命的一种——带量的聚合数据(「23 个会话 / 658 条记录」「664 行」)既无归因词、也无过去时间词,于是「拿历史数据当现状」被完整放行。现在补 bulk:两位数以上的量 + 数据类名词就顶,要求补「这批数据覆盖哪段时间」。
  • 「现在」不再算时间归属:「所以现在测试失败」里的「现在」是在描述当前症状,而它一出现就放行整句(实测漏报最多的那条)——已从豁免名单删掉。

修复:发布链路的假成功

  • scripts/publish.mjs 的 run() 函数体两次被字面量转义吃掉,导致「npm publish 退出码 0 但什么都没发出去」(0.8.1 / 0.8.2)。已恢复,并加幂等预检 + 假成功路径打印 npm 输出 + registry 断言。
  • 补 npm run gate:按 CI 原样命令跑门禁并返回真实退出码(防 cmd 0 假读数与 vitest 不查类型)。
  • 补 scripts/gh-release.mjs 与 RELEASING 步骤:此前只打 tag 不建 Release,Releases 页长期停在 v0.6.1 还顶着 Latest。

修复:GitHub 安装路径

  • package.json 补 prepare:dsh plugin add github:… 靠它在安装时构建,此前装到的是没有 lib/ 的空壳。npm 路径不受影响(包里自带构建产物)。

其它

  • 还原 LumeHostContext 丢失的成员(effect / tools / storageDomain / fs)与 readabilityMod import——架构检查转绿。
  • 市场条目 YAML 内层引号转义(索引 CI 曾判 invalid YAML),提交脚本加 YAML 校验防复发。
  • 文档:发布顺序纪律(GitHub 侧先干净再动 npm)、发布后体检清单、fork 纪律。

安装:dsh plugin add lume-dsh-plugin(指定版本:dsh plugin add github:cayan0x/Lume#v0.8.3)
npm:https://www.npmjs.com/package/lume-dsh-plugin/v/0.8.3

v0.8.2 — 纯文档补丁,不改任何代码。

Choose a tag to compare

@cayan0x cayan0x released this 26 Sep 12:53

纯文档补丁,不改任何代码。 0.8.1 的 npm 包是在 README 更新之前打的,导致 npm 页面与市场文案滞后一版(还带着已删的 unfounded-change)。本版把文档同步发出去。

  • README 同步:删 unfounded-change;加「输出是给人看的」与「假设台账自动入账」;已知局限补两条诚实说明(讲人话是提醒不是门槛 / 不可逆操作闸已移除)。
  • 插件市场简介精简:zh 826 → 463 字符、en 2722 → 1510;去掉已删机制、补上输出受众(索引仓库的登记块已在 docs/hub-pr/ 备好,需提 PR 生效)。
  • README 的安装示例改成占位符(@<版本>),不再每次发版都过期。
  • tmp-* 加入 .gitignore(临时文件曾三次被误提交)。

安装:dsh plugin add lume-dsh-plugin(指定版本:dsh plugin add github:cayan0x/Lume#v0.8.2)
npm:https://www.npmjs.com/package/lume-dsh-plugin/v/0.8.2

v0.8.1 — 0.8.0 之后做的是一次机制体检:不问"还能加什么",而是数每个机制到底活没活。

Choose a tag to compare

@cayan0x cayan0x released this 26 Sep 12:53

0.8.0 之后做的是一次机制体检:不问"还能加什么",而是数每个机制到底活没活。结论很直接——有几个机制从来没响过,而病根往往是我们对真实形状的假设错了。本版主线是减法 + 把瞎掉的判据修回来,以及一条你提了很久的事:输出要给人看的样子。

移除(体检证据驱动)

  • lume_patch 下线:A/B 实测(4 任务配对)省 token 5.3%、未达预设门槛(≥20%),且真实工作里 0 次调用;代码留在 077c46c 可 revert。
  • unfounded-change 触发器下线:宿主 dsh-fs-observation-policy 已把"先读后改"做成硬报错,我们的软提醒永远轮不到触发。
  • 不可逆操作闸整体下线(按你的要求):规则不该写死在代码里,也不该越过使用者的意图——真机已出现"用户明确要求跑 git reset --hard 却被硬拒"。将来若重做,须做成可配置策略 + 默认放行 + 用户明确要求即通过。

修复(都是"机制静默失效")

  • 失败判定看不见 Node 断言失败:FAILURE_RE 用 \berror\b,匹配不到 AssertionError(error 前是 n,无词边界)→ 这台机器上所有"Node 断言型失败"一直被读成成功。它是"红了要不要立刻闭环"的共同判据(验证结算 / 死路提示 / 增量验证 / 交付门槛),修好可能唤醒多条长期不响的机制。
  • 假设台账冷启动死锁:空台账 → 渲染返回 null → 模型不知道有这东西 → 永远不写第一条(14 天 0 次调用)。改为插件自动入账(验证非成功即写一条,状态 open;"已排除"仍由模型带证据裁决),台账从 0 → 1 条,机制转起来了。
  • 闸门挂在易失计数器上(已随闸移除,教训保留):真机里失败常被判成 unknown(PowerShell 管道吞退出码)→ 计数器恒 0 → 闸门永不开。不要用内存计数器当判据,要用持久化状态。

新增

  • 输出的受众:对话框里的文字是给人看的——从文档/代码搬来的代号、字段名、编号(P0 / user_id / ERR_ASSERTION)第一次出现必须用一短句说明它是什么;讲解只答三问(做了什么 / 凭什么说它对 / 还剩什么风险)。配机械判据(未解释代号识别:排除用户说过的、带解释的、代码块内、常见技术词)+ 每会话一次的提醒。诚实边界:输出拦不住,这是提醒层不是门槛。
  • scripts/boot-timing.mjs:按日志相对时间戳量每次启动的就绪耗时(用于定位"重启慢")。

降噪

  • 删掉 2 处与宿主机械强制重复的条款句(先读后改 / 授权);todo-discipline 查证已是压缩版,未虚报改动。
  • 41 处注入文案术语人话化:载具→记录、对账→核对、台账→记录、判据→怎么算、漂移→对不上、裁决→下结论、先归因→先分清是哪类原因——模型会模仿我们的腔调,想让它讲人话,先让我们对它说的话像人话。

工程

  • install-local 默认只装被投影的那一个 generation(此前每次改写 20 个 → 真机启动被拖到 148s 后被杀;修完启动回到 8–30s 级)。
  • 实验纪律:测试提示只写任务与约束,不写期望的风格/行为(两次栽在"把答案写进题目"上);门/规则必须用真实命令形状回归(git -C <路径>、cd …;、2>&1 | Select-Object 这类包装)。

安装:dsh plugin add lume-dsh-plugin(指定版本:dsh plugin add github:cayan0x/Lume#v0.8.1)
npm:https://www.npmjs.com/package/lume-dsh-plugin/v/0.8.1

v0.8.0 — 0.7.4 把载具与触发器接通后,现场又暴露出另一类失效:「跑了但没生效、没生效也不留痕」—— 补蒸馏静默不跑、诊断日志

Choose a tag to compare

@cayan0x cayan0x released this 26 Sep 12:53

0.7.4 把载具与触发器接通后,现场又暴露出另一类失效:「跑了但没生效、没生效也不留痕」——
补蒸馏静默不跑、诊断日志写了等于没写、声明了依赖却没调用、工具结果文本深一层让四个机制一起静默失效。
本版功能主线是跨会话记忆,另一半是把这类失效变成看得见、拦得住。

新增

  • 跨会话项目知识真正落地:工作目录从运行时快照解析;三来源自动沉淀(工具结果 / 助手结论 / 你的规范陈述);
    新会话开局即可用、任何轮次都可见,且用「会话目录名 → 工作目录」映射在装配前补 cwd(第一轮即带知识)。
  • 记忆编号与内容寻址去重:同主题即同 id,精确合并(换句话不再写第二条),更具体的版本才覆盖;
    新增 lume_project_forget,可用编号点名删除过时知识。
  • 知识作用域(repo / task):需求特有的结论不再污染别的需求;需求名与标识符取自 doc/<需求名>/。
  • 会话记忆与上下文预警:每轮导出目标 / 已拍板 / 未决 / 关键定位;占用到 75% / 90% 时提醒收尾并开新会话;
    新会话开局注入上次记忆,说一句「继续」即可接上。
  • 历史会话补蒸馏:启动时扫最近 7 天会话(含已经撑满、聊不动的),分片执行、幂等不重复。
  • 需求层与设计层:需求锚点(逐字回显 + 漂移词法检查,只扫可见正文且每会话限次)、设计 pass 与 lume_design 跨轮回放。
  • 证据核对四件:引用核对(引用本次没打开过的代码行)、断言核对(对没见过的符号下否定断言)、
    需求覆盖核对(需求原句与交付物句子并列)、提问核对(把「我没查」包装成「待你定」)。

修复(均为现场事故驱动)

  • 真机 tool/result 文本比读取层深一层 → 自动沉淀 / 失败识别 / grep 证据 / 断言证据四个机制一起静默失效(已修 + 真机形状回归测试)。
  • 补蒸馏拿不到会话目录时静默不跑、诊断日志因 DSH_HOME 缺失而写了等于没写 → 均改候选探测;留痕保留但降噪(每会话 1–2 行)。
  • carrierBlocks 声明了依赖却没调用(ensureSessionWorkspace)→ 第一轮仍缺知识;并新增 lint 规则防再犯。
  • 问答 / 查找模式一刀切禁工具,导致"提交情况"这类 git log 就能答的问题被回"不确定" → 改为只读核实该做就做;
    协议新增 P0 事实优先:禁止用「我不确定」「这是新会话」当答案。
  • 知识归属错乱(两个需求被数成三个)→ 按真实需求与文档标识符归属;并加「作用域只许升不许降」。
  • 客户端 bundle 重复声明 TEXT_CAP 导致 Harness 起不来 → 已修,并加两条产物断言(可解析 / 无重复顶层声明)。

工程

  • lint 规则增至 9 条(新增:依赖必须真的被使用 / 文档引用必须存在 / 禁 as any / 类型边界);
    机制覆盖门禁:39 个机制必须有「跑出行为」的测试(0.8.0 封版时的数字;之后新增 5 类,见顶部「未发布」一节 → 45)。
  • 发布门禁 37 条(对着产物断言,每条绑一个历史事故)+ 新增 npm run verify:live(真机清单一条命令)。
  • 测试 446 → 577;架构:index.ts 1723 → 755 行、全仓 any 164 → 23;lib/ 与 .goose/ 不再入库。

与 0.7.x 的关系:0.7.x 是"把机制接通",0.8.0 是"让记忆跨会话活着、让失效自己现形"。

发布前补入(本节原标「未发布」,随 0.8.0 一起发布)

这一版回答的是「它到底有没有变聪明」。此前整条链路只有约束(别做错),没有任何度量:
路由判错率、触发器命中后行为是否真的变了、条款加权有没有用——一个都没测,
于是每加一条规则只能靠感觉说「这次好像好点」。本版先装仪表盘,再动方向盘与油门。

新增:度量闭环(先装仪表盘)

  • 运行时度量:路由判定(模式 + 命中判据 + 证据来源)、触发器命中(含当时计数器快照)、
    块装配(留下 / 丢弃 / 字符数 + 本轮加权条款)、每轮状态快照(契约 / 设计 / 台账 / 假设),
    以及外部结果信号(用户纠正 / 重复请求 / 越权改动 / 执行轮零动作)逐条落 lume-metrics.jsonl。
  • 触发器效能判定:命中后 3 轮内是否出现机械可判的预期变化(真验证命令、契约 / 设计 / 台账 / 假设从无到有);
    没有机械口径的(判据漂移、知识采集)明确标「未判定」,不混进比例凑数。
  • lume_metrics 工具:模型与用户都能查;摘要带口径与落点,落点不可用时如实说明。
  • 度量回灌:本会话被用户纠正 ≥2 次时顶一句〔路由自校〕(带次数与落在哪个模式),上限 2 次防噪音。

新增:路由从「这一句话的词」换成「最近几轮轨迹的证据」

  • 判定结论带命中判据与证据来源(text / trajectory / sticky / correction)——误判才有得统计。
  • 纠正后按被纠正前那句话重算(不在纠正句上再猜一次);在途任务对承接式追问有粘性;
    任务型轨迹上的一句短话按轨迹判;证据不足一律回落到单句结果(轨迹只补、不猜)。
  • 补上「动词」与「语用」的分界:「把这部分整理一下」这类动词进表;
    「看看这块能不能优化」按可行性询问判诊断(给判断与办法,不直接动手);
    「怎么整理这段数据比较好」不再被动词带走。

新增:条款预算(每轮只加权最相关的三条)

  • 协议条款从正文切出来当数据(改正文只改一处,切分完整性有测试锁住),每轮按形态选三条放进易变段重述:
    纠正 > 压缩 > 模式,模式内再按「已动过 / 未写契约 / 常规执行」分流。
  • 文本明确写明「条款一条没少」——只做注意力加权,不缩减协议;漏选也不会让条款消失。

工程

  • 单测落盘目录改到临时目录(test/setup.ts):度量与诊断日志不再把测试数据写进真实指标文件——
    否则「用来判断是不是变聪明的数据」会被自己的测试污染。
  • 机制覆盖新增 5 条(条款预算 / 轨迹路由 / 运行时度量 / 度量回灌),当前 45/45、依赖声明 176 项 0 未使用。
  • 测试 577 → 620(本批提交时的数字;条数以 npm test 当场输出为准——文档不再维护硬数字)。

安装:dsh plugin add lume-dsh-plugin(指定版本:dsh plugin add github:cayan0x/Lume#v0.8.0)
npm:https://www.npmjs.com/package/lume-dsh-plugin/v/0.8.0

v0.7.4 — v0.7.0 的「载具 + 触发器」只生效了一半。

Choose a tag to compare

@cayan0x cayan0x released this 26 Sep 12:53

v0.7.0 的「载具 + 触发器」只生效了一半。现场追踪(12 个会话、按时间线核对)给出了逐项证据:

  • lume_change(改动台账)0 次调用、ledger 表 0 行;lume_hypothesis 同理 0 行
  • 3 份真实任务契约的 expectCount / actualCount 全是 -1(「数量先估后回填」从未发生)
  • 项目知识有内容,但全落在 unknown 键下(跨会话按项目隔离失效)
  • 三分之二的触发器从未命中;「帮我重构…」被判成问答,方法层与阶段门控因此不生效

根因不是措辞不够,而是接线:工具型载具依赖模型自觉、数量是可选结构、项目键静默回落、
执行动词表缺口。本版逐条修掉,并且每处改动都配了「驱动真实事件 → 断言存储/注入真的变了」的测试。

  • fix(P0)改动台账由插件自动记:mutate 类工具一被调用就从入参里取路径写一条
    (状态 done、标注「(自动)由 修改」);同一文件重复改更新同一条,取不到路径则不记。
    实测语义:不再依赖模型自觉——这是 ledger 第一次能真正有内容。
  • fix(P0)项目键不再回落 unknown:projectKeyOf 拿不到工作目录返回 null;
    工具 exec / 会话事件里的 session 视图常常没有 cwd,因此改为「提示词上下文记录 → 后续调用复用」
    的多来源兜底;仍然拿不到就不写跨会话表并留诊断(宁可不记,也不串味)。
  • fix(P1)契约数量必填且可见:lume_contract 的 expectCount 在 schema 里必填
    (实测:旧测试因此立刻报 missing required property,证明约束生效);契约渲染始终显示数量行,
    未估标「未估」、估了没回填标「未回填」,交付对账用同一口径。
  • fix(P1)文案点名工具:影响面清单点名 lume_change;增量验证提醒带上「台账还有 N 项未验证」
    并点名 lume_change;验证降级阶梯点名 lume_project_note(kind=deadend,把环境死路记成项目知识)。
  • fix(P1)反思可观测:session/disposed 的每条跳过路径都写一行原因
    (历史不足 / 域不可用 / 无路由 / 无输出 / 解析失败)——上一版完全看不到「为什么没有产出」。
  • fix(P2)触发器判据与阈值:增量验证改为「轮内连击 或 台账未验证项数 ≥ 阈值」
    (连击在轮边界会被清零,跨轮改多处时永不触发);阈值 6 → 4;假设台账提醒不再要求「已有假设」
    (否则这个载具永远不会被启用)。
  • fix 执行动词表补 EXECUTE_EXTRA_RE:补「重构 / 重写 / 梳理 / 删掉 / 合并 / 迁移 / 适配…」
    (不含诊断类词,避免把排查误判成执行)。这是现场「重构被判成问答」的直接修复。
  • test 新增 test/apply-carriers.test.ts(11 例,全部驱动真实事件):
    自动台账(3 例)、项目键三态(3 例)、数量必填与注入可见(2 例)、
    方法块/提醒点名工具(2 例)、反思诊断(1 例)。测试数 332 → 349。
  • chore 发布门禁新增 5 条产物断言(project-key-null / auto-change-ledger /
    contract-count-required / execute-extra-re / triggers-name-tools),共 16 条,防止这些行为再退化。

与 0.7.0 的关系:这不是加功能,而是把 0.7.0 声明过、但实际没生效的部分补齐并锁住。


安装:dsh plugin add lume-dsh-plugin(指定版本:dsh plugin add github:cayan0x/Lume#v0.7.4)
npm:https://www.npmjs.com/package/lume-dsh-plugin/v/0.7.4

v0.7.3 — 0.7.2 让宿主能起来了(兜底生效、DSH 不再崩),但人设菜单仍然是空的。

Choose a tag to compare

@cayan0x cayan0x released this 26 Sep 12:53

0.7.2 让宿主能起来了(兜底生效、DSH 不再崩),但人设菜单仍然是空的。原因:新宿主的
connection.rpc.handle 最终执行 owner.effect(() => owner.webServer.register(route)),而 owner 是
读这个服务的那个 ctx(dsh-client-connection 源码注释:channel registrations belong to the caller fiber)。
我们的入口 fiber 在 DSH Desktop 0.9.1 上解析不到 webServer → 那行抛错 → RPC 通道没建立 →
客户端菜单 list 拿不到列表(数据一直都在 storages 里,从未丢失)。

  • fix RPC 注册改为双路径:主路径仍是宿主公开 API connection.rpc.handle(依赖组合对齐宿主自带的
    dsh-api-gateway:ctx.inject(["connection", "webServer"], …));它失败时回退为自注册 HTTP 路由
    (webServer.register({ kind: "prefix", path: "/lume", handler }),宿主自带 dsh-ppt 的写法)。
    报文与客户端 conn.rpc.call 严格一致:请求 {type:"client-request",rpcId,method,payload} →
    响应 {type:"server-response",rpcId,result}。回退实现抽成纯函数模块 src/host/rpc-bridge.ts,
    由 12 例协议测试锁住(含 404/415/400、信封校验、rpcId 回显、异常不外漏、信任闸)。
  • fix 错误信封补 details: {}:客户端 parseConnectionResponse 要求失败时 error.details 是对象,
    缺失会直接抛 invalid server-response failure——即此前任何 RPC 错误路径都会让客户端调用炸掉。
  • fix RPC 诊断改成一行可 grep 的中文日志(宿主 logger 直接打 Error 会显示成 {}):成功时报走了哪条路径,
    失败时报真实错误文本 + 环境形状(connection / rpc / handle / webServer / get 各是什么),
    下次宿主 API 变更时一眼可定位。
  • RPC 注册依旧在 apply 末尾 + 独立 try/catch:它只服务客户端菜单,失败绝不拖累人设注入与工具。

影响面:0.7.2 及更早版本在新宿主上「人设菜单空白」都源于此。人设数据(2 个自定义人设、64 条会话映射、记忆/风格)全程完好。


安装:dsh plugin add lume-dsh-plugin(指定版本:dsh plugin add github:cayan0x/Lume#v0.7.3)
npm:https://www.npmjs.com/package/lume-dsh-plugin/v/0.7.3

v0.7.2 — 0.7.1 只修了一半:RPC 通道虽然挪进了 ctx.

Choose a tag to compare

@cayan0x cayan0x released this 26 Sep 12:53

0.7.1 只修了一半:RPC 通道虽然挪进了 ctx.inject(["webServer"], ...),但调用被包在 webCtx.effect(...) 里——cordis 的 effect 会另起一个 fiber,而注入授权不随子 fiber 继承,于是宿主内部的 owner.webServer.register(route) 再次越权。现象是:宿主不再崩(兜底生效),但 apply 在那行中断 → 人设段、工具、RPC 全没注册 → 界面人设菜单空白(用户反馈「之前人设都没了」;数据其实一条没少)。

  • fix 去掉 effect 包裹,直接在 inject 回调里调用 connection.rpc.handle(...)——与宿主自带的 dsh-ppt 完全一致:

    ctx.inject(["webServer"], (webCtx) => {
        webCtx.connection.rpc.handle("/lume", handler, { authority: "trusted-host" });
    });
  • fix RPC 注册挪到 apply 末尾并加独立 try/catch:它是客户端菜单(人设列表/蒸馏/管理)专用的,任何失败都只该丢菜单,绝不能再中断人设段、工具与易变段的注册。提取为 registerRpcChannel(scope),全程有注释说明为什么不能包 effect。

  • test 夹具改为照实建模 cordis 的 fiber 语义(inject 授予访问权、effect 另起 fiber 且不继承授权;rpc.handle 在无授权时抛真实错误文案)。test/host-compat.test.ts 增至 7 例,其中包含夹具自检(证明"包 effect 就会抛"这条回归锁真的有效)与「RPC 失败时人设段/工具照常注册」的直接断言——即事故症状本身被测试锁死。

  • 全量 320 用例全绿。


安装:dsh plugin add lume-dsh-plugin(指定版本:dsh plugin add github:cayan0x/Lume#v0.7.2)
npm:https://www.npmjs.com/package/lume-dsh-plugin/v/0.7.2

v0.7.1 — 本版是兼容性修复:0.

Choose a tag to compare

@cayan0x cayan0x released this 26 Sep 12:53

本版是兼容性修复:0.6.2 与 0.7.0 在 DSH Desktop 0.9.1(宿主包 0.1.5-rc.2) 上会导致 DSH 无法启动,且插件无法更新。两个独立成因都已修掉。

  • fix RPC 通道注册位置(启动崩溃的根因):新宿主的 connection.rpc.handle 内部会以调用方的 ctx 执行 owner.webServer.register(route)(见 @deepseek-ai/dsh-client-connection 的 owner.effect(() => owner.webServer.register(route)))。旧写法直接 ctx.connection.rpc.handle(...),于是 cordis 抛 cannot get property "webServer" without inject → apply 抛错 → 整个插件树加载失败 → DSH entry failed,用户连界面都进不去(实测日志:plugin recovery detection: lume-dsh-plugin,随后进 safe mode)。改为宿主自带 dsh-ppt / dsh-api-gateway 的同款写法:ctx.inject(["webServer"], (webCtx) => webCtx.connection.rpc.handle(...))。没有 web 载体的宿主(headless)只失去 RPC 通道,其余功能照常,也不会被顶层 inject 卡住。
  • fix apply() 外层加兜底 try/catch:插件内部任何异常都降级为「部分功能不可用 + logger.error」,不再可能阻断宿主启动。插件的第一职责是不拖垮宿主;此前一次宿主 API 变更就能让整个 DSH 起不来,代价太大。
  • fix 移除 peerDependencies 里的 @deepseek-ai/dsh-client-ui-primitives:它是应用自带的前端包(客户端 bundle 在运行时经宿主模块图解析),但新版桌面安装器做严格 peer 闭包校验,会连带检查该包自己的 peer(@deepseek-ai/dsh-client-runtime)→ 报 lume-dsh-plugin failed peer validation: @deepseek-ai/dsh-client-runtime does not resolve from the installation closure → 更新被拒绝/回滚(desktop 把它写进 .generations-deferred.json 并冻结 profile migration)。它仍在 devDependencies(tsc 类型与 tsdown external 需要),只是不再作为 peer 声明。
  • test 新增 test/host-compat.test.ts:① 用「会抛错 webServer 错误的假宿主」直接复现事故并断言被兜底吞掉且记录;② 断言没有 webServer 的宿主仍能完整装载(只是没有 RPC);③ apply 层夹具升级为模拟 cordis ctx.inject(deps, cb) 语义。

影响面:0.6.2 与 0.7.0 同一行代码都中招(0.7.0 装上了但因为 profile migration 被 peer 校验冻结,从未真正跑起来)。卡在「重启 DSH 失败 / 无法更新」时升级到 0.7.1 即可。


安装:dsh plugin add lume-dsh-plugin(指定版本:dsh plugin add github:cayan0x/Lume#v0.7.1)
npm:https://www.npmjs.com/package/lume-dsh-plugin/v/0.7.1

v0.7.0 — 本版主题:从「纪律」到「方法」——任务载具与行为触发器。

Choose a tag to compare

@cayan0x cayan0x released this 26 Sep 12:53

本版主题:从「纪律」到「方法」——任务载具与行为触发器。0.6.x 解决的是「缓存与位置」,本版解决的是「思考方式」。

诊断来自一次真实会话的轨迹复盘(session-5677db41,2 轮 / 58 步 / 106 次工具调用):不是不知道该怎么做,而是没有地方放、也没有东西在轨迹上提醒——34 次 glob/grep/read 撒网式探查、25 次 edit 里 18 次连击无验证、17 次 pwsh 全在撞同一个不可用的 Maven 环境、交付前靠用户发话才自审。两次「何时收敛 / 何时换验证方式」的元决策都是由用户亲自下的。

  • feat 任务载具(四个模型工具,零额外 LLM 调用):
    • lume_contract 任务契约:目标 / 范围 / 数量(先估后回填) / 完成判据 / 非目标 / 待确认;支持局部更新(回填数量不会清空判据)。交付轮自动切换成对账口径——对照的是开工时写下的原始判据,而不是模型此刻的记忆版本,这是防「判据漂移」的关键
    • lume_change 改动台账:文件·符号·章节 → 改什么 → 怎么验 → 状态;可按 target 单独推进状态。文档任务用章节名当 target,天然形成分节记账
    • lume_hypothesis 假设台账:假设 + 证据 + 状态(含已排除);已排除项照常回显,避免重复验证同一个假设
    • lume_project_note 项目知识:构建/测试命令、模块链路、仓库约定、死路记录
  • feat 项目域(lume_project,跨会话):项目知识按工作目录归属(projectKeyOf),与人格记忆分开存放——代码路径与仓库约定是工作事实,换人设不该失忆,也不该随人设卡被导出分享。会话结束时清掉任务态(契约/台账/假设),项目知识保留
  • feat 行为触发器(六类,阈值可配):把元决策从用户手里接过来,且只在行为模式成立时注入一句带具体数字的提醒
    • 收敛提醒(连续 ≥12 次只读探查且未写契约)/ 增量验证(连续 ≥6 次改动无验证)/ 死路重撞(同一验证连续失败 ≥3 次,环境类占多数时给验证降级阶梯:编译器 → 语法检查 → 静态交叉引用 → 手工走读+风险清单)/ 假设维护 / 契约对账(每 3 轮 + 压缩后)/ 项目知识采集
    • 每类每轮最多一次且有轮级冷却;环境性死路自动落成项目知识,下次会话不必重踩
    • 工具按行为类别归类(inspect/mutate/verify/plan)而不是按名字,宿主或扩展改名不失效;lume_* 人格工具归 other,不污染改动连击
  • feat 方法层(按任务形态注入):文档编辑方法(先取结构 → 最小编辑保留格式与编号 → 术语全文一致 → 交付前回读并列出「改了什么/没动什么/未核对什么」)、改动影响面清单(谁调用、被谁实现、配置与 SQL 映射、前端引用 + 每处验证方式)、结构定位提示(检测到 analyze/tree 类工具时建议符号级定位替代通篇 read)
  • feat 反思日志补第五维「诊断深度与假设管理」:跨会话提醒终于能指向思维方式而不只是纪律;旧日志记 -1(统计时跳过该维,不当作 0 分)
  • feat RPC:getProjectState(诊断视图:契约/台账/假设/项目知识/触发器计数)、clearProjectFacts(一键忘掉某项目的知识积累)
  • feat 配置:projectMemory(默认 true)、behaviorTriggers(默认 true)、triggerInspectStreak / triggerChangeStreak / triggerDeadPathFails
  • test 新增 5 个测试文件(ledger / signals / triggers / methods / project-store)并把 apply 层夹具升级为可调用真实工具:313 用例全绿(原 263 + 50),其中锁死了「载具只进尾部快照、绝不进 system 段」这条 0.6.2 的分层不变量

成本说明:所有载具与方法块都注入在对话尾部快照(易变层),因此只在内容变化时付费——实测 58 步只产生 9 条快照,每轮多几百字可接受;预算用尽时按 droppable 标记从后往前丢块,关键载具与触发器提醒永不被丢。


安装:dsh plugin add lume-dsh-plugin(指定版本:dsh plugin add github:cayan0x/Lume#v0.7.0)
npm:https://www.npmjs.com/package/lume-dsh-plugin/v/0.7.0