@a9i5k4/dsh-auto-memory 3.0.0 → 3.1.0
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/README.md +30 -13
- package/README.zh-CN.md +30 -13
- package/docs/FRONTEND-CO-CREATION.md +191 -0
- package/docs/GM53-HOMEPAGE-PROMPT.md +323 -0
- package/docs/HANDBOOK.md +88 -52
- package/docs/HOMEPAGE-CONTENT-FOR-GM53.md +299 -0
- package/docs/PROMO-PROMPT-3.0.md +100 -0
- package/docs/USER-GUIDE.en.md +11 -11
- package/docs/USER-GUIDE.zh-CN.md +11 -11
- package/docs/WHITEPAPER.md +207 -0
- package/docs/screenshots/promo/promo-0-banner-v3.png +0 -0
- package/docs/screenshots/promo/promo-0-banner-v4.png +0 -0
- package/docs/screenshots/promo/promo-1b-auto-recall.png +0 -0
- package/lib/activation-host.js +69 -10
- package/lib/board-mode.js +1 -1
- package/lib/client.js +1697 -285
- package/lib/config-io.js +156 -0
- package/lib/context-bridge.js +3 -0
- package/lib/context-host.js +23 -10
- package/lib/degrade.js +385 -0
- package/lib/dsh-home.js +143 -0
- package/lib/episodic-store.js +142 -18
- package/lib/evidence-store.js +8 -1
- package/lib/fact-store.js +484 -43
- package/lib/hub-io.js +217 -0
- package/lib/index-sync.js +13 -1
- package/lib/index.js +1730 -202
- package/lib/intent-clean-safe.js +258 -40
- package/lib/l0-extract.js +231 -16
- package/lib/m4-corpus.js +8 -2
- package/lib/m7-index-sync-host.js +8 -1
- package/lib/memory-envelope.js +6 -1
- package/lib/memory-hub.js +164 -17
- package/lib/memory-index.js +4 -2
- package/lib/note-status-apply.js +118 -0
- package/lib/note-status.js +204 -0
- package/lib/procedure-store.js +333 -31
- package/lib/procedure-switch.js +38 -0
- package/lib/python-sidecar-client.js +314 -11
- package/lib/recall-fusion.js +83 -12
- package/lib/rules-edit.js +159 -0
- package/lib/semantic-decide.js +41 -8
- package/lib/semantic-js.js +51 -6
- package/lib/shadow-host.js +3 -5
- package/lib/skill-export-host.js +153 -0
- package/lib/skill-export.js +239 -0
- package/lib/storage-manage.js +6 -0
- package/lib/temporal-parse.js +191 -159
- package/lib/tier0-catalog.js +45 -3
- package/lib/wb-contract.js +198 -2
- package/lib/wb-sidecar.js +54 -3
- package/package.json +6 -2
- package/docs/internal/ACCEPT-35-LIVE.md +0 -143
- package/docs/internal/ACCEPTANCE-20260914.md +0 -90
- package/docs/internal/ARCH-REVIEW-BRIEF.md +0 -411
- package/docs/internal/ARCH-REVIEW-REQUEST.md +0 -201
- package/docs/internal/ARCH-REVIEW-ROUND2.md +0 -169
- package/docs/internal/ARCH-REVIEW-ROUND3.md +0 -206
- package/docs/internal/ART-DIRECTION-WIREFRAME.md +0 -181
- package/docs/internal/AUDIT-WB-GRAPH-FULL-20260916.md +0 -314
- package/docs/internal/CONCURRENCY-INVESTIGATION-20260917.md +0 -192
- package/docs/internal/CROSS-SESSION-SEARCH-PATH-DECISION.md +0 -72
- package/docs/internal/CROSS-SESSION-SEARCH-RESEARCH.md +0 -131
- package/docs/internal/CUA-VISION-FIX-NOTES.md +0 -78
- package/docs/internal/DECISIONS-20260914-SESSION.md +0 -269
- package/docs/internal/DESIGN-OVERHAUL-PRE-RESEARCH.md +0 -292
- package/docs/internal/DESIGN-P1-STATE-COMMIT-20260915.md +0 -219
- package/docs/internal/DIRECTION-CHECK-WB-GRAPH-20260916.md +0 -132
- package/docs/internal/FEEDBACK-TO-DSHAPI-RELAY.md +0 -13
- package/docs/internal/GH-DISCUSSION-5732-COMMENT.md +0 -74
- package/docs/internal/GPT-ACCEPTANCE-PROMPT-20260916.md +0 -352
- package/docs/internal/GPT-REVIEW-PROMPT.md +0 -216
- package/docs/internal/GROUP-DIGEST-SETUP.md +0 -62
- package/docs/internal/GROUP-LISTENER-SETUP.md +0 -49
- package/docs/internal/GROUP-WEBHOOK-SETUP.md +0 -93
- package/docs/internal/HANDOFF-TO-ZCODE.md +0 -168
- package/docs/internal/KICKOFF-P0.md +0 -254
- package/docs/internal/MASTER-PLAN-3.0.md +0 -411
- package/docs/internal/MEMORY-MUTATION-AND-INDEX-DESIGN.md +0 -85
- package/docs/internal/MERGE-CONFLICT-SCAN-20260914.md +0 -222
- package/docs/internal/NEXT-VERSION-TODO.md +0 -95
- package/docs/internal/OFFICIAL-DISCUSSION-DRAFT.md +0 -80
- package/docs/internal/PENDING-FIXES-20260916.md +0 -289
- package/docs/internal/RAG-KARPATHY-PROGRAM.md +0 -229
- package/docs/internal/RELEASE-PROCESS.md +0 -99
- package/docs/internal/REPORT-P0-NIGHTLY.md +0 -212
- package/docs/internal/REPORT-P5-ACCEPTANCE.md +0 -31
- package/docs/internal/REPORT-WB-GRAPH-NIGHTLY.md +0 -153
- package/docs/internal/REVIEW-WB-GRAPH-SELF.md +0 -81
- package/docs/internal/ROADMAP-20260917-WEEK.md +0 -305
- package/docs/internal/ROADMAP.md +0 -106
- package/docs/internal/RUN-P0-NIGHTLY.md +0 -227
- package/docs/internal/S10-CONSTRUCTION-HANDOFF-20260917.md +0 -175
- package/docs/internal/S10-GAPS-PLAIN-20260917.md +0 -125
- package/docs/internal/SEMANTIC-ARCHITECTURE-SPEC.md +0 -360
- package/docs/internal/SESSION-FILE-REPAIR-PROTOCOL.md +0 -90
- package/docs/internal/SUBAGENT-REPORT-ROUTING-PRE-RESEARCH.md +0 -261
- package/docs/internal/THREE-LAYER-CONTRACT.md +0 -210
- package/docs/internal/TODO-BACKLOG.md +0 -263
- package/docs/internal/TODO-GRAPH.html +0 -715
- package/docs/internal/TODO-GRAPH.html.bak-20260914-v2 +0 -493
- package/docs/internal/TODO-GRAPH.html.bak-20260915-alsfix +0 -710
- package/docs/internal/TODO-GRAPH.html.bak-20260915-p1 +0 -710
- package/docs/internal/TODO-GRAPH.html.bak-20260915-p6a-rev +0 -703
- package/docs/internal/TODO-GRAPH.html.bak-20260915-wshint +0 -710
- package/docs/internal/TODO-GRAPH.html.bak-20260916-batch +0 -715
- package/docs/internal/WB-FORMAT-CONVENTION.md +0 -112
- package/docs/internal/WB-GRAPH-DECISIONS-20260914.md +0 -71
- package/docs/internal/WB-GRAPH-INTEGRATION-PLAN.md +0 -386
- package/docs/internal/WB-GRAPH-RESEARCH-BRIEF.md +0 -118
- package/docs/internal/WB-GRAPH-RESEARCH-EXTERNAL.md +0 -228
- package/docs/internal/WB-GRAPH-RESEARCH-LOCAL.md +0 -190
- package/docs/internal/reviews/CLAIM-VERIFICATION-20260914.md +0 -56
- package/docs/internal/reviews/PLAN-gpt6astra-round2-20260914.md +0 -787
- package/docs/internal/reviews/REVIEW-gpt6astra-20260914.md +0 -112
- package/docs/internal/reviews/ROUND3-REVIEW-INTEGRATION-20260914.md +0 -230
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
# 白板格式约定(WB-FORMAT-CONVENTION)v1
|
|
2
|
-
|
|
3
|
-
> **效力**:白板/看板/handoff 账本的**格式与写入契约**。零代码,P0 级。任何改白板结构的实现(`lib/client.js` 渲染、sidecar schema、判据校验)都必须先符合本约定。
|
|
4
|
-
> **上位规范**:`SEMANTIC-ARCHITECTURE-SPEC.md` §8 与 **S10.1–S10.6**(wiki 层契约);接口与预算见 `THREE-LAYER-CONTRACT.md`。
|
|
5
|
-
> **边界(沿用既有拍板,不可越)**:**白板不建状态机**(只在"写入"一个门设防);不搬 dsh-graph 代码(只借范式);不引入跨目标依赖图;不复制 MRAgent 代码。
|
|
6
|
-
> **建立**:2026-09-14(用户批准 S10 后落地)。
|
|
7
|
-
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
## 1. 三种页面,三种时态
|
|
11
|
-
|
|
12
|
-
| 页面 | 时态 | 谁写 | 用途 |
|
|
13
|
-
| --- | --- | --- | --- |
|
|
14
|
-
| **PLAN 白板** | **现在时**(唯一事实) | 模型维护区 + 用户备注区 | 当前全貌、在做的事、卡在哪 |
|
|
15
|
-
| **handoff 账本** | 过去时(append-only 历史) | 模型 | 交接;其"任务状态"段**只指路**,不复制白板状态(消解双状态源) |
|
|
16
|
-
| **笔记(MEMORY.md / 日志)** | 累积时(知识) | 模型(自动沉淀) | 长期事实、决策、规则 |
|
|
17
|
-
|
|
18
|
-
**索引(index)不单独手写**:由上述页面**派生**(S10.2),与检索侧 Tier-0 目录同源。
|
|
19
|
-
|
|
20
|
-
---
|
|
21
|
-
|
|
22
|
-
## 2. 锚点契约(S10.1 落地)——**最重要的一条**
|
|
23
|
-
|
|
24
|
-
**规则**:白板页面里的每一个**卡片/小节**,必须在其标题行下方紧跟一行锚点:
|
|
25
|
-
|
|
26
|
-
```markdown
|
|
27
|
-
### 卡片标题
|
|
28
|
-
<!-- memory:mem_<32hex> -->
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
- `id` 必须匹配 `^mem_[0-9a-f]{32}$`(与 L0 抽取的 `MEM_ANCHOR_RE` 完全一致)。
|
|
32
|
-
- **id 怎么算(内容寻址,可复算)**:`mem_` + `sha256(workspaceKey + '\u0000' + 页面相对路径 + '\u0000' + 卡片标题)` 的前 32 位十六进制。
|
|
33
|
-
→ 卡片**重排/移动不影响 id**;**标题改名 = 新 id**(旧 id 走 supersede 留痕,不得默默消失)。
|
|
34
|
-
- **收益**:白板内容凭锚点**自动进入检索语料**(L0 抽取按锚点切条),无需任何新机制;同时白板保持"现在时视图"的定位,状态仍归记忆条目。
|
|
35
|
-
- **禁止**:手写裸 `mem_` 前缀的其他形态、复用同一个 id 指两个卡片、把锚点写在卡片正文中间。
|
|
36
|
-
|
|
37
|
-
---
|
|
38
|
-
|
|
39
|
-
## 3. 索引派生格式(S10.2)
|
|
40
|
-
|
|
41
|
-
每条一行,供 Tier-0 目录与人读:
|
|
42
|
-
|
|
43
|
-
```markdown
|
|
44
|
-
- [卡片标题](<页面路径>#mem_<32hex>) — 一句话摘要 · layer=whiteboard · status=current · 2026-09-14
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
派生规则:**同日多卡按白板内顺序**;`status` 取卡片状态(`current` / `superseded` / `retracted`);缺 `status` 视为 `current`(与 `isCurrentPre` 口径一致)。
|
|
48
|
-
|
|
49
|
-
---
|
|
50
|
-
|
|
51
|
-
## 4. 写入门("只在写入一个门设防")
|
|
52
|
-
|
|
53
|
-
只做**一件事**:**重写前后比对卡片集合**。
|
|
54
|
-
|
|
55
|
-
- 允许:移动、改状态、改正文、加卡。
|
|
56
|
-
- 不允许:卡片**凭空消失**。要"消失"必须显式移入 `archived` 集合并留痕(时间 + 原因)。
|
|
57
|
-
- 违反 → 拒绝写入并报出差异清单(不是静默接受)。
|
|
58
|
-
|
|
59
|
-
---
|
|
60
|
-
|
|
61
|
-
## 5. 人机分区(B4 的解法)
|
|
62
|
-
|
|
63
|
-
每张卡片分两区,**永不互相覆盖**:
|
|
64
|
-
|
|
65
|
-
```markdown
|
|
66
|
-
### 卡片标题
|
|
67
|
-
<!-- memory:mem_<32hex> -->
|
|
68
|
-
<!-- model -->
|
|
69
|
-
(模型维护:状态、进展、下一步)
|
|
70
|
-
<!-- /model -->
|
|
71
|
-
<!-- user -->
|
|
72
|
-
(你的备注;模型只读不改)
|
|
73
|
-
<!-- /user -->
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
模型整篇重写时**必须原样带回 `<!-- user -->` 段**。
|
|
77
|
-
|
|
78
|
-
---
|
|
79
|
-
|
|
80
|
-
## 6. lint 清单(S10.3)——试点期用这份逐条查
|
|
81
|
-
|
|
82
|
-
**零 token 可判的四类**(应做成自动检查,只读 + 留痕,不新增状态):
|
|
83
|
-
|
|
84
|
-
1. **孤立条目**:无入站引用(没有任何其他卡片/笔记引用它的 id 或标题)。
|
|
85
|
-
2. **陈旧**:`status=superseded|retracted`,或日期超出阈值仍标 `current`。
|
|
86
|
-
3. **被提及却无独立卡**:正文反复提到的概念没有自己的卡片。
|
|
87
|
-
4. **缺交叉引用**:相关卡片之间没有互链。
|
|
88
|
-
|
|
89
|
-
**需要 LLM 的一类(必须手动触发,不进自动路径)**:
|
|
90
|
-
|
|
91
|
-
5. **矛盾检测**:两条卡片给出互相冲突的结论。
|
|
92
|
-
|
|
93
|
-
> 纪律:lint **只报告**,不自动改。任何自动修正都会把白板变成状态机(违反边界)。
|
|
94
|
-
|
|
95
|
-
---
|
|
96
|
-
|
|
97
|
-
## 7. 答案归档回流(S10.5)
|
|
98
|
-
|
|
99
|
-
一次分析/检索的结论,必须能**一键**沉淀为:① 白板新卡(带锚点),或 ② 记忆条目(`memory_note_pre`),或 ③ handoff 账本一条。
|
|
100
|
-
|
|
101
|
-
**判据**:任何"只活在对话里"的结论,都算流程不合格——知识复利就断在这里。
|
|
102
|
-
|
|
103
|
-
---
|
|
104
|
-
|
|
105
|
-
## 8. 验收清单(能失败)
|
|
106
|
-
|
|
107
|
-
- [ ] 白板每张卡都有合法锚点(正则校验通过),**且由页面派生出的 index 与 Tier-0 目录条目一致**。
|
|
108
|
-
- [ ] 故意删掉一张卡 → 写入被拒并报出差异(**丢卡可检出**)。
|
|
109
|
-
- [ ] 卡片重排后 id 不变;改标题后 id 变且旧 id 有 supersede 留痕。
|
|
110
|
-
- [ ] 模型整篇重写后,`<!-- user -->` 段逐字节保留。
|
|
111
|
-
- [ ] 造一个孤立条目 → lint 报出;造一对矛盾结论 → lint(手动触发时)报出。
|
|
112
|
-
- [ ] 上述每一条都在 `tests/smoke/` 有对应套件,且**故意改坏实现时会红**。
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
# WB-GRAPH 拍板点 · 一页纸(2026-09-14 整理)
|
|
2
|
-
|
|
3
|
-
> **用途**:把散在 `WB-GRAPH-INTEGRATION-PLAN.md`(386 行)里的决策点集中到一页,你**直接在"结论"列写 yes/no 或回我一句**即可。
|
|
4
|
-
> **来源**:方案 §8(8 点)+ §10(看板化 7 点);**你的方向已定**:把看板/流程图 **combine 进自己的白板**,让用户实时看到进展与整个项目的流程(= §10 的看板化)。
|
|
5
|
-
> 状态约定:✅ 已定 / 🎯 待拍板 / ⏸ 冻结后再说。**P0-P1 不等这些拍板点,可立即做。**
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## A. 方案 §8 的 8 个拍板点
|
|
10
|
-
|
|
11
|
-
| # | 问题 | 选项 | 方案建议 | 影响 / 代价 | 结论 |
|
|
12
|
-
| --- | --- | --- | --- | --- | --- |
|
|
13
|
-
| A1 | **P2/P3 是否立项** | 立项 / 等冻结解除 / 不做 | P0-P1 立即做;**P2-P3 等后端冻结解除后按方案执行** | P2/P3 都改 `lib/index.js` 本体,冻结期内禁改引擎 | 🎯 |
|
|
14
|
-
| A2 | **sidecar 位置** | `memoryRoot/<ws>/handoff/` vs 工作区 `.dsh-memory/handoff/` | **前者**(与现有 handoffDir 同目录;GUI 白名单只放行 `.json`,备份/迁移自动覆盖) | 选错则备份/迁移要另写规则 | 🎯 |
|
|
15
|
-
| A3 | **静态纪律是否随下一版一次性更新** | 更新 / 不更新 | **更新**(把判据纪律写进固定 section,而不只在工具描述里) | 代价:全量会话一次缓存重建 | 🎯 |
|
|
16
|
-
| A4 | **工具命名** | `memory_expand_pre`/`memory_trace_pre`(对齐现有 14 工具 `*_pre` 惯例)vs 任务书直译 `expand_tag`/`trace_back` | **前者** | 命名一旦发布就难改(对外契约) | 🎯 |
|
|
17
|
-
| A5 | **是否进 2.6.0** | P0-P1 进 2.6.0 / 全部等 2.7.x | **P0-P1 进 2.6.0;P2-P3 进 2.7.x**(工具数变化 + 存储格式新增,宜独立回归窗口) | 影响发版节奏与回归范围 | 🎯 |
|
|
18
|
-
| A6 | **P1 水位骨架硬判据失败策略** | 照写 + 警示行 / 跳过写入 | **照写 + 警示行**(优先保证接续材料存在) | 跳过写入更"干净"但接续会缺材料 | 🎯 |
|
|
19
|
-
| A7 | **PLAN 判据强度** | 维持自由节名 + 最弱硬判据 P-H1 / 固定 PLAN 小节集 | **维持自由节名**(P7 老化和"全貌图"用途依赖节名灵活性) | 固定小节集会削弱老化机制 | 🎯 |
|
|
20
|
-
| A8 | **P2-6 条目锚点是否做** | 做 / 不做 | **做**(它是"按 id 展开"的地基;+30 行) | 涉及锚点写法与 `sanitizeReservedSyntax` 豁免约定 | 🎯 |
|
|
21
|
-
|
|
22
|
-
---
|
|
23
|
-
|
|
24
|
-
## B. 看板化(§10)的 7 个待解点 —— 你已定方向,这些必须一起解决
|
|
25
|
-
|
|
26
|
-
| # | 问题 | 方案给的解法 | 我的补充建议 | 结论 |
|
|
27
|
-
| --- | --- | --- | --- | --- |
|
|
28
|
-
| B1 | **丢卡风险(最严重)**:白板是整篇重写,看板丢卡 = 任务蒸发 | sidecar 重写前后**卡片集合对比**(只能移动/完成,不能消失)→ **看板化使 P2 从"可选"变"刚需"** | 与 P0-④ 的 `supersede` 同源:**任何"消失"都要留痕** | 🎯(P2 顺位因此上调) |
|
|
29
|
-
| B2 | **旧卡撑爆截断**:`carryText` 第 0 层 `slice(0,3000)` 被已完成卡挤占 | 列顺序约定 + 完成卡归档;**P7 老化(按标题关键词)对看板列名失配,需升级为列感知** | 归档 = 移到 sidecar 的 `archived` 集合,白板只留活跃卡 | 🎯 |
|
|
30
|
-
| B3 | **卡片腐烂**:状态漂移误导接续 | 卡片带接续链 `contSeq` 时间轴 + 刷新仪式逐卡对状态 + 僵尸卡注入时打过期标记 | 复用现有 `cont-seq.json` | 🎯 |
|
|
31
|
-
| B4 | **人机冲突(核心新问题)**:你改卡 vs 模型整篇重写互相覆盖 | (a) 只读 (b) 卡 id + 接口合并(依赖 P2-6,工程最大)(c) **卡片分「模型维护区 / 用户备注区」** | **从 (c) 起步**,稳定后再评估 (b) | 🎯 |
|
|
32
|
-
| B5 | **双状态源**:账本四段与看板并存 | 看板 = 现在时(唯一事实)、账本 = 过去时(历史);账本「任务状态」段改为指路 | 写进判据,由 P1 中间件校验 | 🎯 |
|
|
33
|
-
| B6 | **多任务混板** | 卡带接续链标记(Cue/contSeq),新窗口只展开自己链 | 与 §3 的 Cue 设计闭环 | 🎯 |
|
|
34
|
-
| B7 | **节奏** | P0 级零成本验证:**先出看板格式约定文档,真实工作区试两周**(模型守格式?接续取任务顺不顺?)再定 P1/P2 | 同意先试点 | 🎯 |
|
|
35
|
-
|
|
36
|
-
---
|
|
37
|
-
|
|
38
|
-
## C. 我的推荐组合(你只需说"按推荐来"或指出要改的点)
|
|
39
|
-
|
|
40
|
-
1. **A1**:P0-P1 立即;**A5**:P0-P1 进 2.6.0,P2-P3 进 2.7.x;**A2/A4/A6/A7/A8** 均按方案建议。
|
|
41
|
-
2. **B4 从 (c) 起步**(模型维护区 + 用户备注区),**B7 先试点两周**;**B1 使 P2 顺位上调**(与 P0-④ 的 supersede 同源,可同版实现)。
|
|
42
|
-
3. 界面渲染属 `lib/client.js`(**冻结外**),可与大排期合流;**引擎侧(P2/P3)等冻结解除**。
|
|
43
|
-
|
|
44
|
-
## D. 拍完我就做什么
|
|
45
|
-
|
|
46
|
-
| 拍板结果 | 立即动作 | 工程量 |
|
|
47
|
-
| --- | --- | --- |
|
|
48
|
-
| 按推荐 | ①写 `docs/HANDOFF-CRITERIA.md` 判据约定(P0,零代码)②实现 P1 判据校验中间件(≈190 行,咽喉 `writeHandoffLedger`/`writePlanSnapshot`)+ 回归(**工具数不变**) | 半天~1 天 |
|
|
49
|
-
| 允许 P2/P3 | 按方案 §5 改动清单执行(sidecar + 两工具;**工具数 14→16,三处测试硬锁同步**:`smoke-test.mjs:67` / mapi-paths 等) | 约 2 天 |
|
|
50
|
-
| 看板化 | 出「看板格式约定文档」→ 真实工作区试两周 → 再定交互方案 (a/b/c) | 试点期 |
|
|
51
|
-
|
|
52
|
-
---
|
|
53
|
-
|
|
54
|
-
## E. 2026-09-16 凌晨拍板结果(本轮已定,覆盖上方 🎯)
|
|
55
|
-
|
|
56
|
-
| # | 结论 | 备注 |
|
|
57
|
-
| --- | --- | --- |
|
|
58
|
-
| A1 | ✅ **P2/P3 立项**(用户选「立项」) | 3.0 主体收官,引擎冻结实质解除 |
|
|
59
|
-
| A2 | ✅ sidecar 放 `memoryRoot/<ws>/handoff/`(按建议) | |
|
|
60
|
-
| A3 | ✅ 静态纪律随下一版一次性更新(按建议) | |
|
|
61
|
-
| A4 | ✅ 工具命名 `memory_expand_pre`/`memory_trace_pre`(按建议) | |
|
|
62
|
-
| A5 | ✅ P0-P1 与 P2-P3 分期(按建议) | |
|
|
63
|
-
| A6 | ✅ 硬判据失败照写+警示行(按建议) | |
|
|
64
|
-
| A7 | ✅ PLAN 维持自由节名+最弱硬判据 P-H1(按建议) | |
|
|
65
|
-
| A8 | ✅ 条目锚点做(按建议) | |
|
|
66
|
-
| B4 | ✅ **裁定变更:搬 dsh-graph 接管看板层**(用户原话:「MIT协议说明可以直接将它的插件搬过来。按照原来的调研,直接让他接管记忆白板。让用户可以实时、可视化地看到项目从立项到现在的所有流程、弯路、版本更迭等事无巨细的信息;同时也可以让 AI 看到,作为接续的重要参考之一」) | 实测 v0.11.0 兼容性后用户拍板;**覆盖原「只借范式不搬代码」的自设边界**——MIT(`dsh-graph-host/LICENSE`)允许搬代码;MRAgent 无 LICENSE 的零复制约束不变。兼容性实测:Windows 原生 OK(v0.11 修复)、cordis 标准接线(name/inject/apply)、40 个 `graph_*` 工具与 14 个 `memory_*` 零重名、存储 `.dsh-graph/` 与 `memoryRoot/` 不重叠、运行时零 `@deepseek-ai/*` 硬 import |
|
|
67
|
-
| B7 | ✅ **跳过试点期直接实装**(用户原话:「跳过试点,直接实装,有bug,用户自然会报」) | WB-FORMAT-CONVENTION v1 已批准为实装依据,验收清单能失败断言兜底 |
|
|
68
|
-
| P1 范围 | ✅ **P1 全量**:判据校验中间件(两咽喉 ≈190 行)+ 锚点实装(A8)+ 丢卡门(B1)+ 静态纪律(A3),工具数不变 | 用户选「P1 全量(推荐)」 |
|
|
69
|
-
| 看板层 | ✅ dsh-graph 搬入接管:用户实时可视化全流程(立项/弯路/版本更迭)+ AI 可见作为接续参考 | 与 P1 判据门并行:P1 管写入质量,dsh-graph 管可视与流程展示 |
|
|
70
|
-
|
|
71
|
-
**立即动作序列(本窗口)**:①P1 判据校验中间件 + 锚点 + 丢卡门(`writeHandoffLedger`/`writePlanSnapshot` 两咽喉)→ ②dsh-graph v0.11.0 搬入(vendor 到本仓库 + profile 接线)→ ③全量回归 + 留痕 → 明晨交 GPT 验收。
|
|
@@ -1,386 +0,0 @@
|
|
|
1
|
-
# 白板接续整合方案:判据约束生成 + sidecar 结构化存储 + 两工具主动重建
|
|
2
|
-
|
|
3
|
-
> 预研综合子代理 R3 产出 · 2026-09-13。输入:`WB-GRAPH-RESEARCH-BRIEF.md`(任务书)、`WB-GRAPH-RESEARCH-LOCAL.md`(R1 本地审计)、`WB-GRAPH-RESEARCH-EXTERNAL.md`(R2 外部调研)。
|
|
4
|
-
> 所有本地锚点行号均为 2026-09-13 工作树实测抽验值(复核过 R1 报告,无漂移;个别表述按实际行更正,见 §0)。
|
|
5
|
-
> 边界约束(照抄任务书 Q5 执行):**不引入跨目标依赖图**;**不搬 dsh-graph 代码**(其 MIT 许可文本在 `dsh-graph-host/` 子包,仍只借范式);**MRAgent 仓库无 LICENSE——零代码复制,只借鉴行为范式**(硬约束而非偏好);**Tag 确定性映射优先**;**不破坏前缀缓存固定边界**;**最小改动导向**。
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## 0. 关键事实抽验记录(防幻觉声明)
|
|
10
|
-
|
|
11
|
-
对 R1 报告锚点逐一 grep/read 复核,结论:**无漂移**,以下为抽验后可安全引用的行号(本方案全文以此为准)。
|
|
12
|
-
|
|
13
|
-
| 锚点 | R1 记载 | 抽验结果 |
|
|
14
|
-
| --- | --- | --- |
|
|
15
|
-
| `writeHandoffLedger` | ~1667 | `lib/index.js:1667-1679` ✓(剔标题 1673、`writeFullRaw` 1674、返回 `{ok,path,clean}` 1675) |
|
|
16
|
-
| `writePlanSnapshot` | ~1620 | `lib/index.js:1620-1662` ✓(归档 1626-1631、P7 老化 1633-1656、`writeFullRaw` 1657、返回 1658) |
|
|
17
|
-
| `sanitizeForWrite` | ~6059 | `lib/index.js:6059` ✓(`WRITE_GATE_REASON` 6092、`sanitizeReservedSyntax` 6088-6090) |
|
|
18
|
-
| `buildContinueCarry` 四层与 18000 | ~2712-2774 | `lib/index.js:2677` 起;第0层 2712(plan 3000)、第1层 2713-2723(权重化 8000)、第2层 2726(20 条/700 字)、第3层 2727-2737、P5 锚点表 2744-2760、`carryText` 总预算 18000 在 **2774** ✓ |
|
|
19
|
-
| 动态快照 `handoffLedgerChars=800` | ~3619 | 配置定义 `lib/index.js:258`(plan 1200 在 256);注入点 ledgerPart **3619**、planPart 3617 ✓ |
|
|
20
|
-
| 静态纪律 / 动态快照分离 | ~7026 / ~6958 | 静态 section `dsh:auto-memory-pre-rules` 注册在 **7026-7032**(渲染 `renderMemoryStatic` 3693-3715,账本纪律行 3703);动态 context `dsh:auto-memory-pre` 注册在 **6958-7024** ✓ |
|
|
21
|
-
| `searchHandoffCorpus` | ~1689 | `lib/index.js:1689` ✓(账本 12 篇 1710、归档 20 篇 1714;`recall` scope 路由 3838-3844、scope 枚举 7169) |
|
|
22
|
-
| 账本三生成通路 | ~7078 / ~2002 / 刷新仪式 | 工具分支 `lib/index.js:7078-7091`(kind 枚举 7072、闸门 7079-7080、写 7083-7084);水位骨架 **2002-2024**(四段标题硬编码 2014-2017、`slice(0,4000)` 2018、写 2019);刷新仪式 **2502-2509**(kind=plan 2505、kind=handoff 四段式 2506)✓ |
|
|
23
|
-
| 四段权重表 | handoff-anchor-pre.js:18-23 | ✓(.35/.30/.20/.15;未知段 0.05 在 27;`parseHandoffLedgerPre` 41-58 fail closed) |
|
|
24
|
-
| 工具数 14 测试硬锁(R3 补查) | — | **三处**:`tests/smoke/smoke-test.mjs:67`、`tests/smoke/smoke-test-m3b3-pre.mjs:43`、`tests/smoke/smoke-test-context-observer.mjs:107` 均 `!== 14` 抛错 |
|
|
25
|
-
| G0 源码守卫 | smoke-test-handoff-pre.mjs 文件头 | ✓(文件头注释声明 G0 守卫"注入块存在且在日志段之前") |
|
|
26
|
-
| GUI 面板 fileQ 白名单 | ~2800 | `lib/index.js:2800` 严格白名单正则 ✓(`handoffPanelData` 2795 起) |
|
|
27
|
-
|
|
28
|
-
---
|
|
29
|
-
|
|
30
|
-
## 1. 总览
|
|
31
|
-
|
|
32
|
-
**一句话方案**:白板接续从"自由文本 + 平铺注入"升级为——**写入端用可计算判据把关(P1,咽喉在 `writeHandoffLedger`/`writePlanSnapshot`),存储端用 sidecar JSON 承载 Cue–Tag–Content 结构而 Markdown 仍是人读真相源(P2),检索端新增两个遍历工具让新窗口主动重建上下文而非被动收平铺(P3)**。
|
|
33
|
-
|
|
34
|
-
三层各自借鉴的范式来源(只借范式,零代码复制):
|
|
35
|
-
|
|
36
|
-
| 层 | 借鉴来源 | 借的是什么 |
|
|
37
|
-
| --- | --- | --- |
|
|
38
|
-
| 判据约束生成 | dsh-graph | **判据是写操作的前置门槛而非事后检查**;**登记与确认分离**(写入 ≠ 合格确认,确认是显式事件);**占位符过滤**防形式主义判据(R2:`core/ops.ts:1456-1486`、`schema/SCHEMA.md:87-91`) |
|
|
39
|
-
| sidecar 结构化存储 | dsh-graph | **"真相源 + 可重建投影"分工**:Markdown 是人读真相源,sidecar/事件流是机读派生件,允许损坏、可从真相源重建(R2:`schema/SCHEMA.md:298-299`) |
|
|
40
|
-
| 主动重建检索 | MRAgent | **遍历动作集**(正向 expand (key,tag)→content / 反向 content→(key,tag))、**剪枝纪律**((key,tag) 去重、返回条目帽、轮数帽、LLM 自判停止)写进工具描述(R2:`agent/tools.py:5-31`、`llm/controller.py:140-190`) |
|
|
41
|
-
|
|
42
|
-
dsh-graph 的状态机**不引入**:白板是单对话进度快照,dsh-graph 七阶段+非线性边表是为多目标管理设计的(R2 出入第 2 条);只取它"只在关键门口设防"的思想——白板只在"写入"一个门上设防。
|
|
43
|
-
|
|
44
|
-
---
|
|
45
|
-
|
|
46
|
-
## 2. 判据 Schema(对应 Q1 / 产出 1)
|
|
47
|
-
|
|
48
|
-
### 2.1 设计立场(先回答"参照什么")
|
|
49
|
-
|
|
50
|
-
任务书 Q1 猜想判据 schema 是 `criterion_type + evidence_required + confidence_level`——**R2 已证伪**:dsh-graph 的判据只是 `## 质量判据` 小节里的编号文本行,无任何字段化 schema(R2 出入第 1 条)。因此本节是**新设计**,参照 dsh-graph 的三个范式点(小节非空 + 占位过滤 + 确认事件),而非照搬其形态。
|
|
51
|
-
|
|
52
|
-
第二个关键差异:dsh-graph 的自然语言判据靠 review 执行者(另一个 LLM)判定,而白板的写入者就是 LLM 本人——**判据若也是自然语言,就退回"自评自确认"**(dsh-graph 明确禁止的模式:确认必须走显式路径)。所以白板判据取**可计算子集**(正则/行数/集合比较,零 LLM),自然语言质量层交给既有 prompt 纪律(`lib/index.js:3703`)。
|
|
53
|
-
|
|
54
|
-
### 2.2 判据定义表
|
|
55
|
-
|
|
56
|
-
**交接账本(kind=handoff)**
|
|
57
|
-
|
|
58
|
-
| ID | 段 | 判据 | 硬/软 | 判定方式(纯函数) | 不通过行为 |
|
|
59
|
-
| --- | --- | --- | --- | --- | --- |
|
|
60
|
-
| H1 | 全篇 | 四段标题齐全且逐字匹配:`## 任务状态` / `## 目标` / `## 已试方案与失败原因` / `## 进度与下一步` | **硬·拒绝** | `parseHandoffLedgerPre`(`lib/handoff-anchor-pre.js:41-58`)返回非 null 且四标题集合与权重表(同文件 18-23)相等。理由:标题错 = 权重化截断失效 + 注入端解析 null fail closed,下游全部退化 | 拒绝写入,返回缺失段清单 |
|
|
61
|
-
| H2 | 每段 | body 非空:≥1 非空行且合计 ≥20 字符 | **硬·拒绝** | 行过滤 + 长度统计 | 拒绝写入,指明空段 |
|
|
62
|
-
| H3 | 全篇 | 无占位符行:段 body 不得只含 `(待补充)`/`TODO`/`同上`/`略`/`N/A` | **硬·拒绝** | 占位符黑名单集合匹配(借 dsh-graph `CRITERIA_PLACEHOLDERS` 技巧) | 拒绝写入 |
|
|
63
|
-
| H4 | 全篇 | 总长 ≤ 8000 字符 | **硬·拒绝** | 长度(与 `sanitizeForWrite` 上限 7079 同源,先于它执行以免双重截断语义混乱) | 拒绝写入 |
|
|
64
|
-
| S1 | 每段 | ≤5 行 | 软·警告 | 行计数(prompt 纪律 3703 既有约定) | 写入成功 + report 标记 |
|
|
65
|
-
| S2 | 已试方案与失败原因 | 失败项写成「方案→失败原因」且保留报错关键词(`/失败|报错|错误|回滚|error|fail|bug/i`,与水位骨架 failLines 同源 `lib/index.js:2009`) | 软·警告 | 正则命中计数 | 同上 |
|
|
66
|
-
| S3 | 进度与下一步 | 下一步含可执行特征:路径分隔符 / 反引号代码 / 命令动词 | 软·警告 | 正则 | 同上 |
|
|
67
|
-
| S4 | 全篇 | 无临时信息(搜索结果、临时路径、工具报错原文) | 软·仅 diag | 低置信启发,先只记 diag 不提示模型 | 仅日志 |
|
|
68
|
-
|
|
69
|
-
**白板 PLAN(kind=plan)**——PLAN 是自由全貌文档(P7 老化按标题分类 `lib/index.js:1636-1645`,节名不固定),判据刻意保持最弱:
|
|
70
|
-
|
|
71
|
-
| ID | 判据 | 硬/软 | 判定方式 |
|
|
72
|
-
| --- | --- | --- | --- |
|
|
73
|
-
| P-H1 | 至少一个 `## ` 顶层节且非空(≥20 字符) | **硬·拒绝** | 与 P7 老化的节切分逻辑(1636)一致,防"全部节被老化走"的空白板(1645 兜底的上游化) |
|
|
74
|
-
| P-H2 | ≤ 200000 字符(7079 既有上限) | **硬·拒绝** | 长度 |
|
|
75
|
-
| P-S1 | 含至少一处前瞻内容(`下一步|待办|计划|todo/i` 命中) | 软·警告 | 正则 |
|
|
76
|
-
|
|
77
|
-
### 2.3 硬/软分层的理由
|
|
78
|
-
|
|
79
|
-
1. **硬判据必须是确定性可计算的**:拒绝写入后模型可以立即重试改写,误拒代价 = 一轮重试;结构完整性(标题、非空、占位符、长度)误拒率趋近于零。
|
|
80
|
-
2. **软判据是启发式**(可执行特征、失败项格式),误报率不可忽略;拦截会惩罚合格笔记,且**水位骨架通路(2002-2024)在素材为空时天然不满足 S2/S3**——拦它就违反 I4"绝不阻塞接续"(`docs/CONTINUITY-FLOW.md:165`,R1 实测代码注释 `lib/index.js:2715`)。
|
|
81
|
-
3. 分层与 dsh-graph 对齐:它也只有一个硬门(in_progress 三条件),其余全靠边表合法性——白板同理只在"结构完整性"一个门上设硬闸。
|
|
82
|
-
|
|
83
|
-
### 2.4 校验时机:写入前代码校验 + 写入后确认事件(结论)
|
|
84
|
-
|
|
85
|
-
结合 dsh-graph"登记与确认分离"范式,结论是**两层,生成中 self-check 不承担拦截职责**:
|
|
86
|
-
|
|
87
|
-
1. **写入前(代码,权威)**:校验中间件插在两个咽喉 `writeHandoffLedger`(1667)与 `writePlanSnapshot`(1620)入口——这两个函数覆盖全部三条生成通路(工具 7083-7084 / 水位骨架 2019 直调 / 刷新仪式产物走通路 1),在工具层(7078)校验则漏掉水位骨架直调通路(R1 §五已证)。硬判据不过 → 拒绝(`{ok:false, gate:'criteria'}`)。
|
|
88
|
-
2. **写入后(事件,确认)**:校验通过/带软警告的事实作为**确认事件**记录(P2 的 events.jsonl:`criteria.passed` / `criteria.warned`),供刷新仪式轮询(`handoffMaterialStamp` 2524)、GUI 面板(2795)与图重建消费。登记(写入)与确认(判据事件)分离——"写了"不等于"合格",防止模型用一次敷衍写入骗过仪式等待。
|
|
89
|
-
3. **生成中 self-check(prompt,引导)**:只在 `memory_note_pre` 工具描述(7069)与刷新仪式 prompt(2506)补一句"写前自检四段齐全、无占位符"。它不承担拦截:LLM 自评不可靠,且生成中校验需要额外轮次,违背最小改动与 I4。
|
|
90
|
-
|
|
91
|
-
### 2.5 校验报告 JSON Schema(机器可读产物,P1 中间件返回值契约)
|
|
92
|
-
|
|
93
|
-
```json
|
|
94
|
-
{
|
|
95
|
-
"$id": "dsh-auto-memory/ledger-criteria-report-v1",
|
|
96
|
-
"type": "object",
|
|
97
|
-
"required": ["version", "target", "hard_pass", "hard", "soft"],
|
|
98
|
-
"properties": {
|
|
99
|
-
"version": { "const": "ledger_criteria_v1" },
|
|
100
|
-
"target": { "enum": ["handoff", "plan"] },
|
|
101
|
-
"hard_pass": { "type": "boolean" },
|
|
102
|
-
"hard": {
|
|
103
|
-
"type": "array",
|
|
104
|
-
"items": { "type": "object", "required": ["id", "pass"], "properties": {
|
|
105
|
-
"id": { "enum": ["H1", "H2", "H3", "H4", "P-H1", "P-H2"] },
|
|
106
|
-
"pass": { "type": "boolean" },
|
|
107
|
-
"missing": { "type": "array", "items": { "type": "string" },
|
|
108
|
-
"description": "缺失/违规明细,直接拼进拒绝文案供模型改写" },
|
|
109
|
-
"detail": { "type": "string" } } }
|
|
110
|
-
},
|
|
111
|
-
"soft": {
|
|
112
|
-
"type": "array",
|
|
113
|
-
"items": { "type": "object", "required": ["id", "pass"], "properties": {
|
|
114
|
-
"id": { "enum": ["S1", "S2", "S3", "S4", "P-S1"] },
|
|
115
|
-
"pass": { "type": "boolean" },
|
|
116
|
-
"detail": { "type": "string" } } }
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
判据规则本体(阈值、标题集、黑名单词表)同样以 JSON 常量固化在新模块 `lib/ledger-criteria-pre.js` 中并被文档引用,**文档与代码单一来源**。
|
|
123
|
-
|
|
124
|
-
---
|
|
125
|
-
|
|
126
|
-
## 3. 图数据模型(对应 Q2 / 产出 2)
|
|
127
|
-
|
|
128
|
-
### 3.1 设计立场:Tag 是边属性,不是节点
|
|
129
|
-
|
|
130
|
-
任务书把 Cue–Tag–Content 当"三种节点"——**R2 已证伪**(出入第 5 条):MRAgent 论文与代码中 Tag 均为边属性(三元组 (cue, tag, content),代码为 `Link` 的 tag 字段 + 双侧 tag 倒排索引)。本方案按 **Cue 节点 + Tag 边属性 + Content 节点** 三元设计(dsh-graph 不提供任何图遍历参照,见出入第 4 条,本节遍历语义全部对齐 MRAgent)。
|
|
131
|
-
|
|
132
|
-
### 3.2 映射表:当前字段 → 图元素
|
|
133
|
-
|
|
134
|
-
| 当前字段/工件(实测锚点) | 图元素 | 类型 | 来源与确定性 |
|
|
135
|
-
| --- | --- | --- | --- |
|
|
136
|
-
| 工作区身份 + 接续序号 contSeq(2765-2770) | Cue(session) | 节点 | 确定性:接续链自带 |
|
|
137
|
-
| 账本篇 `handoff-<ts>.md`(命名 1669) | Content(ledger) | 节点 | 确定性:文件即节点,文件名时间戳即 id |
|
|
138
|
-
| 白板 `PLAN.md`(planPath 1574) | Content(board) | 节点 | 确定性:文件即节点 |
|
|
139
|
-
| 账本四段(标题硬编码 2014-2017) | Content(entry) | 节点 | 确定性:`parseHandoffLedgerPre` 切段(handoff-anchor-pre.js:41-58) |
|
|
140
|
-
| 段内 `- ` 条目 | Content(leaf) | 节点 | 确定性:行级切分(复用 `parseMemoryItemsPre` 思路,`lib/l0-extract-pre.js:54`) |
|
|
141
|
-
| 段类型(任务状态/目标/已试失败/进度) | Tag `type:state|goal|dead-end|progress` | **边属性** | **确定性映射**:段→tag 一一对应 |
|
|
142
|
-
| 条目中的文件路径/模块名/组件名 | Cue(key) | 节点 | 确定性:路径与标识符正则抽取(对齐 MRAgent "speaker 自动入 keyword" 的做法,R2:`agent/agent.py:845-848`) |
|
|
143
|
-
| 条目主题词 | Tag `topic:<短语>` | 边属性 | 确定性优先(条目首名词短语);模型抽取仅作 P3 后的可选增强,prompt 要求"直接取原文词、不得改写"(MRAgent `KEYWORD_SYSTEM_PROMPT` 同款纪律) |
|
|
144
|
-
| dead-end 条目的方案名 | Tag `dead-end:<方案名>` | 边属性 | 确定性:从「方案→失败原因」句式的方案侧提取 |
|
|
145
|
-
| 归档链 `archive/PLAN-<ts>.md`、同秒 `-b` 后缀(1672、464-467) | prev_version 边 | 有向边 | 确定性:文件名字典序=时间序 |
|
|
146
|
-
| Tag/Cue 挂载 | (Content, Tag) + (Cue, Content) 两条边,tag 为边属性 | 边 | 写入时确定性生成 |
|
|
147
|
-
|
|
148
|
-
**Content 的界定(Q2 第三问)**:一条 state 条目是 Content,一条 dead-end **也是 Content**——二者只是 tag 集合不同(`type:state` vs `type:dead-end` + `dead-end:<方案>`)。类型区分完全由 tag 承担,不引入节点子类型,expand 时按 tag 过滤即可。
|
|
149
|
-
|
|
150
|
-
### 3.3 存储设计:sidecar JSON(P2),Markdown 仍是人读真相源
|
|
151
|
-
|
|
152
|
-
```
|
|
153
|
-
<projectDir>/handoff/ # projectDir = memoryRoot/<ws>(projectDirOf, lib/index.js:1504-1515)
|
|
154
|
-
├── PLAN.md # 人读真相源(不动)
|
|
155
|
-
├── handoff-<ts>.md # 人读真相源(不动)
|
|
156
|
-
├── archive/… # 归档(不动)
|
|
157
|
-
├── index.json # 【P2 新增】派生缓存:条目表 + tag/cue 倒排 + 判据报告摘要
|
|
158
|
-
└── events.jsonl # 【P2 可选】append-only 事件:written / criteria.passed / criteria.warned / aged
|
|
159
|
-
```
|
|
160
|
-
|
|
161
|
-
- `index.json` 结构:`{version, ws, rebuilt_at, entries: [{id, kind, source, section, tags[], cues[], text_preview, mtime, criteria}], by_tag: {tag: [entry_id]}, by_cue: {cue: [entry_id]}, versions: {entry_id: [前版/归档]}}`。
|
|
162
|
-
- **可重建性**(dsh-graph 范式落地):`index.json` 完全由 PLAN.md + `listHandoffLedgers`(1682)白名单文件经同一套确定性解析重建——sidecar 丢失不丢信息,只损失增量性能;`events.jsonl` 缺失时退化为"以文件存在为准"。
|
|
163
|
-
- **Q5 固定/动态切分**(本节回答一半,量化见 §6):
|
|
164
|
-
- **不进任何固定边界**:index.json/events.jsonl 纯落盘派生件,永不直接注入。
|
|
165
|
-
- **固定边界内(字节稳定,禁止每轮变化)**:静态纪律 section(7026 注册、3693-3715 渲染);工具 schema 块(发布级稳定)。
|
|
166
|
-
- **动态但受控**:动态快照白板/账本段(3617/3619,预算 1200/800);接续 `carryText`(2774,18000,首条 user 消息,单次接续内写定不变);工具返回值。
|
|
167
|
-
- **边界约束落实**:图只覆盖"本工作区白板语料",节点间**不建跨目标依赖边**(无 depends_on 之类);`prev_version` 是唯一的非 (Cue/Tag/Content) 边,且只连归档链。
|
|
168
|
-
|
|
169
|
-
---
|
|
170
|
-
|
|
171
|
-
## 4. 遍历工具接口(对应 Q3 / 产出 3)
|
|
172
|
-
|
|
173
|
-
### 4.1 两个工具的 I/O schema
|
|
174
|
-
|
|
175
|
-
命名采用现有 14 工具的 `*_pre` 惯例(备选名见 §8 拍板点 4):
|
|
176
|
-
|
|
177
|
-
**`memory_expand_pre`**(正向:给定 tag 展开其下 Content,对应 MRAgent `edges_by_tag` 的 Cue→Tag→Content)
|
|
178
|
-
|
|
179
|
-
```jsonc
|
|
180
|
-
// 输入
|
|
181
|
-
{ "tag": "string (required, 如 type:dead-end / topic:登录流程 / dead-end:重试机制)",
|
|
182
|
-
"limit": "integer (optional, 默认 10, 硬帽 20)" }
|
|
183
|
-
// 输出
|
|
184
|
-
{ "ok": true, "tag": "…",
|
|
185
|
-
"entries": [ { "id": "…", "kind": "ledger|plan|archive", "section": "已试方案与失败原因",
|
|
186
|
-
"preview": "≤120 字", "source": "handoff-20260913-101500.md",
|
|
187
|
-
"mtime": 1780000000000, "cues": ["src/handoff.js"],
|
|
188
|
-
"criteria": "passed|warned|unknown" } ],
|
|
189
|
-
"total": 17, "truncated": true, "remaining": 7,
|
|
190
|
-
"hint": "可用 memory_trace_pre(id) 回溯该条目的 cue/tag/邻居与归档版本" }
|
|
191
|
-
```
|
|
192
|
-
|
|
193
|
-
**`memory_trace_pre`**(反向:给定条目回溯其 Cue/Tag 与邻居,对应 MRAgent `query_event_keywords` + `query_event_context` 的合并)
|
|
194
|
-
|
|
195
|
-
```jsonc
|
|
196
|
-
// 输入
|
|
197
|
-
{ "id": "string (required, index.json 条目 id 或 mem_<32hex> 锚点)",
|
|
198
|
-
"neighbors": "boolean (optional, 默认 true)", "neighbor_limit": "integer (optional, 默认 6, 硬帽 10)" }
|
|
199
|
-
// 输出
|
|
200
|
-
{ "ok": true, "entry": {…同上全量},
|
|
201
|
-
"cues": ["…"], "tags": ["type:dead-end", "dead-end:重试机制", "topic:…"],
|
|
202
|
-
"neighbors": [ {…同 tag/同 cue 邻居, 按段类型权重排序} ],
|
|
203
|
-
"versions": ["archive/PLAN-20260912-180000.md"],
|
|
204
|
-
"hint": "…" }
|
|
205
|
-
```
|
|
206
|
-
|
|
207
|
-
### 4.2 剪枝设计(白板场景的剪枝信号)
|
|
208
|
-
|
|
209
|
-
对齐 MRAgent 的防爆炸硬约束(8 轮 MAX_ROUNDS / 50 调用 MAX_TOOL_CALLS / (key,tag) 去重 / RERANK_LIMIT=20),按白板规模缩比:
|
|
210
|
-
|
|
211
|
-
| # | 信号 | 机制 | 对齐来源 |
|
|
212
|
-
| --- | --- | --- | --- |
|
|
213
|
-
| 1 | **判据确认状态** | 排序权重:`passed` > `warned` > `unknown`(P2 判据事件直接消费) | dsh-graph 确认事件范式 |
|
|
214
|
-
| 2 | **段类型权重** | dead-end .35 > progress .30 > goal .20 > state .15——**直接复用** `lib/handoff-anchor-pre.js:18-23` 权重表 | 既有资产 |
|
|
215
|
-
| 3 | **(tag) 去重** | 工具描述写死"不要重复展开同一 tag";引擎在会话内维护已展开 tag 集合 | MRAgent "Do NOT repeat the same key–tag combination"(`agent/tools.py:9`) |
|
|
216
|
-
| 4 | **单返回条目帽** | limit 默认 10 / 硬帽 20,超出按权重排序截断并返回 `truncated/remaining`(白板图小、无 embedding,**不做** MRAgent 的 cosine rerank) | MRAgent RERANK_LIMIT=20 的白板版 |
|
|
217
|
-
| 5 | **轮数硬帽** | 工具描述建议"单次接续唤醒遍历调用 ≤4 次、总调用 ≤8 次";如实说明:白板版无 MRAgent 那样的代码级强制闸(其 MAX_ROUNDS 在 controller 里,白板走宿主工具循环没有等价拦截点),靠提示 + hint 引导 | MRAgent MAX_ROUNDS=8 / MAX_TOOL_CALLS=50 的缩比 |
|
|
218
|
-
| 6 | **停止条件** | LLM 自判"已能续上工作"即停(answer/navigate 二分),写进工具描述 | MRAgent Stop(x, ℋ) 判定 |
|
|
219
|
-
|
|
220
|
-
### 4.3 入口 Cue 的获取方式(自动提取,零额外轮次)
|
|
221
|
-
|
|
222
|
-
1. **接续场景(主路径)**:入口 Cue 已经在上下文里——`carryText` 第0层白板 + 第1层账本(2712/2723)中可见的文件路径、组件名、主题词就是确定性可见的 Cue;工具描述指示模型"从已注入白板/账本中取路径/模块名/主题词作为入口 tag/cue",**不需要新增 LLM 抽取步骤**(对齐 MRAgent 把种子证据 + key 候选塞进首轮的做法,R2:`agent/agent.py:539-545`)。
|
|
223
|
-
2. **白板 Cue 头**:`index.json` 的 session Cue(工作区 + contSeq)与 PLAN/账本头部时间戳(系统头 1674)。
|
|
224
|
-
3. **非接续场景**:当前轮用户消息分词 → `by_tag`/`by_cue` 规范化包含匹配(MRAgent `evaluate_relations_over_graph` 的白板极简版:只做规范化相等/包含,不做 Jaccard);零命中 → 回落 `memory_recall_pre(scope=handoff)` 词法检索(3838-3844 原路径不动,即内建回退)。
|
|
225
|
-
|
|
226
|
-
### 4.4 与 MRAgent 工具集对齐表(以代码为准,含论文-代码命名出入)
|
|
227
|
-
|
|
228
|
-
| MRAgent 工具(代码 `agent/tools.py` 为准) | 论文名(如有出入) | 白板对应 | 取舍说明 |
|
|
229
|
-
| --- | --- | --- | --- |
|
|
230
|
-
| `edges_by_tag` | 论文误称 `query_tag_events`(出入 6) | `memory_expand_pre` | 保留 (tag) 展开语义;去掉 note 参数与 LLM 决策注记(白板图小不需要)、去掉 embedding rerank |
|
|
231
|
-
| `query_event_keywords` | 同名 | `memory_trace_pre`(cues/tags 部分) | 反向遍历 |
|
|
232
|
-
| `query_event_context` | 同名 | `memory_trace_pre`(neighbors/versions 部分) | "上下文"在白板场景=同 tag 邻居 + 归档版本链 |
|
|
233
|
-
| `query_topic_events` | 同名 | `memory_expand_pre(tag="topic:*")` | 复用同一工具,不新开 |
|
|
234
|
-
| `query_conversation_time` | 同名 | **不需要** | 条目自带文件名时间序(464-467) |
|
|
235
|
-
| `query_personal_information` / `query_personal_aspect` | 同名 | **不适用** | 边界约束:单对话白板无人物/跨目标维度 |
|
|
236
|
-
| (问题入口 `extract_question_keys` + `evaluate_relations_over_graph`) | — | 无独立工具 | Cue 匹配内联在 `memory_expand_pre` 的 tag 解析中(确定性包含匹配) |
|
|
237
|
-
|
|
238
|
-
dsh-graph 侧对齐:**无可借鉴的遍历工具**(出入 4)——它只有 `graph_validate`/`graph_rebuild` 式的对账接口,本方案只取其"派生件可重建"思想(§3.3),两工具的接口语义全部来自 MRAgent。
|
|
239
|
-
|
|
240
|
-
---
|
|
241
|
-
|
|
242
|
-
## 5. 改动清单(对应 Q4 / 产出 4)
|
|
243
|
-
|
|
244
|
-
> 行数为改动量估计(含测试)。**P0-P1 可立即做**;**P2-P3 需用户拍板后才能动——后端冻结期间禁改引擎**(P2/P3 均修改 `lib/index.js` 引擎本体),此边界为硬约束,见 §8 拍板点 1。
|
|
245
|
-
|
|
246
|
-
### P0 判据文档约定(零代码,可立即做)
|
|
247
|
-
|
|
248
|
-
| # | 改动 | 位置 | 依赖 | 改动量 |
|
|
249
|
-
| --- | --- | --- | --- | --- |
|
|
250
|
-
| P0-1 | 新建 `docs/HANDOFF-CRITERIA.md`:§2.2 判据表 + 正反例账本各一篇 + 与权重表(handoff-anchor-pre.js:18-23)/静态纪律(3703)的引用关系 | 新文件 | 无 | 0 行代码(~100 行文档) |
|
|
251
|
-
|
|
252
|
-
### P1 判据校验中间件(小改动,可立即做;R1 六项全数采纳)
|
|
253
|
-
|
|
254
|
-
| # | 改动 | 位置(抽验行号) | 依赖 | 改动量 |
|
|
255
|
-
| --- | --- | --- | --- | --- |
|
|
256
|
-
| P1-1 | 新建 `lib/ledger-criteria-pre.js`:纯函数、零 IO、fail closed(仿 handoff-anchor-pre.js 契约);复用 `parseHandoffLedgerPre`(41-58)判段,实现 §2.2 全部判据,返回 §2.5 report | 新文件 | P0-1(判据表为规格源) | ~100 行 |
|
|
257
|
-
| P1-2 | `writeHandoffLedger` 入口插校验(1674 `writeFullRaw` 之前):硬不过返回 `{ok:false, gate:'criteria', report}` | `lib/index.js:1667-1679` | P1-1 | ~5 行 |
|
|
258
|
-
| P1-3 | `writePlanSnapshot` 入口插校验(1657 之前):P-H1/P-H2 | `lib/index.js:1620-1662` | P1-1 | ~5 行 |
|
|
259
|
-
| P1-4 | 工具层拒绝文案:7080 处按 `gate==='criteria'` 分支,仿 `WRITE_GATE_REASON`(6092)模式返回可执行改写指引(缺哪些段/哪个段空/占位符行原文) | `lib/index.js:7078-7091` | P1-2/P1-3 | ~10 行 |
|
|
260
|
-
| P1-5 | 水位骨架 fail-soft:2019 调用点对 criteria 拒绝的策略=**照写 + diag + 骨架内加警示行**(骨架标题 2014-2017 硬编码天然过 H1/H2,仅素材全空时可能触发;绝不阻塞接续,I4) | `lib/index.js:2002-2024` | P1-2 | ~5 行 |
|
|
261
|
-
| P1-6 | 回归测试:仿 `tests/smoke/smoke-test-handoff-anchor-pre.mjs`(fixture 锁定 + 源码守卫);**同步 `tests/smoke/smoke-test-handoff-pre.mjs` 的 G0 守卫**(文件头声明的注入块存在性断言,插校验后需复核) | `tests/smoke/` | P1-1..5 | ~60 行 |
|
|
262
|
-
| P1-7(随 P1-4 顺带) | 工具描述(7069 kind=handoff/plan 文本)与刷新仪式 prompt(2506)各补一句"写前自检四段齐全、无占位符"(§2.4 第 3 层) | `lib/index.js:7069`、`2506` | P0-1 | ~4 行(字符串字面量) |
|
|
263
|
-
|
|
264
|
-
小计:~190 行(新模块 100 + 引擎 15 + 文案 4 + 测试 60 + 文档 100)。
|
|
265
|
-
依赖关系:P0-1 → P1-1 → {P1-2, P1-3} → {P1-4, P1-5} → P1-6。**不改任何注入/检索/缓存路径。**
|
|
266
|
-
|
|
267
|
-
### P2 sidecar 结构化存储(中等改动,**需拍板**)
|
|
268
|
-
|
|
269
|
-
| # | 改动 | 位置(抽验行号) | 依赖 | 改动量 |
|
|
270
|
-
| --- | --- | --- | --- | --- |
|
|
271
|
-
| P2-1 | 写入钩子:`writeHandoffLedger` 返回值处(**1675**)与 `writePlanSnapshot` 返回值处(**1658**)落盘 sidecar——每账本同名 `.json` + 汇总 `handoff/index.json`;含确定性 tag/cue 映射函数与 `criteria.passed/warned` 事件追加;P1 的 report 随条目入 sidecar | `lib/index.js:1675`、`1658` | P1 全部 | ~80 行 |
|
|
272
|
-
| P2-2 | 重建函数:`rebuildHandoffIndex()`——从 PLAN.md + `listHandoffLedgers`(1682)白名单文件确定性重建 index.json(sidecar 丢失自愈) | `lib/index.js`(新方法,挂在 1689 附近) | P2-1 | ~40 行 |
|
|
273
|
-
| P2-3 | 结构化检索:`searchHandoffCorpus`(1689-1719)升为 tag/段级命中优先、词法兜底;`recall` scope 路由(3838-3844)与 scope 枚举(**7169**)扩展 | `lib/index.js:1689`、`3838-3844`、`7169` | P2-1/P2-2 | ~40 行 |
|
|
274
|
-
| P2-4 | 注入端导航层:P5 锚点表区(2744-2760)扩展一行 tag 摘要("白板 tag 地图:type:dead-end×7、topic:登录×3…"),保持"同输入同字节"(2740 既有性质);总预算 18000(2774)不变 | `lib/index.js:2744-2760` | P2-1 | ~20 行 |
|
|
275
|
-
| P2-5 | GUI:`handoffPanelData`(2795)增加 tag/段视图;fileQ 严格白名单(**2800**)放行 `.json` | `lib/index.js:2795-2874` | P2-1 | ~30 行 |
|
|
276
|
-
| P2-6(可选) | 条目锚点:写入时为节/条目生成 `<!-- memory:mem_<32hex> -->`,复用 `parseMemoryItemsPre`(l0-extract-pre.js:54);注意 `sanitizeReservedSyntax`(6088-6090)的豁免写法约定 | P2-1 同点 | P2-1 | ~30 行 |
|
|
277
|
-
|
|
278
|
-
小计:~210-240 行。依赖:P1 → P2-1/P2-2 → {P2-3, P2-4, P2-5, P2-6}。现有 Markdown 读者(`readLatestHandoff` 1603 / `listHandoffLedgers` 1682 / `findLatestGlobalHandoff` 1584 / `handoffMaterialStamp` 2524)在 sidecar 增量方案下**全部原样兼容**(R1 §六结论,抽验属实)。
|
|
279
|
-
|
|
280
|
-
### P3 遍历工具 + 唤醒逻辑(检索端,**需拍板**)
|
|
281
|
-
|
|
282
|
-
| # | 改动 | 位置(抽验行号) | 依赖 | 改动量 |
|
|
283
|
-
| --- | --- | --- | --- | --- |
|
|
284
|
-
| P3-1 | 注册 `memory_expand_pre` / `memory_trace_pre`(defineTool,schema 见 §4.1;handler 读 index.json,缺失时 fail-soft 回落 `searchHandoffCorpus`) | `lib/index.js` 工具注册区(`memory_recall_pre` 7166 附近) | P2-1/P2-2 | ~100 行(两工具含描述与剪枝纪律文案) |
|
|
285
|
-
| P3-2 | 唤醒逻辑:`buildContinueCarry` 第3层 guide(2727-2737)加一句"白板已结构化:可用 memory_expand_pre/memory_trace_pre 按 tag 主动重建,先于通读第3层" | `lib/index.js:2727-2737` | P3-1 | ~5 行 |
|
|
286
|
-
| P3-3 | **测试硬锁同步(必须项)**:工具数 14 → 16,三处 `!== 14` 全部改 `!== 16`——`tests/smoke/smoke-test.mjs:67`、`tests/smoke/smoke-test-m3b3-pre.mjs:43`、`tests/smoke/smoke-test-context-observer.mjs:107`;另补两工具行为测试与"sidecar 缺失回落"测试 | 三处测试文件 | P3-1 | ~60 行 |
|
|
287
|
-
|
|
288
|
-
小计:~165 行。依赖:P2 → P3-1 → {P3-2, P3-3}。**警告**:漏改任一处工具数断言 = smoke 测试直接红;回退(移除工具)时同样要同步回 14。
|
|
289
|
-
|
|
290
|
-
### 明确不动清单(承接 R1 §六,抽验确认)
|
|
291
|
-
|
|
292
|
-
`lib/client.js` 接续链(`refreshOldSession` 2117 / `waitForRefresh` 2145 / `executeContinue` 2167-2213,`carryText` 注入在 2201);宿主 `hostAutoContinue`(2264-2335,prompt 注入 2305);`renderMemoryStatic`(3693-3715)字节;`DEFAULT_PROMPT_LAYERS`;水位骨架结构(2002-2024 除 P1-5 五行外);`water-window-pre.js` / `l0-extract-pre.js` 纯函数。**不引入跨目标依赖图、不建状态机**(dsh-graph 状态机范式评估后放弃,见 §1)。
|
|
293
|
-
|
|
294
|
-
---
|
|
295
|
-
|
|
296
|
-
## 6. 前缀缓存影响评估(产出 5)
|
|
297
|
-
|
|
298
|
-
I1 不变量:静态纪律层字节稳定(`renderMemoryStatic` 注册为 `ctx.systemPrompt.section`,7026-7032),一切随状态变化的内容只进动态快照(`ctx.systemPrompt.context`,6958-7024,user-role 追加历史尾部、project() 去重)。逐级评估:
|
|
299
|
-
|
|
300
|
-
| 级 | 触碰点 | 对字节稳定 prefix 的影响 | 破坏程度 |
|
|
301
|
-
| --- | --- | --- | --- |
|
|
302
|
-
| P0-1 | 纯文档 | 不进任何 prompt | **零** |
|
|
303
|
-
| P1 | 写盘路径 + 工具返回值 | 校验只发生在落盘前;拒绝文案只出现在当轮工具结果(对话动态部分);工具描述/仪式文案(P1-7)变更属**发布版本级一次性字节变化**(工具块在请求头部、全版本会话一致,非每轮击穿) | **零每轮影响**;发布时一次性质变,与前缀缓存语义兼容 |
|
|
304
|
-
| P2 | 落盘 sidecar + 注入端 | index.json/events.jsonl **永不进固定边界**;进入上下文的只有:①动态快照白板/账本段(3617/3619,本来就在动态层、已有预算与频率控制 6971-7019);②锚点表扩展(2744-2760,位于接续首条 user 消息内、单次接续写定后不变,且保持"同输入同字节")。动态快照每轮增量 ≈ tag 摘要行 200-400 字节,且受 800/1200 预算与既有指纹节流约束 | **≈零**;动态层本来就被设计为可变 |
|
|
305
|
-
| P3 | 工具注册 + 唤醒提示 | 新工具进工具块(发布级一次性变化);`memory_expand_pre`/`memory_trace_pre` 返回值只进当轮 messages 动态部分;唤醒提示加在第3层 guide(2727-2737,carryText 内,接续会话内写定)。静态 section(7026)字节 **0 次改动** | **≈零**(发布级一次性 + 动态区按需) |
|
|
306
|
-
|
|
307
|
-
**量化结论**:P0-P3 对静态纪律 section 的每轮字节稳定性的破坏次数均为 **0**;全方案唯一的固定边界触碰是 P1-7 的工具描述文本与 P3 的工具块增员——两者都是**发布版本级一次性**变化(等价于任意一次版本升级),不存在"每轮内容变化击穿 system prompt 前缀"的路径。若用户拍板把判据纪律写进静态纪律 3703(§8 拍板点 3),则增加一次版本级更新,仍非每轮击穿。
|
|
308
|
-
|
|
309
|
-
---
|
|
310
|
-
|
|
311
|
-
## 7. 风险与回退(产出 6)
|
|
312
|
-
|
|
313
|
-
### 7.1 成本预估(以 MRAgent 实测为锚,如实转述)
|
|
314
|
-
|
|
315
|
-
MRAgent 实测(R2,LongMemEval 每 sample 含构建+检索):**token 全场最低**(118k,对比 Mem0 245k ~ LangMem 3268k),但**墙钟仅第二快**(586s,Mem0 533s 更快)——省 token 靠"只注入相关子图",代价是遍历轮数增多。白板场景的对应预估:
|
|
316
|
-
|
|
317
|
-
- 图规模小(单工作区可见账本 ≤60 篇 + 20 篇归档窗口,1710/1714;条目数十级),`memory_expand_pre` 单次 = 一次 index.json 读取 + 内存过滤,<5ms,无 LLM rerank;
|
|
318
|
-
- token 增量:主动重建会话预估 **+1~2 轮工具往返、+1~3k token**(对比现状"通读 18000 carryText"多数情况下反而更省——MRAgent 的省 token 机制正是"只注入相关子图");
|
|
319
|
-
- 延迟增量:每次遍历一轮工具往返(秒级);接续唤醒首轮**零额外轮次**(入口 Cue 从已注入材料确定性提取,§4.3);
|
|
320
|
-
- P1 误拒重试:最坏 +1 轮(硬判据仅结构检查,重试率预期低);刷新仪式期间被拒会推迟 `handoffMaterialStamp` 变化——仪式 prompt(2506)已给足四段格式、拒绝文案给出缺失清单,旧会话可当轮重试;风险窗口在仪式超时前,P1-6 测试需覆盖该场景。
|
|
321
|
-
|
|
322
|
-
### 7.2 回退方案(每层独立回退)
|
|
323
|
-
|
|
324
|
-
| 故障 | 回退路径 | 代价 |
|
|
325
|
-
| --- | --- | --- |
|
|
326
|
-
| sidecar 丢失/损坏/版本不识别 | `rebuildHandoffIndex()`(P2-2)从 Markdown 真相源重建;重建失败 → 一切读者回落 Markdown 平铺(现状路径全部保留:1603/1682/3838-3844) | 零信息损失(dsh-graph"投影可重建"范式) |
|
|
327
|
-
| `memory_expand_pre`/`memory_trace_pre` 失败或行为异常 | 回落 `memory_recall_pre(scope=handoff)` 词法检索 + carryText 平铺(原路径未删);极端情况不注册两工具即回到 P2 状态(**同步把三处测试断言改回 14**) | 功能降级,接续不受阻(I4) |
|
|
328
|
-
| P1 判据误拦 | 配置开关 `criteriaGate: false` 一键 fail-open 回到现状(校验仍执行但只记 diag) | 一轮配置热更 |
|
|
329
|
-
| P2 注入扩展异常 | 锚点表区沿用既有 try/catch fail-soft 模式(2744-2760 现状即如此),失败自动跳过、材料回落平铺 | 零阻塞 |
|
|
330
|
-
| 判据事件流膨胀 | events.jsonl 仅 append 且按账本篇滚动;超限只保留最近 N 篇的事件 | 磁盘可控 |
|
|
331
|
-
|
|
332
|
-
---
|
|
333
|
-
|
|
334
|
-
## 8. 拍板点清单(列给用户)
|
|
335
|
-
|
|
336
|
-
1. **P2/P3 是否立项**:后端冻结期间禁改引擎——P2/P3 均改 `lib/index.js` 本体;P0-P1 可立即做。建议:P0-P1 立即,P2-P3 冻结解除后按本方案执行。
|
|
337
|
-
2. **sidecar 位置**:`memoryRoot/<ws>/handoff/`(与现有 handoffDir 同目录,1573,GUI 白名单只放行 `.json`,备份/迁移自动覆盖)vs 工作区 `.dsh-memory/handoff/`。**建议前者**。
|
|
338
|
-
3. **静态纪律 3703 是否随下一版本一次性更新**(把判据纪律写进固定 section,而不只是工具描述/仪式 prompt):I1 允许版本级更新,代价是全量会话一次缓存重建。**建议更新**(判据与注入权重表本就同源)。
|
|
339
|
-
4. **工具命名**:`memory_expand_pre` / `memory_trace_pre`(对齐现有 14 工具 `*_pre` 惯例,**建议**)vs 任务书原名 `expand_tag` / `trace_back`(对齐 MRAgent 语义直译)。
|
|
340
|
-
5. **是否进 2.6.0**:P0-P1 体积小(~190 行)可进;P2-P3 建议 2.7.x 单独发版(工具数变更 + 存储格式新增,宜独立回归窗口)。
|
|
341
|
-
6. **P1 水位骨架硬判据失败策略**:照写 + 警示行(**建议**,I4 优先)vs 跳过写入(更干净但接续材料缺失)。
|
|
342
|
-
7. **PLAN 判据强度**:维持自由节名 + 最弱硬判据 P-H1(**建议**,P7 老化依赖节名灵活性)vs 固定 PLAN 小节集(伤及 P7 老化与"全貌图"用途)。
|
|
343
|
-
8. **P2-6 条目锚点是否做**:它是图化"按 id 展开"的地基,但涉及锚点写法与 `sanitizeReservedSyntax` 豁免约定,+30 行。建议随 P2 做。
|
|
344
|
-
|
|
345
|
-
---
|
|
346
|
-
|
|
347
|
-
## 9. 与任务书的出入记录(R2 八条如何影响本方案)
|
|
348
|
-
|
|
349
|
-
| # | R2 出入 | 对本方案的影响 |
|
|
350
|
-
| --- | --- | --- |
|
|
351
|
-
| 1 | dsh-graph 判据**无字段化 schema**(只是小节内文本行 + 确认事件) | §2 判据 Schema 是**新设计**(可计算硬/软分层 + report JSON Schema),参照其"小节非空 + 占位过滤 + 确认事件"范式而非照搬;任务书 Q1 的 `criterion_type/evidence_required/confidence_level` 猜想不采纳 |
|
|
352
|
-
| 2 | dsh-graph 状态机**只有一个判据门**(in_progress),迁移图远比线性链复杂 | 白板**不建状态机**,只在"写入"一个门设防(P1);§1 明确放弃该范式 |
|
|
353
|
-
| 3 | graph_handoff 的"环境事实"段是**硬编码 dogfood 文案**,非可配置 API | 不设计"环境事实自动采集";接续 guide(2727-2737)维持确定性文案,P3 只追加一句工具提示 |
|
|
354
|
-
| 4 | dsh-graph **没有通用图遍历工具**(只有 validate/rebuild 对账类接口) | §4 两个遍历工具的接口语义**只**来自 MRAgent;dsh-graph 仅贡献"派生件可重建"思想(§3.3 / §7.2) |
|
|
355
|
-
| 5 | MRAgent 的 **Tag 是边属性不是节点**(第三类节点实为 Topic/Persona) | §3 映射表按 Cue 节点 + Tag 边属性 + Content 节点设计;topic 作可选 tag 而非强制第三节点;**严禁**在实现中把 Tag 建成节点 |
|
|
356
|
-
| 6 | 论文与代码工具命名/参数不一致(`query_tag_events` 实为 `edges_by_tag`;"每轮 10 次"实为总会话 50 帽;语义层已被移除) | §4.4 对齐表以**代码为准**;§4.2 轮数帽标注为"提示级"而非硬闸(白板无 MRAgent controller 级拦截点);不假设存在语义层 |
|
|
357
|
-
| 7 | 成本数字:token 最低但**墙钟非最快**(Mem0 更快) | §7.1 如实转述并给出白板场景预估:省 token 依赖"只注入相关子图",延迟代价为秒级工具往返,接续唤醒首轮零额外轮次 |
|
|
358
|
-
| 8 | MRAgent 仓库**无任何 LICENSE**(默认版权保留) | 硬约束升级为"零代码复制":§4 两工具的 schema/文案/实现全部原创撰写,只复用行为语义(去重、条目帽、自判停止);dsh-graph 虽 MIT 在子包属实,仍按任务书只借范式不搬代码 |
|
|
359
|
-
|
|
360
|
-
(R2 第 9 条核实无误项——阶段名、目录/事件流、7 工具分组、三段式构建流程——本方案未依赖其错误面,无额外影响。)
|
|
361
|
-
|
|
362
|
-
---
|
|
363
|
-
|
|
364
|
-
## 附:Q1-Q5 答案索引
|
|
365
|
-
|
|
366
|
-
- **Q1 判据集**:§2(硬=结构完整性 H1-H4/P-H1/P-H2 拒绝,软=质量密度 S1-S4/P-S1 警告;时机=写入前代码校验 + 写入后确认事件,self-check 仅 prompt 引导)。
|
|
367
|
-
- **Q2 图映射**:§3(Cue=会话身份+条目内路径/组件名+交接时刻关键词;Tag=边属性、段类型/主题词确定性映射优先;Content=白板条目,state 与 dead-end 同为 Content 仅 tag 集合不同;存储=sidecar JSON,Markdown 为人读真相源)。
|
|
368
|
-
- **Q3 遍历落地**:§4(入口 Cue 自动提取自已注入材料;两工具 `memory_expand_pre`/`memory_trace_pre`;剪枝=判据确认状态+段类型权重+(tag) 去重+条目帽+轮数提示帽+自判停止)。
|
|
369
|
-
- **Q4 优先级**:§5(P0 零代码 → P1 中间件 ~190 行 → P2 sidecar ~240 行 → P3 工具 ~165 行;P0-P1 立即、P2-P3 待拍板)。
|
|
370
|
-
- **Q5 边界**:§1/§3.3/§6/§9(无跨目标依赖边;零代码搬运;Tag 确定性映射优先;固定边界零每轮击穿)。
|
|
371
|
-
|
|
372
|
-
---
|
|
373
|
-
|
|
374
|
-
## 10. 延伸评估:白板升级为任务看板(2026-09-13,用户提出,仅预研不立项)
|
|
375
|
-
|
|
376
|
-
用户意向:PLAN 白板 → 任务看板式安排,让白板从接续专用变为用户可读的人机交互面(契合 README 项目定位)。影响与待解点:
|
|
377
|
-
|
|
378
|
-
1. **接续收益**:恢复点显式化(卡片状态+下一步),不再靠语义拼现状;判据更可计算(每卡必有状态与下一步)。
|
|
379
|
-
2. **丢卡风险(最严重)**:白板是整篇重写式更新,自由文本丢句无感、看板丢卡=任务蒸发。解法=sidecar 重写前后卡片集合对比(只能移动/完成,不能消失)——看板化使 P2 从可选变刚需。
|
|
380
|
-
3. **旧卡撑爆截断**:carryText 第0层 slice(0,3000)(2712)会被已完成卡挤占。解法=列顺序约定+完成卡归档;**P7 老化(1633-1656,按标题关键词)对看板列名失配,需升级为列感知**。
|
|
381
|
-
4. **卡片腐烂**:状态漂移误导接续(重做已完成/跳过已解决)。解法=卡片带接续链 contSeq 时间轴 + 刷新仪式逐卡对状态 + 僵尸卡注入时打过期标记。
|
|
382
|
-
5. **人机冲突(核心新问题)**:用户改卡 vs 模型整篇重写互相覆盖。三选一:(a)只读 (b)卡 id+接口合并(依赖 P2-6 锚点,工程最大)(c)卡片分模型维护区/用户备注区(推荐起步)。
|
|
383
|
-
6. **双状态源**:账本四段与看板并存。解法=看板=现在时(唯一事实)、账本=过去时(历史),账本「任务状态」段改为指路;写进判据。
|
|
384
|
-
7. **多任务混板**:卡带接续链标记(Cue/contSeq),新窗口只展开自己链——与 §3 Cue 设计闭环。
|
|
385
|
-
|
|
386
|
-
节奏建议:P0 级零成本验证——先出看板格式约定文档,真实工作区试两周(模型守格式?接续取任务顺不顺?)再定 P1/P2 与交互方案 (a/b/c)。界面渲染属 client.js(冻结外),可与大排期合流;引擎侧等拍板。
|