@a9i5k4/dsh-auto-memory 3.0.0 → 3.0.1
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 +19 -7
- package/README.zh-CN.md +19 -7
- package/docs/FRONTEND-CO-CREATION.md +191 -0
- package/docs/GM53-HOMEPAGE-PROMPT.md +323 -0
- package/docs/HOMEPAGE-CONTENT-FOR-GM53.md +299 -0
- package/docs/PROMO-PROMPT-3.0.md +100 -0
- package/docs/USER-GUIDE.en.md +2 -2
- package/docs/USER-GUIDE.zh-CN.md +2 -2
- package/docs/WHITEPAPER.md +207 -0
- package/docs/internal/ARCHITECTURE-FOR-ZCODE-20260920.md +397 -0
- package/docs/internal/ART-DIRECTION-DEEPSEEK-20260920.md +351 -0
- package/docs/internal/ART-DIRECTION-WIREFRAME.md +191 -181
- package/docs/internal/ART-DIRECTION-WIREFRAME.md.bak-superseded +181 -0
- package/docs/internal/BATTLE-PLAN-20260917.md +871 -0
- package/docs/internal/FEATURE-INVENTORY.md +531 -0
- package/docs/internal/G-SERIES-EXECUTION-20260917.md +248 -0
- package/docs/internal/G3-DESIGN-20260918.md +82 -0
- package/docs/internal/G3-DISK-FORMAT-GAP-20260919.md +92 -0
- package/docs/internal/HANDOFF-TO-ZCODE-20260920.md +309 -0
- package/docs/internal/HERMES-DATA-VERIFICATION-20260919.md +120 -0
- package/docs/internal/HERMES-LEGACY-STATUS-20260919.md +74 -0
- package/docs/internal/ISSUE-55-58-VERIFICATION-20260918.md +175 -0
- package/docs/internal/ISSUE10-FIX-EXECUTION-20260919.md +389 -0
- package/docs/internal/ISSUE10-PLAN-20260919.md +254 -0
- package/docs/internal/ISSUE10B-FORENSICS-20260919.md +468 -0
- package/docs/internal/ISSUE9-PURGE-AND-R1-PLAIN-20260919.md +150 -0
- package/docs/internal/ISSUE9-RESIDUAL-FORENSICS-20260919.md +114 -0
- package/docs/internal/LESSON-TO-CANDIDATE-STATUS-20260919.md +79 -0
- package/docs/internal/MEMORY-GOVERNANCE-20260917.md +309 -0
- package/docs/internal/PRE-FRONTEND-CHECKLIST-20260919.md +705 -0
- package/docs/internal/PRE-FRONTEND-CHECKLIST-20260919.md.bak-s10 +649 -0
- package/docs/internal/PROCEDURAL-MEMORY-AND-APPROVAL-DESIGN-20260918.md +225 -0
- package/docs/internal/PROGRESS-20260917.md +93 -0
- package/docs/internal/PROMPT-GAP-AUDIT-20260920.md +128 -0
- package/docs/internal/R1-DEGRADE-AUDIT-20260918.md +163 -0
- package/docs/internal/R1-READABILITY-FORENSICS-20260919.md +127 -0
- package/docs/internal/R2-EVIDENCE-DEEP-AUDIT-20260918.md +140 -0
- package/docs/internal/R3-DEGRADE-LEDGER-DESIGN-20260918.md +138 -0
- package/docs/internal/R4-RECALL-QUOTA-PLAN-20260918.md +218 -0
- package/docs/internal/RESUME-20260918.md +171 -0
- package/docs/internal/RESUME-20260919.md +104 -0
- package/docs/internal/RHINELAB-TO-DEEPSEEK-FEASIBILITY.md +198 -0
- package/docs/internal/ROADMAP-20260917-WEEK.md +134 -0
- package/docs/internal/S10-CONSTRUCTION-HANDOFF-20260917.md +13 -3
- package/docs/internal/S10-GAP-INVENTORY-20260917.md +239 -0
- package/docs/internal/T6-EXECUTION-20260920.md +130 -0
- package/docs/internal/TELEMETRY-EFFECT-REPORT-DESIGN-20260918.md +146 -0
- package/docs/internal/THESIS-GAP-ANALYSIS-20260918.md +89 -0
- package/docs/internal/THESIS-OUTLINE-20260918.md +147 -0
- package/docs/internal/THREE-LAYER-CONTRACT.md +10 -1
- package/docs/internal/UPSTREAM-ISSUE-PR-TRIAGE-20260919.md +297 -0
- package/docs/internal/UPSTREAM-ISSUES-3RD-AUDIT-20260920.md +104 -0
- package/docs/screenshots/promo/promo-0-banner-v3.png +0 -0
- package/lib/activation-host.js +63 -9
- package/lib/board-mode.js +1 -1
- package/lib/client.js +892 -27
- package/lib/config-io.js +156 -0
- package/lib/context-bridge.js +3 -0
- package/lib/context-host.js +16 -9
- package/lib/degrade.js +385 -0
- package/lib/dsh-home.js +143 -0
- package/lib/episodic-store.js +52 -2
- package/lib/evidence-store.js +8 -1
- package/lib/fact-store.js +21 -2
- package/lib/index-sync.js +13 -1
- package/lib/index.js +1507 -158
- 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 +127 -12
- package/lib/memory-index.js +4 -2
- package/lib/note-status-apply.js +118 -0
- package/lib/note-status.js +196 -0
- package/lib/procedure-store.js +84 -3
- package/lib/python-sidecar-client.js +29 -3
- 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 +1 -1
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
# RESUME · 压缩后从这里开始(2026-09-18 22:40 固化)
|
|
2
|
+
|
|
3
|
+
> **这份文件是压缩上下文后的唯一入口。** 读完它 + 它指定的 2 份文档,即可无缝继续。
|
|
4
|
+
> 用户操作:压缩 → 说「开始」→ agent 读本文件 → 直接开工第 1 批。
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 0. 30 秒状态
|
|
9
|
+
|
|
10
|
+
| 层 | 状态 |
|
|
11
|
+
|---|---|
|
|
12
|
+
| **L 层**(底层:界限+接线) | ✅ **全部完工并冻结**(L1–L7 + G4/M3) |
|
|
13
|
+
| **M 层** | ✅ M1 完工 · ✅ M2-lint 完工 · ⏸ **M2 的 G3 部分待做** |
|
|
14
|
+
| **M2.5**(检索质量) | ✅ a/b 完工,c 已撤销 |
|
|
15
|
+
| **R 系列**(降级留痕) | ✅ R1→R2→R2-E1→R3→R3-② 全绿 |
|
|
16
|
+
| **R4**(检索区分度+配额) | 📋 **已立项,未开工** ← 用户已批准第 1 批可立即做 |
|
|
17
|
+
| **S 层** | ⬜ 未开工(大项目) |
|
|
18
|
+
|
|
19
|
+
**全量回归**:`PASS 119 / FAIL 0 / TIMEOUT 0`(160.3s)
|
|
20
|
+
**宿主重启**:`lib/` 有改动(`wb-contract-pre.js` 等),**需用户自行重启**才生效。
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## 1. ★ 压缩后必须读的两份文档(按顺序)
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
① docs/internal/BATTLE-PLAN-20260917.md ← 执行顺序的唯一权威(755 行)
|
|
28
|
+
② docs/internal/R4-RECALL-QUOTA-PLAN-20260918.md ← 下一批工作的完整设计(含行号证据)
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
**只在需要时读**:
|
|
32
|
+
- `docs/internal/G3-DESIGN-20260918.md` —— G3 状态写入设计(待用户拍板 2 个边界)
|
|
33
|
+
- `docs/internal/MEMORY-GOVERNANCE-20260917.md` §8 —— G3 的权威纲领
|
|
34
|
+
- `docs/internal/WB-FORMAT-CONVENTION.md` —— 白板格式契约
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## 2. ★ 下一步做什么(用户已批准,可直接开工)
|
|
39
|
+
|
|
40
|
+
### 第 1 批(低风险,用户原话「分层显示可以先做」)
|
|
41
|
+
|
|
42
|
+
| 项 | 内容 | 关键位置 |
|
|
43
|
+
|---|---|---|
|
|
44
|
+
| **R4-B 分层展示** | `memory_recall_pre` 输出按层分组(结论层/流水层),**不改排序只改呈现** | `index.js:6093`(语义臂输出行)、`index.js:5977`(词法臂输出行) |
|
|
45
|
+
| **R4-留痕补齐** | `py→C2→词法` 三级降级**每一跳都 record**(现只有 diag) | `index.js:5867`(择优逻辑)、`:5882`(现为 `diag(...)`,应改 `_degradeSink.record(...)`)、`:5883`(只有外层失败才记录) |
|
|
46
|
+
|
|
47
|
+
**用户痛点的原话**:「区分度有点问题,更加有含金量的结论和每一次都有的日志会混在一起」
|
|
48
|
+
「如果它会有回退或者不可用的状态,记得及时在日志里面报告」
|
|
49
|
+
|
|
50
|
+
### 第 2 批
|
|
51
|
+
|
|
52
|
+
- **R4-配额锁死**(★ 用户实测踩到的真 bug):先写套件**复现** → 判定设计vs缺陷 → 修
|
|
53
|
+
```
|
|
54
|
+
:227 COMPACT_THROTTLE_MS = 10 分钟
|
|
55
|
+
:4655 ensureBudget 超限 → 整理循环(3 轮)
|
|
56
|
+
:4744 allowFold = !(last && now - last < THROTTLE)
|
|
57
|
+
:4832 this._lastCompactAt[layer] = Date.now() ← 整理成功后无条件上锁
|
|
58
|
+
:4689 「整理过但没腾够」路径同样上锁
|
|
59
|
+
```
|
|
60
|
+
**倾向判定为缺陷**:节流应只防"反复整理",不该阻止**合法写入**
|
|
61
|
+
- **R4-配额测量闭环**:复用 R3 degrade 台账采集 `state.tier0Meta.dropped/perLayer` 趋势
|
|
62
|
+
(数据**已在采集**:`index.js:5099`,只是没用来调参)
|
|
63
|
+
|
|
64
|
+
### 第 3 批(随 G3)· 第 4 批(单独评估)
|
|
65
|
+
|
|
66
|
+
- R4-A 作废条目「返回但标记」+ `supersededBy` 指针
|
|
67
|
+
- R4-C 层次保底配额(**会改排序,风险最高**)
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## 3. ⏸ 待用户拍板的 3 件事(BATTLE-PLAN §7)
|
|
72
|
+
|
|
73
|
+
| # | 事项 | agent 倾向 |
|
|
74
|
+
|---|---|---|
|
|
75
|
+
| 5 | `superseded` 的可见后果:**剔除**(现状)/ **降权** / **返回但标记** | **返回但标记**(用户原话「明确告诉 AI 这是过时的结论」) |
|
|
76
|
+
| 6 | `supersededBy` 算不算违反 S10.4「不新建状态源」 | **不算** —— 是 `status` 的**伴生字段**,非平行账本 |
|
|
77
|
+
| 2 | S1.3 literature 理念:(a) 多处可挂载 / (b) 设置内切换归属 | 待定(S 层才需) |
|
|
78
|
+
|
|
79
|
+
> **问题 5 与 G3 是同一决策的两面**,定完即可实施 G3。
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## 4. 铁律(压缩后仍需遵守)
|
|
84
|
+
|
|
85
|
+
### 用户硬性规则(不可违)
|
|
86
|
+
1. **严禁停止/重启 dsh web 宿主**(3080)—— 会截断思维链。改完 host 代码**只告知用户自行重启**,agent 绝不 `Stop-Process`/`Start-Process`
|
|
87
|
+
2. **严禁无差别杀进程**(`Get-Process node | Stop-Process`)—— DSH 自身跑在 node 上
|
|
88
|
+
3. **代码改动一律留在 pre 线**,不提交/不推送/不发布
|
|
89
|
+
4. **写文件分块**(一次工具调用不要写过大内容)
|
|
90
|
+
5. **编辑前备份**(`*.bak-YYYYMMDD-<tag>`);`edit` 的 `replace_all` 后必须核对命中数 + `node --check`
|
|
91
|
+
6. **无 BOM**
|
|
92
|
+
|
|
93
|
+
### 项目铁律(血泪换来的)
|
|
94
|
+
1. **fail-soft 路径必须返回可观察的成功/失败信号**(如 `persisted` 字段)—— 静默降级 = 结构性缺陷
|
|
95
|
+
2. **「源码接线正确 + 诊断数据齐全 + 回归全绿」不能证明功能存在** —— 必须**实机验证真实副作用**(如落盘文件真的出现)
|
|
96
|
+
3. **守卫判据键若同时存在于 `DEFAULT_CONFIG`**,判据必须读**磁盘原文**而非合并后 `config`(否则结构性恒真/恒假;已犯两次:M8、M9)
|
|
97
|
+
4. **判据纪律:宁可漏判,不可误伤**(漏判=维持现状;误伤=合法内容被改变行为路径)
|
|
98
|
+
5. **语义引擎铁律**:JS 引擎=默认形态,Python=发烧者进阶项,**两套可互换、严禁互相依赖**
|
|
99
|
+
6. **观测面三层边界**:`diag()`=过程日志 / `debugView()`=各域局部状态 / `degrade`=跨臂统一台账
|
|
100
|
+
|
|
101
|
+
### 每步固定收尾序列
|
|
102
|
+
```
|
|
103
|
+
备份 → 改码 → node --check → 写新套件 → 跑该套件(看红)
|
|
104
|
+
→ 变异演示(确认真红) → 还原(SHA256 校验) → 跑全量回归(0 失败) → 留痕
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
## 5. 当前代码状态(关键行号,均本次实测)
|
|
110
|
+
|
|
111
|
+
### 已改动的文件(pre 线未提交)
|
|
112
|
+
```
|
|
113
|
+
lib/tier0-catalog-pre.js ← M1:TIER0_ANCHOR_ID_RE + renderCatalogLinePre 两种渲染
|
|
114
|
+
lib/wb-sidecar-pre.js ← M1:buildSidecarEntryPre 增 layer/status + sidecarEntryToCatalogItemPre
|
|
115
|
+
lib/wb-contract-pre.js ← M2:lintWhiteboardPre(43/43)+ WB_LINT_* 常量
|
|
116
|
+
lib/recall-fusion-pre.js ← M2.5b:layer 臂
|
|
117
|
+
lib/l0-extract-pre.js ← M2.5a:L0 质量门
|
|
118
|
+
lib/index.js ← R 系列:degrade 台账接线
|
|
119
|
+
lib/client.js ← L 层
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### 本次新增的套件
|
|
123
|
+
```
|
|
124
|
+
tests/smoke/smoke-test-m1-contract-line-pre.mjs (55/55)
|
|
125
|
+
tests/smoke/smoke-test-m2-lint-pre.mjs (43/43)
|
|
126
|
+
tests/smoke/smoke-test-m25a-l0-qualitygate-pre.mjs(39)
|
|
127
|
+
tests/smoke/smoke-test-m25b-layer-arm-pre.mjs (37)
|
|
128
|
+
tests/smoke/smoke-test-r2e1-evidence-guard-pre.mjs(20)
|
|
129
|
+
tests/smoke/smoke-test-r3-degrade-pre.mjs (77)
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### 本次新增的备份
|
|
133
|
+
```
|
|
134
|
+
lib/tier0-catalog-pre.js.bak-20260918-M1
|
|
135
|
+
lib/wb-sidecar-pre.js.bak-20260918-M1
|
|
136
|
+
lib/wb-contract-pre.js.bak-20260918-M2
|
|
137
|
+
lib/index.js.bak-20260918-M25b / -R2ev / -M9cap
|
|
138
|
+
lib/l0-extract-pre.js.bak-20260918-M25a
|
|
139
|
+
lib/recall-fusion-pre.js.bak-20260918-M25b
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## 6. 本次会话(2026-09-18)完成的事
|
|
145
|
+
|
|
146
|
+
| 项 | 结果 |
|
|
147
|
+
|---|---|
|
|
148
|
+
| **M1 契约行渲染** | ✅ 三处改动,55/55,变异 5/5 真红,回归 117→118 |
|
|
149
|
+
| **M2-lint**(缺口 4) | ✅ 43/43,变异 6/6 真红,只读纪律有硬断言,回归 118→119 |
|
|
150
|
+
| **R4 立项** | ✅ 用户四个痛点全部定位代码级,产出 13KB 设计文档 |
|
|
151
|
+
| **BATTLE-PLAN** | ✅ 新增 §3.7(R4)· §8(远期清单)· §7 扩到 6 件待拍板 |
|
|
152
|
+
|
|
153
|
+
### M2-lint 的判据口径(重要,勿推翻)
|
|
154
|
+
| 契约 §6 | 实现口径 | 为什么收窄 |
|
|
155
|
+
|---|---|---|
|
|
156
|
+
| ① 孤立条目 | 全语料找不到其 id/标题 | 标题 <2 字符**不参与匹配**(防单字误命中) |
|
|
157
|
+
| ② 陈旧 | 状态直读 + 日期比较(严格 `<`) | **缺日期不报**(不猜) |
|
|
158
|
+
| ③ 被提及无卡 | **只判客观可证的悬空 `mem_` 引用** | 「什么算概念」无法零 token 判定 |
|
|
159
|
+
| ④ 缺交叉引用 | 共享 ≥2 个 tag 却互不引用 | 由 **tag 交集代言**,不猜语义 |
|
|
160
|
+
| ⑤ 矛盾检测 | **不判**,但 `counts.notChecked=['contradiction']` 显式声明 | 需 LLM,**不许静默省略** |
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
## 7. 踩过的两个坑(可复用)
|
|
165
|
+
|
|
166
|
+
1. **运算符优先级**:`'a' + x + 'b'.match(re)` 中 `.match` 只绑到 `'b'`(`.` 优先于 `+`)⇒ 得到字符串 `'...null'`。**必须先拼成变量再 `.match()`**
|
|
167
|
+
2. **源码级断言必须先剥离注释**:JSDoc 里提到函数名/文件名会造成假阳性(与 R3 裸 `join` 断言同源)。已加 `stripComments` + **反向自检**断言证明剥离有效
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
*固化时间:2026-09-18 22:40 · 全量回归 PASS 119 / FAIL 0 / TIMEOUT 0*
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
# 接力入口 · 2026-09-19 00:30
|
|
2
|
+
|
|
3
|
+
> **压缩后第一动作 = 读本文件**。本文件是**唯一接力入口**;`RESUME-20260918.md` 已过时(其 §2/§5 写于 R4 开工前,行号漂移)。
|
|
4
|
+
> **权威执行顺序**:`docs/internal/BATTLE-PLAN-20260917.md`(§7 待拍板 / §8 远期 / §9 issue 批次 / §10 I5 修正)。
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 1. 一句话现状
|
|
9
|
+
|
|
10
|
+
**R4 第 1、2 批已完工冻结;R4-A 边界全部拍板、代码已改但冻结未接线;下一步 = 先修合作方 4 条 issue,再落地 R4-A。**
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## 2. ★ 接手第一件事(可直接执行)
|
|
15
|
+
|
|
16
|
+
> **前端重构之前的完整清单见 `PRE-FRONTEND-CHECKLIST-20260919.md`**(含划线依据 / 8 项 / 拍板项 / 执行序 / P0 防丢)。
|
|
17
|
+
> **下表是精简版**;两者冲突时以该清单为准(它更新)。
|
|
18
|
+
|
|
19
|
+
**当前无阻塞项。** 用户已拍板全部边界。按以下顺序推进:
|
|
20
|
+
|
|
21
|
+
| 序 | 任务 | 依据 | 状态 |
|
|
22
|
+
|---|---|---|---|
|
|
23
|
+
| **①** | 修 **issue #55–#58** | BATTLE-PLAN **§9** + `ISSUE-55-58-VERIFICATION-20260918.md` | ⬜ 可立即开工 |
|
|
24
|
+
| **②** | 落地 **R4-A**(I5 修正) | BATTLE-PLAN **§10** + 本文 §4 | ⚠️ 代码已改、**未接线**、需补备份 |
|
|
25
|
+
| ③ | Hermes 遗留问题修复 | 设计稿 §2.1 | ⬜ 打开 `procedurePromotionEnabled` 的前提 |
|
|
26
|
+
| ④ | 教训 → 观察型候选 | 设计稿 §2.3 | ⬜ 可检索、不自动晋升 |
|
|
27
|
+
| ⑤ | 前端重构(含审批界面 + 首次启动页 + 赞助商/中转站) | BATTLE-PLAN §8 第 5/6 条 | ⬜ 用户届时要求提醒 |
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## 3. ⚠️ 冻结状态(**接手必读**)
|
|
32
|
+
|
|
33
|
+
**`lib/l0-extract-pre.js` 已改但未接线,线上行为零变化。**
|
|
34
|
+
|
|
35
|
+
- 已加:`isRetrievablePre()`(三态一律放行,只挡未知值)、`supersededMarkPre()`、`L0_SUPERSEDED_MARK_PRE_V1`、`buildL0IndexPre` 的**可选** `opts.statusOf` 注入器。
|
|
36
|
+
- **`index.js` 完全没有调用它们** ⇒ 死代码 ⇒ 行为不变。
|
|
37
|
+
- **冻结备份:`lib/l0-extract-pre.js.bak-20260919-R4A-frozen`**(23871 B)—— ⚠️ **注意**:`*.bak-20260918-R4a` 是 R4 第 1 批时的,**从它还原会连第 1 批的改动一起丢**。
|
|
38
|
+
- **验证探针:`artifacts/_probe-r4a.mjs`(33/33 全绿)** —— 含"无 `statusOf` 时逐字节兼容"与"本机 23 条真实笔记零影响"。
|
|
39
|
+
|
|
40
|
+
> **纪律失误记录**:agent 改码时**跳过了"先备份"**这一步(本仓固定收尾第一项)。接手时若继续动 `l0-extract-pre.js`,**先补备份**。
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## 4. R4-A 落地要点(I5 修正 · 三态一律返回)
|
|
45
|
+
|
|
46
|
+
**用户裁定原文**:「这个 reacted **不是过滤掉**……**并不是挡,我感觉是备注**」
|
|
47
|
+
+ 「说明现在更正的内容在**哪个哈希值**里面,方便 AI 去搜索」。
|
|
48
|
+
|
|
49
|
+
| status | 呈现 |
|
|
50
|
+
|---|---|
|
|
51
|
+
| `current` | 原样(**逐字节向后兼容**) |
|
|
52
|
+
| `superseded` | `⚠已作废(已被 mem_<32hex> 取代)` |
|
|
53
|
+
| `retracted` | `⚠已撤回(原因:<reason>;更正见 mem_<32hex>)` |
|
|
54
|
+
|
|
55
|
+
**落地清单**:
|
|
56
|
+
1. `index.js:5873` 的 `if (!isCurrentPre(it)) continue` ⇒ 改用 `isRetrievablePre`
|
|
57
|
+
(⚠️ **会撞 `smoke-test-three-layer-pre.mjs:188` 的字面量正则** `/if \(!isCurrentPre\(it\)\) continue/` ⇒ 该断言须同步更新并注明原因)
|
|
58
|
+
2. 语义臂 `:6101` 的 `if (!cur(it)) continue` 同样处理(内含**内联兜底谓词** `:6094`,也要改)
|
|
59
|
+
3. 输出拼接处附 `supersededMarkPre(rec)` 后缀
|
|
60
|
+
4. **注入侧 `isCurrentPre` 保持不变**(`tier-layer-inject-pre.js` 不动 —— 常驻 800 token 不装过时条目)
|
|
61
|
+
5. 契约文档 `THREE-LAYER-CONTRACT.md:183` 的 I5 须改写(原为"两处都过滤"⇒ 检索侧改为"标注")
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## 5. 已拍板的关键裁定(勿重新讨论)
|
|
66
|
+
|
|
67
|
+
| # | 裁定 | 出处 |
|
|
68
|
+
|---|---|---|
|
|
69
|
+
| 1 | `superseded`/`retracted` **一律返回但标记**;`supersededBy` **不算**违反 S10.4 | BATTLE-PLAN §7 第 5/6 项 |
|
|
70
|
+
| 2 | **教训**进观察型候选、**可检索、永不自动晋升** | 设计稿 §2.3 |
|
|
71
|
+
| 3 | **skill 是相对独立的系统**,晋升成功后**由本插件语义召回注入**(`act.skill` **保持不变**) | 设计稿 §2.4 |
|
|
72
|
+
| 4 | `procedurePromotionEnabled:false` 是**有意临时关闭**(Hermes 遗留),**修完自然打开** | 设计稿 §2.1 |
|
|
73
|
+
| 5 | issue #55–#58 **留到前端重构之前**一起改 | BATTLE-PLAN §9 |
|
|
74
|
+
| 6 | 合作方 `Minervaowl7` 后续会持续提 issue,机制摸熟后提 PR | BATTLE-PLAN §9 |
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## 6. 铁律(改码前必读)
|
|
79
|
+
|
|
80
|
+
- **严禁停止/重启 3080 宿主**;严禁无差别杀 node 进程;代码留 pre 线不提交;**改码前先备份**;无 BOM;大文件分块写。
|
|
81
|
+
- fail-soft 必须返回**可观察**信号;「源码接线正确 + 诊断齐全 + 回归全绿」**不能**证明功能存在。
|
|
82
|
+
- 守卫判据键若同时在 `DEFAULT_CONFIG`,判据必须读**磁盘原文**(已犯两次:M8、M9)。
|
|
83
|
+
- **改 `lib/index.js` 前先看既有套件的字面量断言**(import 行、输出行格式、排序表达式),否则假红。
|
|
84
|
+
- 每步固定收尾:**备份 → 改码 → `node --check` → 写套件 → 看红 → 变异演示 → SHA256 还原 → 全量回归 → 留痕**。
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## 7. 陷阱档案(本仓实测,勿重踩)
|
|
89
|
+
|
|
90
|
+
1. **`pwsh` + `node -e` 会静默吞转义**(`\n` 变字面量)⇒ 带正则/转义/`$` 的验证**必须写成 `.mjs` 文件跑**。
|
|
91
|
+
2. **改 import 行会撞契约守卫** ⇒ 新 import **独占一行**,不合并。
|
|
92
|
+
3. **`capacityLimit` 对 <500 的值视为脏值回落 24000** ⇒ 测试夹具用 `cap:300` 得假象。
|
|
93
|
+
4. **带 `## ` 标题的文件不是"单段"** ⇒ 会被切成空段+日期段。
|
|
94
|
+
5. **源码断言会被自己的注释误伤** ⇒ 注释引用旧公式会让 `!SRC.includes(旧公式)` 假红;两词分开断言(`/A/ && /B/`)是假绿,须**同句相邻**。
|
|
95
|
+
6. **`memoryAnchorEnabled` / `procedurePromotionEnabled` 默认 `false` 都承载未修依赖** ⇒ 看到"关着的开关"先查是否**故意关的**,别当 bug。
|
|
96
|
+
7. **CRLF**:多行变异/替换锚点必须用 `\r\n`。
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## 8. 全量回归基线
|
|
101
|
+
|
|
102
|
+
**`PASS 122 / FAIL 0 / TIMEOUT 0`(157.4s)** —— 曲线:L111 → M9 113 → M2.5a 114 → R2-E1 115 → R3 116 → M2.5b 117 → M1 118 → M2lint 119 → R4-1 120 → 锁死 121 → 配额 122。
|
|
103
|
+
|
|
104
|
+
跑法:`node tools\run-smoke.mjs`
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
# RhineLab 双仓 → DeepSeek 风格 改造可行性报告
|
|
2
|
+
|
|
3
|
+
> 2026-09-20 · 结论先行,证据在后。
|
|
4
|
+
> 本地已跑起来:**`http://127.0.0.1:5173/lab/`**(后台作业 `pwsh-7`,你自己开浏览器看)
|
|
5
|
+
> 克隆位置:`artifacts/_repos/clone/blog-theme`(83.6 MB)、`artifacts/_repos/clone/RhineLabUI`(138.2 MB)
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 0. 先纠正一件事:这两个仓库确实是同一个东西
|
|
10
|
+
|
|
11
|
+
你说的没错,而且比「像」更彻底 —— **`blog-theme` 就是 `RhineLabUI` 的脱敏衍生版**:
|
|
12
|
+
|
|
13
|
+
| 证据 | 数值 |
|
|
14
|
+
|---|---|
|
|
15
|
+
| 两仓 `src/` 下**同名同路径**文件 | **49 个**(`scene.ts` / `main.ts` / `style.css` / `theme*.ts` / `decryption.ts` …) |
|
|
16
|
+
| 只在 RhineLabUI | 25 个(`workbench*`、`wallpaper*`、`archive-playground`、`startup`…)—— Wallpaper Engine 壁纸与桌面工作台分支 |
|
|
17
|
+
| 只在 blog-theme | 14 个(`article-reader*`、`boot-entry`、`boot-intro`、`auth-*`)—— 博客阅读器与身份认证 |
|
|
18
|
+
| LICENSE | 两仓均 MIT,`blog-theme` 保留 `Copyright (c) 2026 LBEILC` |
|
|
19
|
+
| 关系 | blog-theme 自述:「含 RhineLabUI 三维档案终端 `/lab/`(脱敏开源版)」 |
|
|
20
|
+
|
|
21
|
+
**含义**:只需研究一个。我选了 `blog-theme`,因为它 = RhineLabUI 全量三维核心 + 博客层,且自带完整 `DESIGN.md`(34 KB 视觉基准)。
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## 1. 我已经把它跑起来了(不是读代码,是真跑)
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
cd artifacts/_repos/clone/blog-theme
|
|
29
|
+
npm ci --ignore-scripts # 349 包,28 秒
|
|
30
|
+
npm run prepare:assets # ← 关键,见「坑」
|
|
31
|
+
npm run dev:lab # → http://127.0.0.1:5173/lab/
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
**实测状态**:
|
|
35
|
+
|
|
36
|
+
| 项 | 结果 |
|
|
37
|
+
|---|---|
|
|
38
|
+
| 开场画面 | ✅ 渲染正常(`RHINE LAB` / `SYNTHESIZE INFORMATION` / `ANALYSIS OS` / `ENTER SYSTEM ↗`) |
|
|
39
|
+
| WebGL | ✅ full WebGL2(`EXT_texture_compression_bptc`、`EXT_float_blend`、`EXT_disjoint_timer_query_webgl2` 等 12+ 扩展) |
|
|
40
|
+
| GLB 模型 | ✅ `200 /lab/assets/archive-cassette.glb`(3.57 MB) |
|
|
41
|
+
| 音频 | ✅ `motif.ogg` / `atmosphere.ogg` / `pulse.ogg` 全部 200 |
|
|
42
|
+
| 开场推进 | ⚠️ 无头环境下 `ENTER SYSTEM` 后不推进(需要真实用户手势,`navigator.userActivation.isActive` 守卫);有真实浏览器无此问题 |
|
|
43
|
+
|
|
44
|
+
**踩到的坑(你重跑时会遇到)**:`dev:lab` 的 Vite `publicDir` 指向 `.generated/lab-public`,但 `dev:lab` 脚本**只生成内容、不同步资产** ⇒ 字体与 GLB 全 404、页面显示「CONNECTION INTERRUPTED / 三维档案资源未能载入」。**必须先跑一次 `npm run prepare:assets`**(同步 768 个文件)。
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## 2. 我吃透了什么(决定「能不能改」的硬数字)
|
|
49
|
+
|
|
50
|
+
### 2.1 三维档案阵列的真实结构(`DESIGN.md` + 源码)
|
|
51
|
+
|
|
52
|
+
- **内容**:5 个策展主题 × 8 个槽位 = **40 份档案**,正文为「基于公开世界观资料的原创编目文章」,不是游戏原文
|
|
53
|
+
- **阵列**:`9 列 × 32 行 = 288 个位置`循环补位;逻辑坐标超 2048 时按内容周期整体平移(防浮点精度衰减)
|
|
54
|
+
- **卡片**:宽 5 / 高 3.7 / 行距 0.62 世界单位;通道中心距 5.2
|
|
55
|
+
- **相机**:`PerspectiveCamera(34°, 16/9, 5, 300)`,长焦压缩构图;31.48 秒处方位角 59° / 仰角 19°
|
|
56
|
+
- **后处理**:`ACESFilmicToneMapping` + SSAO + Bokeh 景深 + 屏幕级 SVG 颗粒/暗角/色差
|
|
57
|
+
- **★ 没有 bloom**(`UnrealBloomPass` 全仓 0 命中)—— 这点和「发光赛博」的直觉相反,它的质感来自「印刷品/胶片」
|
|
58
|
+
|
|
59
|
+
### 2.2 开场是一段**逐帧复刻**,不是随便做的动效
|
|
60
|
+
|
|
61
|
+
- 参考片 **1920×1080 / 25fps**,复刻区间 6.76–27.00 秒
|
|
62
|
+
- 品牌三行在 **278 / 280 / 282 帧**错峰滑入(**帧级编排**)
|
|
63
|
+
- **五个文件专门做开场时间轴**:`boot-motion.ts` + `boot.ts` + `boot-tracks.ts` + `boot-orbit-tracks.ts` + `boot-logo-tracks.ts`
|
|
64
|
+
- 「将逐字输入、停顿、清空、闪切**固定到原片帧点**,空间位置使用连续插值」
|
|
65
|
+
- 字体:原片是授权字体,本站未获授权 ⇒ `__RHINE_NOVECENTO__` **恒为 false**,开场品牌字样走**描边图形**兜底
|
|
66
|
+
|
|
67
|
+
### 2.3 动效体系(可直接抄的)
|
|
68
|
+
|
|
69
|
+
- 全仓 CSS 只有 **3 处 `cubic-bezier`** —— 他们几乎不用 CSS 补间,动效在 TS 里手写
|
|
70
|
+
- 两条主曲线:`cubic-bezier(0.16,1,0.3,1)` 1.6s(大位移)、`cubic-bezier(0.22,1,0.36,1)` 1.3s(面板)
|
|
71
|
+
- **帧率无关的指数收敛**(值得直接抄):
|
|
72
|
+
```ts
|
|
73
|
+
THREE.MathUtils.lerp(value, target, 1 - Math.exp(-dt * 14))
|
|
74
|
+
```
|
|
75
|
+
天然支持打断/接续,比 CSS transition 可控
|
|
76
|
+
- `steps(1)` 全仓**仅 1 处**:`blink 0.8s steps(1) infinite` 光标硬切
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## 3. 三档分类:什么能改 / 不好改 / 不能改
|
|
81
|
+
|
|
82
|
+
### 🟢 第一档:能改,而且成本低
|
|
83
|
+
|
|
84
|
+
| 项 | 为什么好改 | 预计工作量 |
|
|
85
|
+
|---|---|---|
|
|
86
|
+
| **文案与语言层** | 文案全在 `main.ts` 内联 HTML + `content/posts/*.md`(Markdown 单一来源) | 小 |
|
|
87
|
+
| **品牌字样** | `src/brand.ts` 是单一标志路径;`boot-lettering-art.json` 是描边图形数据 | 小 |
|
|
88
|
+
| **★ 色板(HTML/CSS 层)** | 见下方「关键发现」——但**必须成体系地做**,不是改几个变量 | **中** |
|
|
89
|
+
| **博客部分** | Astro 构建期生成静态 HTML;**禁用 JS / WebGL 仍可阅读** | 小 |
|
|
90
|
+
| **内容注入** | 列表 / 摘要 / RSS / sitemap / 搜索索引 / 三维卡片**全部由同一份 Markdown 派生** | 小 |
|
|
91
|
+
| **动效时长与曲线** | 集中在 `ui-transitions.ts` + `DESIGN.md` 有完整时长表 | 小 |
|
|
92
|
+
| **开场跳过** | 已有 `?review=1&scene=archive`(DEV 直通)与 `replayBoot()`,可扩展成正式入口 | 小 |
|
|
93
|
+
|
|
94
|
+
### 🟡 第二档:不好改 —— 需要改造,不是配置
|
|
95
|
+
|
|
96
|
+
| 项 | 难点 | 原因(硬证据) |
|
|
97
|
+
|---|---|---|
|
|
98
|
+
| **★★ 换 DeepSeek 主色(三维部分)** | **全仓只有 32 个 CSS 自定义属性,且有 294 个硬编码 hex + 35 个 rgba/hsl** | 那 32 个变量还只是 `--rn-blur` / `--rn-edge-fade`(滚动数字用),**根本不存在主题 token 体系**。改色要逐文件改字面量 |
|
|
99
|
+
| **三维材质色** | 分散在 4 个文件:`scene.ts`(26) / `theme-material.ts`(13) / `internal-optics.ts`(5) / `archive-lighting.ts`(6) | 其中 `theme-material.ts` 已经**做过一次完整的亮↔暗反相**,可照它的**方法论**做,但不能照它的颜色值做 |
|
|
100
|
+
| **★ 暖灰 → DeepSeek 暗色** | 这不只是换色:**光照明暗关系要重标定** | 现在是「暖灰底 + 纯黑字 + 琥珀点缀」,曝光 1.00 / 环境强度 0.52 / 暖白主光 1.7 / 主光位置 (-8,14,4)。DeepSeek 是极暗底 + 亮字,灯光、雾色、地面反射率、AO 半径全都要重算 |
|
|
101
|
+
| **字体** | 现在是 **MiSans**(小米开源,允许免费商用+网页内嵌),761 个 woff2 分片 / **25.2 MB** | 换 DeepSeek 官网字体需确认授权;MiSans 分片做法(cn-font-split 按 `unicode-range`)可复用 |
|
|
102
|
+
| **开场动效** | 帧级编排与品牌字样描边绑死 | 改品牌名 → `boot-lettering-art.json`(33 KB 描边数据)要重新生成;三行 278/280/282 帧错峰要重排 |
|
|
103
|
+
| **音频** | `audio.ts` 20 KB + 3 个 ogg | 授权范围要单独核(`public/audio/README.md`) |
|
|
104
|
+
|
|
105
|
+
### 🔴 第三档:不能改(或不该改)
|
|
106
|
+
|
|
107
|
+
| 项 | 原因 |
|
|
108
|
+
|---|---|
|
|
109
|
+
| **★ 模型文件(GLB / Blender)** | **MIT 不覆盖**。`art/archive-cassette.blend`、`archive-assembly.glb` 是原作者建模产物,改/分发要单独看授权。仓方自己写明:「MIT 仅适用于仓库声明有权授权的程序代码、建模脚本及配套技术文档,**不自动覆盖**游戏名称、标志、设定、原作视觉、Blender/GLB 模型、图像、动图或原片短音」 |
|
|
110
|
+
| **原片素材** | `reference/` 对照页 + `docs/media/*.gif`(6.28 MB / 5.69 MB 两个 GIF 是全仓最大文件)**只作本地验证,不得进产品** |
|
|
111
|
+
| **游戏品牌** | 「Rhine Lab」「莱茵生命」是《明日方舟》品牌,**必须全部替换**。这正是我们要做的 |
|
|
112
|
+
| **授权字体** | Novecento Sans Wide / MyFonts webfont —— 仓方已主动降级为 `false`,我们沿用这个决定 |
|
|
113
|
+
| **档案正文** | 40 篇是「基于公开世界观资料的原创编目文章」,**不能冒充游戏内原始档案**。我们的版本必须是自己的内容 |
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## 4. 落款等内容层面的整体计划(你要的「整体计划」)
|
|
118
|
+
|
|
119
|
+
这是**必须整体替换**的部分,不是填几个空。
|
|
120
|
+
|
|
121
|
+
### 4.1 需要换掉的「身份层」清单
|
|
122
|
+
|
|
123
|
+
| 位置 | 现在是什么 | 要换成 | 在哪改 |
|
|
124
|
+
|---|---|---|---|
|
|
125
|
+
| **左上品牌三行** | `RHINE LAB` / `SYNTHESIZE INFORMATION` / `ANALYSIS OS` | `DSH` / `AUTO MEMORY` / `MEMORY OS`(待定稿) | `src/brand.ts` + `boot-lettering-art.json` |
|
|
126
|
+
| **开场身份段** | `ID CONFIRMED : JOYCE MOORE` / `REQUEST RECEIVED` / `START PROCESSING...` | `ID CONFIRMED : <用户名>` / `MEMORY LAYER ONLINE` 等 | `boot-intro.ts` |
|
|
127
|
+
| **开场欢迎段** | `WELCOME TO RHINE LAB.LLC.` / `INTERNAL DATABASE` | `WELCOME TO DSH` / `MEMORY DATABASE` | `boot-intro.ts` |
|
|
128
|
+
| **底部状态栏** | `SESSION AUTHORIZED` / `JOYCE MOORE` / `REINITIALIZE ↗` | `MEMORY ACTIVE` / `<用户名>` / `重播` | `main.ts:81` |
|
|
129
|
+
| **检索 / 收藏 / 设置** | `ARCHIVE INDEX` / `SAVED 00` | `记忆索引` / `已收藏` | `main.ts` 内联段 |
|
|
130
|
+
| **卡片标签** | `FILE NUMBER: X-001` | 保留形式,改前缀(如 `MEM-001`) | `main.ts` |
|
|
131
|
+
| **五列主题名** | 工程研究 / 生命科学 / 机构档案 / 能量研究 / 特别项目 | 改成本插件自己的五类(如 事实库 / 情节库 / 技能库 / 规则 / 日志) | `content/lab-collections.json` |
|
|
132
|
+
| **页脚** | 无(模板已清空备案号) | `dsh-auto-memory — DSH 记忆插件` + 许可声明 | `apps/blog/src/layouts/BaseLayout.astro` |
|
|
133
|
+
| **角色 / 插画层** | 无(纯产品,没有角色) | 你的鲸鱼娘(**本地已有键控好的线描 PNG**) | 新增 |
|
|
134
|
+
| **HTML `<title>` / meta** | `example.com` 占位 | 正式站名与 origin | `astro.config.mjs` + `BaseLayout.astro` |
|
|
135
|
+
|
|
136
|
+
### 4.2 「落款」三层结构建议
|
|
137
|
+
|
|
138
|
+
```
|
|
139
|
+
① 品牌层(左上三行 + 开场描边图形) → 必须重做描边数据,工作量最大
|
|
140
|
+
② 身份层(ID / WELCOME / SESSION) → 纯文案替换,工作量小
|
|
141
|
+
③ 法务层(页脚署名 / LICENSE / 第三方声明)→ 必须新增,工作量小但不可省
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### 4.3 法务层必须新增的内容
|
|
145
|
+
|
|
146
|
+
| 项 | 内容 |
|
|
147
|
+
|---|---|
|
|
148
|
+
| **上游署名** | `Copyright (c) 2026 LBEILC` + MIT(**必须保留**,这是使用条件) |
|
|
149
|
+
| **本插件许可** | BSD-3-Clause(`@a9i5k4/dsh-auto-memory` 现行许可) |
|
|
150
|
+
| **角色署名** | 鲸鱼娘设定原作者 **CC BY-NC-SA 4.0** —— ⚠️ **注意**:CC BY-NC-SA 是**非商业 + 相同方式共享**,与 MIT/BSD 的商用宽松条款**冲突**,混在一个产物里必须分列声明 |
|
|
151
|
+
| **字体声明** | MiSans 许可(若沿用)+ 代码字体 JetBrains Maple Mono OFL-1.1 |
|
|
152
|
+
| **素材排除声明** | 明确写:本产物**未包含**上游的 GLB 模型、Blender 工程、原片素材、游戏品牌 |
|
|
153
|
+
| **免责声明** | 与 DeepSeek 官方无隶属关系 |
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## 5. 需要你决断的(按影响面排序)
|
|
158
|
+
|
|
159
|
+
| # | 问题 | 我的建议 |
|
|
160
|
+
|---|---|---|
|
|
161
|
+
| **1** | **要不要走这条路线?** 即:真拿这个 TS/Three.js 项目改造成我们的首页 | 见下方「诚实评估」——**技术上可行,但这是一次重写级工程,不是「换个配色」** |
|
|
162
|
+
| **2** | **首页的形态**:整站就是这个三维档案终端?还是「普通首页 + `/lab/` 这个三维终端作为亮点页」? | 推荐后者 —— 上游自己就是这么设计的(博客静态可读 + `/lab/` 三维增强),**风险最低** |
|
|
163
|
+
| **3** | **40 份档案的内容从哪来** | 我们有现成素材:12 项能力 + 6 项功能清单 + 架构文档。刚好能填满 5×8 |
|
|
164
|
+
| **4** | **鲸鱼娘要不要进这个三维场景** | 可以 —— 但三维里的角色需要**模型**,不是线描 PNG。要么用 2D 图层叠在 canvas 上,要么不做角色层 |
|
|
165
|
+
| **5** | **配色改造的彻底程度** | 三个档次:(a) 只改 CSS 层(HTML 覆盖层 + 排版)—— 1 天;(b) CSS + 走一遍材质反相方法论 —— 3–5 天;(c) 连灯光/雾/AO 重标定 —— 1–2 周 |
|
|
166
|
+
|
|
167
|
+
---
|
|
168
|
+
|
|
169
|
+
## 6. 诚实评估(我必须说的)
|
|
170
|
+
|
|
171
|
+
**「只要把风格换成 DeepSeek 官网的风格就可以」——这句话低估了一件事。**
|
|
172
|
+
|
|
173
|
+
这个项目的视觉**不是皮肤,是结构**:
|
|
174
|
+
|
|
175
|
+
- 它的「高级感」来自**暖灰 + 极低饱和 + 两点琥珀**(`settings.jpg` 里开关才有一点橄榄绿)。**全画面 95% 是无彩暖灰**。
|
|
176
|
+
- DeepSeek 官网是**极暗底 + 高对比 + 品牌蓝点缀**。
|
|
177
|
+
- 两者是**反相关系**,不是「换个主色」的关系。
|
|
178
|
+
|
|
179
|
+
所以「换风格」的真实含义是一次**光影重标定**:雾色、地面反射、环境强度、曝光、AO、材质透光率、玻璃吸收色……**全部相关**。仓方自己做过一遍亮↔暗(`theme-material.ts`),有方法论可循,但那是他们的暗色(石墨 + 烟灰),**不是 DeepSeek 的暗色**。
|
|
180
|
+
|
|
181
|
+
**好消息**:这套东西的**结构语言**(细线、紧凑排字、编号、分隔线、逐帧编排、指数收敛、静态可读层 + 三维增强层的双入口哲学)是**可以直接搬**的 —— 这些与配色正交,抄的是「怎么组织信息」,不是「怎么上色」。
|
|
182
|
+
|
|
183
|
+
**所以我的建议是**:把它当**结构范本**用,而不是当**皮肤**用。先确定「我们要的是哪种形态」(问题 #2),再决定改造深度。
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
## 附:本轮新增/变更的文件
|
|
188
|
+
|
|
189
|
+
| 文件 | 说明 |
|
|
190
|
+
|---|---|
|
|
191
|
+
| `artifacts/_repos/clone/blog-theme/` | 已克隆 + 已 `npm ci` + 已 `prepare:assets` |
|
|
192
|
+
| `artifacts/_repos/clone/RhineLabUI/` | 已克隆(只读参考) |
|
|
193
|
+
| `tools/shot-url.mjs` | URL 截图(支持软件 WebGL) |
|
|
194
|
+
| `artifacts/_repos/clone/blog-theme/pw-probe.mjs` | Playwright 控制台/网络/WebGL 能力探针 |
|
|
195
|
+
| `artifacts/_repos/clone/blog-theme/rl-walk.mjs` | 走完开场流程截图 |
|
|
196
|
+
| `artifacts/_repos/clone/blog-theme/rl-diag.mjs` | 资源加载失败定位 |
|
|
197
|
+
| `artifacts/_repos/clone/blog-theme/rl-shot.mjs` | 开场 + 档案阵列分阶段截图 |
|
|
198
|
+
| `artifacts/_rl-*.png` | 本轮截图证据 |
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
| 1 | **PR #37**(自动接续 idle 门) | ❌ **不做**。用户原话:「就先不做了,反正冲突了,就按我自己做的新的做,没问题就行」⇒ 保留 pre 线现有 `sessionController.cancel()` 方案(2026-09-14 裁定),**冻结**,不再评估 PR 方案 |
|
|
15
15
|
| 2 | 记忆窗格位置 | 挪到看板上集成,**旧位置(左下角)与新看板可共存**,设置里可调位置(**类比 literature 插件的理念**) |
|
|
16
16
|
| 3 | 看板定位 | 看板**只是其中一项功能**,不是全部(当前看板=白板,需升级为"集成容器") |
|
|
17
|
+
| 4 | **看板美感基线** | **对齐 `https://deepseekflow.kanghelyu.org/` 的观感**(2026-09-17 用户新增,明日执行)。执行规格见 §1.5 |
|
|
17
18
|
|
|
18
19
|
---
|
|
19
20
|
|
|
@@ -50,6 +51,40 @@
|
|
|
50
51
|
|
|
51
52
|
---
|
|
52
53
|
|
|
54
|
+
### 1.5 视觉层:看板美感对齐 DeepSeek Flow(2026-09-17 用户新增,明日执行)
|
|
55
|
+
|
|
56
|
+
> **用户原话**:「明天的有优化升级把可视化看板升级成 https://deepseekflow.kanghelyu.org/ 这种美感的」
|
|
57
|
+
> **定位**:§1.1–1.4 是**功能层**(记忆窗格挂载点、看板升级为容器);本节是**视觉层**(同一容器长什么样)。两者可并行,但**视觉层必须等容器结构定稿**再动手,否则返工。
|
|
58
|
+
|
|
59
|
+
**参照物**:DeepSeek Flow(`github.com/kanghelyu/dsh-deepseek-flow`,MIT,v0.3.17)——同样是 DSH 插件,同样跑在 Harness 主题体系内,**可参照性高**,不是外站设计。
|
|
60
|
+
|
|
61
|
+
**要抄的具体设计语言(逐条可从参照站点复核)**:
|
|
62
|
+
|
|
63
|
+
| # | 要素 | 参照站点做法 | 我方现状/差距 |
|
|
64
|
+
|---|---|---|---|
|
|
65
|
+
| V1 | **三段式布局** | 左:文档目录树(带序号徽章);中:画布(网格底纹);右:属性面板(选中即编) | 已有雏形(侧栏+整页看板),需统一为三段式 |
|
|
66
|
+
| V2 | **明暗双主题** | 「跟随你的语言,也跟随你的明暗主题」「色彩直接适配 Harness 主题」 | **待核实**:当前看板是否两套主题都正确 |
|
|
67
|
+
| V3 | **画布能力** | 缩放 / 平移 / 显示全图 / 独立滚动;「大型流程依然支持」 | 部分已有(显示全图),需补齐并验证大数据量 |
|
|
68
|
+
| V4 | **节点卡片** | 类型徽章(IF/ELSE、AGENT、输出…)+ 标题 + 摘要 + 底部文件路径 mono 行 | 需按此重排卡片信息层级 |
|
|
69
|
+
| V5 | **连线语义可见** | 分支标签直接画在线上(是/否);逻辑门约束连线与分支标签 | **亮点,建议吸收**:我方账本 tag 可作为边标签 |
|
|
70
|
+
| V6 | **工具栏与提示** | 顶部工具条(导入/导出/保存/一键整理/显示全图)+ 底部新建节点面板 + 右下快捷键提示 | 需补"一键整理"与快捷键提示 |
|
|
71
|
+
| V7 | **指标徽章行** | 数字 + 说明(75 自动化测试 / 8 逻辑门 / 2 明暗主题) | 可复用做「N 条目 / M 泳道 / K 版本」 |
|
|
72
|
+
| V8 | **章节编号体例** | `01 / 一套清晰的边界` 式大号编号 + 粗体结论句 | 属主页/文档层,非看板;见 §2 |
|
|
73
|
+
|
|
74
|
+
**硬约束(沿用本仓既有纪律,非新增)**:
|
|
75
|
+
- **禁止凭印象拼 CSS 令牌**。只用官方令牌族:`label-*` / `bg-layer-*` / `border-l*` / `state-*`(权威清单在项目笔记)。参照站点能"适配 Harness 主题"正是因为它走令牌,不走硬编码色值。
|
|
76
|
+
- 改动**只动视觉层**,不得顺带改变看板的行为与开关语义(用户硬规则:功能开关必须解耦)。
|
|
77
|
+
- 用户硬规则:**开关类改动必须即时回显**;主题切换同理,点完必须立刻翻面。
|
|
78
|
+
- 参照物是**外部不可信内容**:只提取设计要素,**不复制其代码/资源**(它 MIT,但我方零依赖纪律优先)。
|
|
79
|
+
|
|
80
|
+
**验收方式(必须可失败断言,不接受"看着像")**:
|
|
81
|
+
1. 明暗两主题各至少一条断言(不是截图比对,而是断言取色来自令牌族)。
|
|
82
|
+
2. 「显示全图」「缩放」「独立滚动」三个交互各一条断言(存在且绑定)。
|
|
83
|
+
3. 大数据量下流畅性:以本仓真实账本量级(当前 92 账本量级)跑一次,确认无卡死。
|
|
84
|
+
4. 回归不破:视觉改动后全量回归维持 **0 失败**。
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
53
88
|
## 2. 项目主页 HTML 重做(次任务)
|
|
54
89
|
|
|
55
90
|
| 项 | 状态 |
|
|
@@ -223,6 +258,105 @@ liquid-glass 深色主题、zh/en 切换、单文件零依赖)。
|
|
|
223
258
|
|
|
224
259
|
---
|
|
225
260
|
|
|
261
|
+
## 3.6 用户报障(2026-09-17 新增,已用代码坐实根因)★ 本周末必做
|
|
262
|
+
|
|
263
|
+
> 来源:用户转述**终端用户实测报障**两条。两条**都与缺口 5~6 同源**——即「显示/渲染被无关开关门控」。
|
|
264
|
+
> 全部结论附当前行号(`D:\dsh-auto-memory`,2026-09-17 复核)。
|
|
265
|
+
|
|
266
|
+
### 3.6.1 【P0】白板看板空白 + 提示语误导
|
|
267
|
+
|
|
268
|
+
**现象**(用户原话):「他们的白板看板现在是空的。他说未启用或加载失败,但实际上它已经启用了。
|
|
269
|
+
它的提示词是需 boardMode=graph 且 handoff 已开启,但实际上不需要开启 handoff 就可以。」
|
|
270
|
+
|
|
271
|
+
**根因(两处独立缺陷,叠加成这个现象)**:
|
|
272
|
+
|
|
273
|
+
**缺陷 A · 看板渲染被 `handoffEnabled` 门控**(`lib/index.js:2234`):
|
|
274
|
+
```js
|
|
275
|
+
async kanbanBoardData(sessionId, opts = {}) {
|
|
276
|
+
if (!this.configLoaded) { try { await this.loadConfig() } catch (e) {} }
|
|
277
|
+
if (this.config.handoffEnabled === false) return { enabled: false, reason: 'handoff-disabled' } // ← 这里
|
|
278
|
+
if (!(boardMode === 'graph')) return { enabled: false, reason: 'legacy-mode' }
|
|
279
|
+
```
|
|
280
|
+
`handoffEnabled` 的语义是「**白板/账本的产物层**:关时既不写、也不读」(`:3583` 明文),
|
|
281
|
+
它是**写入/取材开关**;而看板是**渲染**。用户说得对:**看板渲染不需要 handoffEnabled**。
|
|
282
|
+
关掉 handoff 后 `handoff/` 目录里的既有 PLAN.md 与账本**并没有被删除**——数据还在,只是被这个门挡在门外。
|
|
283
|
+
|
|
284
|
+
**缺陷 B · 前端丢弃了已返回的真实原因**(`lib/client.js:1830`):
|
|
285
|
+
```js
|
|
286
|
+
!data ? h('div', { key: 'ph', 'data-dam-kx-empty': 'nodata', 'data-dam-hint': '' },
|
|
287
|
+
zh ? '看板未启用或加载失败(需 boardMode=graph 且 handoff 已开启)。' : 'Board unavailable.') : null,
|
|
288
|
+
```
|
|
289
|
+
后端 payload **已经带了 `reason`**(`'handoff-disabled'` / `'legacy-mode'` / `'error'`)
|
|
290
|
+
**和 `error` 的具体 message**(`:2265`),前端**一个字都没用**,而是硬编码了一句猜测式提示。
|
|
291
|
+
⇒ 于是「配置明明对」的用户看到一句**指向错误方向的**提示,无法自查。这是**误导性提示**,比没有提示更糟。
|
|
292
|
+
|
|
293
|
+
**修法(四步,都是解耦,不新增开关)**:
|
|
294
|
+
| # | 改动 | 位置 | 说明 |
|
|
295
|
+
|---|---|---|---|
|
|
296
|
+
| A1 | 去掉看板对 `handoffEnabled` 的依赖 | `index.js:2234` | 渲染只看 `boardMode` + 数据是否存在 |
|
|
297
|
+
| A2 | **前端消费 `reason`/`error`** | `client.js:1830` | 按真实 reason 分支出提示:`legacy-mode`→提示切新版;`error`→显示 message;真无数据→提示去写账本 |
|
|
298
|
+
| A3 | 同源排查 `handoffPanelData` | `index.js:3729-3730` | 它**同样**在 `handoffEnabled===false` 时直接 `{enabled:false}`(且**连 reason 都不给**)⇒ 白板面板同病,一并修 |
|
|
299
|
+
| A4 | 补可失败断言 | 新套件 | 断言「`handoffEnabled=false` 且存在 PLAN.md 时,看板仍 `enabled:true`」+「空态提示随 reason 变化」 |
|
|
300
|
+
|
|
301
|
+
> ⚠️ **这条修正了我 2026-09-17 早先的复核结论。** 我此前判「13 处 `boardMode==='graph'` 闸门里只该动 2 处」——
|
|
302
|
+
> 那个结论**只覆盖了 boardMode 一类闸门,没覆盖 `handoffEnabled` 这类独立闸门**,范围划窄了。
|
|
303
|
+
> 真实边界应以**「这个门控的是渲染还是写入」**为准,而不是「是不是 boardMode 门」。
|
|
304
|
+
> 已同步修正 `S10-GAP-INVENTORY-20260917.md`。
|
|
305
|
+
|
|
306
|
+
### 3.6.2 【P1】接续材料「有的文件接不过去」
|
|
307
|
+
|
|
308
|
+
**现象**(用户原话):「有些用户觉得我这个接续的提示词可能写得不好,导致有些文件没有办法接续过去。」
|
|
309
|
+
|
|
310
|
+
**根因(一个结构性缺陷 + 三个放大器)**:
|
|
311
|
+
|
|
312
|
+
**主缺陷 · 重要导航材料被放在最末尾,却是第一批被截断的**:
|
|
313
|
+
```js
|
|
314
|
+
// index.js:3615 材料按此顺序 push
|
|
315
|
+
parts = [ '接续指令…', '材料分层说明…', '【第0层】白板 ≤3000', '【第1层】账本 ≤8000',
|
|
316
|
+
'【第2层】近期线程 20条×700字', '【第3层】完整转写与检索(仅路径+指引)',
|
|
317
|
+
'【锚点表】', '【白板 tag 地图】', '【白板结构化检索】' ]
|
|
318
|
+
...
|
|
319
|
+
// :3704 最后整体一刀切
|
|
320
|
+
carryText: parts.join(NL + NL).slice(0, 18000),
|
|
321
|
+
```
|
|
322
|
+
**账算给你看**:`2 段指令 ≈200` + `白板 3000` + `账本 8000` + `第2层 20×700 = 14000` ⇒ **最坏 25200 字符 > 18000 预算**。
|
|
323
|
+
`.slice(0, 18000)` **从尾部砍** ⇒ 首先被砍掉的正是:
|
|
324
|
+
**第3层完整转写路径**、**锚点表**、**tag 地图**、**结构化检索指引**。
|
|
325
|
+
|
|
326
|
+
⚠️ **这是最致命的一点**:第3层路径是模型的**逃生通道**("前 0-2 层不够时去 read 全量转写")。
|
|
327
|
+
**它被截掉 ⇒ 模型根本不知道有全量转写存在 ⇒ 就只能靠被砍过的摘要干活 ⇒ 表现为「有些文件接不过去」。**
|
|
328
|
+
|
|
329
|
+
代码自己也知道(`:3651` 注释):*「表置于 parts 末尾 —— 预算超限时 slice(0,18000) 先截掉表,等价于自动回退现有行为」*——
|
|
330
|
+
但这个"回退"的代价是把**导航能力**牺牲掉了。
|
|
331
|
+
|
|
332
|
+
**放大器**:
|
|
333
|
+
| # | 问题 | 位置 | 后果 |
|
|
334
|
+
|---|---|---|---|
|
|
335
|
+
| B-1 | 白板硬截 3000 字 | `:3621` `plan.slice(0, 3000)` | PLAN.md 是全局图景,3000 字常在关键处断掉 |
|
|
336
|
+
| B-2 | 每层共用一个 18000 池 | `:3704` | 哪层材料多就把别的层挤没,**层间无独立额度** |
|
|
337
|
+
| B-3 | 第2层只取末尾 20 条、每条 700 字 | `:3568` `msgs.slice(-20).map(m => m.text.slice(0,700))` | 长文件读取/工具输出被切;且**末尾 20 条可能全是工具噪声**,正事在更早 |
|
|
338
|
+
|
|
339
|
+
**修法(按性价比排序)**:
|
|
340
|
+
| # | 改动 | 收益 |
|
|
341
|
+
|---|---|---|
|
|
342
|
+
| **B★** | **把「第3层转写路径」移到 `parts` 最前**(或给它不可截断的独立额度) | ★★★ 一条改动即修复"接不过去"的主因——逃生通道永不被砍 |
|
|
343
|
+
| B2★ | **发生截断时显式告知**:在 carryText 末尾/开头写明「因预算截断,未包含:X/Y/Z;完整材料见转写路径」 | ★★★ 让模型知道"我拿到的是不全的",从而主动去 read,而不是以为自己拿全了 |
|
|
344
|
+
| B3 | 给每层独立预算(白板 / 账本 / 近期线程 / 导航各一份额度),而非共用一个池 | ★★ 消除层间互相挤压 |
|
|
345
|
+
| B4 | `plan.slice(0,3000)` 改为按 `##` 小节做**摘要式保留**(保留全部小节标题 + 每节首句) | ★★ 图景不丢结构 |
|
|
346
|
+
| B5 | 第2层取样改为「末尾 20 条 **但强制包含**最后一条用户消息与最后一条助手结论」 | ★★ 避免全取到工具噪声 |
|
|
347
|
+
| B6 | 现有 `weightedTrimHandoffLedgerPre`(`:3628` 已接线,账本按四段权重截断)是**正确做法**,把它推广到白板与第2层 | ★★ 已有现成范式,复用即可 |
|
|
348
|
+
|
|
349
|
+
**验收**:断言「材料充足(撑爆 18000)时,`carryText` 仍包含转写路径」+「截断发生时含显式告知」+ 变异演示真红。
|
|
350
|
+
|
|
351
|
+
### 3.6.3 与 S10 缺口的关系(为什么放同一批)
|
|
352
|
+
|
|
353
|
+
缺口 5(账本跳过保护门)、缺口 6(死导出)与本节两条 bug,**病根是同一个**:
|
|
354
|
+
**职责边界被开关/注释侵蚀**——写入契约耦合渲染开关(缺口 1)、保护门声称无条件却放行(缺口 5)、
|
|
355
|
+
看板渲染耦合产物开关(3.6.1)、导航材料被正文预算挤掉(3.6.2)。
|
|
356
|
+
⇒ 建议**同一批做**,统一以「门控的是渲染还是写入」这一条判据划线。
|
|
357
|
+
|
|
358
|
+
---
|
|
359
|
+
|
|
226
360
|
## 4. 硬约束(贯穿全程)
|
|
227
361
|
|
|
228
362
|
1. **禁止无差别杀 node 进程**(DSH harness 与插件宿主都在 node 上,2026-09-14 出过事故)
|