@a9i5k4/dsh-auto-memory 2.5.3 → 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 +189 -7
- package/README.zh-CN.md +189 -7
- package/docs/CONTRIBUTORS.html +471 -0
- package/docs/FRONTEND-CO-CREATION.md +191 -0
- package/docs/GM53-HOMEPAGE-PROMPT.md +323 -0
- package/docs/HANDOFF-CRITERIA.md +92 -0
- package/docs/HOMEPAGE-CONTENT-FOR-GM53.md +299 -0
- package/docs/INTEGRATION-ANALYSIS.md +350 -348
- package/docs/PROMO-PROMPT-3.0.md +100 -0
- package/docs/USER-GUIDE.en.md +58 -3
- package/docs/USER-GUIDE.zh-CN.md +59 -4
- package/docs/WHITEPAPER.md +207 -0
- package/docs/internal/ACCEPT-35-LIVE.md +143 -0
- package/docs/internal/ACCEPTANCE-20260914.md +90 -0
- package/docs/internal/ARCH-REVIEW-BRIEF.md +411 -0
- package/docs/internal/ARCH-REVIEW-REQUEST.md +201 -0
- package/docs/internal/ARCH-REVIEW-ROUND2.md +169 -0
- package/docs/internal/ARCH-REVIEW-ROUND3.md +206 -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/AUDIT-WB-GRAPH-FULL-20260916.md +314 -0
- package/docs/internal/BATTLE-PLAN-20260917.md +871 -0
- package/docs/internal/CONCURRENCY-INVESTIGATION-20260917.md +192 -0
- package/docs/internal/CROSS-SESSION-SEARCH-PATH-DECISION.md +72 -0
- package/docs/internal/CROSS-SESSION-SEARCH-RESEARCH.md +131 -0
- package/docs/internal/DECISIONS-20260914-SESSION.md +269 -0
- package/docs/internal/DESIGN-P1-STATE-COMMIT-20260915.md +219 -0
- package/docs/internal/DIRECTION-CHECK-WB-GRAPH-20260916.md +132 -0
- package/docs/internal/FEATURE-INVENTORY.md +531 -0
- package/docs/internal/FEEDBACK-TO-DSHAPI-RELAY.md +13 -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/GH-DISCUSSION-5732-COMMENT.md +74 -0
- package/docs/internal/GPT-ACCEPTANCE-PROMPT-20260916.md +352 -0
- package/docs/internal/GPT-REVIEW-PROMPT.md +216 -0
- package/docs/internal/GROUP-WEBHOOK-SETUP.md +33 -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/KICKOFF-P0.md +254 -0
- package/docs/internal/LESSON-TO-CANDIDATE-STATUS-20260919.md +79 -0
- package/docs/internal/MASTER-PLAN-3.0.md +411 -0
- package/docs/internal/MEMORY-GOVERNANCE-20260917.md +309 -0
- package/docs/internal/MEMORY-MUTATION-AND-INDEX-DESIGN.md +85 -0
- package/docs/internal/MERGE-CONFLICT-SCAN-20260914.md +222 -0
- package/docs/internal/PENDING-FIXES-20260916.md +289 -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/RAG-KARPATHY-PROGRAM.md +229 -0
- package/docs/internal/REPORT-P0-NIGHTLY.md +212 -0
- package/docs/internal/REPORT-P5-ACCEPTANCE.md +31 -0
- package/docs/internal/REPORT-WB-GRAPH-NIGHTLY.md +153 -0
- package/docs/internal/RESUME-20260918.md +171 -0
- package/docs/internal/RESUME-20260919.md +104 -0
- package/docs/internal/REVIEW-WB-GRAPH-SELF.md +81 -0
- package/docs/internal/RHINELAB-TO-DEEPSEEK-FEASIBILITY.md +198 -0
- package/docs/internal/ROADMAP-20260917-WEEK.md +439 -0
- package/docs/internal/ROADMAP.md +106 -0
- package/docs/internal/RUN-P0-NIGHTLY.md +227 -0
- package/docs/internal/S10-CONSTRUCTION-HANDOFF-20260917.md +185 -0
- package/docs/internal/S10-GAP-INVENTORY-20260917.md +239 -0
- package/docs/internal/S10-GAPS-PLAIN-20260917.md +125 -0
- package/docs/internal/SEMANTIC-ARCHITECTURE-SPEC.md +360 -0
- package/docs/internal/SESSION-FILE-REPAIR-PROTOCOL.md +90 -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 +219 -0
- package/docs/internal/TODO-BACKLOG.md +263 -142
- package/docs/internal/TODO-GRAPH.html +715 -0
- package/docs/internal/TODO-GRAPH.html.bak-20260914-v2 +493 -0
- package/docs/internal/TODO-GRAPH.html.bak-20260915-alsfix +710 -0
- package/docs/internal/TODO-GRAPH.html.bak-20260915-p1 +710 -0
- package/docs/internal/TODO-GRAPH.html.bak-20260915-p6a-rev +703 -0
- package/docs/internal/TODO-GRAPH.html.bak-20260915-wshint +710 -0
- package/docs/internal/TODO-GRAPH.html.bak-20260916-batch +715 -0
- package/docs/internal/UPSTREAM-ISSUE-PR-TRIAGE-20260919.md +297 -0
- package/docs/internal/UPSTREAM-ISSUES-3RD-AUDIT-20260920.md +104 -0
- package/docs/internal/WB-FORMAT-CONVENTION.md +112 -0
- package/docs/internal/WB-GRAPH-DECISIONS-20260914.md +71 -0
- package/docs/internal/reviews/CLAIM-VERIFICATION-20260914.md +56 -0
- package/docs/internal/reviews/PLAN-gpt6astra-round2-20260914.md +787 -0
- package/docs/internal/reviews/REVIEW-gpt6astra-20260914.md +112 -0
- package/docs/internal/reviews/ROUND3-REVIEW-INTEGRATION-20260914.md +230 -0
- package/docs/prompts/M8-3-enable-verify.md +49 -49
- package/docs/screenshots/promo/promo-0-banner-v3.png +0 -0
- package/lib/acceptance.js +71 -0
- package/lib/activation-host.js +153 -18
- package/lib/activation-inbox.js +25 -7
- package/lib/board-mode.js +30 -0
- package/lib/client.js +1758 -90
- package/lib/config-io.js +156 -0
- package/lib/context-bridge.js +5 -2
- package/lib/context-host.js +86 -15
- package/lib/degrade.js +385 -0
- package/lib/dsh-home.js +143 -0
- package/lib/engine-identity.js +149 -0
- package/lib/engine-switch.js +247 -0
- package/lib/episodic-store.js +63 -12
- package/lib/evidence-store.js +10 -3
- package/lib/fact-store.js +22 -3
- package/lib/fs-retry.js +46 -0
- package/lib/index-sync.js +13 -1
- package/lib/index.js +3446 -263
- package/lib/intent-clean-safe.js +258 -0
- package/lib/intent-clean.js +12 -16
- package/lib/l0-extract.js +478 -149
- package/lib/l0-index-sync.js +195 -0
- package/lib/l0-index.js +349 -239
- package/lib/ledger-criteria.js +142 -0
- package/lib/m4-corpus.js +8 -2
- package/lib/m7-index-sync-host.js +73 -5
- package/lib/m7-wire.js +3 -3
- package/lib/memory-anchor.js +56 -1
- package/lib/memory-envelope.js +257 -0
- package/lib/memory-hub.js +138 -13
- package/lib/memory-index.js +4 -2
- package/lib/memory-mutation.js +246 -0
- package/lib/memory-writer.js +204 -24
- package/lib/note-status-apply.js +118 -0
- package/lib/note-status.js +196 -0
- package/lib/procedure-observation.js +48 -0
- package/lib/procedure-store.js +118 -20
- package/lib/python-setup.js +1 -1
- package/lib/python-sidecar-client.js +29 -3
- package/lib/recall-fusion.js +83 -12
- package/lib/rerank-host.js +160 -0
- package/lib/rules-edit.js +159 -0
- package/lib/rules-layer.js +261 -0
- package/lib/semantic-decide.js +41 -8
- package/lib/semantic-js.js +66 -6
- package/lib/shadow-host.js +3 -5
- package/lib/shadow-retrieval.js +3 -3
- package/lib/skill-export-host.js +153 -0
- package/lib/skill-export.js +239 -0
- package/lib/state-commit.js +245 -0
- package/lib/storage-manage.js +6 -0
- package/lib/subagent-gc.js +4 -8
- package/lib/temporal-parse.js +191 -159
- package/lib/tier-layer-inject.js +650 -0
- package/lib/tier0-catalog.js +735 -0
- package/lib/water-window.js +263 -186
- package/lib/wb-contract.js +691 -0
- package/lib/wb-sidecar.js +890 -0
- package/lib/ws-overview-rank.js +2 -2
- package/package.json +1 -1
- package/python/m7_embedding_v1.py +5 -5
- package/python/worker_semantic_v1.py +17 -6
- package/python/worker_v1.py +38 -4
|
@@ -0,0 +1,531 @@
|
|
|
1
|
+
# FEATURE-INVENTORY · dsh-auto-memory 三层功能全量清单
|
|
2
|
+
|
|
3
|
+
> 生成:2026-09-20(ZCode 线,交接任务 §4-A)。枚举基准:本仓工作区 `lib/index.js`(11,463 行)、`lib/client.js`(5,706 行)及 `lib/*-pre.js` 生效模块,全部**机械枚举**(node 脚本 + grep),非手工抄录。
|
|
4
|
+
> 生效文件口径:宿主真正 import 的是 `lib/*-pre.js`(`lib/index.js:29-85` 的 import 表)与 `lib/index.js`、`lib/client.js`;同名无 `-pre` 后缀的 `lib/*.js` 是**陈旧副本,不生效**(本清单所有 file:line 均指向生效文件)。
|
|
5
|
+
> 本文 L3 的地位是**存档**:全量不删减,供后续决定哪些上首页、哪些进 README、哪些留后台。
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 0. 核对表(实际枚举数 vs 交接数字)
|
|
10
|
+
|
|
11
|
+
| 项 | 交接数字(HANDOFF-TO-ZCODE-20260920 §4-A) | 实际枚举数 | 结论 | 证据 |
|
|
12
|
+
|---|---|---|---|---|
|
|
13
|
+
| 模型工具 | 17 | **17** | 一致 | `defineTool(` 全仓 17 处调用(index.js:9982-10318);14 个 `memory_*` + 3 个 `calendar_*`;其中 `memory_expand_pre` / `memory_trace_pre` 为 `boardMode=graph` 时的条件注册(index.js:10309-10317) |
|
|
14
|
+
| HTTP 路由 | 49 | **49** | 一致 | 常量表 `export const API = {`(index.js:161-206)恰 49 键;路由数组 `const routes = [`(index.js:10320)恰 49 个 `{kind,path,handler}` 条目,经 `ctx.webServer.register(route)` 挂载(index.js:11451) |
|
|
15
|
+
| 设置键 | 85 | **98**(顶层数) | **不符:+13** | `DEFAULT_CONFIG`(index.js:258-586)顶层键实数 98。旧 85 清单(UI-INVENTORY-RAW.md)之后新增 13 键:`boardMode`(L264)、`tier0CatalogEnabled`(L291)、`tier0MaxTokens`(L295)、`tier0BudgetShare`(L298)、`injectExcludeSources`(L308)、`capacityDefaultsVersion`(L331)、`slimPlanChars`(L368)、`slimLedgerChars`(L369)、`rulesLayeringMode`(L379)、`criteriaGate`(L385)、`snapshotTieredInject`(L441)、`l0IndexEnabled`(L536)、`hubMechanicalProcedureFeedEnabled`(L557)。85+13=98,逐键对得上。另:`externalSources`(L471) 含 13 个子键(L472-485);`DEFAULT_PROMPT_LAYERS`(index.js:592-647)另有 23 个 prompt 层文案键(可被 `promptLayerOverrides` 覆盖),**不属于** DEFAULT_CONFIG,不计入 98 |
|
|
16
|
+
| 插槽注册 | 6 | **6** | 一致 | `slots.inject(` 在 client.js 恰 6 处(L5664/5667/5670/5673/5676/5683)。旧文档(UI-INVENTORY-RAW §1)的「5 注册面」少的是 2026-09-16 新增的 `conversation.view` 白板看板(client.js:5683-5689) |
|
|
17
|
+
| 面板页签 | 12(旧文档) | **12** | 与旧文档一致 | client.js:4023(数组定义)/ 4011-4022(分派) |
|
|
18
|
+
| 设置分组 | 8(旧文档) | **8** | 一致 | `section(` 恰 8 处(client.js:5095/5249/5264/5289/5306/5337/5363/5396);组名表 `sectionLabels`(client.js:5077-5084) |
|
|
19
|
+
| index.js 行数 | 约 11,460 | 11,463 | 一致 | `wc -l` |
|
|
20
|
+
| client.js 行数 | 约 5,701 | 5,706 | 一致(±5 行漂移) | `wc -l` |
|
|
21
|
+
|
|
22
|
+
> 注意:交接 §4-B 写的「61 个插槽清单」是**宿主侧插槽目录总量**(宿主提供的插槽位),插件实际注册的只有 6 个——两者不矛盾,别混用。旧 DESIGN-OVERHAUL §1.1 的「46 条路由 / 14 工具 / 69 套件」均为 2026-09-10 口径,已过时。
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## L1 · 用户能力(一句话一条,面向宣传)
|
|
27
|
+
|
|
28
|
+
**记忆写入与沉淀**
|
|
29
|
+
|
|
30
|
+
1. **全自动记忆沉淀**:每轮对话结束自动把结论写进当日工作日志、把有长期价值的要点升格进项目笔记,寒暄轮自动跳过——用户零操作(`autoConsolidate`,默认开,index.js:337)。
|
|
31
|
+
2. **三层本地记忆**:用户级(跨项目规则/偏好)、项目级(约定/决策/架构)、每日日志,全部纯 Markdown 明文,看得见、改得了、带得走(index.js:2137-2147)。
|
|
32
|
+
3. **做梦式定时固化**:每天 09:30 读最近 7 天日志发散提炼长期要点(`consolidateSchedule*`,index.js:345-349)。
|
|
33
|
+
4. **30 天蒸馏**:每天 10:00 把 30 天前的旧日志蒸馏进项目笔记,原文保底归档,信息不丢(`maintainSchedule*`,index.js:351-353)。
|
|
34
|
+
5. **每日反思**:自动检测昨日反思缺口并提示模型生成,落盘反思目录,当天不重复打扰(`reflectEnabled`,index.js:463)。
|
|
35
|
+
|
|
36
|
+
**记忆检索与召回**
|
|
37
|
+
|
|
38
|
+
6. **跨会话记忆检索**:一句话找回"上周的决定/之前的做法",覆盖全部工作区的日志、笔记、反思、白板(`memory_recall_pre`,index.js:10130)。
|
|
39
|
+
7. **两段式省 token 检索**:先返回 L0 摘要列表(id/得分/匹配原因),看中哪条再按 id 展开全文(format=l0 + expand,index.js:10134-10135)。
|
|
40
|
+
8. **智能分层语义检索**:词法 + 内置 JS 语义模型(可选 130MB Python 引擎)双路召回,RRF 融合排序(`smartRecall`,index.js:6441;recall-fusion-pre.js:55)。
|
|
41
|
+
9. **历史会话全文检索**:搜过的不只是记忆文件,还有历史 DSH 会话转写(`scope=sessions`,index.js:2791,6007-6014)。
|
|
42
|
+
10. **外部 AI 工具记忆继承**:自动发现并接入 WorkBuddy/CodeBuddy/Claude Code/Codex/ZCode/Kimi Code/TRAE 的记忆与会话,纯链接模式不抄内容(`memory_external_pre`,index.js:10159;外部源 13 子键,index.js:471-486)。
|
|
43
|
+
|
|
44
|
+
**注入与上下文管理**
|
|
45
|
+
|
|
46
|
+
11. **自动记忆注入**:每轮对话自动携带记忆快照(规则/日志/反思/用户记忆/笔记),预算与频率可调(`injectEnabled`/`injectBudgetChars`,index.js:272-310)。
|
|
47
|
+
12. **Tier-0 常驻目录**:注入首位的记忆索引(每条 1 行:标题·结论·层·状态·日期),零 LLM 成本,让模型知道"有什么、怎么取"(`tier0Catalog*`,index.js:291-306;生成器 tier0-catalog-pre.js,纯内存计算零 IO)。
|
|
48
|
+
13. **用户级硬性约束规则层**:日志里标 `kind=rule` 的条目自动识别为硬约束,每轮以「必须遵守」段注入,与背景参考内容分层措辞(rules-layer-pre.js:142,238;T7 措辞分层 `rulesLayeringMode`,index.js:379)。
|
|
49
|
+
14. **精简注入节奏**:完整快照每 N 轮一次、其余轮次只给规则+索引+日程,token 成本可控(`snapshotTieredInject`/`snapshotMinGapRounds`,index.js:441-447)。
|
|
50
|
+
15. **结论生命周期管理**:结论被取代标 superseded、做错了标 retracted(附原因)、标错可 restore——检索结果永远带状态标记(memory_note_pre 的 `supersedes/retract/restore`,index.js:10014-10018)。
|
|
51
|
+
|
|
52
|
+
**白板与接续**
|
|
53
|
+
|
|
54
|
+
16. **项目白板**:模型维护的"项目全貌快照" PLAN.md,旧版自动归档,用户面板直接看(`memory_note_pre kind=plan`,index.js:2248-2266)。
|
|
55
|
+
17. **四段式交接账本**:任务状态/目标/已试方案与失败原因/下一步,append-only,专供"换个窗口接着干"(`kind=handoff`,index.js:2355-2369)。
|
|
56
|
+
18. **白板看板(新版)**:白板/账本结构化为 5 泳道看板(目标/状态/死胡同/进度/版本归档),面板 440px 看泳道、会话页顶栏看整页矩阵(boardMode=graph 默认,index.js:264;wb-sidecar-pre.js:593,647,804)。
|
|
57
|
+
19. **白板溯源工具**:按 tag 正向展开所有同类条目、按 id 反向回溯结论来源与版本链(`memory_expand_pre`/`memory_trace_pre`,index.js:10310,10314)。
|
|
58
|
+
20. **自动接续**:上下文水位越阈自动写交接骨架→确认卡倒计时→刷新仪式→组装四层交接材料→新窗口无缝续命(water-window-pre.js:259;index.js:3375-3377,4021-4022)。
|
|
59
|
+
21. **上下文水位提示**:官方公式估算窗口占用,接近阈值时注入"该收尾了"的三步执行清单(`waterLevel*`,index.js:387-399)。
|
|
60
|
+
|
|
61
|
+
**技能库(procedure memory)**
|
|
62
|
+
|
|
63
|
+
22. **模型直写技能(T4,2026-09-14 后新增)**:模型把跑通的多步流程直接写成技能条目(工具 `memory_procedure_pre`,工具数 16→17 的那一刀),含步骤/成功判据/回滚/风险级(index.js:10233-10241)。
|
|
64
|
+
23. **技能晋升门槛与审批**:observed→candidate→validated→active 五阶段,跨会话≥3、成功≥2、correction 占比≤0.3 的统计门 + 高风险人工批准(procedure-store-pre.js:41,56-68;设置页「记忆中枢」分组可调)。
|
|
65
|
+
24. **技能自动导出 SKILL.md**:激活的技能自动导出为 `<DSH_HOME>/skills/<目录>/SKILL.md`(DSH 四条技能发现路径之一,跨项目可迁移)(skill-export-host-pre.js:29-36;index.js:10284,10804)。
|
|
66
|
+
25. **审批界面人话化(R1-R6,2026-09-20)**:审批不再盲确认——阶段名中文化、晋升为什么不够用带具体数字的人话、reasonCodes 透出、可展开预览真实步骤(client.js:2596-2627 的 stageLabel/whyNotPromotable 辅助 + MemoryHubTab)。
|
|
67
|
+
|
|
68
|
+
**面板与界面**
|
|
69
|
+
|
|
70
|
+
26. **12 页签记忆面板**:概览/日志/唤起回顾/记忆中枢/存储管理/笔记/白板/反思/接续/日历/检索/工作区,液态玻璃浮层 + 会话页整页看板(client.js:4023)。
|
|
71
|
+
27. **用户级硬性约束可视编辑(R7,2026-09-20)**:用户在日志页签直接增删改"每轮必注入的硬约束",带预览与删除二次确认(RulesEditPanel,client.js:2628-2655,挂载于日志页签 client.js:2590)。
|
|
72
|
+
28. **主动联想记忆**:从思维链与对话中检测联想线索,相似记忆自动唤回注入(canary 档)或仅记录(shadow 档)(`associativeMemoryEnabled`,index.js:489;semantic-decide-pre.js:202)。
|
|
73
|
+
29. **唤起回顾与打分闭环**:每次自动唤起可打 A/P/S/H/E 分,反馈进 review-queue 反哺决策(RefineTab + `/review-feedback`,index.js:10702)。
|
|
74
|
+
30. **工作区地图**:全部工作区的记忆分布关系图 + 跨工作区 AI 总结(WorkspaceTab/WorkspaceGraph,client.js:3543)。
|
|
75
|
+
31. **用户级日历**:对话里提到 deadline/约定即入日历(四象限分类),跨对话有效(calendar_* 4 工具,index.js:10180-10215)。
|
|
76
|
+
32. **首启欢迎向导**:10 个内联开关一次配好(联想/固化/反思/定时总结/思维链监听/技能固化…),外部源批量勾选(DialogHost,client.js:4269-4399)。
|
|
77
|
+
33. **安装向导与环境检测**:JS 语义模型一键下载 / Python 引擎 venv+依赖+模型一条龙,深扫+热接入(PySetupWizard,client.js:2233;`/python-setup/*` 6 路由 + `/semantic-*` 3 路由)。
|
|
78
|
+
34. **存储管理**:全记忆文件扫描/修复/删除(删除有确认),脏 token 扫描(mojibake/裸 JSON/超长行)(StorageTab + `/storage-manage`,index.js:10832)。
|
|
79
|
+
35. **子代理痕迹回收**:插件标记的子代理会话按策略回收,兜底保留 N 天(`subagentGc*`,index.js:417-419;subagent-gc-pre.js)。
|
|
80
|
+
|
|
81
|
+
**可靠性(2026-09-14 后新交付的工程面)**
|
|
82
|
+
|
|
83
|
+
36. **配置原子写入 + 损坏隔离(#82)**:保存中途崩溃不再无感重置全部配置——临时文件+rename 原子落盘(config-io-pre.js:72);坏文件改名 `.corrupt-<ts>` 留存并返回结构化错误(config-io-pre.js:37,55,117;index.js:1890-1894,1943,1963)。
|
|
84
|
+
37. **DSH_HOME 统一(#86-3)**:7 处各写的家目录解析收敛为 `dsh-home-pre.js` 一处实现(resolveDshHomePre,dsh-home-pre.js:86),引擎侧 55 处调用统一走它(index.js:72)——跨平台路径不再打架。
|
|
85
|
+
38. **诊断留痕(#84)**:unhandledRejection 有 `{count, firstAt, lastAt, lastLine}` 统计(index.js:8968-8977);思维链观察器丢弃分计数 noOwner/duplicate/ignored(index.js:1070,1582-1687);降级台账 DEGRADE_RING(degrade-pre.js:65,159,容量 200)——所有 fail-soft 都有可观察信号。
|
|
86
|
+
39. **机械流程切片默认关闭(T10,2026-09-20)**:把情节意图机械截断成"技能"的旧通路默认关(`hubMechanicalProcedureFeedEnabled: false`,index.js:557,9063),技能库只保留模型直写+人工审批来源;向导里有标注「不推荐」的回退开关(client.js:4327)。
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## L2 · 承载面(每个能力现在住在哪,面向前端搬家)
|
|
91
|
+
|
|
92
|
+
### L2.1 六处插槽注册(全部在 client.js,插件 UI 的物理入口)
|
|
93
|
+
|
|
94
|
+
| # | 插槽名 | 注册 id | order | 渲染组件 | 定义行 | 承载什么 |
|
|
95
|
+
|---|---|---|---|---|---|---|
|
|
96
|
+
| 1 | `sidebar.footer.action` | `auto-memory-pre` | 5 | SidebarButton | client.js:5664-5665 | 侧栏入口按钮「记忆 (pre)」 |
|
|
97
|
+
| 2 | `shell.overlay` | `auto-memory-pre` | 5 | MemoryPanel | client.js:5667-5668 | 浮层面板(12 页签全在这里面) |
|
|
98
|
+
| 3 | `shell.overlay` | `auto-memory-pre-dialogs` | 6 | DialogHost | client.js:5670-5671 | 7 种弹窗(更新/向导/模型下载/通知/总结/欢迎回来/语义安装) |
|
|
99
|
+
| 4 | `shell.overlay` | `auto-memory-pre-autocont` | 7 | AutoContinueHost | client.js:5673-5674 | 自动接续确认卡 |
|
|
100
|
+
| 5 | `settings.section` | `auto-memory-pre` | 25 | SettingsPage | client.js:5676-5677 | 设置页分区「自动记忆 (pre)」(8 分组 60+ 键) |
|
|
101
|
+
| 6 | `conversation.view` | `auto-memory-pre-kanban` | 80 | KanbanView | client.js:5683-5689 | 会话页顶栏「白板看板」整页视图(2026-09-16 双承载面设计) |
|
|
102
|
+
|
|
103
|
+
### L2.2 浮层面板 12 页签 → 组件 → 后端路由
|
|
104
|
+
|
|
105
|
+
页签数组 client.js:4023,分派 4011-4022。中文标签取自 i18n(client.js:167)。
|
|
106
|
+
|
|
107
|
+
| 页签 id | 中文 | 组件(定义行) | 主要数据路由 | 主要操作路由 |
|
|
108
|
+
|---|---|---|---|---|
|
|
109
|
+
| overview | 概览 | OverviewTab(2315)+ GreetingCard(2115) | `/state`、`/workspaces`、`/greet`、`/summarize` | `/reflect-auto` |
|
|
110
|
+
| logs | 日志 | LogsTab(2537) | `/list`、`/file`、`/state`(用户级记忆展示) | — ;**R7 RulesEditPanel 挂载在日志页签内**(client.js:2590) |
|
|
111
|
+
| refine | 唤起回顾 | RefineTab(2413) | `/shadow-recent` | `/review-feedback`(A/P/S/H/E 打分) |
|
|
112
|
+
| hub | 记忆中枢 | MemoryHubTab(2724) | `/memory-hub`(GET overview) | `/memory-hub`(POST promote/activate/deprecate/pin);R1-R6 人话化辅助 2596-2627 |
|
|
113
|
+
| storage | 存储管理 | StorageTab(2850) | `/storage-manage`(GET 扫描) | `/storage-manage`(POST 修复/删除)、`/scan-dirty` |
|
|
114
|
+
| notes | 笔记 | NotesTab(2936) | `/state` | `/note` |
|
|
115
|
+
| plan | 白板 | PlanTab(3111) | `/handoff-state`(PLAN+账本+版本) | `/handoff-continue`(一键接续) |
|
|
116
|
+
| reflections | 反思 | ReflectionsTab(3364) | `/file`(反思正文) | `/reflect`、`/reflect-auto` |
|
|
117
|
+
| connect | 接续 | ConnectTab(3764) | `/external`、`/external-view` | `/external-import`、`/external-remove` |
|
|
118
|
+
| calendar | 日历 | CalendarTab(3594) | `/calendar`(GET) | `/calendar`(POST 增改) |
|
|
119
|
+
| search | 检索 | SearchTab(3420) | — | `/recall`、`/smart-recall`(均 POST) |
|
|
120
|
+
| workspaces | 工作区 | WorkspaceTab(3543)+ WorkspaceGraph | `/workspaces` | — |
|
|
121
|
+
|
|
122
|
+
面板外壳(MemoryPanel)自身还消费:`/config`(GET 读取)、`/notices`、`/update-check`、`/debug`(调试中心 DebugCenter,client.js:4070)。KanbanView(1852)消费 `/kanban-board`。
|
|
123
|
+
|
|
124
|
+
### L2.3 设置页 8 分组 → 可写配置键
|
|
125
|
+
|
|
126
|
+
分组定义 `section('…')`:client.js:5095/5249/5264/5289/5306/5337/5363/5396;组名 `sectionLabels`(5077-5084)。写入统一走 `set(key)`(SettingsPage 本地草稿)→「保存设置」→ `saveConfigPatch`(client.js:999-1200,唯一写入出口)→ `POST /config`。
|
|
127
|
+
|
|
128
|
+
| 分组 | 中文 | section 行 | 组内可写键(set() 枚举,共 60) |
|
|
129
|
+
|---|---|---|---|
|
|
130
|
+
| semantic | 自动记忆引擎 | 5095 | associativeMemoryEnabled, memoryAnchorEnabled, jsDecideCooldownRounds, jsDecideDeltaExp, jsDecideExcerptChars, jsDecideCandidateScheme, jsDecideCandidatesN, reasoningObserverEnabled, contextBridgeObserveChildSessions(9) |
|
|
131
|
+
| memoryHub | 记忆中枢 | 5249 | memoryHubEnabled, episodicMinSegments, episodicRetention, procedureMinSessions, procedureMinSuccess, procedureCorrectionCap, procedureHighRiskApproval, procedureActiveLevel(8) |
|
|
132
|
+
| appearance | 外观 | 5264 | welcomeTourEnabled, locale(2) |
|
|
133
|
+
| storage | 存储 | 5289 | userMemoryDir, projectMemoryDir, memoryRoot(3);目录浏览器/模型抽屉另有 subagentModel、subagentProvider、subagentReasoningEffort 写入(client.js:4848,4911,4979 一带) |
|
|
134
|
+
| injection | 记忆窗口 | 5306 | injectEnabled, injectBudgetChars, injectExcludeSources, noteCapacityChars, userCapacityChars, recentDaysInjected, externalInjectionChars, snapshotMinGapRounds, snapshotReinjectOnCompact, promptLayerOverrides(10) |
|
|
135
|
+
| automation | 自动化 | 5337 | autoConsolidateMinChars, autoConsolidate, autoConsolidateCooldownMinutes, autoConsolidateDailyMax, autoPopupEnabled, unattendedMode, unattendedAuto, awayMinutes, autoSummaryTimes, dayBoundaryMinutes, reflectEnabled, consolidateScheduleEnabled, consolidateScheduleTime, consolidateScheduleDays, maintainScheduleEnabled, maintainScheduleTime, reflectStyle(17) |
|
|
136
|
+
| context | 上下文管理 | 5363 | handoffEnabled, autoContinueEnabled, handoffPlanChars, handoffLedgerChars, waterLevelWindowTokens, waterLevelThreshold, waterLevelAdvisory, waterLevelAutoHandoff, boardMode, subagentGcEnabled, subagentGcKeepDays(11) |
|
|
137
|
+
| maintenance | 维护 | 5396 | (版本/更新/调试中心,无配置键写入) |
|
|
138
|
+
|
|
139
|
+
**分组之外的特殊写入位**(搬家时别漏):
|
|
140
|
+
|
|
141
|
+
- 引擎三联动:`semanticEngineMode` + `activationSource` + `contextSinkMode` 三键绑定写入(onEngineModeChange,client.js:5060-5064;向导「启用并继续」5237)。
|
|
142
|
+
- 首启向导内联开关(DialogHost,client.js:4269-4399):autoSummaryTimes、reasoningObserverEnabled、activationEmitMode(伪键,映射 semantic-emit 档位)、autoConsolidate、procedurePromotionEnabled、hubMechanicalProcedureFeedEnabled(T10 回退开关,4327)、externalSources 13 子键勾选(4384-4396)等。
|
|
143
|
+
- 白板页 autoContinue 快捷写:PlanTab 内 autoSave 走同一 saveConfigPatch(client.js:5377 注释明确要求同源)。
|
|
144
|
+
|
|
145
|
+
### L2.4 能力 → 承载面速查(前端搬家工作单)
|
|
146
|
+
|
|
147
|
+
| 能力 | 现住承载面 | 若搬家建议的落点类型 |
|
|
148
|
+
|---|---|---|
|
|
149
|
+
| 记忆状态一览/问候/时段总结 | 面板「概览」页签 | 状态展示型(conversation.header 一行小状态) |
|
|
150
|
+
| 日志浏览 + 用户级硬性约束编辑(R7) | 面板「日志」页签 | 内容管理型(侧栏面板) |
|
|
151
|
+
| 唤起回顾打分 | 面板「唤起回顾」页签 | 对话内交互 |
|
|
152
|
+
| 三层记忆审批(含 R1-R6 人话化) | 面板「记忆中枢」页签 | 宽幅右侧文档页 |
|
|
153
|
+
| 存储/修复/删除 | 面板「存储管理」页签 | 宽幅右侧文档页 |
|
|
154
|
+
| 白板/账本 | 面板「白板」页签 + `conversation.view` 整页看板 | 双承载面(已是目标形态) |
|
|
155
|
+
| 接续材料/外部源管理 | 面板「接续」页签 | 侧栏面板 |
|
|
156
|
+
| 自动接续确认卡 | `shell.overlay` AutoContinueHost | 对话内弹卡 |
|
|
157
|
+
| 设置(60+ 键) | `settings.section` 8 分组 | 原生设置位 |
|
|
158
|
+
| 首启/安装向导 | `shell.overlay` DialogHost | 保留 overlay |
|
|
159
|
+
| 侧栏入口 | `sidebar.footer.action` | 保留 |
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## L3 · 工程细节(存档层——全量枚举,不做取舍)
|
|
164
|
+
|
|
165
|
+
### L3-a · 全部 17 个模型工具
|
|
166
|
+
|
|
167
|
+
注册方式:`defineTool(name, description, parameters, execute)`(index.js:7934),在 mount 阶段集中注册;工具数随 `boardMode` 条件变化(graph 档 17,legacy 档 15)。启动日志:`ready: engine + N tools + injection + 49 routes`(index.js:11459)。
|
|
168
|
+
|
|
169
|
+
| # | 工具名 | 定义行 | 参数签名 | 用途(摘要自 description,全文在源码) |
|
|
170
|
+
|---|---|---|---|---|
|
|
171
|
+
| 1 | `memory_log_pre` | index.js:9982 | `note`(string,必填)、`date`(string,缺省今天,可补记过去)、`kind`(enum rule\|preference\|fact\|todo,缺省 fact) | 向当前工作区今日日志追加一条工作记录(append-only)。kind=rule 的条目会被规则层识别为硬约束每轮注入。完成实质性工作后必须调用;顺带条件触发白板/账本维护 |
|
|
172
|
+
| 2 | `memory_note_pre` | index.js:10007 | `content`(string,必填)、`action`(enum append\|replace)、`kind`(enum note\|handoff\|plan)、`supersedes`(array of mem_id)、`retract`(array of mem_id)、`retractReason`(string,≤120 字)、`restore`(array of mem_id) | 项目级写入口:note=项目笔记 MEMORY.md(容量上限 noteCapacityChars,超限先 AI 折叠、再归档 archive/、最后才拒绝);handoff=四段式交接账本新篇(append-only);plan=白板 PLAN.md 整体重写(唯一能覆盖旧结论的通道,旧版自动归档)。状态通道:superseded/retracted/restore |
|
|
173
|
+
| 3 | `memory_user_pre` | index.js:10078 | `content`(string,必填)、`action`(enum append\|replace,必填) | 用户级记忆 ~/.dsh/memory/MEMORY.md(跨项目规则/偏好),容量上限 userCapacityChars,超限行为同上 |
|
|
174
|
+
| 4 | `memory_read_pre` | index.js:10107 | `kind`(enum log\|reflection\|user\|notes\|calendar,必填)、`date`(string,log/reflection 用,缺省今天) | 按需读取记忆文件完整原文(注入只含摘要,要细节用本工具) |
|
|
175
|
+
| 5 | `memory_recall_pre` | index.js:10130 | `query`(string,必填)、`limit`(integer,缺省 8)、`scope`(enum all\|handoff\|sessions)、`format`(enum l0\|full)、`expand`(string,mem_<32hex>) | 记忆检索主入口:本地多工作区 + 交接白板语料 + 历史会话。默认 L0 摘要列表;expand 为两段式第二段(提供时忽略 query 语义)。scope=handoff 只搜白板语料,scope=sessions 只搜历史会话 |
|
|
176
|
+
| 6 | `memory_maintain_pre` | index.js:10138 | `days`(integer,缺省 30) | 30 天蒸馏:早于「今天−days」的日志交给 AI 蒸馏要点进 MEMORY.md,原文保底归档 archive/;AI 不可用降级为原样归档,不丢信息 |
|
|
177
|
+
| 7 | `memory_status_pre` | index.js:10142 | (无参数) | 只读诊断:存储位置、各文件大小、今日日志条数、待反思、上次刷新时间 |
|
|
178
|
+
| 8 | `memory_reflect_pre` | index.js:10154 | `date`(string,必填,被反思那天的日志日期)、`text`(string,必填) | 保存每日反思到 .dsh-memory/reflections/YYYY-MM-DD.md 并标记当日完成。触发条件严格:仅在框架提示+正文已呈现反思后调用 |
|
|
179
|
+
| 9 | `memory_external_pre` | index.js:10159 | `action`(enum list\|import,必填)、`source`(string,import 必填)、`target`(enum project\|user) | 外部记忆源查看/接入。import 为**纯链接模式**:只写源文件绝对路径指针,不抄内容 |
|
|
180
|
+
| 10 | `calendar_add_pre` | index.js:10180 | `date`(string,缺省今天)、`time`(string)、`quadrant`(enum 重要紧急\|重要不紧急\|紧急不重要\|不重要不紧急)、`title`(string,必填)、`location`、`reminder`、`note` | 向用户级日历 ~/.dsh/memory/CALENDAR.md 添加日程(跨对话有效) |
|
|
181
|
+
| 11 | `calendar_list_pre` | index.js:10190 | `date`(string,过滤日期,缺省近 60 天) | 列出日历条目(含完成状态) |
|
|
182
|
+
| 12 | `calendar_done_pre` | index.js:10204 | `date`/`time`/`title`(均必填,需与 list 结果一致) | 标记日历条目完成 |
|
|
183
|
+
| 13 | `calendar_remove_pre` | index.js:10210 | `date`/`time`/`title`(均必填) | 删除日历条目 |
|
|
184
|
+
| 14 | `memory_consolidate_pre` | index.js:10216 | `days`(integer,缺省 7,上限 30) | AI 主动固化(与自动沉淀互补):读最近 N 天日志发散提炼,写入项目笔记+用户级记忆。阶段性收尾用,不替代每轮 memory_log_pre |
|
|
185
|
+
| 15 | `memory_procedure_pre` | index.js:10233 | `action`(enum write\|activate)、`title`(string,必填)、`steps`(string,必填,一行一步)、`successCriteria`(string,一行一条)、`preconditions`、`checks`、`rollback`、`riskLevel`(enum low\|medium\|high) | **T4 模型直写通路**(09-14 后新增):把可复用流程写进 procedure memory。write=进审批列表(保守);activate=跳统计门直接晋升+激活+自动导出 SKILL.md(authorizedBy:'model',index.js:10275-10284)。无 successCriteria 的条目结构上无法晋升 |
|
|
186
|
+
| 16 | `memory_expand_pre` | index.js:10310(条件注册:仅 `resolveBoardModePre(config.boardMode).graphEnabled` 为真时 push,index.js:10309) | `tag`(string,如 type:dead-end)、`limit`(integer,缺省 10,硬帽 20) | 白板结构化正向遍历(P3):按 tag 展开全部匹配账本/白板条目,返回 id/标题/来源/判据状态。实现:engine.expandWhiteboardByTagPre → wb-sidecar-pre.js `expandByTagPre`(L453) |
|
|
187
|
+
| 17 | `memory_trace_pre` | index.js:10314(条件注册:同上) | `id`(string,index.json 条目 id) | 白板结构化反向回溯(P3):按条目 id 回溯 cue/tag/相邻条目/归档版本链。实现:engine.traceWhiteboardByIdPre → wb-sidecar-pre.js `traceByIdPre`(L492) |
|
|
188
|
+
|
|
189
|
+
> 历史口径:DESIGN-OVERHAUL §1.1 的「14 个 memory_* 工具」是 2026-09-10 冻结口径;14→16 是白板 graph 两工具(BUG-15 修复后真正注册成功,index.js:10306-10309 注释),16→17 是 T4。日历 4 工具(calendar_*)一直与 memory_* 并列存在。
|
|
190
|
+
|
|
191
|
+
### L3-b · 全部 49 条 HTTP 路由
|
|
192
|
+
|
|
193
|
+
- 前缀常量:宿主 `API` 表(index.js:161-206,49 键);客户端独立维护同一批路径(client.js:1105-1160,`ROUTE_PREFIX='/api/dsh-auto-memory-pre'`),两侧一致性由 tests/smoke 路径表锁保证(client.js:1106-1108 注释)。
|
|
194
|
+
- 挂载:`const routes = [...]`(index.js:10320-11383)→ `ctx.webServer.register(route)`(index.js:11451)。全部 `kind:'exact'`。
|
|
195
|
+
- **认证边界:全部 49 条 handler 第一行都是 `isLoopbackRequest(req)` 检查,非回环地址一律 `403 {error:'forbidden: loopback-only'}`**(如 index.js:10887)。无 token/签名机制——安全模型是「只听本机回环」。
|
|
196
|
+
- 方法纪律:读路由 `GET`(非 GET→405);动作路由 `POST`(非 POST→405);`/config` 同时接受 GET+POST/PUT(index.js:11096-11124);少数探测类路由不检查方法(下表标「不限」)。
|
|
197
|
+
- 客户端消费符号:`API.<key>`(client.js:1109-1160);「对不上界面」= client.js 无该键引用(现仅 1 条,见尾注)。
|
|
198
|
+
|
|
199
|
+
| # | 路径(前缀 `/api/dsh-auto-memory-pre` 省略) | API 键 | 注册行 | 方法 | 用途 | 消费方(client.js 侧) |
|
|
200
|
+
|---|---|---|---|---|---|---|
|
|
201
|
+
| 1 | /python-setup/status | py-setup-status | 10322 | 不限(轮询) | Python 安装进度 | PySetupWizard 轮询 |
|
|
202
|
+
| 2 | /python-setup/detect | py-setup-detect | 10330 | 不限 | 检测 Python 环境 | PySetupWizard |
|
|
203
|
+
| 3 | /python-setup/venv | py-setup-venv | 10338 | POST | 建 venv | PySetupWizard |
|
|
204
|
+
| 4 | /python-setup/deps | py-setup-deps | 10348 | POST | 装依赖 | PySetupWizard |
|
|
205
|
+
| 5 | /python-setup/model | py-setup-model | 10358 | POST | 下载模型 | PySetupWizard |
|
|
206
|
+
| 6 | /python-setup/cancel | py-setup-cancel | 10367 | POST | 取消下载 | PySetupWizard |
|
|
207
|
+
| 7 | /semantic-status | semantic-status | 10376 | 不限 | 语义资产就绪状态 | 设置页语义区块/向导 |
|
|
208
|
+
| 8 | /semantic-deep-detect | semantic-deep-detect | 10439 | 不限 | 快检+深扫+热接入 | 设置页环境检测 ⟳ |
|
|
209
|
+
| 9 | /handoff-state | handoff-state | 10448 | 不限 | 白板 PLAN+账本+版本数据 | PlanTab |
|
|
210
|
+
| 10 | /kanban-board | kanban-board | 10460 | 不限 | 新版看板矩阵/段视图数据(graph 档) | KanbanView(conversation.view) |
|
|
211
|
+
| 11 | /handoff-continue | handoff-continue | 10473 | POST | 构造接续材料(四层) | PlanTab 一键接续 |
|
|
212
|
+
| 12 | /handoff-permission | handoff-permission | 10489 | POST | 接续权限预设继承 | 接续流程(无独立 UI) |
|
|
213
|
+
| 13 | /auto-continue-state | auto-continue-state | 10510 | 不限 | 自动接续宿主状态(armed/edgeAt) | AutoContinueHost 轮询 |
|
|
214
|
+
| 14 | /auto-continue-decide | auto-continue-decide | 10522 | POST | 同意/拒绝接续 | AutoContinueHost 确认卡 |
|
|
215
|
+
| 15 | /subagent-gc | subagent-gc | 10536 | GET | 子代理痕迹回收(dryRun 参数) | **client.js 零引用**(回收动作由引擎内部调度触发:一次性子代理结束即移痕迹 + 每日兜底巡检;UI 只有 `subagentGc*` 两个开关键,client.js:5392-5394) |
|
|
216
|
+
| 16 | /semantic-download | semantic-download | 10570 | POST | 下载 JS 语义模型 | 设置页/向导 |
|
|
217
|
+
| 17 | /semantic-emit | semantic-emit | 10590 | POST | 唤起注入档位(canary/shadow 等) | 设置页 emit 下拉/向导 |
|
|
218
|
+
| 18 | /shadow-recent | shadow-recent | 10616 | 不限 | shadow 观测记录(供回顾打分) | RefineTab |
|
|
219
|
+
| 19 | /review-feedback | review-feedback | 10702 | POST | 唤起决策打分(A/P/S/H/E)写入 review-queue.jsonl | RefineTab |
|
|
220
|
+
| 20 | /memory-hub | memory-hub | 10770 | GET 读 / POST 动作 | 三层记忆中枢:GET overview;POST consolidate/feed/render/crossfeed/promote/activate/deprecate/pin(10782-10825) | MemoryHubTab(hubAct,client.js:2747-2759) |
|
|
221
|
+
| 21 | /storage-manage | storage-manage | 10832 | GET 扫描 / POST 修复删除 | 存储扫描/修复/删除 | StorageTab |
|
|
222
|
+
| 22 | /activation-inbox-pre | activation-inbox-pre | 10866 | POST | M6 激活收件箱 | **client.js 零引用**(能力在、UI 未接;沿旧盘点口径保留标注) |
|
|
223
|
+
| 23 | /state | state | 10884 | GET | 记忆状态快照(注入文本/各文件正文/日历/暂离) | OverviewTab/LogsTab/NotesTab/调试中心 |
|
|
224
|
+
| 24 | /list | list | 10899 | GET | 日志文件列表 | LogsTab |
|
|
225
|
+
| 25 | /file | file | 10920 | GET | 读单个记忆文件(path 参数) | LogsTab「查看」/ReflectionsTab |
|
|
226
|
+
| 26 | /recall | recall | 10940 | POST | 本地记忆检索(engine.recall) | SearchTab「检索」 |
|
|
227
|
+
| 27 | /smart-recall | smartRecall | 10951 | POST | 分层语义检索(engine.smartRecall,单飞防抖 index.js:6441-6445) | SearchTab「智能检索」 |
|
|
228
|
+
| 28 | /workspaces | workspaces | 10966 | POST | 工作区清单+关系图+跨工作区总结 | OverviewTab/WorkspaceTab |
|
|
229
|
+
| 29 | /debug | debug | 10978 | GET | 诊断信息(运行时状态/丢弃计数) | 调试中心 DebugCenter |
|
|
230
|
+
| 30 | /scan-dirty | scanDirty | 10987 | GET | 扫描脏 token(mojibake/裸 JSON/超长行) | StorageTab 脏扫描 |
|
|
231
|
+
| 31 | /browse-dir | browseDir | 11008 | POST | 列目录(目录浏览器数据) | 设置页存储(目录浏览器) |
|
|
232
|
+
| 32 | /pick-dir | pickDir | 11031 | POST | 原生目录选择器(不可用时回退 browse-dir) | 设置页存储 |
|
|
233
|
+
| 33 | /update-check | updateCheck | 11053 | GET | 版本检查(npm registry 对比) | 面板头徽标/维护组 |
|
|
234
|
+
| 34 | /update | update | 11066 | POST | 执行一键更新(pnpm up) | 维护组「一键更新」 |
|
|
235
|
+
| 35 | /config | config | 11092 | GET+POST/PUT | 读写全部配置(GET 返回外壳 `{config,path}`;POST 为 patch 合并)。#82:读经 readJsonQuarantinePreSync、写经 writeTextAtomicPre | 设置页保存/白板页/向导(唯一写出口 saveConfigPatch,client.js:1187) |
|
|
236
|
+
| 36 | /note | note | 11129 | POST | 保存项目笔记(容量折叠事务在引擎侧 appendText) | NotesTab |
|
|
237
|
+
| 37 | /rules | rules-list | 11159 | GET | **R7**:列出用户级硬性约束条目(listRuleItemsPre) | RulesEditPanel(client.js:2639) |
|
|
238
|
+
| 38 | /rules/apply | rules-apply | 11178 | POST | **R7**:条目级操作(op=update/remove/append/preview) | RulesEditPanel(client.js:2647) |
|
|
239
|
+
| 39 | /external | external | 11207 | GET | 外部记忆源清单 | ConnectTab/向导 |
|
|
240
|
+
| 40 | /external-view | external-view | 11216 | GET | 查看外部源内容 | ConnectTab |
|
|
241
|
+
| 41 | /external-remove | external-remove | 11236 | POST | 移除已导入内容(从记忆 prompt 移除段落) | ConnectTab |
|
|
242
|
+
| 42 | /external-import | external-import | 11250 | POST | 导入外部源(纯链接) | ConnectTab/向导批量 |
|
|
243
|
+
| 43 | /reflect | reflect | 11264 | POST | 手动写反思 | ReflectionsTab |
|
|
244
|
+
| 44 | /reflect-auto | reflect-auto | 11275 | POST | AI 一键反思(拉日志生成) | OverviewTab/ReflectionsTab |
|
|
245
|
+
| 45 | /calendar | calendar | 11284 | GET 读 / POST 写 | 日历读写 | CalendarTab |
|
|
246
|
+
| 46 | /summarize | summarize | 11308 | POST | 生成时段总结 | OverviewTab 总结卡 |
|
|
247
|
+
| 47 | /greet | greet | 11324 | POST | 生成问候语(落盘 greetings/) | OverviewTab GreetingCard |
|
|
248
|
+
| 48 | /notices | notices | 11338 | GET | 拉取动态通知(notices.json) | 通知弹窗 |
|
|
249
|
+
| 49 | /models | models | 11353 | GET | provider/模型目录(子代理模型抽屉数据) | 设置页模型抽屉 |
|
|
250
|
+
|
|
251
|
+
尾注:客户端「表外裸路径」纪律——client.js:1104-1108 声明路径只能出自 API 表;旧盘点列出的 20 处裸 fetch 已收敛进表(现表含全部在用路径)。**client.js 零引用的宿主路由共 2 条**:`/subagent-gc`(引擎内部动作,无 UI 按钮)与 `/activation-inbox-pre`(能力在、UI 未接)。
|
|
252
|
+
|
|
253
|
+
### L3-c · 全部设置键(DEFAULT_CONFIG 98 键 · index.js:258-586)
|
|
254
|
+
|
|
255
|
+
> 口径:**顶层键 98**(含 `externalSources` 容器 1 个 + 其 13 子键单独列)。与旧 85 清单的差异 = 13 个新增键(核对表已列)。默认值里的具名常量:`DEFAULT_NOTE_CAPACITY_CHARS`/`DEFAULT_USER_CAPACITY_CHARS`(24000,v3.0.0 由 12000 上调)、`CAPACITY_DEFAULTS_VERSION`、`DEFAULT_WATER_LEVEL_THRESHOLD`(0.75)、`DEFAULT_AUTO_CONTINUE_THRESHOLD`(0.75)。
|
|
256
|
+
> 「UI 分组」列 = 设置页承载分组(client.js section 名);「—」= 该键当前无设置页控件(仅文件/联动写入)。行号 = DEFAULT_CONFIG 内定义行。
|
|
257
|
+
|
|
258
|
+
| # | 键 | 默认(index.js 行号) | 含义 | UI 分组 |
|
|
259
|
+
|---|---|---|---|---|
|
|
260
|
+
| 1 | boardMode | 'graph'(264) | 白板形态总开关:graph=新版结构化看板/sidecar/遍历工具;legacy=旧文字白板。非法值 fail-closed 按 legacy | context |
|
|
261
|
+
| 2 | userMemoryDir | '~/.dsh/memory'(266) | 用户级记忆目录 | storage |
|
|
262
|
+
| 3 | projectMemoryDir | '.dsh-memory'(268) | 项目记忆目录名 | storage |
|
|
263
|
+
| 4 | memoryRoot | '~/.dsh/memory/workspaces'(270) | 集中式记忆根(旧分散结构自动迁移,index.js:2078-2082) | storage |
|
|
264
|
+
| 5 | injectEnabled | true(272) | 记忆注入总开关 | injection |
|
|
265
|
+
| 6 | injectBudgetChars | 8000(288) | 注入总预算(字符;v3.0.0 由 1600 上调,280 行注释说明 Tier-0 证据段变长的代价) | injection |
|
|
266
|
+
| 7 | tier0CatalogEnabled | true(291) | Tier-0 常驻目录层 | injection |
|
|
267
|
+
| 8 | tier0MaxTokens | 400(295) | 目录 token 硬帽 | injection |
|
|
268
|
+
| 9 | tier0BudgetShare | 0.25(298) | 目录占注入预算的份额上限 | injection |
|
|
269
|
+
| 10 | injectExcludeSources | [](308) | 注入排除来源(glob 模式) | injection |
|
|
270
|
+
| 11 | recentDaysInjected | 1(310) | 注入最近日志天数 | injection |
|
|
271
|
+
| 12 | subagentModel | ''(312) | 子代理模型 | storage(模型抽屉) |
|
|
272
|
+
| 13 | subagentProvider | ''(314) | 子代理 provider | storage(模型抽屉) |
|
|
273
|
+
| 14 | subagentReasoningEffort | ''(320) | 子代理推理强度 | storage(模型抽屉) |
|
|
274
|
+
| 15 | noteCapacityChars | 24000(327) | 项目笔记容量上限(字符) | injection |
|
|
275
|
+
| 16 | userCapacityChars | 24000(328) | 用户级记忆容量上限 | injection |
|
|
276
|
+
| 17 | capacityDefaultsVersion | CAPACITY_DEFAULTS_VERSION(331) | 容量默认值版本号(迁移判定) | — |
|
|
277
|
+
| 18 | memoryFileIndexEnabled | false(333) | M3a 只读记忆索引(旧) | — |
|
|
278
|
+
| 19 | memoryAnchorEnabled | false(335) | M3b anchor 写入事务(mem_ 锚点 sidecar;开启后写路径经 memory-anchor-pre.js) | semantic |
|
|
279
|
+
| 20 | autoConsolidate | true(337) | 每轮自动沉淀总开关 | automation |
|
|
280
|
+
| 21 | autoConsolidateMinChars | 240(339) | 寒暄跳过门槛 | automation |
|
|
281
|
+
| 22 | autoConsolidateCooldownMinutes | 30(341) | 沉淀冷却 | automation |
|
|
282
|
+
| 23 | autoConsolidateDailyMax | 8(343) | 每日沉淀上限 | automation |
|
|
283
|
+
| 24 | consolidateScheduleEnabled | true(345) | 定时做梦式固化 | automation |
|
|
284
|
+
| 25 | consolidateScheduleTime | '09:30'(347) | 固化触发时刻 | automation |
|
|
285
|
+
| 26 | consolidateScheduleDays | 7(349) | 固化回看天数 | automation |
|
|
286
|
+
| 27 | maintainScheduleEnabled | true(351) | 定时 30 天蒸馏 | automation |
|
|
287
|
+
| 28 | maintainScheduleTime | '10:00'(353) | 蒸馏触发时刻 | automation |
|
|
288
|
+
| 29 | handoffEnabled | true(358) | 交接白板总开关(v3.0.0 由 false 改默认开) | context |
|
|
289
|
+
| 30 | handoffPlanChars | 1200(360) | PLAN.md 注入预算 | context |
|
|
290
|
+
| 31 | handoffLedgerChars | 800(362) | 账本注入预算 | context |
|
|
291
|
+
| 32 | slimPlanChars | 400(368) | 精简注入时 PLAN 截断预算(新增) | context |
|
|
292
|
+
| 33 | slimLedgerChars | 300(369) | 精简注入时账本截断预算(新增) | context |
|
|
293
|
+
| 34 | rulesLayeringMode | 'self'(379) | 规则/参考分层措辞模式(off=完全回旧行为) | — |
|
|
294
|
+
| 35 | criteriaGate | true(385) | 白板判据门(criteria 不满足即拒绝写入,wb-contract-pre.js) | — |
|
|
295
|
+
| 36 | waterLevelWindowTokens | 0(387) | 窗口 token(0=自动探测) | context |
|
|
296
|
+
| 37 | waterLevelThreshold | 0.75(395) | 水位建议阈值 | context |
|
|
297
|
+
| 38 | waterLevelAdvisory | true(397) | 水位建议注入 | context |
|
|
298
|
+
| 39 | waterLevelAutoHandoff | true(399) | 越阈自动写骨架账本 | context |
|
|
299
|
+
| 40 | autoContinueEnabled | false(404) | 自动接续总开关(v3.0.0 由 true 改默认关) | context |
|
|
300
|
+
| 41 | autoContinueThreshold | 0.75(406) | 自动接续阈值 | context |
|
|
301
|
+
| 42 | autoContinueConfirmSeconds | 35(408) | 确认卡倒计时秒 | — |
|
|
302
|
+
| 43 | autoContinueRefreshRitual | true(410) | 接续前刷新仪式 | — |
|
|
303
|
+
| 44 | autoContinueRefreshTimeoutSeconds | 90(412) | 刷新仪式超时 | — |
|
|
304
|
+
| 45 | autoContinueCooldownMinutes | 30(414) | 接续冷却 | — |
|
|
305
|
+
| 46 | subagentGcEnabled | true(417) | 子代理痕迹回收开关 | context |
|
|
306
|
+
| 47 | subagentGcKeepDays | 3(419) | 痕迹兜底保留天数 | context |
|
|
307
|
+
| 48 | awayMinutes | 60(421) | 暂离判定阈值 | automation |
|
|
308
|
+
| 49 | unattendedMode | false(427) | 无人值守模式 | automation |
|
|
309
|
+
| 50 | unattendedAuto | false(432) | 无人值守自动检测 | automation |
|
|
310
|
+
| 51 | unattendedAutoHours | ['22:00-08:00'](435) | 非工作时段窗 | — |
|
|
311
|
+
| 52 | snapshotTieredInject | true(441) | 分层快照注入(完整/精简节奏,新增) | injection |
|
|
312
|
+
| 53 | snapshotMinGapRounds | 5(446) | 快照最小注入间隔轮数 | injection |
|
|
313
|
+
| 54 | snapshotReinjectOnCompact | true(447) | 压缩后强制重注入 | injection |
|
|
314
|
+
| 55 | promptLayerOverrides | {}(453) | 自定义 prompt 层覆盖(23 层清单见 L3-c.3) | injection |
|
|
315
|
+
| 56 | autoPopupEnabled | true(455) | 暂离回来自动弹面板 | automation |
|
|
316
|
+
| 57 | welcomeTourEnabled | true(457) | 首启欢迎向导 | appearance |
|
|
317
|
+
| 58 | autoSummaryTimes | [](459) | 定时总结时刻表 | automation |
|
|
318
|
+
| 59 | dayBoundaryMinutes | 450(461) | 日界(分钟) | automation |
|
|
319
|
+
| 60 | reflectEnabled | true(463) | 每日反思 | automation |
|
|
320
|
+
| 61 | reflectStyle | 'auto'(465) | 反思风格 | automation |
|
|
321
|
+
| 62 | locale | 'system'(467) | UI 语言 | appearance |
|
|
322
|
+
| 63 | externalInjectionChars | 1400(469) | 外部记忆注入预算 | injection |
|
|
323
|
+
| 64 | externalSources | 13 子键全 true(471-486) | 外部记忆源开关(见 L3-c.2) | 向导勾选 |
|
|
324
|
+
| 65 | associativeMemoryEnabled | false(489) | 主动联想记忆总开关(M7) | semantic |
|
|
325
|
+
| 66 | shadowRetrievalEnabled | false(491) | Shadow Retrieval(只记录不注入的观测档) | — |
|
|
326
|
+
| 67 | contextBridgeEnabled | false(493) | M5 上下文桥 | — |
|
|
327
|
+
| 68 | contextSinkMode | 'null'(495) | M5 sink 类型(引擎三联动) | (引擎联动写入) |
|
|
328
|
+
| 69 | activationInboxEnabled | false(497) | M6 Activation Inbox | — |
|
|
329
|
+
| 70 | activationSource | 'js'(500) | M6 激活来源(js/python;引擎三联动) | (引擎联动写入) |
|
|
330
|
+
| 71 | jsDecideCooldownRounds | 1(504) | JS 判定冷却轮数 | semantic |
|
|
331
|
+
| 72 | jsDecideDeltaExp | 0.01(510) | JS 档 margin 阈值 | semantic |
|
|
332
|
+
| 73 | jsDecideExcerptChars | 40(514) | 唤起 excerpt 长度 | semantic |
|
|
333
|
+
| 74 | jsDecideCandidateScheme | 'balanced'(518) | 候选方案档位 | semantic |
|
|
334
|
+
| 75 | jsDecideCandidatesN | 4(520) | custom 档候选条数 | semantic |
|
|
335
|
+
| 76 | pythonBackendWorkerPath | ''(522) | Python worker 路径 | — |
|
|
336
|
+
| 77 | pythonBackendExecutable | ''(524) | Python 可执行文件 | — |
|
|
337
|
+
| 78 | semanticEngineMode | 'auto'(526) | 语义引擎档位(auto/lex/js/python;引擎三联动主键) | semantic(下拉) |
|
|
338
|
+
| 79 | l0IndexEnabled | true(536) | L0 摘要检索索引开关(新增) | — |
|
|
339
|
+
| 80 | softInjectionEnabled | false(538) | pre-step 软注入 | — |
|
|
340
|
+
| 81 | contextBridgeObserveChildSessions | true(540) | 观测子会话 | semantic |
|
|
341
|
+
| 82 | pythonBackendEnabled | false(542) | Python sidecar 总开关 | — |
|
|
342
|
+
| 83 | reasoningObserverEnabled | true(544) | 思维链观察器 | semantic |
|
|
343
|
+
| 84 | procedurePromotionEnabled | false(546) | Procedure 自动晋升总开关 | 向导开关 |
|
|
344
|
+
| 85 | hubMechanicalProcedureFeedEnabled | false(557) | **T10**:机械流程切片(episode intent 截断成技能候选)解耦开关,默认关(新增,2026-09-20) | 向导开关(标「不推荐」) |
|
|
345
|
+
| 86 | memoryHubEnabled | true(561) | 记忆中枢总开关 | memoryHub |
|
|
346
|
+
| 87 | episodicMinSegments | 2(563) | episode 巩固最少段数 | memoryHub |
|
|
347
|
+
| 88 | episodicRetention | 256(565) | episode 保留上限 | memoryHub |
|
|
348
|
+
| 89 | procedureMinSessions | 3(567) | 晋升所需跨会话数 | memoryHub |
|
|
349
|
+
| 90 | procedureMinSuccess | 2(569) | 晋升所需成功次数 | memoryHub |
|
|
350
|
+
| 91 | procedureCorrectionCap | 0.3(571) | correction 占比上限 | memoryHub |
|
|
351
|
+
| 92 | procedureHighRiskApproval | true(573) | 高风险需人工批准 | memoryHub |
|
|
352
|
+
| 93 | procedureActiveLevel | 'checklist'(575) | active 注入级别 | memoryHub |
|
|
353
|
+
| 94 | streamingInterruptionEnabled | false(577) | 流式中断/恢复实验 | — |
|
|
354
|
+
| 95 | maxPacketItems | 2(579) | MemoryPacket 条目上限 | — |
|
|
355
|
+
| 96 | maxPacketChars | 800(581) | MemoryPacket 字符预算 | — |
|
|
356
|
+
| 97 | packetTtlSteps | 2(583) | MemoryPacket 存活步数 | — |
|
|
357
|
+
| 98 | injectionCooldownSteps | 3(585) | 注入冷却步数 | — |
|
|
358
|
+
|
|
359
|
+
#### L3-c.1 与旧 85 清单的默认值变化(键名不变、值变了的)
|
|
360
|
+
|
|
361
|
+
| 键 | 旧默认(UI-INVENTORY-RAW 时代) | 现默认 | 证据 |
|
|
362
|
+
|---|---|---|---|
|
|
363
|
+
| injectBudgetChars | 1600 | **8000** | index.js:288 及 280 行注释 |
|
|
364
|
+
| handoffEnabled | false | **true** | index.js:358(356-357 注释) |
|
|
365
|
+
| autoContinueEnabled | true | **false** | index.js:404 |
|
|
366
|
+
| noteCapacityChars / userCapacityChars | 12000 | **24000** | index.js:327-328 引用具名常量 |
|
|
367
|
+
| boardMode | (键不存在) | 'graph'(默认新版) | index.js:264(260-263 注释:2026-09-17 用户裁定) |
|
|
368
|
+
|
|
369
|
+
#### L3-c.2 externalSources 13 子键(全 true,index.js:472-485)
|
|
370
|
+
|
|
371
|
+
`workbuddy-user`、`workbuddy-profile`、`codebuddy-memory`、`claude-global`、`project-conventions`、`workbuddy-sessions`、`claude-sessions`、`codex-sessions`、`zcode-memory`、`zcode-sessions`、`kimi-global`、`kimi-sessions`、`trae-rules`。写入点:向导单源勾选(client.js:4384-4396)。
|
|
372
|
+
|
|
373
|
+
#### L3-c.3 DEFAULT_PROMPT_LAYERS 23 层文案键(index.js:592-647,非 DEFAULT_CONFIG,经 promptLayerOverrides 逐层覆盖)
|
|
374
|
+
|
|
375
|
+
动态快照层(renderMemoryDynamic 用):`snapshotHead`(594)、`snapshotMeta`(595)、`snapshotRulesTitle`(600)、`snapshotRulesGuide`(601)、`snapshotTier0Title`(604)、`snapshotLogsTitle`(605)、`snapshotReflectionTitle`(606)、`snapshotUserTitle`(607)、`snapshotNotesTitle`(608)、`snapshotPlanTitle`(609)、`snapshotHandoffTitle`(610)、`snapshotWaterTitle`(611)、`snapshotWaterBody`(612)、`snapshotExternalTitle`(613)、`snapshotCalendarTitle`(614)、`snapshotWelcomeTitle`(615)、`snapshotWelcomeBody`(616)、`snapshotInscription`(628,每轮收尾自检,T5 恢复)、`snapshotSlimNote`(639)、`snapshotSlimRecallNote`(642)、`snapshotTail`(643);静态纪律层(renderMemoryStatic 用,system prompt 前置):`staticHead`(645)、`staticWriteDiscipline`(646)。规则段的标题/引导语另有独立常量 RULES_SECTION_TITLE_PRE_V1 / RULES_SECTION_GUIDE_PRE_V1(rules-layer-pre.js:252,258),与 snapshot 层措辞**必须不相同**(T7-3 断言锁定)。
|
|
376
|
+
|
|
377
|
+
### L3-d · 全部 6 处插槽注册(工程细节)
|
|
378
|
+
|
|
379
|
+
注册 API 语义:`slots.inject(name, () => slots.register({name,id,order,label}, render))` 是通用两段式——`inject` 声明要占用的插槽名并返回注册函数,`register` 提交条目(含 id 去重、order 排序、label)。插件侧 6 处全部集中在 `registerSurfaces()`(client.js:5662-5691),外层有 try/catch 留痕(注册失败打 `console.warn('[dsh-auto-memory] slot registration failed')`,client.js:5690-5692),并支持整体刷新:`refreshSurfaces()` 先依次 dispose 旧句柄再重注册(client.js:5693-5699)——语言切换/主题变化时全量重建承载面。
|
|
380
|
+
|
|
381
|
+
| # | 插槽名 | 注册 id | order | 组件 | 注册行 | 备注 |
|
|
382
|
+
|---|---|---|---|---|---|---|
|
|
383
|
+
| 1 | sidebar.footer.action | auto-memory-pre | 5 | SidebarButton(2097) | 5664-5665 | label 用 i18n t('memory') + ' (pre)';侧栏 footer 动作位 |
|
|
384
|
+
| 2 | shell.overlay | auto-memory-pre | 5 | MemoryPanel(3967) | 5667-5668 | 浮层面板;位置/尺寸存 localStorage(440×560 默认) |
|
|
385
|
+
| 3 | shell.overlay | auto-memory-pre-dialogs | 6 | DialogHost(4157) | 5670-5671 | 7 种弹窗 + 首启向导状态机;同一插槽多 id 共存(order 6) |
|
|
386
|
+
| 4 | shell.overlay | auto-memory-pre-autocont | 7 | AutoContinueHost(4653) | 5673-5674 | 轮询 /auto-continue-state,armed 时出确认卡 |
|
|
387
|
+
| 5 | settings.section | auto-memory-pre | 25 | SettingsPage(4777) | 5676-5677 | label「自动记忆 (pre)」;接收宿主 props.close |
|
|
388
|
+
| 6 | conversation.view | auto-memory-pre-kanban | 80 | KanbanView(1852) | 5683-5689 | 2026-09-16「双承载面」新增;label 中英切换;与 boardMode 闸门解耦(组件内部自己取数,非 graph 档显示提示,5680-5682 注释) |
|
|
389
|
+
|
|
390
|
+
> 「one handle one scope」约束:每个 inject 返回的句柄只负责自己那次注册(dispose 不影响兄弟条目)——这就是同一 `shell.overlay` 能挂 3 个不同 id 条目的前提。宿主侧插槽目录总量(≈58-61 个,DESIGN-OVERHAUL §4.2 / 交接 §4-B)是宿主提供的可注册位集合;插件当前只占其中 4 个插槽名(sidebar.footer.action / shell.overlay / settings.section / conversation.view)。
|
|
391
|
+
|
|
392
|
+
### L3-e · 数据文件清单(生产者 → 消费者)
|
|
393
|
+
|
|
394
|
+
路径基准:`DSH_HOME` = dsh-home-pre.js 单点解析(`resolveDshHomePre`,默认 `~/.dsh`,可被环境变量 `DSH_HOME` 覆盖,DSH_HOME_ENV_PRE_V1,dsh-home-pre.js:52-114;引擎侧 index.js:72 import,55 处 `dshHome()` 调用)。项目侧根 = `<memoryRoot>/<工作区键>/`(集中式;`projectDirOf`,index.js:2060-2076;旧分散结构 `<工作区>/.dsh-memory` 首次访问自动复制迁移,index.js:2078-2082)。`<projectDir>` 默认即集中式项目目录,内部布局与旧 `.dsh-memory/` 相同。
|
|
395
|
+
|
|
396
|
+
#### L3-e.1 记忆正文(Markdown)
|
|
397
|
+
|
|
398
|
+
| 文件/目录 | 生产者 | 消费者 |
|
|
399
|
+
|---|---|---|
|
|
400
|
+
| `<projectDir>/MEMORY.md` | memory_note_pre(kind=note)、memory_consolidate_pre、30 天蒸馏、hub flush(hubFlushTick 治理式写入 index.js:9098)、外部源导入(target=project) | 注入快照、memory_read_pre、/state、NotesTab、R7 规则解析(rules-layer-pre.js:142 真源)、m4 语料 |
|
|
401
|
+
| `<projectDir>/<YYYY-MM-DD>.md`(每日日志) | memory_log_pre、自动沉淀 | 注入快照(recentDaysInjected)、memory_recall/read、蒸馏/固化输入、m4 语料 |
|
|
402
|
+
| `<projectDir>/reflections/YYYY-MM-DD.md` | memory_reflect_pre、/reflect、/reflect-auto | 注入快照(最近反思)、memory_read_pre、ReflectionsTab |
|
|
403
|
+
| `<projectDir>/handoff/PLAN.md` | memory_note_pre(kind=plan)(重写前旧版归档,index.js:2248-2266) | 注入快照首位、/handoff-state、PlanTab、接续材料第 0 层(index.js:4022)、白板语料 |
|
|
404
|
+
| `<projectDir>/handoff/handoff-*.md`(交接账本) | memory_note_pre(kind=handoff)(append-only,index.js:2355-2369) | 注入快照、/handoff-state、PlanTab、接续材料、白板语料 |
|
|
405
|
+
| `<projectDir>/handoff/archive/PLAN-<ts>.md` 等 | PLAN 重写/账本流程的自动归档 | PlanTab 历史版本、memory_trace_pre 版本链、白板语料(archive 目录也进检索语料,index.js:2622) |
|
|
406
|
+
| `~/.dsh/memory/MEMORY.md`(用户级) | memory_user_pre、memory_consolidate_pre、外部源导入(target=user) | 注入快照(跨项目必须遵守)、LogsTab 用户画像卡(client.js:2581)、R7 规则编辑(rules-edit-pre.js 直接编辑此文件,rules-edit-pre.js:7) |
|
|
407
|
+
| `~/.dsh/memory/CALENDAR.md` | calendar_add/done/remove_pre、/calendar、CalendarTab | 注入快照(未完成日程)、calendar_list_pre;**anchor 事务豁免文件**(index.js:334 注释) |
|
|
408
|
+
| `<projectDir>/greetings/<date>.json`(旧 .md) | /greet 问候生成 | OverviewTab GreetingCard(index.js:2145-2147) |
|
|
409
|
+
| `<projectDir>/archive/` | 容量折叠与蒸馏的原文保底归档(memory_note_pre/maintain 超限链路) | 「信息不丢」承诺的落地;不再注入 |
|
|
410
|
+
|
|
411
|
+
#### L3-e.2 白板结构化(graph 档 sidecar)
|
|
412
|
+
|
|
413
|
+
| 文件/目录 | 生产者 | 消费者 |
|
|
414
|
+
|---|---|---|
|
|
415
|
+
| `<projectDir>/handoff/index.json` | writeSidecarEntryPre / rebuildSidecarIndexPre(index.js:2411-2455;缺失即重建) | /kanban-board(看板矩阵 buildKanbanPre/buildKanbanMatrixPre)、memory_expand/trace_pre、wbTagMap |
|
|
416
|
+
| `<projectDir>/handoff/events.jsonl` | appendSidecarEventPre(append-only,index.js:2436-2443;criteria.passed/warned 事件链) | 看板面板直读(P2-5 白名单放行 sidecar 产物,index.js:4215);缺失时退化为「以文件存在为准」(index.js:2422) |
|
|
417
|
+
| `DSH_HOME/memory/index-pre/files/`(anchor sidecar 库) | memory-anchor-pre.js 事务(buildSidecar/planMigration,memory-anchor-pre.js:258,364;memoryAnchorEnabled=true 时启用,index.js:5838-5843,9081) | mem_<32hex> 按 id 展开原文(expandMemoryRecordPre)、memory_read/expand 的字节区间定位、CorpusRegistry 语料(index.js:9130,9504) |
|
|
418
|
+
|
|
419
|
+
#### L3-e.3 记忆中枢三店 + 影子管线(JSON/JSONL)
|
|
420
|
+
|
|
421
|
+
| 文件/目录 | 生产者 | 消费者 |
|
|
422
|
+
|---|---|---|
|
|
423
|
+
| `DSH_HOME/memory/hub-pre/episodes.json` | episodic store(hubIo 原子写:tmp+rename,index.js:9030-9043);episodic.append/consolidate | 启动 restore(index.js:9067-9072);/memory-hub overview |
|
|
424
|
+
| `DSH_HOME/memory/hub-pre/facts.json` | fact store(crossFeed fact 分支、ingestJudgementRows) | 同上;checklist 渲染 |
|
|
425
|
+
| `DSH_HOME/memory/hub-pre/procedures.json` | procedure store(memory_procedure_pre 直写、promote/activate/deprecate) | 同上;/memory-hub 审批动作;SKILL.md 导出源 |
|
|
426
|
+
| `DSH_HOME/memory/hub-pre/flush-state.json` | hub flush 去重账(index.js:9101-9102) | 同上(幂等 flush) |
|
|
427
|
+
| `DSH_HOME/memory/semantic-pre/judgement-shadow.jsonl` | Python/JS 语义引擎影子判定 | hub 60s 轮询喂数(index.js:9093-9098);T10 关闭时机械切片支路不消费 |
|
|
428
|
+
| `DSH_HOME/memory/semantic-pre/activation-shadow-v2.jsonl` | 激活影子观测 | /shadow-recent(RefineTab 展示,index.js:10624) |
|
|
429
|
+
| `DSH_HOME/memory/semantic-pre/review-queue.jsonl` | /review-feedback 打分写入(index.js:10713) | 反哺唤起决策 |
|
|
430
|
+
| `DSH_HOME/memory/semantic-pre/l0/`(l0-index-<hash>-<layer>.json) | l0-index-sync-pre.js(L0_INDEX_FILE_PREFIX,l0-index-sync-pre.js:43,59;l0IndexEnabled 门,index.js:9334-9353) | L0 摘要列表检索(memory_recall_pre format=l0) |
|
|
431
|
+
| `DSH_HOME/memory/evidence-pre/events/<date>.jsonl` | evidence-store-pre.js append(evidence-store-pre.js:135-136;success evidence 驱动晋升,index.js:7523-7530) | evidence 聚合(aggregates/index.json,evidence-store-pre.js:274-278) |
|
|
432
|
+
| `DSH_HOME/memory/cont-seq.json` | 接续序号分配器(全局单调,index.js:3271-3276;写入失败降级内存计数,3296) | 交接账本命名/接续材料序号 |
|
|
433
|
+
|
|
434
|
+
#### L3-e.4 配置与诊断
|
|
435
|
+
|
|
436
|
+
| 文件/目录 | 生产者 | 消费者 |
|
|
437
|
+
|---|---|---|
|
|
438
|
+
| `DSH_HOME/dsh-auto-memory-pre.json`(引擎配置文件,`_configPath`,index.js:1213) | /config POST(patch 合并→writeTextAtomicPre 原子写,index.js:1943,1963);损坏隔离 `.corrupt-<ts>`(readJsonQuarantinePreSync,index.js:1890-1894;#82 状态透出 index.js:7926) | 引擎启动加载、GET /config、/debug(含 corrupt 状态) |
|
|
439
|
+
| `DSH_HOME/skills/<dirName>/SKILL.md` | exportSkillForPre(skill-export-host-pre.js:66-70;根目录 resolveSkillsRootPre 29-36) | DSH 技能发现路径(跨项目迁移);<dirName>=skillDirNamePre(如 mem-skill-untitled-<hash>) |
|
|
440
|
+
| `DSH_HOME/subagent-gc-backup/` | subagent-gc-pre.js(痕迹移动不删除;每日兜底巡检) | 可回滚的回收备份(client.js:797 文案) |
|
|
441
|
+
| 通知 `notices.json`(仓库分发面) | 发布链维护 | /notices → 通知弹窗 |
|
|
442
|
+
| 语义资产(JS 模型 `E5_SMALL_Q8_MANIFEST_PRE_V1`、Python venv/模型) | python-setup-pre.js / createSemanticDownloaderPre(/python-setup/*、/semantic-download) | semantic-js-pre.js / python-sidecar-client-pre.js 推理;`embedding-config.json`(语义引擎配置,index.js:6754 提及) |
|
|
443
|
+
|
|
444
|
+
#### L3-e.5 只读外部数据
|
|
445
|
+
|
|
446
|
+
| 数据 | 生产者 | 消费者 |
|
|
447
|
+
|---|---|---|
|
|
448
|
+
| 历史 DSH 会话 `session.v3.jsonl(.zstd)` 等(~/.dsh/sessions) | DSH 宿主 | 候选名匹配(index.js:2885)、会话全文检索 searchSessionHistory(engine._sessionQuery 宿主服务,index.js:9666-9667)、subagent-gc 扫描 |
|
|
449
|
+
| 外部 AI 工具记忆/会话(WorkBuddy/CodeBuddy/Claude/Codex/ZCode/Kimi/TRAE 的既有文件) | 各外部工具 | memory_external_pre list/import(纯链接);/external* 路由 |
|
|
450
|
+
|
|
451
|
+
### L3-f · 关键调用链(函数级)
|
|
452
|
+
|
|
453
|
+
#### f.1 写入链(每轮自动沉淀 → episode → crossFeed → 三店)
|
|
454
|
+
|
|
455
|
+
1. 会话轮次结束 → 引擎自动沉淀评估(`autoConsolidate` 门 + 寒暄门槛 `autoConsolidateMinChars` + 冷却/每日额度,核心方法体在 index.js:7490-7495:`combined.length < minChars` 跳过、`runtime.lastConsolidateAt` 记账、`this._autoCallCount` 计数)。
|
|
456
|
+
2. 日志/笔记写入:`memory_log_pre` 工具与自动沉淀共用 `engine.appendText`(append-only;容量折叠事务在 memory-writer-pre.js 的 MemoryDocumentStore,index.js:29 import)。
|
|
457
|
+
3. 记忆中枢支路(`memoryHubEnabled` 门,index.js:7499-7522):`hub.stores.episodic.append({sessionRef,userText,assistantText,kind,eventSeq})`(7502)→ 本地计数 `_hubEpBuffer` 攒够 `episodicMinSegments`(7511-7514)→ `episodic.consolidate()` 巩固成 episode(7515,段数不足即丢弃缓冲)→ **`hub.crossFeed(sessionRef)`**(7517;memory-hub-pre.js:145)。
|
|
458
|
+
4. crossFeed 举一反三(memory-hub-pre.js:145-):success episode → procedure 观察条目(`procedure_candidate`);未决事实 → fact 候选(`semantic_candidate`/`profile_candidate` 映射表 memory-hub-pre.js:34)。写入前必须过清洗器(intent-clean-safe-pre.js `stripRuntimeIntentPre`,memory-hub-pre.js:175-183,290-312 的「未清洗 intent 不得进 facts.json」纪律)。
|
|
459
|
+
5. success evidence 支路(M9,index.js:7523-7530):`contextHost.recentEvidenceForSuccess(5min)` 检测本轮记忆被 read/cite → `procs.addEvidence(success)`(evidence 事件经 context-bridge-pre.js `createSuccessEvidencePre`,index.js:37)→ 累积到 `procedureMinSuccess` 门槛后可晋升。
|
|
460
|
+
6. 持久化:三店 io = `hubIo('<name>.json')` 原子写(tmp+rename,index.js:9032-9035),启动时逐条校验 restore、坏记录跳过(9066-9072)。
|
|
461
|
+
7. 影子喂数支路(60s 轮询,index.js:9093-9098):`semantic-pre/judgement-shadow.jsonl` 增量行 → heading 富化(语料来自 sidecar)→ fact store 治理式写回 MEMORY.md(hubFlushTick,去重账 flush-state.json);**T10**:机械 procedure 切片支路受 `hubMechanicalProcedureFeedEnabled` 门(默认 false,index.js:9063),关闭时只保留模型直写来源。
|
|
462
|
+
|
|
463
|
+
#### f.2 召回链(检索 → 融合 → 注入)
|
|
464
|
+
|
|
465
|
+
**工具检索(memory_recall_pre → engine.recall,index.js:5989-6210+)**:
|
|
466
|
+
|
|
467
|
+
1. 入口分派:`expand` 指定 mem_id → `expandMemoryRecordPre`(按 anchor sidecar 字节区间直取原文,5990-5991);`scope=handoff` → `searchHandoffCorpus`(白板语料词法直返,6000-6005);`scope=sessions` → `searchSessionHistory`(宿主 sessionQuery 服务,6007-6014)。
|
|
468
|
+
2. 本地扫描:`scanFile` 逐层词法打分(6025-6033,任一词命中 OR、按命中词数排序);读侧状态解析统一走 note-status-apply-pre.js(`readRecordStatusPre` 动态 import,6024——**单一解析点**纪律:与写侧 note-status-pre.js 共用语法,防读写口径漂移)。
|
|
469
|
+
3. L0 模式(format=l0,默认):`buildL0IndexPre`(l0-extract-pre.js)构建候选 + `isRetrievablePre` 过滤 superseded/retracted + `groupL0ByLayerPre` 分层(6068-6078)。
|
|
470
|
+
4. 语义臂(语义引擎可用且非 l0Mode):embedding 召回 → 重要性加权(evidence 聚合 `scanEvidenceEventsPre`+`aggregateEvidenceEventsPre` → `computeImportancePre`,动态 import 6162-6163)→ 时间衰减(`temporal-parse-pre.js`,6183)→ **RRF 融合 `rankFusionRRFPre`**(recall-fusion-pre.js:55,K=60,层序 project→whiteboard→user→reflection→log,动态 import 6200-6205)。
|
|
471
|
+
5. 智能检索(/smart-recall):`engine.smartRecall` → `_smartRecallCore`(单飞防抖 `_smartRecallFlight`,index.js:6441-6449),分层语义管线,供检索页「智能检索」。
|
|
472
|
+
|
|
473
|
+
**注入链(每轮 prompt 组装)**:
|
|
474
|
+
|
|
475
|
+
1. `buildTierLayerInjection(agent)`(index.js:5141)预计算 Tier-0 目录(tier0-catalog-pre.js 纯内存生成,`tier0CatalogEnabled`/`tier0MaxTokens`/`tier0BudgetShare` 三重预算,5145,5206 调 `composeTieredInjectionPre`(tier-layer-inject-pre.js:497))→ 挂 `state.tier0LayerText`。
|
|
476
|
+
2. `renderMemoryDynamic(context)`(index.js:5447)组装动态快照:规则段(`extractRulesLayerPre` 从 MEMORY.md 解析规则/参考两层措辞,5483;`renderRulesSectionPre` rules-layer-pre.js:238)→ Tier-0 目录(5530)→ 日志/反思/用户记忆/笔记/白板/账本/水位/外部/日历/欢迎回来(各段标题即 DEFAULT_PROMPT_LAYERS 的 snapshot* 键)→ 铭文收尾自检(snapshotInscription)→ 精简档替换说明(snapshotSlim*)。预算封顶 `injectBudgetChars`,防止击穿前缀缓存的设计说明在 index.js:5194 一带。
|
|
477
|
+
3. `renderMemoryStatic`(静态纪律层,system prompt 最前,index.js:644-646 两键)每轮固定注入写入纪律。
|
|
478
|
+
4. 状态标记透出:superseded/retracted 记录带「⚠已作废/⚠已撤回」标记进检索与注入(l0-extract-pre.js:278 等)。
|
|
479
|
+
|
|
480
|
+
#### f.3 水位/接续链(水位测量 → arm → 确认卡 → 交接)
|
|
481
|
+
|
|
482
|
+
1. 水位测量:water-window-pre.js——`parseModelWindowsPre`(19)/`pickWindowPre`(62) 从模型窗口表取窗口,`findOfficialContextWindowPre`(176) 从会话事件找官方上下文声明,`scanPressureSignalsPre`(132) 压力信号,`findSessionModelPre`(92);结果带 5 分钟 TTL 缓存 `reusableWindowCachePre`(220)。窗口 token 显式配置(waterLevelWindowTokens)或模型未知时**永不测量**(fail-closed,index.js:2939,3068)。
|
|
483
|
+
2. arm 判定:`shouldArmAutoContinuePre(wl)`(water-window-pre.js:259;调用点 index.js:3375-3377——不满足即不出确认卡)。
|
|
484
|
+
3. 确认卡:AutoContinueHost(client.js:4653)轮询 `GET /auto-continue-state`(index.js:10510-10520,`engine.autoContinueState(sessionId)`)→ 用户点同意/拒绝 → `POST /auto-continue-decide`(10522-10534,`engine.decideAutoContinue(action, edgeAt)`)→ 越阈同时自动写骨架账本(`waterLevelAutoHandoff`)。
|
|
485
|
+
4. 刷新仪式(`autoContinueRefreshRitual`,默认开):接续前让旧 Agent 刷新 PLAN+账本(提示词模板 index.js:3721 一带;超时 `autoContinueRefreshTimeoutSeconds`=90)。
|
|
486
|
+
5. 材料组装:`POST /handoff-continue`(index.js:10473-10487)→ 四层材料:第 0 层白板 PLAN 节选(3000 字符,4022)→ 第 1 层最近账本 → 第 2 层近期线程 → 第 3 层完整转写;`handoffEnabled=false` 时明确告知模型不要找 PLAN(4021)。权限预设继承走 `POST /handoff-permission`(10489-10508,客户端在接续时带 attempts 重试节奏调用,client.js:3074,3081)。
|
|
487
|
+
6. 接续序号:`contSeqFile()`(`DSH_HOME/memory/cont-seq.json`,全局单调防重号,index.js:3271-3357)。
|
|
488
|
+
|
|
489
|
+
#### f.4 技能审批链(T4/R1-R6/晋升/SKILL 导出)
|
|
490
|
+
|
|
491
|
+
1. 模型直写:`memory_procedure_pre`(index.js:10242-10298)→ 校验(procedure-store-pre.js `validateProcedureCandidatePre`,L97)→ `procs.add(...)` 入 observed/candidate(action=write,10272 前段)。
|
|
492
|
+
2. 模型直通:action=activate → `procs.promote(pid, {}, {authorizedBy:'model'})`(10275,跳统计门)→ `procs.activate(pid)`(10276-10290)→ `exportSkillForPre` 导出 SKILL.md(10284,skill-export-host-pre.js)。
|
|
493
|
+
3. 用户审批:MemoryHubTab(client.js:2724)→ `hubAct(action, procedureId)`(2747-2759)→ `POST /memory-hub {action: promote|activate|deprecate|pin}`(index.js:10791-10825,走 store 门槛判定不绕 gate)→ 返回 `{decision, reason, reasonCodes}` → UI 显示人话(R2:reasonCodes→人话映射 whyNotPromotable,client.js:2604-2627;R3:stage 中文 stageLabel,2598;issue #30 注释 2753-2754)。
|
|
494
|
+
4. 晋升门:`PROCEDURE_DEFAULT_GATES_PRE_V1`(procedure-store-pre.js:56:minSessions=3、minSuccess=2、correctionCap=0.3)+ 高风险(riskLevel=high)需 `procedureHighRiskApproval` 人工批准;无 successCriteria 结构性无法晋升。
|
|
495
|
+
5. 注入:active 技能按 `procedureActiveLevel`(checklist 完整步骤 / 高风险自动降 hint)在相似场景自动附上(memory-hub render checklists,/memory-hub POST action=render,index.js:10784)。
|
|
496
|
+
|
|
497
|
+
#### f.5 配置链(#82 原子写入 + 损坏隔离)
|
|
498
|
+
|
|
499
|
+
1. UI 草稿:SettingsPage `set(key,value)`(本地 state,dirty 标记)→「保存设置」→ `saveConfigPatch(patch)`(client.js:1187,**唯一写出口**;白板页/向导同源,client.js:5377 注释)。
|
|
500
|
+
2. 宿主:`POST /config`(index.js:11092-11127,method=POST/PUT)→ patch 合并进 engine.config → `writeTextAtomicPre`(config-io-pre.js:72:tmp 文件 + rename 原子替换;同步版 72 行导出,index.js:1943,1963 调用)。
|
|
501
|
+
3. 读取:`readJsonQuarantinePreSync`(config-io-pre.js:117)——解析失败先 `quarantineFilePreSync`(55) 把坏文件改名 `<name>.corrupt-<ts>` 留存(CORRUPT_QUARANTINE_PREFIX_PRE_V1,37),再返回 `{ok:false,corrupted:true,quarantined,reason}`(index.js:1890-1894,1917-1921);截断判活 `looksTruncatedJsonPre`(140)。corrupt 状态经 /debug 与 /config 暴露(index.js:7926)。
|
|
502
|
+
4. 出厂值合并:DEFAULT_CONFIG(index.js:258-586)+ 用户落盘值;`capacityDefaultsVersion`(331)驱动容量默认值的版本迁移。
|
|
503
|
+
|
|
504
|
+
#### f.6 外部记忆链(发现 → 链接导入 → 注入)
|
|
505
|
+
|
|
506
|
+
1. 发现:引擎扫描各外部工具的已知路径(memory_external_pre action=list;/external GET,index.js:11207-11214)。
|
|
507
|
+
2. 导入:action=import(`/external-import` POST,11250)→ **纯链接模式**:只在 MEMORY.md/用户记忆写一条源文件绝对路径指针(不抄内容,防脏数据与过期)。
|
|
508
|
+
3. 注入:`externalInjectionChars`(1400)预算下注入源清单/指针段(snapshotExternalTitle 段);`externalSources` 13 子键控制哪些源参与。
|
|
509
|
+
4. 管理:ConnectTab(/external-view 查看原文、/external-remove 从记忆 prompt 移除已导入段落)。
|
|
510
|
+
|
|
511
|
+
### L3-g · 生效模块清单与「陈旧副本」对照
|
|
512
|
+
|
|
513
|
+
宿主静态 import(index.js:29-85)+ 动态 import(运行期 `await import(...)`)的模块才是生效代码;同名无 `-pre` 的 `lib/*.js` 是陈旧副本**不生效**(只有 `ws-overview-rank.js` 本身无 `-pre` 同名问题,是生效的)。
|
|
514
|
+
|
|
515
|
+
**生效模块(静态 import,index.js:29-85)**:memory-writer-pre、fs-retry-pre、memory-anchor-pre、shadow-host-pre、context-host-pre、degrade-pre、context-bridge-pre、m7-index-sync-host-pre、activation-host-pre、semantic-js-pre、semantic-decide-pre、l0-index-sync-pre、engine-identity-pre、python-sidecar-client-pre、python-setup-pre、episodic-store-pre、fact-store-pre、procedure-store-pre、skill-export-host-pre、memory-hub-pre、intent-clean-pre、intent-clean-safe-pre、storage-manage-pre、ws-overview-rank、subagent-gc-pre、water-window-pre、m4-corpus-pre、tier-layer-inject-pre、memory-envelope-pre、memory-mutation-pre、wb-contract-pre、board-mode-pre、dsh-home-pre、rules-edit-pre、config-io-pre、wb-sidecar-pre、rules-layer-pre、memory-index-pre。
|
|
516
|
+
**生效模块(二跳静态 import)**:evidence-store-pre(context-host-pre.js:26 引)、context-sink-python-pre(context-host-pre.js:27)、m7-wire-pre(context-sink-python-pre.js:10 与 index-sync-pre.js:17)、index-sync-pre(m7-index-sync-host-pre.js:23)、note-status-pre(note-status-apply-pre.js:21)、skill-export-pre(skill-export-host-pre.js:20)、l0-index-pre(l0-index-sync-pre.js:38)。
|
|
517
|
+
**生效模块(动态 import,index.js 运行期)**:note-status-apply-pre(5924,6024)、l0-extract-pre(4065,6068-6078,6302-6307)、evidence-agg-pre(6162)、memory-importance-pre(6163)、temporal-parse-pre(6183)、recall-fusion-pre(6200)。
|
|
518
|
+
**协议库(自包含、有 smoke 套件但未被 index.js 引用)**:acceptance-pre(smoke-test-p5-acceptance-pre.mjs)、ledger-criteria-pre(smoke-test-p1-ledger-criteria-pre.mjs)、state-commit-pre(smoke-test-state-commit-pre.mjs)。
|
|
519
|
+
**client.js**:手写 `__ModuleLoader__` bundle(单文件、无构建链、依赖仅宿主 seed 表),浏览器半边;与宿主通过 HTTP 路由 + 插槽两个契约面连接(client.js:1,11)。
|
|
520
|
+
|
|
521
|
+
> 提醒(交接 §3.3 纪律 3 的工程依据):「PR merge 成功 ≠ 修复落地」——PR 常改 `lib/*.js` 陈旧副本。核对任何行为的 file:line 时,若目标在无 `-pre` 后缀文件里,先确认它是否被 index.js import(见上表)。
|
|
522
|
+
|
|
523
|
+
---
|
|
524
|
+
|
|
525
|
+
## 附 · 枚举方法与本文边界
|
|
526
|
+
|
|
527
|
+
- **枚举方式**:临时 node 脚本(OS 临时目录,未落仓库)对 lib/index.js / lib/client.js / lib/*-pre.js 做结构化提取——`defineTool(` 调用逐个解析参数块;`const routes = [` 数组按花括号配对逐条提取 kind/path/handler 行号与方法分支;`DEFAULT_CONFIG`/`DEFAULT_PROMPT_LAYERS` 按行号区间提取顶层键;`slots.inject(`/`section('`/页签数组逐一 grep 定位;`set('key'` 按分组区间归类。未采用手工抄录。
|
|
528
|
+
- **本文不做的事**:未运行任何服务、未跑测试套件、未启动宿主、未写 lib/。所有结论来自源码静态读取。
|
|
529
|
+
- **行号时效**:file:line 以 2026-09-20 工作区状态为准(index.js=11,463 行、client.js=5,706 行)。`lib/` 归 DSH 线持续演进,行号会漂移——引用时建议连同符号名(函数/常量名)一起定位。
|
|
530
|
+
- **与三份上位文档的关系**:DESIGN-OVERHAUL-PRE-RESEARCH.md §2 的量化数据(三套设计语言、样式审计、冷启动断点)本文未重做、未复述;UI-INVENTORY-RAW.md 的 85 键清单已被本文 L3-c(98 键)取代,差异在核对表与 L3-c.1;交接文档 §4-A 的 17/49/85/6 四个数字已在核对表逐一核销。
|
|
531
|
+
- **给 4-B(架构文档)与 4-C(首页)的接力提示**:插槽全表见 L2.1/L3-d;路由认证边界(loopback-only 403,无 token)见 L3-b 表头;能力宣传素材的数字口径以本文核对表为准(尤其「85 键」应更新为 98 键)。
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
站长你好,反馈一个 `openai-responses` 协议下的冲突问题。
|
|
2
|
+
|
|
3
|
+
**现象**:用 `api: openai-responses` 走 `https://api.dshapi.icu/v1` + `deepseek-v4.1-flash`,客户端(DSH)的会话会永久损坏——所有模型开始报 `400 Duplicate 'call_id'`,之后该会话再也不能用,只能手工清历史。
|
|
4
|
+
|
|
5
|
+
**原因**:responses 协议里工具调用的 id 字段和你返回的 `tool_calls[].id` 用的是一样的 `call_xx_xxxx` 命名规则,两边算出来的 id 会撞车。DSH 在 responses 这条路径上拿不到独立的 id,只能用自己生成的值兜底,同一轮里并发多个工具调用时就重复了,写进历史后每次请求都被上游拒绝。
|
|
6
|
+
|
|
7
|
+
**对比证据**:同一份客户端配置下,其他中转(sub-vankit、vankit-glm 等)都没有这个问题,只有走你们 responses 端点时会撞。
|
|
8
|
+
|
|
9
|
+
**想请你确认/解决**:
|
|
10
|
+
1. 你们是否支持标准的 `chat/completions` 协议?我们这边实测 `https://api.dshapi.icu/v1/chat/completions` 是正常返回的,如果可以,我们改用标准协议就能绕过。
|
|
11
|
+
2. 如果必须用 responses,能否让返回里的工具调用 id 与客户端请求中的 id 明确区分开(比如加独立前缀),避免撞车?
|
|
12
|
+
|
|
13
|
+
麻烦看一下,谢谢!
|