@a9i5k4/dsh-auto-memory 3.0.1 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/README.md +13 -8
  2. package/README.zh-CN.md +13 -8
  3. package/docs/HANDBOOK.md +88 -52
  4. package/docs/USER-GUIDE.en.md +9 -9
  5. package/docs/USER-GUIDE.zh-CN.md +9 -9
  6. package/docs/screenshots/promo/promo-0-banner-v4.png +0 -0
  7. package/docs/screenshots/promo/promo-1b-auto-recall.png +0 -0
  8. package/lib/activation-host.js +6 -1
  9. package/lib/client.js +819 -272
  10. package/lib/context-host.js +7 -1
  11. package/lib/episodic-store.js +90 -16
  12. package/lib/fact-store.js +463 -41
  13. package/lib/hub-io.js +217 -0
  14. package/lib/index.js +224 -45
  15. package/lib/intent-clean-safe.js +1 -1
  16. package/lib/memory-hub.js +37 -5
  17. package/lib/note-status.js +9 -1
  18. package/lib/procedure-store.js +252 -31
  19. package/lib/procedure-switch.js +38 -0
  20. package/lib/python-sidecar-client.js +285 -8
  21. package/package.json +6 -2
  22. package/docs/internal/ACCEPT-35-LIVE.md +0 -143
  23. package/docs/internal/ACCEPTANCE-20260914.md +0 -90
  24. package/docs/internal/ARCH-REVIEW-BRIEF.md +0 -411
  25. package/docs/internal/ARCH-REVIEW-REQUEST.md +0 -201
  26. package/docs/internal/ARCH-REVIEW-ROUND2.md +0 -169
  27. package/docs/internal/ARCH-REVIEW-ROUND3.md +0 -206
  28. package/docs/internal/ARCHITECTURE-FOR-ZCODE-20260920.md +0 -397
  29. package/docs/internal/ART-DIRECTION-DEEPSEEK-20260920.md +0 -351
  30. package/docs/internal/ART-DIRECTION-WIREFRAME.md +0 -191
  31. package/docs/internal/ART-DIRECTION-WIREFRAME.md.bak-superseded +0 -181
  32. package/docs/internal/AUDIT-WB-GRAPH-FULL-20260916.md +0 -314
  33. package/docs/internal/BATTLE-PLAN-20260917.md +0 -871
  34. package/docs/internal/CONCURRENCY-INVESTIGATION-20260917.md +0 -192
  35. package/docs/internal/CROSS-SESSION-SEARCH-PATH-DECISION.md +0 -72
  36. package/docs/internal/CROSS-SESSION-SEARCH-RESEARCH.md +0 -131
  37. package/docs/internal/CUA-VISION-FIX-NOTES.md +0 -78
  38. package/docs/internal/DECISIONS-20260914-SESSION.md +0 -269
  39. package/docs/internal/DESIGN-OVERHAUL-PRE-RESEARCH.md +0 -292
  40. package/docs/internal/DESIGN-P1-STATE-COMMIT-20260915.md +0 -219
  41. package/docs/internal/DIRECTION-CHECK-WB-GRAPH-20260916.md +0 -132
  42. package/docs/internal/FEATURE-INVENTORY.md +0 -531
  43. package/docs/internal/FEEDBACK-TO-DSHAPI-RELAY.md +0 -13
  44. package/docs/internal/G-SERIES-EXECUTION-20260917.md +0 -248
  45. package/docs/internal/G3-DESIGN-20260918.md +0 -82
  46. package/docs/internal/G3-DISK-FORMAT-GAP-20260919.md +0 -92
  47. package/docs/internal/GH-DISCUSSION-5732-COMMENT.md +0 -74
  48. package/docs/internal/GPT-ACCEPTANCE-PROMPT-20260916.md +0 -352
  49. package/docs/internal/GPT-REVIEW-PROMPT.md +0 -216
  50. package/docs/internal/GROUP-DIGEST-SETUP.md +0 -62
  51. package/docs/internal/GROUP-LISTENER-SETUP.md +0 -49
  52. package/docs/internal/GROUP-WEBHOOK-SETUP.md +0 -93
  53. package/docs/internal/HANDOFF-TO-ZCODE-20260920.md +0 -309
  54. package/docs/internal/HANDOFF-TO-ZCODE.md +0 -168
  55. package/docs/internal/HERMES-DATA-VERIFICATION-20260919.md +0 -120
  56. package/docs/internal/HERMES-LEGACY-STATUS-20260919.md +0 -74
  57. package/docs/internal/ISSUE-55-58-VERIFICATION-20260918.md +0 -175
  58. package/docs/internal/ISSUE10-FIX-EXECUTION-20260919.md +0 -389
  59. package/docs/internal/ISSUE10-PLAN-20260919.md +0 -254
  60. package/docs/internal/ISSUE10B-FORENSICS-20260919.md +0 -468
  61. package/docs/internal/ISSUE9-PURGE-AND-R1-PLAIN-20260919.md +0 -150
  62. package/docs/internal/ISSUE9-RESIDUAL-FORENSICS-20260919.md +0 -114
  63. package/docs/internal/KICKOFF-P0.md +0 -254
  64. package/docs/internal/LESSON-TO-CANDIDATE-STATUS-20260919.md +0 -79
  65. package/docs/internal/MASTER-PLAN-3.0.md +0 -411
  66. package/docs/internal/MEMORY-GOVERNANCE-20260917.md +0 -309
  67. package/docs/internal/MEMORY-MUTATION-AND-INDEX-DESIGN.md +0 -85
  68. package/docs/internal/MERGE-CONFLICT-SCAN-20260914.md +0 -222
  69. package/docs/internal/NEXT-VERSION-TODO.md +0 -95
  70. package/docs/internal/OFFICIAL-DISCUSSION-DRAFT.md +0 -80
  71. package/docs/internal/PENDING-FIXES-20260916.md +0 -289
  72. package/docs/internal/PRE-FRONTEND-CHECKLIST-20260919.md +0 -705
  73. package/docs/internal/PRE-FRONTEND-CHECKLIST-20260919.md.bak-s10 +0 -649
  74. package/docs/internal/PROCEDURAL-MEMORY-AND-APPROVAL-DESIGN-20260918.md +0 -225
  75. package/docs/internal/PROGRESS-20260917.md +0 -93
  76. package/docs/internal/PROMPT-GAP-AUDIT-20260920.md +0 -128
  77. package/docs/internal/R1-DEGRADE-AUDIT-20260918.md +0 -163
  78. package/docs/internal/R1-READABILITY-FORENSICS-20260919.md +0 -127
  79. package/docs/internal/R2-EVIDENCE-DEEP-AUDIT-20260918.md +0 -140
  80. package/docs/internal/R3-DEGRADE-LEDGER-DESIGN-20260918.md +0 -138
  81. package/docs/internal/R4-RECALL-QUOTA-PLAN-20260918.md +0 -218
  82. package/docs/internal/RAG-KARPATHY-PROGRAM.md +0 -229
  83. package/docs/internal/RELEASE-PROCESS.md +0 -99
  84. package/docs/internal/REPORT-P0-NIGHTLY.md +0 -212
  85. package/docs/internal/REPORT-P5-ACCEPTANCE.md +0 -31
  86. package/docs/internal/REPORT-WB-GRAPH-NIGHTLY.md +0 -153
  87. package/docs/internal/RESUME-20260918.md +0 -171
  88. package/docs/internal/RESUME-20260919.md +0 -104
  89. package/docs/internal/REVIEW-WB-GRAPH-SELF.md +0 -81
  90. package/docs/internal/RHINELAB-TO-DEEPSEEK-FEASIBILITY.md +0 -198
  91. package/docs/internal/ROADMAP-20260917-WEEK.md +0 -439
  92. package/docs/internal/ROADMAP.md +0 -106
  93. package/docs/internal/RUN-P0-NIGHTLY.md +0 -227
  94. package/docs/internal/S10-CONSTRUCTION-HANDOFF-20260917.md +0 -185
  95. package/docs/internal/S10-GAP-INVENTORY-20260917.md +0 -239
  96. package/docs/internal/S10-GAPS-PLAIN-20260917.md +0 -125
  97. package/docs/internal/SEMANTIC-ARCHITECTURE-SPEC.md +0 -360
  98. package/docs/internal/SESSION-FILE-REPAIR-PROTOCOL.md +0 -90
  99. package/docs/internal/SUBAGENT-REPORT-ROUTING-PRE-RESEARCH.md +0 -261
  100. package/docs/internal/T6-EXECUTION-20260920.md +0 -130
  101. package/docs/internal/TELEMETRY-EFFECT-REPORT-DESIGN-20260918.md +0 -146
  102. package/docs/internal/THESIS-GAP-ANALYSIS-20260918.md +0 -89
  103. package/docs/internal/THESIS-OUTLINE-20260918.md +0 -147
  104. package/docs/internal/THREE-LAYER-CONTRACT.md +0 -219
  105. package/docs/internal/TODO-BACKLOG.md +0 -263
  106. package/docs/internal/TODO-GRAPH.html +0 -715
  107. package/docs/internal/TODO-GRAPH.html.bak-20260914-v2 +0 -493
  108. package/docs/internal/TODO-GRAPH.html.bak-20260915-alsfix +0 -710
  109. package/docs/internal/TODO-GRAPH.html.bak-20260915-p1 +0 -710
  110. package/docs/internal/TODO-GRAPH.html.bak-20260915-p6a-rev +0 -703
  111. package/docs/internal/TODO-GRAPH.html.bak-20260915-wshint +0 -710
  112. package/docs/internal/TODO-GRAPH.html.bak-20260916-batch +0 -715
  113. package/docs/internal/UPSTREAM-ISSUE-PR-TRIAGE-20260919.md +0 -297
  114. package/docs/internal/UPSTREAM-ISSUES-3RD-AUDIT-20260920.md +0 -104
  115. package/docs/internal/WB-FORMAT-CONVENTION.md +0 -112
  116. package/docs/internal/WB-GRAPH-DECISIONS-20260914.md +0 -71
  117. package/docs/internal/WB-GRAPH-INTEGRATION-PLAN.md +0 -386
  118. package/docs/internal/WB-GRAPH-RESEARCH-BRIEF.md +0 -118
  119. package/docs/internal/WB-GRAPH-RESEARCH-EXTERNAL.md +0 -228
  120. package/docs/internal/WB-GRAPH-RESEARCH-LOCAL.md +0 -190
  121. package/docs/internal/reviews/CLAIM-VERIFICATION-20260914.md +0 -56
  122. package/docs/internal/reviews/PLAN-gpt6astra-round2-20260914.md +0 -787
  123. package/docs/internal/reviews/REVIEW-gpt6astra-20260914.md +0 -112
  124. package/docs/internal/reviews/ROUND3-REVIEW-INTEGRATION-20260914.md +0 -230
@@ -1,49 +0,0 @@
1
- # 群反馈闭环(GROUP-REPORT)部署说明
2
-
3
- > 2026-09-13 搭建。日报(见 `GROUP-DIGEST-SETUP.md`)之外的第二条链路:**群员在 QQ 群里汇报问题
4
- > → 自动建 GitHub issue → 状态回执「收到 ✅ / 正在处理 🔧 / 处理完毕 ✅」双端同步(QQ 群一句话 + issue 结构化评论)**。
5
- > 修理工可以是 Copilot(把 issue 分配给 @copilot),也可以是人。
6
-
7
- ## 状态词汇表(和群主口头回复一致)
8
-
9
- | 状态 | 触发点 | QQ 群播报 | GitHub issue |
10
- | --- | --- | --- | --- |
11
- | 收到 ✅ | 群反馈建单 | `收到 ✅ 群反馈已建单 #N「…」,处理进度会同步` | 「收到 ✅」评论 |
12
- | 正在处理 🔧 | PR 开出且引用该 issue | `正在处理 🔧 群反馈 #N → PR #M「…」` | 「正在处理 🔧」评论 |
13
- | 处理完毕 ✅ | issue 关闭(合并自动关单也算) | `处理完毕 ✅ 群反馈 #N「…」已解决` | 「处理完毕 ✅」评论 |
14
-
15
- ## 组成
16
-
17
- | 文件 | 作用 |
18
- | --- | --- |
19
- | `.github/workflows/group-report-status.yml` | 状态机:issues opened/labeled/closed + PR opened/reopened → 双端同步 |
20
- | `.github/scripts/report-sync.mjs` | 状态判定 + issue 评论 + QQ 播报(云端) |
21
- | `.github/scripts/qq-send.mjs` | QQ 发送共享模块 |
22
- | `.github/scripts/group-listener.mjs` | 「耳朵」:常开设备上连官方网关收群消息 → 建单 → 群里回收到 |
23
-
24
- ## 群员怎么报问题(两种都通)
25
-
26
- 1. **在群里说**(需要耳朵在跑):@机器人 并带触发词,如「@automemory 反馈助手 反馈 导出按钮点了没反应」→ 自动建单;
27
- 2. **直接提 GitHub issue**:标题随意,打上 `group-report` 标签 → 同样进入状态闭环(适合贴日志/截图)。
28
-
29
- ## 耳朵部署(旧安卓手机 Termux)
30
-
31
- 1. Termux(F-Droid 版)里:`pkg install nodejs-lts git`;
32
- 2. `git clone https://github.com/Aik358/dsh-auto-memory && cd dsh-auto-memory/.github/scripts`;
33
- 3. 建 `.env`(模板见 `group-listener.mjs` 头注释;GH_TOKEN 用**仅 issues:write 的细粒度 PAT**,别复用推送 PAT);
34
- 4. `node group-listener.mjs` → 看到「已上线,监听触发词」即可;
35
- 5. 常驻:关闭 Termux 电池优化 + `termux-wake-lock`;进阶用 Termux:Boot 开机自启。
36
-
37
- **约束**:同一机器人同时只允许一个网关连接——耳朵在跑时,勿再跑 `qq-capture-openid.mjs` 或绑定 WorkBuddy(二者互踢)。
38
-
39
- ## Copilot 当修理工
40
-
41
- 1. 前提:仓库 Settings → Copilot 开启 coding agent;账号需 Copilot 付费档(GitHub 学生包通常自带 Copilot Pro);
42
- 2. 在群反馈 issue 里 assign `@copilot` → 它开工并开出草稿 PR(正文引用本 issue)→ 状态机自动播「正在处理 🔧」;
43
- 3. 人审合并 → issue 自动关闭 → 自动播「处理完毕 ✅」。
44
-
45
- ## 测试方法(需先 push 到 main)
46
-
47
- 1. 建一个测试 issue 打上 `group-report` → 群里应出现「收到 ✅」+ issue 出现评论;
48
- 2. 开个 PR 正文写 `fixes #<测试issue号>` → 群里「正在处理 🔧」;
49
- 3. 关闭测试 issue → 群里「处理完毕 ✅」。
@@ -1,93 +0,0 @@
1
- # 群反馈云端耳朵(Webhook)部署说明
2
-
3
- > 2026-09-13 搭建(同日改为 AI 归纳路线):**不再自动建 GitHub issue**。云端耳朵把群里命中
4
- > 反馈词/问题关键词的消息静默收进一个**秘密 Gist**;每天 12:00/21:00 的日报(group-digest)读取
5
- > gist、调用大模型归纳成带标题的「群内反馈(AI 归纳)」清单随日报发群,并清空 gist 防重复。
6
- > 前置阅读:状态闭环词汇表见 `GROUP-LISTENER-SETUP.md`(issue 状态机保留但处于休眠,当前无建单方)。
7
-
8
- ## 组成
9
-
10
- | 文件 | 作用 |
11
- | --- | --- |
12
- | `.github/cloud/qq-webhook/index.js` | Webhook 接收端(Web 函数,零依赖,任何 Node>=18 环境可跑) |
13
- | `.github/scripts/group-listener.mjs` | WS 版耳朵(备用:有常开设备时的等价实现,二选一) |
14
-
15
- ## 部署步骤(腾讯云函数 · Web 函数)
16
-
17
- 1. 注册腾讯云并完成实名认证 → 控制台搜「函数服务 SCF」;
18
- 2. 新建函数:函数类型选 **Web 函数**,运行环境 **Node.js 18 或 20**,地域就近(如广州/上海);
19
- 3. 函数代码:把 `.github/cloud/qq-webhook/index.js` 打成 zip(就一个文件)上传,执行方法保持默认(`index.main_handler` 不适用 Web 函数,Web 函数看监听端口);
20
- 4. 环境变量(函数配置里加):
21
- ```
22
- QQ_APP_ID=1905260114
23
- QQ_APP_SECRET=<机器人secret>
24
- QQ_GROUP_OPENID=D4D52BA3A7412F88E9192011CD4B935A
25
- GH_TOKEN=<细粒度PAT,Account permissions → Gists: Read and write(收集用,不碰仓库)>
26
- GIST_ID=<秘密 gist 的 32 位 id,文件名 group-feedback.jsonl>
27
- REPO=Aik358/dsh-auto-memory
28
- ROUTE_TOKEN=<自造一段随机字符串,防扫描>
29
- FEEDBACK_KEYWORDS=问题,bug,报错,error,异常,失效,崩溃,闪退,不能用,出错了,坏了,修复 <可选,收集关键词>
30
- LLM_API_KEY=<可选;配了才启用「@ 消息大模型应答」(DeepSeek key 或任意 OpenAI 兼容端点)>
31
- LLM_MODEL=deepseek-chat <可选,默认 deepseek-chat>
32
- LLM_BASE_URL=https://api.deepseek.com <可选,换其他 OpenAI 兼容服务时改>
33
- ```
34
- 5. 部署后,函数详情页拿「**访问服务 URL**」(默认公网域名,HTTPS),在末尾拼上 `/<ROUTE_TOKEN>/`;
35
- 6. QQ 新版控制台 → 开发设置 → 「事件订阅与回调地址」→ 接收方式切换 **Webhook** → 粘贴上面的 URL;
36
- 平台立刻发 op=13 验证请求,我们的服务会自动应答(用 AppSecret 派生 Ed25519 密钥签名),通过即绑定;
37
- 7. 真实验证:群里发「反馈 这是一条测试」→ 应出现:新建 issue(带 group-report 标签)+ 群里「收到 ✅」。
38
-
39
- ## 关键事实(来自官方文档,2026-09 核对)
40
-
41
- - 回调只要求 **HTTPS + 端口 80/443/8080/8443**;文档未要求 ICP 备案(腾讯云函数默认域名可直用;若校验被拒,改用 API 网关触发器或 CloudBase 云接入的默认域名,再不行换 VPS 跑同一份代码);
42
- - **签名**:seed = AppSecret 自我拼接补足 32 字节 → 派生 Ed25519 密钥对;op=13 用私钥签 `event_ts+plain_token` 回 `{plain_token, signature}`;事件推送用公钥验 `X-Signature-Ed25519`(原文 = 时间戳+原始 body);
43
- - **切换即生效**:Webhook 与 WebSocket 互斥——切过去后,`qq-capture-openid.mjs`/`group-listener.mjs` 这类 WS 工具就收不到事件了(切回来同理);
44
- - 建议在函数配置里把 `STRICT_VERIFY=1`(验签严格模式)等真实验证跑通后再开。
45
-
46
- ## 与 Copilot/修理工的关系
47
-
48
- 建出的 issue 分配给 @copilot(需 Copilot 付费档,学生包免费)或自行认领;PR 引用 issue 自动播「正在处理 🔧」,关闭自动播「处理完毕 ✅」——由 `group-report-status.yml` 负责,与本耳朵解耦。
49
-
50
- ## 按需报告接口(给 DeepSeek Harness / 人工用)
51
-
52
- ```
53
- GET https://<函数URL>/<ROUTE_TOKEN>/?report=N # 最近 N 小时(1-48)群反馈
54
- GET ...?report=12&raw=1 # 只要原文不要 AI 总结
55
- ```
56
- 返回 JSON:`{ window_hours, total, items:[{t,u,w,m}], summary?, v }`。
57
- - items=带时间戳的原始反馈;配了云函数 LLM_API_KEY 时附 summary(AI 分诊:问题清单+修复优先级),没配则只有原文——harness 的模型可直接读原文自己分析。
58
- - 注意:每次日报(11:40/20:40)读完后会清空收集区,所以可查范围≈「自上次日报以来收集的反馈」(与 12h 窗口天然对齐)。
59
- - DeepSeek Harness 用法:直接 GET 该 URL(浏览器/curl/任意 HTTP 工具),把返回 JSON 交给模型出修复方案;或固化成 auto-memory 的 procedure。
60
-
61
-
62
- ---
63
-
64
- ## 2026-09-13 增量:定时班自触发 + @问答每小时限额(版本标记 20260913f)
65
-
66
- **背景**:GitHub 的 schedule 定时触发对本仓库从未生效(全仓库 schedule 运行 0 次,成功的日报全是手动 dispatch)。改为「SCF 定时触发器 → 函数 → workflow_dispatch」:到点必达,GitHub 侧只当执行器。
67
-
68
- ### 控制台要做的三件事
69
-
70
- 1. **上传新 index.zip**(标记 `20260913e`;上传后 `?diag=1` 应显示 `"v":"webhook-gist-20260913e"`,并出现 `"ai"` 与 `"timer"` 两个配置块)。
71
- 2. **新增环境变量**(函数配置):
72
- - `LLM_BASE_URL` / `LLM_API_KEY` / `LLM_MODEL` —— 与日报 Actions secrets 同源(WorldCodes 中转 + minimax-m3),配了才有 @ 答疑;**注意 base 的变量名是 `LLM_BASE_URL`**(`LLM_API_BASE` 亦兼容,2026-09-13 曾因文档误写前者导致 base 一直是 DeepSeek 默认值的 401);
73
- - `GH_DISPATCH_TOKEN` —— **Actions 读写权限**的 PAT(细粒度:Repository permissions → Actions: Read and write),定时班自触发必需;
74
- - `TIMER_SECRET`(可选)—— `?timer=1&key=<值>` 手动测试时的口令;`TIMER_MIN_GAP_HOURS`(可选,默认 10)。
75
- - `AI_MAX_PER_HOUR`(可选)—— @ 答疑每小时最多几次,**不配 = 不限额**;`AI_QUOTA_HOURS`(可选,默认 1)—— 限频时间窗(小时)。改额度只改环境变量,无需改代码。
76
- 3. **添加定时触发器**(函数 → 触发管理 → 创建):类型=定时触发器,名称必须叫 **`digest-dispatch`**(与默认 TIMER_TRIGGER_NAME 一致),自定义 Cron(SCF 七段=秒 分 时 日 月 星期 年,按北京时间):
77
- - `0 40 11 * * * *`(北京 11:40 主班)
78
- - `0 40 20 * * * *`(北京 20:40 主班)
79
- - 触发器 POST 到函数 URL(会带 Type:Timer 事件体),函数内部有 10 小时防重(落 gist 的 bot-state.json),不会重发。
80
-
81
- ### 新行为
82
-
83
- - **@ 答疑**:群成员 @机器人 + 任意问题(不含反馈触发词)→ AI(M3)**每小时限 1 次**详细回答(被动回复,带 msg_id,不占主动消息配额);超限回复一条限频提示;配额时间戳落 gist `bot-state.json`,冷启动不失忆。反馈触发词(反馈/问题/bug)的收集行为不变。
84
- - **手动测试**:`GET …?timer=1&key=<TIMER_SECRET>` 可随时触发一班日报(同样受 10h 防重保护)。
85
- - **成本**:SCF 侧 新增调用 ≤ 每天几十次,远在免费额度内;LLM 侧 M3 约 0.02 元/次,日报 2 次/天 + 答疑上限 24 次/天 → 最坏 ~0.5 元/天,实际远低。
86
-
87
-
88
- ### 20260913f 追加:反馈文件钉死文件名(真 bug 修复)
89
-
90
- - **问题**:反馈写入/日报读取/清空都用「gist 里第一个文件」当目标——`group-raw-debug.txt` 先建、或清空用 `content:''`(= **删除文件**)后,第一个文件就会换人,实测反馈行混进了原始调试文件。
91
- - **修复**:三方(webhook 写入 / report 读取 / digest 收集清空)全部钉死 `group-feedback.jsonl`;清空改写 `'
92
- '`(**保留文件本身**);report 的 LLM 失败不再静默,外显 `llmError` 字段(检查 base/model/key 就看它)。
93
- - **迁移**:旧混写的历史行留在 `group-raw-debug.txt` 作为调试史,不再被 report 读取;新反馈从上传新包起进 `group-feedback.jsonl`。**务必确认 Actions secret `FEEDBACK_GIST_ID` 与云函数 `GIST_ID` 是同一个值**(真实值不写进仓库——`docs/` 会随 npm 包发布;从 `~/.dsh/memory/workspaces/--D--dsh_debug--/MEMORY.md` 取,secret 不可回读,不记得就重设)。
@@ -1,309 +0,0 @@
1
- # 交接:dsh-auto-memory 功能梳理 + 首页构建(2026-09-20 · 来自 DSH 线)
2
-
3
- ---
4
-
5
- # 🚨 2026-09-20 更新 · 美术方向已换(**先读这段**)
6
-
7
- **用户裁定:「把原有的那个色调和风格丢掉,主要采用 DeepSeek 主页的形式。」**
8
-
9
- ## 权威文档已更换
10
-
11
- | | 文档 | 状态 |
12
- |---|---|---|
13
- | ❌ **作废** | `docs/internal/ART-DIRECTION-WIREFRAME.md` | **不要再照它做配色** |
14
- | ✅ **现行** | **`docs/internal/ART-DIRECTION-DEEPSEEK-20260920.md`** | **照这份做** |
15
-
16
- **链接**(用户在文件面板可直接打开):
17
-
18
- ```
19
- D:\dsh-auto-memory\docs\internal\ART-DIRECTION-DEEPSEEK-20260920.md
20
- ```
21
-
22
- ## 如果你已经在做了 —— 自查三条,一样就继续,不一样就改
23
-
24
- | # | 自查项 | 若不符 → 改成 |
25
- |---|---|---|
26
- | **1** | **主色是品牌蓝 `#4d6bfe` 吗?** | 若是**信号橙 `#E9470C`** ⇒ **改** |
27
- | **2** | **用了玻璃 + 圆角吗?** | 若你**避开了** `backdrop-filter` 和圆角 ⇒ **改**(官网自己就在用:`blur(12px)`、卡片 24px) |
28
- | **3** | **背景与角色是分层帧率吗?** | 若是**整页统一帧率** ⇒ **改**(背景 60fps + **角色 24fps 线描抽象**) |
29
-
30
- ## 三条核心规格(速记)
31
-
32
- 1. **底色**:亮 `#f9f8f8` / 暗 **`#0a0a0a`**(**建议主推暗色**,贴「黑鲸」调性)
33
- 2. **层级**:**半透明白叠加**(`surface-1..5`),不画实色分区线
34
- 3. **★ 分层帧率**:**背景 60fps 丝滑** + **角色 24fps 抽象线描** —— 两层**不需要同步**,这是刻意的视觉对比
35
-
36
- ## 角色层规格(**抽象优先**,用户明确要求)
37
-
38
- - 单色线描,1–1.5px;**极简甚至零着色**(只留发丝高光 + 瞳孔一点蓝)
39
- - **剪影可辨识 > 五官精细**;远景可只留四个特征:轮廓 + 呆毛 + 头鳍 + 鲸尾
40
- - 好处:**耐看 · 省体积 · 且绕开了「等精绘排期」这个最大卡点**
41
-
42
- ## 角色版权约束(**必读**)
43
-
44
- 鲸鱼娘源自「明月」(作者 **商山无行**),协议 **CC BY-NC-SA 4.0** ⇒ **须署名 · 禁商用 · 衍生同协议**。
45
- 本项目为非商业开源插件,属可接受范畴;**将来若商业化必须重评**。
46
-
47
- **官网 CSS 本地副本**(可直接读):`artifacts/_ds-css/`(三份,共 85 KB)
48
-
49
- **完整理由与逐项对照** → 见 `ART-DIRECTION-DEEPSEEK-20260920.md`(351 行,§0 专讲为什么要推翻旧版)
50
-
51
- ---
52
-
53
- > **这是什么**:一份**自包含**的交接文档。读完它 + 它指向的三份权威文档,你就能接手工作,**不需要**访问 DSH 的记忆系统或聊天记录。
54
- > **谁写的**:在 DSH(DeepSeek Harness)线上做这个插件的 agent。
55
- > **给谁**:ZCode 线的 agent。
56
- > **为什么交接**:DSH 线转入维护期;本轮工作(功能梳理 + 架构梳理 + 首页)需要**构建链 + 浏览器迭代能力**,ZCode 的 computer use 更强。
57
-
58
-
59
- ---
60
-
61
- ## §0 一句话启动指令(用户可直接把下面这段粘给 ZCode)
62
-
63
- ```
64
- 项目在 D:\dsh-auto-memory。先读 docs/internal/HANDOFF-TO-ZCODE-20260920.md(全文),
65
- 再读它 §2 列的三份权威文档。读完在会话里复述:①我在做什么 ②哪三个目录我可以写
66
- ③哪两个目录绝对不能碰 ④三路任务分别的交付物是什么。复述完再开工,不要提前动手。
67
- ```
68
-
69
- ---
70
-
71
- ## §1 你的工作边界(**先看这段,越界会造成真实损失**)
72
-
73
- ### ✅ 你可以写的地方
74
-
75
- | 目录 | 用途 |
76
- |---|---|
77
- | `docs/` | 文档、功能清单、架构图、首页源码(含新建子目录) |
78
- | `新目录(自选)` | 首页工程(如 `landing/`、`site/`)—— **见 §4-C 的方案** |
79
-
80
- ### ❌ 你**不能**碰的地方
81
-
82
- | 目录 | 为什么 |
83
- |---|---|
84
- | **`lib/`** | **这是活的宿主代码**。本地 profile 用 `link:` 挂载,`lib/` 一改,正在运行的 DSH 宿主**立刻受影响**。而且它与 DSH 线的开发同步进行 —— 两边同时改会撞车。 |
85
- | `tests/` | 与 `lib/` 绑定(146 个回归套件)。**不要动。** |
86
- | `tools/` | 发布工具链。**不要动。** |
87
- | `.dsh-memory/` | DSH 线的记忆数据。**只读,不要写。** |
88
-
89
- ### ⚠️ 一条硬约束(重要)
90
-
91
- **插件(`lib/client.js`)不能加构建链。** 它是手写的 `__ModuleLoader__` bundle,只有一个文件、没有构建步骤、依赖只能是宿主 seed 表里的包。
92
-
93
- **但首页不受这条约束** —— 首页是**独立静态站点**,可以有构建链(Astro/Vite/Three.js 随便用)。详见 §4-C。
94
-
95
- ---
96
-
97
- ## §2 权威文档索引(**按顺序读,不要跳**)
98
-
99
- | # | 文档 | 讲什么 | 你必须从中得到什么 |
100
- |---|---|---|---|
101
- | **1** | **✅ `docs/internal/ART-DIRECTION-DEEPSEEK-20260920.md`**(351 行,2026-09-20) | **美术方向 v2 · DeepSeek 官网体系**:官网实测色板 / 圆角玻璃投影六档 / 按钮态 / **分层帧率** / **角色抽象化规格** / 鲸鱼娘版权链 | **首页就按这份做** —— 旧 `ART-DIRECTION-WIREFRAME.md` **已作废**(见文首横幅) |
102
- | **2** | `docs/internal/PRE-FRONTEND-CHECKLIST-20260919.md`(705 行) | **排期权威视图**:§4 含 R1–R7 前端要求、§8 真实进度执行序、**§10 = 前端之后一起做的三项遗留** | 理解「前端项目的边界与已定事项」 |
103
- | **3** | `docs/internal/DESIGN-OVERHAUL-PRE-RESEARCH.md`(285 行) | **大排期预研**:§2 现状硬数据(量化)、§4 三条线目标形态、§5 排期、**§8 六个拍板点** | **功能清单与架构梳理的起点** —— §2 已经有一批量化数据可直接引用 |
104
-
105
- **索引文档(按需查,不必通读)**:
106
-
107
- - `docs/internal/UI-INVENTORY-RAW.md` —— 设置项 8 组 / 85 键的原始清单
108
- - `docs/UI-REFACTOR-PRE-RESEARCH.md` —— 界面重构预研
109
- - `docs/internal/ISSUE10-FIX-EXECUTION-20260919.md` —— ⑩ 系列修复执行记录(下文的「变更」多出自此)
110
- - `README.md` / `docs/USER-GUIDE.zh-CN.md` —— 面向用户的现有说明(**已知覆盖不全**,见 §4-A)
111
-
112
- ---
113
-
114
- ## §3 你在 09-14 之后缺失的变更(**你的记忆缺口在这里**)
115
-
116
- 你在 `~/.zcode/cli/memories/projects/dsh-auto-memory-4412cd98b2e33c51/memory/` 已有 31 份本项目记忆,**最新到 09-14**(含一份 `handoff-2026-09-11-from-dsh.md`)。
117
- **09-14 之后 DSH 线做的事,你的记忆里没有 —— 以下是全量清单:**
118
-
119
- ### 3.1 上游 issue 全批闭环(GitHub 队列清零)
120
-
121
- - **13 条 issue** 全部带针对性证据回复并关闭;**6 个 PR** squash-merge 进 `main`(`821a35d7` → `8da0d606`)。
122
- - **仓库当前 open issue/PR 数 = 0。**
123
- - 关键结论:**上游 issue 的根因清单可能整体过时** —— 它们多基于 `main@d816497(v3.0.0)` 撰写,而开发线经多轮重构后,其中「17 个 smoke 红」「python import 失效」等描述**均不成立**。⇒ 处理上游 issue 前**必须先实跑核验**,不可照单全修。
124
-
125
- ### 3.2 已交付的后端能力(**这些是首页可以宣传的素材**)
126
-
127
- | 代号 | 能力 | 用户能看到什么 |
128
- |---|---|---|
129
- | **T4** | procedure memory **模型直写通路** | 模型可以自己写技能/流程(新增工具 `memory_procedure_pre`,模型工具数 16→17) |
130
- | **R7** | 用户级硬性约束**可视编辑** | 用户能在面板里**自己增删改**「每轮必注入的硬约束」,有预览、删除二次确认 |
131
- | **R1–R6** | 审批界面**可读性** | 技能审批不再只有英文枚举:中文化阶段 + **「为什么还不能晋升」用人话说**(含具体数字)+ 可展开预览真实步骤 |
132
- | **#82** | 配置**原子写入 + 损坏隔离** | 保存中途崩溃不再无感重置全部配置;损坏文件被改名保留(`.corrupt-<ts>`) |
133
- | **#86-3** | `DSH_HOME` 统一 | 7 处实现收敛到 1 处,跨平台路径不再打架 |
134
- | **#84** | 诊断留痕 | 事件环丢弃有计数;unhandledRejection 有 `{count, firstAt, lastAt}` |
135
- | **T10** | 机械流程切片**默认关闭** | 解耦开关 `hubMechanicalProcedureFeedEnabled`(默认 false) |
136
-
137
- ### 3.3 三条**可复用的工程纪律**(你写文档时也该遵守)
138
-
139
- 1. **fail-soft 必须留痕** —— 不能静默降级。本项目所有 catch 分支都要有可观察信号。
140
- 2. **变异测试必须真红** —— 把条件改成常量后,JS 三元**仍会渲染假分支**,字符串还在文件里 ⇒ 断言要**先定位分支再断言**,不能只查「字符串存在」。
141
- 3. **「PR merge 成功 ≠ 修复落地」** —— PR 常改**陈旧副本**(`lib/*.js` 而非宿主真正 import 的 `lib/*-pre.js`),必须另行移植。
142
-
143
- ---
144
-
145
- ## §4 三路任务书(**并行执行**)
146
-
147
- > **用户明确要求:兵分三路并行。** 三路互不阻塞,可同时开工。
148
-
149
- ### 4-A · 第一路:**功能全量调查 → 三层功能清单**
150
-
151
- **目标**:产出一份 `docs/internal/FEATURE-INVENTORY.md`,**同时满足用户视角与工程视角**。
152
-
153
- **交付物规格(三层结构,缺一不可)**:
154
-
155
- | 层 | 内容 | 粒度要求 |
156
- |---|---|---|
157
- | **L1 用户能力** | 「用户能用它做什么」 | 一句话一条,**面向宣传** |
158
- | **L2 承载面** | 每个能力**现在住在哪**(页签/插槽/设置分组) | 表格,**面向前端搬家** |
159
- | **L3 工程细节** | 全部实现细节 | **全量不删减** |
160
-
161
- **⚠️ L3 的硬要求(用户原话:「所有的工程细节信息都要保存着」)**:
162
-
163
- - 必须有:**17 个模型工具**(逐个列出签名与用途)、**49 条 HTTP 路由**、**85 个设置键**(8 组)、**6 处插槽注册**、数据文件清单、关键调用链
164
- - **不许摘要化、不许「等等」省略、不许只写代表性的**
165
- - **L3 的地位不是「附录」,是「存档」** —— 用户要自己决定哪些展示、哪些宣传、哪些留在后台
166
-
167
- **建议做法**:
168
- 1. 先读 `docs/internal/DESIGN-OVERHAUL-PRE-RESEARCH.md` §2(已有量化数据可直接引用,别重做)
169
- 2. 再读 `docs/internal/UI-INVENTORY-RAW.md`(85 键清单)
170
- 3. `lib/` **只读**扫一遍,把工具/路由/插槽/设置项**机械枚举**出来(不要靠猜)
171
- 4. 补 L1/L2 的映射关系
172
-
173
- **注意**:`lib/` 你**不能改,但可以读**。枚举时用 `grep`/`node` 脚本,不要手工抄。
174
-
175
- ### 4-B · 第二路:**架构与技术栈调查**
176
-
177
- **目标**:产出 `docs/internal/ARCHITECTURE-FOR-ZCODE-20260920.md`,让后续任何 agent 能理解「这东西是怎么搭起来的」。
178
-
179
- **必须覆盖**:
180
-
181
- | 主题 | 要点 |
182
- |---|---|
183
- | **三层结构** | 宿主 `lib/index.js`(Node 侧,11460 行)/浏览器 `lib/client.js`(5701 行)/可选 Python 语义引擎 |
184
- | **插槽系统** | 宿主的 `ctx.slots` API:`inject` / `register` 语义、**61 个插槽清单**、`one handle one scope` 约束 |
185
- | **数据流** | 记忆文件 → 注入面 → 检出 → 检索;HTTP 路由的认证边界(**loopback-only,401 是预期**) |
186
- | **双线结构** | pre 开发线(`D:\dsh-auto-memory`)vs REL 发布线(`D:\dsh_debug\_publish_dsh-auto-memory`) |
187
- | **文件名约定** | 宿主真正 import 的是 `lib/*-pre.js`;同名的 `lib/*.js` 是**陈旧副本,不生效** |
188
- | **测试体系** | 146 个 smoke 套件、`node tools/run-smoke.mjs` 用法、**前端仅 3 个断言组件行为**(已知缺口) |
189
-
190
- **关键已知事实(别重新发现)**:插槽调查已在 DSH 线做过一轮,结论在 §6.3 与 `dsh-plugin-ecosystem-integration.md`(你自己的记忆里就有)。
191
-
192
- ### 4-C · 第三路:**开始构建首页**(标准最高的一路)
193
-
194
- **目标**:**新首页从 0 做出来**,按 **`ART-DIRECTION-DEEPSEEK-20260920.md`** 的规格(**不是**旧线框稿版)。
195
-
196
- **用户的两条明确指令**:
197
-
198
- 1. **旧 HTML 直接扔掉** —— `docs/landing/index.html`(1745 行 / 122 KB)**废弃**,从 0 重做。
199
- 2. **~~「就按一周之前的那个规划来做」~~ → 已更新为「主要采用 DeepSeek 主页的形式」** —— 即按 **`ART-DIRECTION-DEEPSEEK-20260920.md`**,并结合三个开源素材库。
200
-
201
- **两个已拍板的前提**:
202
-
203
- | 项 | 决定 |
204
- |---|---|
205
- | **托管方式** | **GitHub Pages**(放弃 htmlpreview) |
206
- | **面板形态** | **保持液态玻璃不变** —— 线框稿风格**只用于首页**,不要试图改面板 |
207
-
208
- **用户对抄素材的态度(原话)**:
209
-
210
- > 「这个风险无所谓……你就大大方方让他抄就行了。**就是要这种优秀的美学风格和艺术风格,能多抄多少就抄多少。**」
211
-
212
- **迭代方式**:用户明确说 **「先让模型改到自己满意」**,且 **ZCode 的 computer use 很好** —— 可以**一步一步截图、一步一步滚、一步一步迭代**。请用起来。
213
-
214
- ---
215
-
216
- ## §5 三路共用的硬纪律
217
-
218
- ### 5.1 用户级硬规则(**违反会造成真实损失**)
219
-
220
- | # | 规则 | 为什么 |
221
- |---|---|---|
222
- | **1** | **绝不停止/重启 DSH web 宿主(3080 端口)** | 一旦关闭,**用户的会话思维链会直接断开卡死**。宿主只能由用户手动重启。 |
223
- | **2** | **绝不无差别杀 node 进程** | DSH harness 与插件宿主**都跑在 node 上**。`Get-Process node \| Stop-Process` 会连带杀死正在运行的会话(2026-09-14 实际发生过一次)。 |
224
- | **3** | **不碰 `lib/`** | 见 §1。 |
225
- | **4** | **改 DSH 配置前必须先备份** | 避免块级结构丢失。 |
226
-
227
- ### 5.2 本仓工程纪律
228
-
229
- | 纪律 | 说明 |
230
- |---|---|
231
- | **文件用 CRLF,无 BOM** | 本仓全部源文件是 CRLF。改动后校验:`LFonly` 必须为 0。 |
232
- | **大文件分块写入** | 一次性生成整个大文件会被拒绝。 |
233
- | **`edit` 用 `replace_all` 后必须核对命中数** | 替换范围**包含同一次编辑新加入的代码块** —— 若新块内文本与待替换文本相同,会一起替换(曾造成辅助函数自递归)。 |
234
- | **fail-soft 必须留痕** | 不得静默降级。 |
235
- | **别用固定字符窗口做断言** | 曾因 `SRC.slice(idx, idx+900)` 越界到相邻函数而误判。要**用花括号配对精确取函数体**。 |
236
-
237
- ### 5.3 与 DSH 线的协作约定
238
-
239
- - **`lib/` 归 DSH 线,`docs/` 与首页归 ZCode 线。** 各改各的,不要交叉。
240
- - 若你发现**必须改 `lib/`** 才能完成的任务:**不要改**,写进文档的「待 DSH 线处理」清单。
241
- - 你把交付物写到仓库里,DSH 线**能读到** —— 两边通过**文件**同步,不通过聊天。
242
-
243
- ---
244
-
245
- ## §6 三个素材库(已取证)
246
-
247
- | 仓库 | 语言/栈 | ⭐ | License | 体积 | 备注 |
248
- |---|---|---|---|---|---|
249
- | **[JesseLee-CN/rhinelab-blog-theme](https://github.com/JesseLee-CN/rhinelab-blog-theme)** | Astro + Three.js + TS + Pagefind | 5 | **MIT** | 55.8 MB | **同作者配套**:自述「含 RhineLabUI 三维档案终端 `/lab/`(脱敏开源版)」 |
250
- | **[LBEILC/RhineLabUI](https://github.com/LBEILC/RhineLabUI)** | TypeScript + Three.js | **565** | **MIT** | 133.5 MB | 有线上 demo:<https://rhine-lab-ui.vercel.app> |
251
- | **[Ulchemist/arknights-motion-library](https://github.com/Ulchemist/arknights-motion-library)** | JavaScript | 2 | **NOASSERTION** | 25.9 MB | 见下方提醒 |
252
-
253
- ### 6.1 用户对复用的态度(已授权)
254
-
255
- > 「这个风险无所谓,我现在这个东西,几个人就能用啊,而且我现在用的也是开源库,**你就大大方方让他抄就行了**。**就是要这种优秀的美学风格和艺术风格,能多抄多少就抄多少。**」
256
-
257
- ⇒ **以美学风格复用为主**(配色/排版/动效/三维交互的**做法与观感**),这是最有价值的部分。
258
-
259
- ### 6.2 事实性提醒(知情即可,不构成阻碍)
260
-
261
- - `arknights-motion-library` 的 License 显示为 **NOASSERTION** —— GitHub **未能识别出标准许可证**,意味着复用权利**不明确**,建议点进仓库确认作者实际声明。
262
- - 名字含 **Arknights(明日方舟)**:**代码许可 ≠ 美术资源许可**。游戏角色素材的版权归属游戏方,这类「动作库」通常复用其**动作数据格式/播放器实现**而非原画。
263
-
264
- ### 6.3 一个关键技术结论(**决定复用可行性**)
265
-
266
- > **首页与插件是两套约束,互不影响。**
267
-
268
- | | 插件(`lib/client.js`) | **首页(独立站点)** |
269
- |---|---|---|
270
- | 运行环境 | 宿主 GUI 内,被 `__ModuleLoader__` 加载 | **独立网页,浏览器直接打开** |
271
- | 依赖 | ❌ 只能用宿主 seed 表提供的包 | **✅ 随便用** |
272
- | 构建步骤 | ❌ **没有**,手写单文件 | **✅ 可以有**(Astro / Vite / TS 随便) |
273
- | 产物 | 随 npm 包分发 | **GitHub Pages 托管构建产物(标准做法)** |
274
-
275
- ⇒ **三个素材库都需要构建链(Astro / TypeScript),这完全不触碰插件约束。** 你可以放手用。
276
-
277
- ### 6.4 「怎么 combine」的建议方向(**供参考,最终由你做决定**)
278
-
279
- | 从哪来 | 拿什么 |
280
- |---|---|
281
- | **ART-DIRECTION-DEEPSEEK-20260920.md** | **骨架与规格**:官网实测色板(品牌蓝 `#4d6bfe` / 暗底 `#0a0a0a`)、圆角玻璃投影六档、按钮态、**分层帧率(背景 60fps + 角色 24fps)**、**角色抽象化规格** |
282
- | **rhinelab-blog-theme** | **Astro 站点结构 + 三维终端页的做法**(它本身就是一个含 `/lab/` 的博客主题,与首页定位最接近) |
283
- | **RhineLabUI** | **三维档案界面的交互范式与视觉语言**(565 stars,最成熟) |
284
- | **arknights-motion-library** | **动效/序列帧播放的实现思路**(对应你要的 24fps 动效) |
285
-
286
- **✅ 原「美学冲突」已消失**:旧版 §2.4 禁玻璃/圆角/投影,与 RhineLab 系深色发光玻璃**冲突**;**改走 DeepSeek 官网体系后,两边调性一致**(都用玻璃 + 圆角 + 暗色高科技),可放心 combine。
287
- ⇒ **这两套美学的调性不同**,combine 时需要一个明确取舍。**建议:以线框稿的「克制 + 工程图」为骨架,把 RhineLab 的动效与三维交互作为「局部亮点」引入**,而不是整体转向深色霓虹。
288
-
289
- ---
290
-
291
- ## §7 完成判据(自我验收)
292
-
293
- | 路 | 判据 |
294
- |---|---|
295
- | **4-A** | `FEATURE-INVENTORY.md` 三层齐全;**L3 覆盖 17 工具 / 49 路由 / 85 设置键 / 6 插槽,无「等等」省略** |
296
- | **4-B** | `ARCHITECTURE-FOR-ZCODE-*.md` 能让**没见过这个项目的 agent** 理解整体结构 |
297
- | **4-C** | 首页可本地打开并正常渲染;**有截图证据**;遵循 ART-DIRECTION 的色板与禁止项;**已考虑 GitHub Pages 部署方式** |
298
-
299
- ---
300
-
301
- ## §8 你现在就该做的三件事(按顺序)
302
-
303
- 1. **通读本文档 + §2 的三份权威文档**(不要跳)
304
- 2. **在会话里复述**:①我在做什么 ②能写哪三个目录 ③不能碰哪两个目录 ④三路交付物分别是什么 —— **复述完再动手**
305
- 3. **三路并行开工**:先派调查(4-A / 4-B),同时自己起手首页(4-C)
306
-
307
- > **最后一句**:这份文档是**自包含**的。你不需要 DSH 的记忆系统。但如果你想知道「为什么当初这么决定」,`docs/internal/` 下有完整的决策记录(`PRE-FRONTEND-CHECKLIST-20260919.md` §8 有真实进度执行序)。
308
-
309
-
@@ -1,168 +0,0 @@
1
- # 交接说明 · 给 ZCode(dsh-auto-memory)
2
-
3
- > 写于 2026-09-11 21:4x(UTC+8)· 交接方:DSH 主对话(DeepSeek Harness)
4
- > **本文件自包含**:ZCode 看不到写这份文档的那个会话的上下文与记忆,读完这一份 + 文末「关键路径表」里的文件即可开工。
5
- > 一句话项目:**DeepSeek Harness Web GUI 的「主动联想记忆 + 上下文管理」插件**(npm 公开包,1 万+ 下载),当前 **v2.4.2 已发布**。
6
-
7
- ---
8
-
9
- ## 0. 现在的状态(先对账,别信旧文档)
10
-
11
- | 事项 | 值 |
12
- | --- | --- |
13
- | npm 包 | `@a9i5k4/dsh-auto-memory` · latest = **2.4.2**(发布包 218 files / 10.9 MB) |
14
- | pre 线(开发) | `D:\dsh-auto-memory`,HEAD = `f83e144`(docs 收编)· 已跟踪文件**无未提交改动** |
15
- | REL 线(发布基座) | `D:\dsh_debug\_publish_dsh-auto-memory`,HEAD = `243dee1`(= tag `v2.4.2` = GitHub main) |
16
- | GitHub | https://github.com/Aik358/dsh-auto-memory(main = 243dee1) |
17
- | 本机运行形态 | 插件以**符号链接**挂载:`~/.dsh/profiles/web/node_modules/@a9i5k4/dsh-auto-memory` → `D:\dsh-auto-memory` |
18
- | 宿主 | 官方 `dsh` **0.1.5-rc.1**,Web GUI 在 `http://127.0.0.1:3080` |
19
-
20
- **两条线是平行历史**:pre 线有 `-pre` 后缀(`lib/*-pre.js`、配置 `dsh-auto-memory-pre.json`、路由前缀 `/api/dsh-auto-memory-pre/`),`tools/release.mjs` 会在发布时把它们**裸名化**并重建 REL 树。
21
- 👉 **严禁把 pre 直接 push 到远端 main**;发布只能走下面的固定流程。
22
-
23
- ---
24
-
25
- ## 1. 代码结构(没有构建步骤)
26
-
27
- | 文件 | 作用 | 规模 |
28
- | --- | --- | --- |
29
- | `lib/index.js` | **宿主半边**:记忆引擎 + 配置表 + 全部 HTTP 路由 + 工具注册 | ~8,200 行 |
30
- | `lib/client.js` | **界面半边**:浏览器 bundle(手写 `__ModuleLoader__`,React + 原生 DOM,零依赖) | ~4,600 行 |
31
- | `lib/*-pre.js` | 其余宿主模块(检索/水位/接续/语义/Python 侧车…),多数有对应的裸名孪生文件 | — |
32
- | `python/` | 可选 Python 语义引擎(BGE-M3 int8)+ worker,随包发布 | — |
33
- | `tests/smoke/*.mjs` | **69 个**冒烟套件(全量回归就是逐个 `node` 跑) | — |
34
- | `tools/release.mjs` | 发布构建器(pre→正式转换 + 校验闸门) | — |
35
- | `docs/` | 会被打进 npm 包(**注意**:内部文档目前也在里面) | — |
36
-
37
- **关键结构约束**:两个半边是**独立 bundle**,`client.js` 不能 `import` 宿主模块 → 「同一份事实」只能靠**测试锁**保证(已有 `tests/smoke/smoke-test-api-paths-pre.mjs`)。
38
-
39
- ---
40
-
41
- ## 2. 怎么验证改动(发版前置门)
42
-
43
- ```powershell
44
- cd D:\dsh-auto-memory
45
- # 全量回归(约 2-3 分钟,必须 0 失败)
46
- Get-ChildItem tests\smoke -File -Filter *.mjs | ForEach-Object { node $_.FullName > $null 2>&1; if ($LASTEXITCODE -ne 0) { "FAIL: " + $_.Name } }
47
- # 语法 + 编码
48
- node --check lib\index.js; node --check lib\client.js
49
- # 写文件必须 UTF-8 无 BOM(用户硬性规则,BOM 会让 dsh web 起不来)
50
- ```
51
-
52
- - **路由数(46)与工具数(14)被多个用例硬锁**;加减路由/工具必须同步改测试。
53
- - `smoke-test-autocont-host-pre.mjs` 用「方法白名单」式夹具:给被抽方法新增 `this.xxx()` 调用要同步加进白名单,否则 TypeError 被外层 `try/catch` 吞成"没反应"。
54
- - 单跑原则:个别套件(如 `m53`)在批量连跑时会受机器负载影响,历史上是**单跑**确认。
55
-
56
- ---
57
-
58
- ## 3. 发版固定流程(10 步,唯一检查表 `docs/internal/RELEASE-PROCESS.md`)
59
-
60
- 1. **前置门**:全量回归 0 失败 + **脏树范围核实**(`release.mjs` 的源就是工作区,**脏树会整体进包且不可回溯**)。
61
- 2. 定版本号(纯修复 patch / 有新行为 minor)。
62
- 3. **必改 `CHANGELOG.md`**:新增 `## [<ver>] — <日期> · <主题>` 小节。
63
- 4. **必同步软件内版本标识**:①应用内更新说明字典 `lib/client.js` 的 `var CHANGELOG = { '<ver>': { zh: [...], en: [...] } }` ②界面指纹行 `console.log('[dsh-auto-memory] client v<ver> fingerprint: ...')` ③`package.json.version`(由 release.mjs 自动回写开发树)。
64
- 5. pre 线提交:`git add lib tests CHANGELOG.md tools/release.mjs`(+ 视情况 docs)→ commit(身份 `Aik358 <aik358@users.noreply.github.com>`)。
65
- 6. `node tools\release.mjs <ver> --dry-run` —— 验闸门(应输出 `版本标识一致性: OK(CHANGELOG / 应用内更新说明 / 界面指纹行)`)。
66
- 7. `node tools\release.mjs <ver>` —— 真构建(写 REL 树 + 回写开发树版本)。
67
- 8. REL:`git add -A` → commit → `git tag -f v<ver>`。
68
- 9. push(**必须带 PAT 行内 URL**,见 §5)→ `npm publish`。
69
- 10. **三处复核**:registry `/latest`、`git ls-remote ... refs/heads/main`、`refs/tags/v<ver>` 三者一致。
70
-
71
- **第 3、4 步已做成机制**:`tools/release.mjs` §5.05「版本标识一致性闸门」——三项任一不符即 `process.exit(1)` **拒绝构建**(防止"检测更新"一直拿旧版本号比对)。
72
-
73
- ---
74
-
75
- ## 4. 环境、凭据与两个坑
76
-
77
- - **本机 `~/.npmrc` 指向 npmmirror** → 查询与发布都必须显式 `--registry=https://registry.npmjs.org`,否则会查到旧版本、误判发布失败。
78
- - **`npm view` 会命中本地缓存**:发布成功后可能仍回读上一版(v2.4.2 发布后回读 2.4.1)。判定用权威接口:
79
- `Invoke-RestMethod 'https://registry.npmjs.org/@a9i5k4%2Fdsh-auto-memory/latest' | Select-Object -ExpandProperty version`
80
- - **凭据不在本仓库**:GitHub PAT 与 npm token 存在另一个工作区的记忆文件里 ——
81
- `~/.dsh/memory/workspaces/--D--dsh_debug--/MEMORY.md`(该文件明确标注"只存本地,**严禁写入任何会上传 GitHub/npm 的文件**")。
82
- npm 发布需带 bypass-2FA 的那个 token;推送用 `git -c credential.helper= push https://x-access-token:<PAT>@github.com/Aik358/dsh-auto-memory.git main --tags --force`。
83
- - **发布后生效**:宿主半边(`lib/index.js`)改动需**用户自己重启 dsh web**;界面半边刷新页面即可。
84
-
85
- ---
86
-
87
- ## 5. 不可碰的契约 & 用户硬性规则
88
-
89
- - **后端冻结(用户明确要求,大排期期间生效)**:记忆引擎逻辑、**46 条路由**契约、**85 个配置键**语义与默认值、prompt 层、Python worker、14 个工具名 —— 改外观/文档时**一律不动**。
90
- - **未经明确同意,严禁停止/重启 dsh web 宿主进程**(会截断工具调用);host 改完只改文件并提示用户重启。
91
- - **未经明确要求,不要 `npm publish` / push GitHub / 打 tag**。
92
- - **写任何文件严禁 BOM**(保持 UTF-8 无 BOM;写完可用前三字节校验)。
93
- - 界面文案与文档的**文风**遵循 `docs/PROMO-STYLE-GUIDE.md`(产品拟人称"她"、厂商腔黑名单、母比喻=一本书)。
94
-
95
- ---
96
-
97
- ## 6. 下一版要做的三件事(已记录,未开工)
98
-
99
- 完整清单(含行号、改法、验收)在 **`docs/internal/NEXT-VERSION-TODO.md`**。摘要:
100
-
101
- 1. **水位判据口径**:现在触发用的是「可用额度」分母 `effectiveWin = win − reserve`(`lib/index.js:1900`,本机 1,048,576 − 384,000 = 664,576),导致**上下文刚过半就触发接续**,比官方压缩点(≈80% ≈ 83.9 万)**早约 45%**,用户判定太浪费。
102
- **改法**:正常触发线改用官方声明窗口为分母(或 `min(win, hardWin)`),阈值 0.75–0.78;`reserve` **不再参与分母**,只保留"距硬墙余量"展示 + 硬判据(`estTokens + reserve > win` 才硬触发)。补反向锁:断言"不得把 reserve 计入分母"。
103
- 2. **接续序号**:`contSeq = handoff 目录里 prev-session-*.md 文件数 + 1`(`lib/index.js:2646-2648`),在落盘失败 / 跨工作区(handoffDir 按工作区解析)/ carry 复用缓存时会**不递增、重复或为空**(为空即不 rename → 标题退回自动生成,用户已两次观察到"新窗口序号不对")。
104
- **改法**:改**持久计数器** `handoff/cont-seq.json`(键 = workspaceId),缺失时从现有 `接续 #N` 标题/包名解析最大值 +1 兼容老数据;序号分配与包落盘做成同序事务;三条入口(面板一键 / 宿主兜底 / 重启后)全覆盖。
105
- 3. **固定流程外包给子代理**(用户提出的想法):发版这类已固化的流程**不由主对话逐步执行**(主对话上下文最贵)→ 交给子代理(思考强度不必高),它做完/出错后只回结构化结论,主对话只做三件事:开闸前确认前置门 / 放行或中止 / 失败时处置。
106
- 落地物:`docs/prompts/RELEASE-AGENT.md`(自包含任务书)+ `RELEASE-PROCESS.md` 顶部「角色分工」段 + 同类流程(全量回归 / 双语对账 / 痕迹巡检)各配任务书。回报格式 `{ ok, version, pre_sha, rel_sha, tag, npm_latest, failed_step, error_tail }`。
107
-
108
- > 现状补充:**v2.4.2 已把 `autoContinueEnabled` 出厂默认改为 `false`**(并加反向锁 `smoke-test-autocont-host-pre.mjs` 断言默认必须为 false)。用户本机也已关闭。所以上述 ① 是"改好再考虑翻回默认开"的前置。
109
-
110
- ---
111
-
112
- ## 7. 待开工的大排期(界面 × 文档 × 首页)
113
-
114
- 用户已拍板方向,**设计优先、功能说明最后核对**,**后端冻结**:
115
-
116
- - 排期与现状硬数据:`docs/internal/DESIGN-OVERHAUL-PRE-RESEARCH.md`(含诊断、P0-P6 排期、5 条验收判据、6 个待用户拍板点)
117
- - 美术方向与动效规格:`docs/internal/ART-DIRECTION-WIREFRAME.md`(线框稿 + EVA 式克制线描色板 + 线宽四档 + 工程图元素 + **24fps 动效时序表** + 性能预算 + **可直接转发给 Astra 的交付契约**)
118
- - 三条线:①界面与设置页大改(12 页签塞进 440×560 浮层 = 容器错配;DSH 有 ~58 个原生插槽可用,`slots.inject/register` 是通用 API,挂原生位**不需要改后端**)②README/用户说明书/项目文档大改 ③`docs/landing/index.html` 首页大改(现为 1,745 行自包含单文件,靠 `preview` 分支 + `htmlpreview` 第三方代理发布;无 `.github/`、无 Pages)
119
- - 设计主张:面板向 **DSH 原生 `--dsw-*` 令牌**靠(DSH 自己的 UI 包是打包后 CSS Modules,类名私有**不可复用**,只有公开 CSS 变量 + 插槽位可用);首页保留现代主义品牌色(暖纸 `#F4F1EB` / 墨 `#17171A` / 信号橙 `#E9470C`)。
120
- - 角色动画(24 帧逐帧)**交给 Astra**:`ART-DIRECTION-WIREFRAME.md` §5 是完整交付契约(画布 1200×1200@1x、锚点 `(600,1080)`、PNG-24 + alpha、命名 `hero_0000.png`、分层导出、7 条验收)。
121
-
122
- ---
123
-
124
- ## 8. 血泪坑清单(照着躲)
125
-
126
- 1. **脏树进包**:`release.mjs` 的 DEV 源就是 `D:\dsh-auto-memory` 工作区 —— 发版前必须核实 `git status` 范围(本机曾两次发现工作区混有其他会话的未发布改动)。
127
- 2. **两半边独立 bundle**:`client.js` 是手写 `__ModuleLoader__`,不能用相对 `import`;跨半边一致性只能靠测试锁。
128
- 3. **同一文件一次消息发两个 edit 会丢前者**(实测过)→ 同文件改动串行,或写「替换清单 JSON + 计数断言脚本」一次做(不符即整体不写盘)。
129
- 4. **`edit` 工具会被全角引号/缩进差异绊住** → 大文件批量改推荐脚本 + 动态识别缩进(别写死空格数)。
130
- 5. **JS 正则不支持 `(?m)` 内联标志**(要用 `/.../m`;写进测试会直接 SyntaxError)。
131
- 6. **水位/接续相关**:判据优先级 = provider 错误文本 > 官方 `request/context.contextWindow` > 本地 tokenMeter > 启发式估算;本地估算在"中文+代码+大工具输出"会话里**偏乐观约 2×**。撞墙报错原文含 `CONTEXT_WINDOW_EXCEEDED`,是本机校准的唯一权威来源。
132
- 7. **接续有两条路径且行为不同**:宿主 `hostAutoContinue()`(无刷新仪式)与面板 `runContinueFlow()`(注入刷新仪式)。改任一侧要同步评估另一侧。排查"接续没反应"先看 `~/.dsh/dsh-auto-memory-pre-diagnose.log`。
133
- 8. **`docs/` 会被打进 npm 包**,而 README/USER-GUIDE 的图片走相对路径 `docs/screenshots/…` → 想收窄 `files` 必须**分层**(保留 screenshots + 论文 + 架构图),不能整目录删。
134
- 9. **`npm view` 命中本地缓存** + **本机 .npmrc 是 npmmirror**(见 §4)。
135
- 10. **凭据只走行内 URL / 环境变量**,绝不写进任何会上传 GitHub 或 npm 的文件。
136
-
137
- ---
138
-
139
- ## 9. 建议 ZCode 的第一件事
140
-
141
- ```powershell
142
- cd D:\dsh-auto-memory
143
- git log --oneline -5 # 确认在 pre 线
144
- git status --short # 确认没有别人的未提交改动
145
- Get-ChildItem tests\smoke -File -Filter *.mjs | ForEach-Object { node $_.FullName > $null 2>&1; if ($LASTEXITCODE -ne 0) { "FAIL: " + $_.Name } } # 回归基线
146
- ```
147
- 然后二选一:**A. 深改**(照 `docs/internal/NEXT-VERSION-TODO.md` 从改点 ① 开始)或 **B. 大排期**(照 `docs/internal/DESIGN-OVERHAUL-PRE-RESEARCH.md`,但需先向用户取三样:官方 DSH 网页 URL/截图、角色基准图、风格探针许可)。
148
-
149
- **别做**:不要 `npm publish`/push/tag(除非用户明确要求);不要重启 dsh web;不要改 §5 冻结清单里的任何契约。
150
-
151
- ---
152
-
153
- ## 10. 关键路径表
154
-
155
- | 路径 | 用途 |
156
- | --- | --- |
157
- | `docs/internal/RELEASE-PROCESS.md` | 发版 10 步唯一检查表(含凭据纪律、npm 缓存坑) |
158
- | `docs/internal/NEXT-VERSION-TODO.md` | 下一版三点待改(水位口径 / 接续序号 / 流程外包)+ 验收 |
159
- | `docs/internal/DESIGN-OVERHAUL-PRE-RESEARCH.md` | 界面×文档×首页大排期预研(诊断 + P0-P6 + 判据) |
160
- | `docs/internal/ART-DIRECTION-WIREFRAME.md` | 美术方向 + 24fps 规格 + Astra 交付契约 |
161
- | `docs/PROMO-STYLE-GUIDE.md` | 文风守则(README/landing/公告必须遵循) |
162
- | `docs/UI-INVENTORY-RAW.md` | 界面逐条盘点(12 页签 / 85 键 / 46 端点,带行号) |
163
- | `docs/USER-GUIDE.{en,zh-CN}.md` · `README{,.zh-CN}.md` | 面向用户的四份文档(待大改) |
164
- | `docs/landing/index.html` | 首页(单文件、双语) |
165
- | `tools/release.mjs` | 发布构建器 + 版本标识闸门(§5.05) |
166
- | `tests/smoke/smoke-test-api-paths-pre.mjs` | 路径表一致性锁(客户端 ⊆ 宿主) |
167
- | `~/.dsh/dsh-auto-memory-pre-diagnose.log` | 插件诊断日志(接续/水位/降级线索都在这) |
168
- | `~/.dsh/dsh-auto-memory-pre.json` | **pre 线**实际配置文件(别读成非 `-pre` 的那个) |