dsh-prime-memory 0.20.0-beta.24 → 0.20.0-beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +4 -208
- package/ENGINEERING-NOTES.md +0 -17
- package/dist/client.js +528 -1188
- package/dist/config.d.ts +120 -0
- package/dist/config.js +21 -1
- package/dist/contract.d.ts +56 -104
- package/dist/hooks/long-task.d.ts +31 -0
- package/dist/hooks/long-task.js +93 -0
- package/dist/hooks/recall.d.ts +1 -4
- package/dist/hooks/recall.js +1 -7
- package/dist/index.d.ts +78 -0
- package/dist/index.js +21 -14
- package/dist/metadata-validators.d.ts +0 -5
- package/dist/metadata-validators.js +1 -11
- package/dist/pipeline/recluster.js +1 -1
- package/dist/pipeline/ruminate.d.ts +1 -11
- package/dist/pipeline/ruminate.js +1 -18
- package/dist/stats.d.ts +34 -23
- package/dist/stats.js +200 -258
- package/dist/store/context-usage.d.ts +28 -0
- package/dist/store/context-usage.js +47 -0
- package/dist/store/l1.d.ts +0 -30
- package/dist/store/l1.js +1 -64
- package/dist/store/session-modes.d.ts +8 -0
- package/dist/store/session-modes.js +52 -0
- package/dist/store/todo-ref.d.ts +41 -0
- package/dist/store/todo-ref.js +65 -0
- package/dist/tools/index.d.ts +1 -4
- package/dist/tools/index.js +1 -232
- package/dist/types.d.ts +0 -4
- package/dsh.plugin.json +1 -1
- package/package.json +1 -1
- package/dist/room-review.d.ts +0 -196
- package/dist/room-review.js +0 -281
- package/dist/store/recall-usage.d.ts +0 -43
- package/dist/store/recall-usage.js +0 -149
- package/dist/store/rooms-registry.d.ts +0 -66
- package/dist/store/rooms-registry.js +0 -250
package/CHANGELOG.md
CHANGED
|
@@ -10,216 +10,12 @@
|
|
|
10
10
|
|
|
11
11
|
### 新增
|
|
12
12
|
|
|
13
|
-
- **长任务模式(`longTask.*`,默认关)
|
|
13
|
+
- **长任务模式(`longTask.*`,默认关)——「长跑会话」的三件套:上下文计量、任务参考、尾部压缩,以及一个非阻断的浮动建议面板。**
|
|
14
14
|
- **上下文使用量(`store/context-usage.ts`)**:监听 `assistant/message` 官方 `usage` 的输入侧(input + cache 读/写),取**最近值**语义(每轮输入侧已含全部历史,不累加);`compaction/summary` 后归零重计。纯内存 per-session Map——重启后首条 assistant 消息即可重建,持久化只会让过期样本诈尸。
|
|
15
15
|
- **todo 参考(`store/todo-ref.ts` + `hooks/long-task.ts`)**:监听宿主结构化 `todo/write` 事件(全量快照;包类型到 0.2.0-rc.1 未声明,插件以 declare module 自扩充——同 §E 的 dsh-compaction 先例)。**仅长任务会话**:快照刷进一张 pinned `todo` 槽位(`SlotStore.refreshByTitle` 受管刷新——同一主体反复写必须原地更新,否则 ≤8 槽上限里堆出关闭槽位尾迹),经 slot-recall 常驻注入——压缩把旧上下文逐出后,任务北极星仍在。相邻快照做词面 Jaccard 漂移检测(同快照重复写入不稀释信号);body ≤512 字节,截断明示。
|
|
16
16
|
- **尾部 turn 压缩(`longtask-compress-tail` 端点 + `compressTailTurns`)**:把(压缩水位线, 最新已捕获轮] 内最近 N 轮立即 `enqueue(force:true)` 蒸馏入记忆——立即把尾部对话落成可检索记忆,而不是等蒸馏阈值。水位线(`SessionModeStore.lastTailCompressedTurn`)只前进,重复按压天然幂等;off 档完全隐身;无锚点老数据只在首次压缩(水位线 0)时纳入——宁少收不重蒸。
|
|
17
|
-
- **建议状态(`longtask-hint-get`)
|
|
18
|
-
- **撤下浮动球 UI(`client/src/longtask-fab.ts`;beta.1 起曾随包发布)**:悬浮建议面板的归属本在 context-compression 侧(「建议启动压缩」是其领域),pm 属误载——2026-10-02 用户裁定撤下。撤下不违座位契约(settings.section 恰一个 + 输入栏 pill,body 单例不占座位),但全应用级 overlay 会与其他插件的悬浮 UI 抢占屏幕角落;长任务开关与手动压缩入口待长任务定版时落记忆设置分节。
|
|
17
|
+
- **建议状态(`longtask-hint-get`)+ 浮动球(`client/src/longtask-fab.ts`)**:ego-browser 式 vanilla overlay(FAB+面板,拖拽/位置持久化/视口夹紧),**建议不阻断**——仅当「上下文占用达 `contextThresholdPct`」或「todo 漂移达 `driftThreshold`」且长任务未开启时点亮呼吸光晕;面板内:长任务开关(临时,per-session,**不带 mode**——切开关不重置用户档位)、占用/漂移进度条、手动尾部压缩按钮(长任务开启才可用)、任务计数。轮询忙 2s/闲 5s,RPC 失败静默;座位契约不变(settings.section 恰一个,body 单例不占任何座位)。
|
|
19
18
|
- **`session-mode-set` 的 `mode` 转为可选**:与 `longTask` 二选一必传——纯切长任务开关不再被迫发送档位(旧客户端恒传 mode,行为不变)。响应 `mode` 改回当前生效值。
|
|
20
|
-
## [0.20.0-beta.24] — 2026-10-02
|
|
21
|
-
|
|
22
|
-
### 修复
|
|
23
|
-
|
|
24
|
-
- **Hall 页展开/退场与 Room 页对齐**:Hall 页 room 行展开同样只拉活跃记录(`retired:false`);退场确认后若该 room 展开中自动刷新展开区。(beta.23 仅补齐了 Room 页,Hall 页漏同步——用户实测"按退场看不到效果"的另一处。)
|
|
25
|
-
## [0.20.0-beta.23] — 2026-10-02
|
|
26
|
-
|
|
27
|
-
> **Room 页退场筛选补齐**(beta.22 的筛选 chips 因补丁脚本中途失败未落盘,仅徽标进了包——本次逐项 Edit 落盘并全绿验证)。
|
|
28
|
-
|
|
29
|
-
### 修复/新增
|
|
30
|
-
|
|
31
|
-
- **退场筛选 chips**(Room 页,注册表单上方):全部 / 活跃(词表未退役)/ 已退役。
|
|
32
|
-
- **退场效果立现**:展开条目只拉**活跃**记录(`retired:false`)——退场后展开区即「暂无记忆条目」;退场确认后若该 room 展开中**自动刷新**;[已退场] 徽标 + 置灰兜底(beta.22 已含)。
|
|
33
|
-
## [0.20.0-beta.22] — 2026-10-02
|
|
34
|
-
|
|
35
|
-
> 退场效果可见性 + Room 页退场筛选(实测反馈:退场确认后界面无变化、无从筛选)。
|
|
36
|
-
|
|
37
|
-
### 修复/新增
|
|
38
|
-
|
|
39
|
-
- **退场效果立现**:Room 页展开条目只拉**活跃**记录(`retired:false`)——退场后展开区即显示「该 Room 暂无记忆条目」;退场确认后若该 room 正展开则**自动刷新**其条目;混排兜底:已退场条目显示 [已退场] 徽标并置灰。
|
|
40
|
-
- **退场筛选**:Room 页新增「全部 / 活跃 / 已退役」chips(词表退役态过滤)。
|
|
41
|
-
## [0.20.0-beta.21] — 2026-10-02
|
|
42
|
-
|
|
43
|
-
> **退役带记录**:room 退役时可选**连同其下全部活跃记忆一并退场**(此前只有动词表,自生长 room 尤其没有处理手段)。
|
|
44
|
-
|
|
45
|
-
### 新增
|
|
46
|
-
|
|
47
|
-
- **`retire withRecords`**(Room/Hall 页「退场」按钮,红色):词表退役 + 该 room 下全部**活跃**记录分批软删(每批 ≤200,与 records-delete 同原语;reason=manual)——记录可在记忆页「已退场」区逐条恢复。自生长未注册行同样有「退场」(仅退场记录,无词表条目可动)。响应带 `retiredRecords` 条数。
|
|
48
|
-
- 「导出孤儿」按钮回迁**记忆查询面板**(孤儿筛选行内)。
|
|
49
|
-
|
|
50
|
-
### 修复
|
|
51
|
-
|
|
52
|
-
- recall-usage 测试隔离(持久化回环用例并行竞态);RoomTab 退役确认框的字面 `\n` 显示修正。
|
|
53
|
-
## [0.20.0-beta.20] — 2026-10-02
|
|
54
|
-
|
|
55
|
-
> **Room 独立标签页**(与 Hall 分离):room 的存在、名称、条目各有其管理面;记忆页不再堆 Room 标签。
|
|
56
|
-
|
|
57
|
-
### 新增
|
|
58
|
-
|
|
59
|
-
- **「Room」标签页**(Hall 之后):扁平列出全部 room(注册条目 ∪ 自生长未注册)——**存在**(注册两级 slug / 收编 grown / 退役·恢复)、**名称**(编辑显示名+归类说明;改名可两级 slug,记录随迁)、**条目**(▸ 展开浏览该 room 的记忆条目,默认收起,首次拉前 10 条);孤儿导出/高权限开关随页。
|
|
60
|
-
- **注册后可重编辑**:新 `room-admin update`(label/description 改写,未提供字段不动)+ store `RoomRegistryStore.update` + 工具 `memory_room_admin action=update` + 面板「编辑」入口——此前注册后 label/说明只能补空不能改写。
|
|
61
|
-
- **room 行内容展开**(Hall 页 room 行同款):默认收起,▸ 展开看条目。
|
|
62
|
-
- **记忆页 Room 区块分离**:移除 slug chips/分页/展开块(与 Hall/Room 页重复),仅保留「无绑定 · N」孤儿筛选与指引文案——room 标签浏览/管理归 Hall/Room 页。
|
|
63
|
-
|
|
64
|
-
### 变更
|
|
65
|
-
|
|
66
|
-
- 合并/归类/改名表单与预览 sticky 跟随滚动(hall 多时不再需要上下滑动找确认框)。
|
|
67
|
-
- 指针自制拖拽(ego-browser 同款 pointer 方案,部分 webview 的 HTML5 DnD 不触发的兜底)。
|
|
68
|
-
## [0.20.0-beta.19] — 2026-10-02
|
|
69
|
-
|
|
70
|
-
> 归类交互重做(实测反馈:HTML5 拖拽在部分 webview 不触发;点 hall 后预览被埋在源行里像"没反应")。
|
|
71
|
-
|
|
72
|
-
### 变更
|
|
73
|
-
|
|
74
|
-
- **指针自制拖拽**(ego-browser 同款纯 pointer 方案):按住 room/自生长 slug → 浮动幽灵 chip 跟手 → 悬停 hall 头虚线高亮 → 松手归类。不依赖 HTML5 DnD,任何 webview 都生效。点选归类(「归类」/「归」→ 挑选态 → 点 hall 头)保留。
|
|
75
|
-
- **全局操作栏**:合并/归类/改名的表单与 dryRun 预览**常驻页首**(红色确认框不随行滚动、不再被埋在源 room 行里)——点 hall 后一定看得见。
|
|
76
|
-
- **room 行布局**:按钮固定一行不再折行(导出不再孤行);名称/别名在左侧信息区自然换行(别名可断词)。
|
|
77
|
-
## [0.20.0-beta.18] — 2026-10-02
|
|
78
|
-
|
|
79
|
-
### 维护
|
|
80
|
-
|
|
81
|
-
- lint 清账:beta.17 的 isTag→isRoomSlug 替换遗留 stats.ts / rooms-registry.ts 两个死 import(发布门漏检——管道后 `$?` 取的是 tail 退出码,D2 坑复犯)。无功能变更。
|
|
82
|
-
## [0.20.0-beta.17] — 2026-10-02
|
|
83
|
-
|
|
84
|
-
> **重启后 hall/room 关系丢失修复**:`rooms-registry.json` 的加载器仍在用 `isTag` 过滤 slug——重启读盘时所有 `major/minor` 两级条目被当非法**静默丢弃**(单段 hall 能通过所以留存)。这是 isTag/isRoomSlug 混用的第三处;同批扫掉了 `normTags` 的同款雷。
|
|
85
|
-
|
|
86
|
-
### 修复
|
|
87
|
-
|
|
88
|
-
- **加载器丢两级条目**(`store/rooms-registry.ts` init):过滤改 `isRoomSlug`。**你磁盘上的 rooms-registry.json 数据完好**(两级条目一直在文件里,只是启动时被丢)——升级重载后关系自动恢复,无需任何修复操作。
|
|
89
|
-
- **normTags 洗掉 slash 标签**(`metadata-validators.ts`):"所有 tags 写回点都必须过这里"的闸用 isTag,归类写回的 `hall/minor` 标签在下次蒸馏/重标触及时会被静默剥掉。现放行两级 room slug(三级仍拒);`isRoomSlug` 事实源就近移入该文件(避免依赖环),rooms-registry re-export 兼容。
|
|
90
|
-
- **list-records 两级 tag 过滤被误拒**(stats.ts tagSel 同款):改 `isRoomSlug`——Hall 页点两级 room 的记录筛选此前会 400。
|
|
91
|
-
- 红测试先行 ×3(持久化回环两级保留 / normTags 放行 / 集成两级 tag 过滤),验红后修复回绿。
|
|
92
|
-
## [0.20.0-beta.16] — 2026-10-02
|
|
93
|
-
|
|
94
|
-
> **自生长未注册 slug 直接归入 hall**:底部「自生长未注册」区的每个 chip 现在可拖到 hall 头上——收编 + 归为其子类一步完成。
|
|
95
|
-
|
|
96
|
-
### 新增
|
|
97
|
-
|
|
98
|
-
- **grown chip 拖拽/点选归类**:把未注册 slug(如 `git-commits`)拖到 hall 头(或点 chip 上「归」按钮进入挑选态,再点目标 hall)→ dryRun 预览 → 确认实跑。语义 = **原地收编(from,source=grown)→ rename 到 `hall/子类`**:记录 tags 随迁、旧名进目标别名、条目 active 且不戴 ⭐(收编身份)。落回自己 hall 的两级 slug(如 `dsh-plugin/xxx`)= 原地收编。
|
|
99
|
-
- 组合顺序钉死在集成测试(markMered 对未注册 from 会早退——必须先收编 from 再 rename);execMerge 对未注册 from 自动补收编。
|
|
100
|
-
## [0.20.0-beta.15] — 2026-10-02
|
|
101
|
-
|
|
102
|
-
> 归类实测反馈两连修:①改名后的条目误带「已退役」(会掉出标注词表);②HTML5 拖拽在部分 webview 不生效 → 新增**点选归类**主路径。
|
|
103
|
-
|
|
104
|
-
### 修复
|
|
105
|
-
|
|
106
|
-
- **归类(改名)后条目误标 retired**:renameRoom 复用 merge 编排,`markMerged` 的"旧条目转退役"被带了过来——归完类的新 room 显示「已退役」并**掉出标注器词表**(listActive 过滤)。现 rename 收尾恢复先前状态(active 条目改名后仍 active);真 merge(并集语义)不受影响。红测试先行(unit + HTTP 面集成)。
|
|
107
|
-
|
|
108
|
-
### 变更
|
|
109
|
-
|
|
110
|
-
- **点选归类为主路径**:点 room 行「归类」→ 进入挑选态(按钮变「选 hall…」,所有 hall 头虚线高亮)→ 点目标 hall 头 → 出 dryRun 预览 → 确认实跑。拖拽保留(支持的環境仍可用),但不再依赖。
|
|
111
|
-
## [0.20.0-beta.14] — 2026-10-02
|
|
112
|
-
|
|
113
|
-
> 记忆卡片新增**老化权重**与**召回使用**展示,并开始为"老化权重效果统计"积累数据。口径(用户裁定):**进 topN(被注入上下文)才算被使用**;参与尝试未进 = 仅计尝试。
|
|
114
|
-
|
|
115
|
-
### 新增
|
|
116
|
-
|
|
117
|
-
- **卡片字段**:「老化 N%」chip(读路径衰减系数 `max(0.5, 0.5^(Δ天/半衰期))`,与召回排序同式同源;≤60% 标红=偏老)+「用 used/attempts」计数(title 含最近使用/尝试时间)。工具条新增汇总「召回使用 used/attempted(rate%)」。
|
|
118
|
-
- **统计面**:`RecallUsageStore`(recall-usage.json sidecar,与 rooms-registry 同族纪律——损坏只读降级、绝不阻塞召回读路径);每轮召回在注入/全压制/预算清零三个终态记录(候选 attempts++、注入 used++,时间戳取最新);内存即时 + 去抖 5s 原子落盘,5 万条按最近尝试淘汰;未装配 = 零成本旁路。
|
|
119
|
-
- 契约:UiRecord 增 `agingWeight`/`usage`,ListRecordsResponse 增 `usageSummary`(可选字段,旧客户端零断裂);契约键数不变。
|
|
120
|
-
|
|
121
|
-
### 效果统计口径(后续分析用)
|
|
122
|
-
- usageSummary:tracked(有统计的记忆数)/ attempted(Σ尝试)/ used(Σ使用)/ rate(使用率%)
|
|
123
|
-
- 细粒度分析(按类型/年龄段的使用分布、半衰期调参依据)数据自本版起积累,分析视图另议。
|
|
124
|
-
## [0.20.0-beta.13] — 2026-10-02
|
|
125
|
-
|
|
126
|
-
> 补全归类逻辑:把 room 归到已有 hall 下(此前只能新增 hall,或合并进别的 room 抹掉身份)。面板支持**拖拽归类**——拖 room 放到 hall 头上即可。
|
|
127
|
-
|
|
128
|
-
### 新增
|
|
129
|
-
|
|
130
|
-
- **Hall 页拖拽归类**:room 行可拖(hiPriv 开启时抓手光标),hall 头为放置目标(虚线高亮);松手 = 预填改名(major/minor)并直接出 dryRun 预览,确认后实跑——记录随迁、旧名进别名、分组视图即挂到该 hall 下。触屏/不支持拖放的环境用 room 行「归类」按钮或改名表单里的 hall 快选 chips 兜底。
|
|
131
|
-
- 后端修复:`renameSlug` 目标校验 `isTag` → `isRoomSlug`——此前两级目标(major/minor)被误拒,「归类到 hall 下」这条路实际不通(且 rename 编排会先重写记录再在注册表改名时抛错,留下半程状态)。按 C3 卸除/变更纪律:红测试先行(unit + HTTP 面集成各一),验红后修复回绿。
|
|
132
|
-
|
|
133
|
-
### 修复
|
|
134
|
-
|
|
135
|
-
- 同上:`renameSlug` 两级目标校验(beta.5 引入的缺口)。
|
|
136
|
-
## [0.20.0-beta.12] — 2026-10-02
|
|
137
|
-
|
|
138
|
-
> lint 清账 + 卸除纪律成文(ENGINEERING-NOTES 新增 C3)。**无功能变更**。
|
|
139
|
-
|
|
140
|
-
### 维护
|
|
141
|
-
|
|
142
|
-
- **eslint 清账(13 error → 0)**:longtask 撤除残渣(stats.ts 死 import ×2、RecordsTab 死 state)+ 更早批次欠账(recluster.ts 死接口与 let、rooms-registry.ts / ruminate.ts / room-review.ts / 两个测试文件的死 import 与 let)。余 4 个 warning 为基线既有(primitives/tools 的 any)。
|
|
143
|
-
- **ENGINEERING-NOTES 新增 C3「卸除也是 TDD」**:卸除先改测试表达新预期(红)→ 卸实现(绿);lint 是删除型改动的必跑门(unused import = 没卸干净的自动探测器)。
|
|
144
|
-
## [0.20.0-beta.11] — 2026-10-02
|
|
145
|
-
|
|
146
|
-
> Hall·Room **集成测试**入库(`tests/hall-room.integration.test.ts`:HTTP 面全链 × 真实存储的用户旅程,9 用例),集成首跑即抓到一个单测盲区并修复。
|
|
147
|
-
|
|
148
|
-
### 修复
|
|
149
|
-
|
|
150
|
-
- **rooms-get 合并视图 source 硬编码 `pre-registered`**(beta.4 引入):注册表条目并入计数列表时来源写死,收编(source=grown)的条目在面板计数 chips 上恒戴 ⭐ 预注册角标——身份失真。现用条目真实来源(⭐ 只归预注册;收编显示 grown)。单测盲区成因:rooms-registry 单测只测 store 层,端点合并行无人断言 grown 条目的 source。
|
|
151
|
-
|
|
152
|
-
### 测试
|
|
153
|
-
|
|
154
|
-
- `hall-room.integration.test.ts`:空表自生长计数 → 两级注册/非法 slug 拒绝 → 收编 → 导出三 kind → merge dryRun 零写入→实跑(备份落盘/退场行重写/metadata 保全/场景重算入队 source='room-merge')→ rename 别名 → retire/恢复 → 大类 200 上限+小类不占额 → 损坏只读降级红线(rooms-get 不阻塞、磁盘不回写)。
|
|
155
|
-
## [0.20.0-beta.10] — 2026-10-02
|
|
156
|
-
|
|
157
|
-
> **longtask(长任务模式)全量撤除**:该族功能的归属本在 context-compression 侧(「建议启动压缩」是其领域),pm 属误载——beta.8 撤浮动球、本版撤完剩余后端。pm 回归纯记忆域。将来若需要「立即蒸馏尾部」等能力,以 pm 本位重新设计再立项。
|
|
158
|
-
|
|
159
|
-
### 移除
|
|
160
|
-
|
|
161
|
-
- **端点 `longtask-hint-get` / `longtask-compress-tail`**(契约键 48 → 46)及 `compressTailTurns`/去抖 ruminate 闭环:上下文计量(`ContextUsageStore`)、todo 漂移检测(`TodoRefStore`)、建议判定随之一并撤除,`hooks/long-task.ts`、`store/context-usage.ts`、`store/todo-ref.ts` 三文件删除(含 todo/write 事件的 declare module 扩充)。
|
|
162
|
-
- **`cfg.longTask.*` 配置块**(默认值 + 两处 Schema):旧配置文件里的 longTask 键由 schema 忽略,无需迁移。
|
|
163
|
-
- **会话级 `longTask` 旗标与尾部压缩水位线 `lastTailCompressedTurn`**(session-modes):旧 session-modes.json 里的遗留键由载入过滤自然忽略。
|
|
164
|
-
- **`session-mode-set` 的 `mode` 恢复必传**(该可先化专为 longTask 二选一而生);`longTask` 请求/响应字段删除。
|
|
165
|
-
- 保留:beta.9 的 roomRegistry RPC 接线修复(独立成立);Hall 管理页与 Room 分类管理面不变。
|
|
166
|
-
## [0.20.0-beta.9] — 2026-10-02
|
|
167
|
-
|
|
168
|
-
> 修复面板 RPC 全链路的 deps 漏带:`roomRegistry` 与 `longTaskDeps` 在 rpcHandler 组装 sources 时丢失,面板侧 Room 管理/长任务端点恒"未装配"(工具面直传不受影响,故 beta.4 起工具可用而面板注册一直报错)。
|
|
169
|
-
|
|
170
|
-
### 修复
|
|
171
|
-
|
|
172
|
-
- **`registerMemoryRpc` 的 rpcHandler 漏带 `roomRegistry`/`longTask`**(beta.4 引入):HTTP 分发统一走 `buildEndpointDeps`,但 sources 只带了 7 项——`rooms-get` 不下发 registry、`room-register`/`room-admin` 抛「Room 注册表未装配(需要插件重载以初始化)」、`longtask-hint-get`/`longtask-compress-tail` 恒 disabled。现随 sources 下发;回归测试钉死 HTTP 面全链路(register → rooms-get 合并 → room-admin,rpc.test.ts)。
|
|
173
|
-
## [0.20.0-beta.8] — 2026-10-02
|
|
174
|
-
|
|
175
|
-
> 撤下浮动球 UI:悬浮建议面板的归属本在 context-compression 侧(「建议启动压缩」是其领域),pm 属误载——beta.1 起随包发布的 FAB 至本版移除。
|
|
176
|
-
|
|
177
|
-
### 移除
|
|
178
|
-
|
|
179
|
-
- **浮动球 + 建议卡片(`client/src/longtask-fab.ts`,beta.1 起随包)**:整个撤下,客户端恢复两座——`settings.section`(记忆面板)+ `conversation.input.left`(档位 pill),不再有全应用级悬浮 UI。长任务模式本体(上下文计量/todo 参考/尾部 turn 压缩)不受影响;`longtask-hint-get`/`longtask-compress-tail` 端点保留为后端面,长任务开关与手动压缩入口待定版时落记忆设置分节。
|
|
180
|
-
|
|
181
|
-
## [0.20.0-beta.7] — 2026-10-02
|
|
182
|
-
|
|
183
|
-
> Room 分类管理第三船(**管理面板档**):专用「Hall」标签页,hall(大类)+ room(小类)一起管理 —— 手动查看/管理 Room 从此不用借道 agent 工具。
|
|
184
|
-
|
|
185
|
-
### 新增
|
|
186
|
-
|
|
187
|
-
- **「Hall」管理标签页**(「场景」之后):hall 分组树 —— `major/minor` 归其前缀大类,standalone slug 自成 hall(既是 hall 又是其下唯一 room);hall 头行聚合计数 + 一键「+小类」(预填 `hall/`);room 行展示 ⭐预注册/source/状态/别名/计数,retired 灰化。UI 术语 Hall/Room 为分组视图,与 Wing(`metadata.hall` 域)及认知 hall 无关(ADR-0020 §7 消歧)。
|
|
188
|
-
- **全操作 UI 入口(高权限 memoryMutate 门)**:两级 slug 注册(受控表单,placeholder `dsh-plugin` / `dsh-plugin/merge`);自生长 slug **收编**(`source=grown`);**改名/合并**走新 RPC —— dryRun 预览(影响条数+样例)→「确认执行」实跑,与 memory_room_admin 工具同一编排(执行前自动备份 + 完成入队场景重算);退役/恢复一次点击(恢复不二次确认,退役确认);每 room 记录清单 CSV 导出;词表/孤儿导出收拢进本页;合并/改名带「反刍空闲时执行」提示。
|
|
189
|
-
- **新端点 `dsh-memory/room-admin`**(merge/rename/retire;memoryMutate 门,端点侧抛错语义):契约键 47 → 48。`rooms-export` 增 `kind='records'`(按 Room 导出记录清单,`tag` 必传);`room-register` 增可选 `source`(收编传 `grown`)。
|
|
190
|
-
- 记忆 Tab Room 块瘦身:管理子面板移除(孤儿导出上移头部行),提示指向 Hall 页。
|
|
191
|
-
|
|
192
|
-
### 修复
|
|
193
|
-
|
|
194
|
-
- `rooms-export` records 分支 kind 类型收窄(TS2322)与历史乱码报错文案;CHANGELOG beta.1-beta.5 重复标题行修复。
|
|
195
|
-
## [0.20.0-beta.6] — 2026-10-01
|
|
196
|
-
|
|
197
|
-
### 修复
|
|
198
|
-
|
|
199
|
-
- **标注器词表接入注册表(beta.5 漏项补齐)**:beta.5 的 merge/rename/retire 已落,但候选标注器(`annotateOrphanCandidates`)的词表仍是纯自生长聚合——预注册的 Room 根本进不了候选。现 OrphanAnnotateIO 带 registry:合并词表 = 注册表条目排前(count=0,附 label/description)+ 自生长目录,封顶 120;ruminate 与 memory_room_admin annotate 两条路径都传参。**预注册 Room 从此真实影响候选标注**。
|
|
200
|
-
|
|
201
|
-
## [0.20.0-beta.5] — 2026-10-01
|
|
202
|
-
|
|
203
|
-
> Room 分类管理第二船(**破坏性面**)。dryRun 默认 true——merge/rename 先预览影响面,确认后才实跑;执行前自动备份到 `rooms-merge-backups/`。
|
|
204
|
-
|
|
205
|
-
### 新增
|
|
206
|
-
|
|
207
|
-
- **Room 注册表两级制**:slug 支持 `major` 或 `major/minor` 两级(如 `dsh-plugin`、`dsh-plugin/merge`);**大类上限 200**,小类细分不占大类额度(总量保险 2000)。isTag 词表不放宽(slash 仅注册表层允许)。
|
|
208
|
-
- **merge/rename/retire(工具 `memory_room_admin`,高权限)**:merge 游标重写全部匹配记录的 tags(写前重读-合并-写回,roomCandidates/roomReview/hall/anchors 等键保全;含已退场行,与计数口径一致);rename = merge 1:1 + 注册表改名(aliases 收旧名);retire 仅词表退役(存量不动)。merge/rename 与反刍并发会相互覆盖——请错峰执行(工具提示与 ADR-0020 均已声明)。
|
|
209
|
-
- **重写安全三件套**:dryRun 默认只返 affected+预览零写入;执行前自动备份匹配记录到 `rooms-merge-backups/<ts>-<slug>.json`;完成自动 `invalidateRooms` + 按受影响 (family, scene) 入队场景重算(`source='room-merge'`)。
|
|
210
|
-
- **面板 Room 管理子面板**(高权限开启后出现):注册表单(slug/名称/说明,走新 RPC `room-register`)、孤儿清单导出;合并/退役建议走 agent 工具(dryRun 预览更详细)。
|
|
211
|
-
- 端点面 46 → 47(`room-register`)。
|
|
212
|
-
|
|
213
|
-
## [0.20.0-beta.4] — 2026-10-01
|
|
214
|
-
|
|
215
|
-
> Room 分类管理第一船(**零漂移面**):注册表空 = 与 beta.3 行为逐字一致。merge/rename/retire 破坏性面将随 beta.5(dryRun 默认 true 保留一版)。
|
|
216
|
-
|
|
217
|
-
### 新增
|
|
218
|
-
|
|
219
|
-
- **Room 注册表(`rooms-registry.json` sidecar)**:预先注册策划好的 Room(slug/label/description);损坏/为空 → 降级回退纯自生长目录,绝不阻塞面板与标注器;上限 200 防刷。`rooms-get` 端点层合并:注册条目 count=0 也进词表并带 `source`/`label`,响应新增 `registry` 全量字段(客户端可选读)。
|
|
220
|
-
- **导出端点 `dsh-memory/rooms-export`**(kind=rooms|orphans,CSV 直出):rooms = 注册表∪自生长词表带计数;orphans = 无 Room 绑定的活跃记录清单(含候选/复查状态列)。
|
|
221
|
-
- **工具 `memory_room_admin`**(action=list|register):list 列注册表+自生长总览;register 预注册 Room(高权限门,幂等补全)——配合 `memory_room_review` 的逐个复查,agent 有了「注册→预标记→逐个确认」的完整分类管理入口。
|
|
222
|
-
- 客户端:Room chip 带「预注册/自生长」来源标示;孤儿 chip 带待复查语义。
|
|
223
19
|
|
|
224
20
|
## [0.20.0-beta.3] — 2026-10-01
|
|
225
21
|
|
|
@@ -227,7 +23,7 @@
|
|
|
227
23
|
|
|
228
24
|
- **记录面板 Room 分类改进**:①展开/收拢(收拢 = 头部 + 前 8 个高频 Room 预览,开合状态持久化);②展开态全量分页(每页 40,◀▶ 翻页),替代原先「仅显示前 40」的硬截断;③**孤儿记忆筛选**——首位「无绑定 · N」chip 只看没有任何 Room 绑定的记忆(`list-records` 新增 `untagged` 过滤通道,`rooms-get` 新增 `orphanCount`,与 Room 计数同口径);④筛选条件即时可见 + 一键清除。检索路径同款孤儿过滤。
|
|
229
25
|
|
|
230
|
-
## [0.20.0-beta.2] — 2026-10-01
|
|
26
|
+
## [0.20.0-beta.2] — 2026-10-01## [0.20.0-beta.2] — 2026-10-01
|
|
231
27
|
|
|
232
28
|
> dsh-0.2.0-beta 渠道 +1:反刍完整 context 优化(repo 软围栏/场景按项目迁移/闭环)。与 longtask(见 beta.1)同包,真机反馈合并收口。
|
|
233
29
|
|
|
@@ -237,7 +33,7 @@
|
|
|
237
33
|
- **场景按项目迁移(L2 repo 感知 + 重聚类)**:L2 整合 prompt 可见 repoKeyName/applicability——this-repo 记录不再并入跨项目场景;`scene_recluster_jobs` 作业队列 + ruminate 空闲档消费器(快照→删摘要投影→失败整体回滚,零新 LLM 通道);repo 归属修补后自动按 repoKey 反查受影响场景入队重算。
|
|
238
34
|
- **压缩闭环**:尾部压缩入队成功后 10 分钟去抖触发一次反刍(冲刷→L2→L3→relabel→重聚类消费),修掉「压缩记录滞留蒸馏桶」的断点。
|
|
239
35
|
|
|
240
|
-
## [0.20.0-beta.1] — 2026-10-01
|
|
36
|
+
## [0.20.0-beta.1] — 2026-10-01## [0.20.0-beta.1] — 2026-10-01
|
|
241
37
|
|
|
242
38
|
> dsh-0.2.0 线首个 beta 渠道发布(`dsh-0.2.0-beta` tag):长任务模式真机预览。除下述内容外,本版同时携带此前 parked 于 `[Unreleased]` 的全部 main 改动(激活槽位/来源锚点/证据读取器/记忆退场闭环/三轴冲突等)——它们已随 0.1.7 线发布,但 main 线尚无对应版本号。
|
|
243
39
|
|
package/ENGINEERING-NOTES.md
CHANGED
|
@@ -282,23 +282,6 @@ const stores = { scenes: { chat: { list: () => gate }, work: { list: () => gate
|
|
|
282
282
|
|
|
283
283
|
**如何验证**:`tsc -p tsconfig.test.json` exit 0;新加入的测试文件必须落在 include 里。
|
|
284
284
|
|
|
285
|
-
## C3. 卸除也是 TDD —— 先改测试(红)再卸实现(绿)
|
|
286
|
-
|
|
287
|
-
**现象**:longtask 全量撤除(beta.10)时**先卸实现、后补测试**,测试全程没红过;
|
|
288
|
-
同一批还漏跑了 `eslint`(F 清单明列的门)。lint 补跑揪出 **13 个 error**:
|
|
289
|
-
一半正是撤除残渣(删了实现、import/局部量还在),另一半是更早批次欠账
|
|
290
|
-
(`recluster.ts` 死接口、`rooms-registry.ts` 死 import)——lint 若当时跑,当场就暴露。
|
|
291
|
-
|
|
292
|
-
**根因**:把"卸除"当成了"删代码",忘了它同样是**行为变更**——TDD 的红-绿循环
|
|
293
|
-
对撤除一样成立,只是方向反过来:测试先表达**新预期**,再让实现追上。
|
|
294
|
-
|
|
295
|
-
**正确做法(卸除三步)**:
|
|
296
|
-
1. **先改测试表达新预期**:契约键数(48→46)、"端点不存在"断言、必传字段恢复
|
|
297
|
-
必传……跑一遍,应当**红**(实现还在);
|
|
298
|
-
2. **卸实现**到**回绿**;实现删除的每一步都以"哪条红还没变绿"为准,不凭感觉删;
|
|
299
|
-
3. **lint 是交付门不是可选步骤**(F 清单"eslint 0 error"):删除型改动必跑——
|
|
300
|
-
unused import/死变量就是"没卸干净"的自动探测器。
|
|
301
|
-
|
|
302
285
|
---
|
|
303
286
|
|
|
304
287
|
# D. 环境与工具链陷阱
|