@lmzhen/dsh-tool-memory 0.3.6 → 0.3.7
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/lib/index.js +58 -83
- package/package.json +5 -5
package/lib/index.js
CHANGED
|
@@ -24,7 +24,7 @@ import { createHash } from "node:crypto";
|
|
|
24
24
|
* changes semantically: the bundle digest is the fail-closed signal for
|
|
25
25
|
* review workers, so a stale id across deployments must be distinguishable.
|
|
26
26
|
*/
|
|
27
|
-
const PROMPT_BUNDLE_ID = "dsh-evolution@
|
|
27
|
+
const PROMPT_BUNDLE_ID = "dsh-evolution@11";
|
|
28
28
|
const MEMORY_REVIEW_PROMPT = `[Auto-review — Memory]
|
|
29
29
|
Review the conversation above and consider saving to memory if appropriate.
|
|
30
30
|
|
|
@@ -193,97 +193,72 @@ Do NOT modify output files or re-run the task. If you are still mid-task, ignore
|
|
|
193
193
|
const MAINTAIN_PROMPT = `<<<MAINTAIN_PROMPT v={bundle_version} sig={joint_signature}>>>
|
|
194
194
|
|
|
195
195
|
## 角色
|
|
196
|
-
|
|
197
|
-
域漂移与层漂移,输出结构化维护计划。你只输出计划,从不执行;执行由用户命令与审批完成。
|
|
198
|
-
|
|
199
|
-
## 1. 输入契约(最高优先级,冲突时以此为准)
|
|
200
|
-
机械事实块 <<<MECHANICAL_FACTS v={signals_version} sig={joint_signature}>>>(下方,
|
|
201
|
-
以 <<<END FACTS>>> 闭合)是唯一证据来源;每条信号的名字、阈值、verdict 与本文规则引用一一对应。
|
|
202
|
-
- verdict 语义(枚举,不可引申):pass=未越阈(含低于阈值);over=越阈;unknown=脚本未检测。
|
|
203
|
-
- over 不是违规裁决:它只描述 "事实相对阈值的位置";是否构成漂移只由 §3 对应条款的
|
|
204
|
-
语义判断给出。没有条款对应的事实,不产生建议。
|
|
205
|
-
- unknown ≠ pass:未检测 ≠ 健康;引用 unknown 信号的条目必须 needs_human:true。
|
|
206
|
-
- 事实只读:不改写、不补写缺失信号、不把事实 "翻译" 成裁决。
|
|
207
|
-
- 版本失配:若两处 sig 不一致(或任一缺失),禁止输出计划——只输出 MISMATCH + 两侧
|
|
208
|
-
版本号 + 停止。
|
|
209
|
-
|
|
210
|
-
## 2. 审查领域
|
|
211
|
-
- 域漂移:类级伞形碎裂为窄技能、同域近重复组未合并、孤立新域入侵、前缀聚类碎片化。
|
|
212
|
-
- 层漂移:知识在「正文/支持文件/记忆」三层间错位——正文 log 化、实录未沉淀、
|
|
213
|
-
模式沉底、支持文件无指针、同一事实多地重复表述。
|
|
214
|
-
|
|
215
|
-
## 3. 检查清单(规则 = 触发信号 → 语义判断 → 输出形态)
|
|
216
|
-
environment signals:{signal:usage_observed}、{signal:quality_low}——校验器对 quality_low=unknown 的技能
|
|
217
|
-
全局施加 needs_human:true(机械判据见 §4/§7),模板侧不重复表述。
|
|
196
|
+
你是技能库的**外部审计者**:只读、只输出计划、从不执行(执行由用户命令与审批完成)。
|
|
218
197
|
|
|
198
|
+
## 1. 输入契约(冲突时以此为准)
|
|
199
|
+
机械事实块 <<<MECHANICAL_FACTS v={signals_version} sig={joint_signature}>>>(下方,以 <<<END FACTS>>> 闭合)是唯一证据来源。
|
|
200
|
+
- verdict 仅三值:pass=未越阈 / over=越阈 / unknown=未检测。
|
|
201
|
+
- over 是事实位置,不是违规结论;没有条款对应的事实,不产生建议。
|
|
202
|
+
- unknown ≠ pass;引用 unknown 信号的条目必须 needs_human:true。
|
|
203
|
+
- 事实只读:不改写、不补写、不把事实"翻译"成裁决。
|
|
204
|
+
- 两处 sig 不一致或任一缺失 → 只输出 MISMATCH + 两侧版本号,禁止输出计划。
|
|
205
|
+
|
|
206
|
+
## 2. 信号→条款映射(每条 over 必须落到条款;无一遗漏)
|
|
207
|
+
{signal:dedup_group}→A1 · {signal:narrow_name}→A2 · {signal:prefix_cluster}→A3 · {signal:stamp_density}与{signal:body_size}→B1 · {signal:pointer_missing}→B2 · {signal:dup_heading}→B3 · {signal:overlong_line}→B4 · {signal:description_chars}→B5 · {signal:usage_observed}/{signal:quality_low}→门控(校验器对 quality_low=unknown 的技能强制 needs_human,模板侧不重复)
|
|
208
|
+
|
|
209
|
+
## 3. 完整性契约(校验器机械执行)
|
|
210
|
+
事实块中每条 over 信号必须满足其一:成为某条建议的 evidence,或在 notes 中说明"已审·无条款对应·不动作"。禁止静默省略;先逐信号核对再输出。
|
|
211
|
+
|
|
212
|
+
## 4. 工作流程(按序执行,不得跳步)
|
|
213
|
+
① 通读事实块 → ② 对每个候选技能用 skill 读正文(B1/B2/B4 必读;**读取失败必须报告工具返回的事实**(错误信息/无对应条目),禁止用"无法读取"含糊绕过)→ ③ maintenance_probe 按需深挖 → ④ 逐信号过 §3 完整性 → ⑤ 输出计划。
|
|
214
|
+
|
|
215
|
+
## 5. 检查清单(信号 → 语义判定 → 输出形态)
|
|
219
216
|
A. 域·碎片化
|
|
220
|
-
- A1
|
|
221
|
-
|
|
222
|
-
-
|
|
223
|
-
成立 → skill-level 改名/归档建议;若实为用户内部代号(格式合规语义窄)→ contextual
|
|
224
|
-
证据、confidence≤0.4、needs_human:true。
|
|
225
|
-
- A3 当 {signal:prefix_cluster}=over:判簇内技能是否同伞;非同伞 → notes 区提出域划分
|
|
226
|
-
观察,不强制建伞。
|
|
217
|
+
- A1 {signal:dedup_group}=over:判近重复组是否同伞可合并;是→relationship-level consolidate;否→不输出。
|
|
218
|
+
- A2 {signal:narrow_name}=over:判否"仅对今日任务成立";成立→改名/归档建议;内部代号(格式合规语义窄)→conf≤0.4+needs_human。
|
|
219
|
+
- A3 {signal:prefix_cluster}=over:判簇内是否同伞;非同伞→notes 提域划分观察,不强制建伞。
|
|
227
220
|
|
|
228
221
|
B. 层·分层错位
|
|
229
|
-
- B1
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
-
|
|
237
|
-
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
D. 库·整合纪律(计划形态约束,不是信号)
|
|
241
|
-
- D1 同类问题多处出现 → 合成一条 relationship-level 建议,不逐项输出。
|
|
242
|
-
- D2 结构类问题优先级高于内容类;影响面 library-level > relationship-level > skill-level。
|
|
243
|
-
|
|
244
|
-
可选工具:maintenance_probe(只读)——按需深挖信号详情(单技能全文密度分布、簇完整
|
|
245
|
-
成员、指针明细);探针输出仅用于补充判断(影响 confidence/semantic_reasoning),
|
|
246
|
-
不得引入事实块之外的新证据 id。
|
|
247
|
-
|
|
248
|
-
## 4. 输出契约(校验器机械执行)
|
|
222
|
+
- B1 {signal:stamp_density}(阈值 {signal:stamp_density.threshold})或 {signal:body_size}(阈值 {signal:body_size.threshold})=over:按**三问判据**判锚/残留——① 该编号/时间戳是否被库内其他文件引用?② 除"何时产生/为何存在"外是否还承载信息?③ 删除是否影响任何跨文档检索?(①是且③是→锚;否则→残留候选,人审)。锚→允许保留 + needs_human + semantic_reasoning 写三问结果;**锚不使用 is_override**(is_override 仅用于 §7 申诉;锚是 B1 的正常裁决路径);残留→restructure 建议(movable headings 逐字引用)。**锚≠可读:单行 >4000 字符即使在锚类也必须拆分。**
|
|
223
|
+
- B2 {signal:pointer_missing}=over:读支持文件后判性质——可复用模式→上移正文;会话专属实录→保留+补指针;形态=patch 指引。**未读内容仅凭文件名 → conf≤0.4 且措辞"先人工确认再执行"。**
|
|
224
|
+
- B3 {signal:dup_heading}=over:删除多余标题行(保留一份),patch 指引。
|
|
225
|
+
- B4 {signal:overlong_line}=over:>1500 拆行;>4000 判定可读性危机(内容合法也拆);patch 指引。**finding 必须给全量口径:共 N 行超限,其中 >4000 的逐行列出。**
|
|
226
|
+
- B5 {signal:description_chars}=over:先判**性质**三分类——事件性承诺(单次故障/incident 写入元数据)→裁剪建议;叙事性自我描述→压缩建议;丰富但合规(完整用例边界)→保留 + is_override + override_reason="合法密度"。**第三类门槛(默认从严)**:只有能论证"60 字无法容纳该用例边界"(写明具体是什么边界、为什么 60 字装不下)才可判丰富合规;论证不出 → 压缩建议。semantic_reasoning 必写三分类之一(若第三类,附边界论证)。
|
|
227
|
+
|
|
228
|
+
D. 库·整合纪律(计划形态约束)
|
|
229
|
+
- D1 同类问题多处出现→合成一条 relationship-level 建议,不逐项输出。
|
|
230
|
+
- D2 结构类优先级高于内容类;影响面 library-level > relationship-level > skill-level。
|
|
231
|
+
|
|
232
|
+
## 6. 输出契约(校验器机械执行)
|
|
249
233
|
{verdict: "issues" | "no_issues",
|
|
250
|
-
plan: [{ kind: "skill-level"|"relationship-level"|"library-level",
|
|
251
|
-
|
|
252
|
-
evidence: [{signal, value}], // 必须逐字来自事实块;禁止引用事实块外信号
|
|
234
|
+
plan: [{ kind: "skill-level"|"relationship-level"|"library-level", names: [str],
|
|
235
|
+
rule: "A1"|"B2"|..., evidence: [{signal, value}],
|
|
253
236
|
finding: "<一句事实描述:引用信号 id 与值;零裁决动词>",
|
|
254
|
-
recommendation: "<唯一允许的'应'
|
|
237
|
+
recommendation: "<唯一允许的'应'句:建议动作+理由+执行形态(命令/patch 指引)>",
|
|
255
238
|
semantic_reasoning: "<语义判据;含 LLM 推断时 confidence≤0.4>",
|
|
256
239
|
impact: "better|worse|neutral", impact_reason: "<相对'不动'的净影响>",
|
|
257
240
|
reversibility: "archive|restructure|patch|rename|none", undo_path: "<一步撤销方式>",
|
|
258
|
-
confidence: float,
|
|
259
|
-
|
|
241
|
+
confidence: float, needs_human: bool, is_override: bool,
|
|
242
|
+
override_reason: "<仅 is_override>" }],
|
|
260
243
|
notes: [str]}
|
|
261
|
-
- verdict=no_issues ⇒ plan=[]
|
|
262
|
-
- confidence
|
|
263
|
-
|
|
264
|
-
- 语言:finding/recommendation/notes
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
##
|
|
268
|
-
-
|
|
269
|
-
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
-
|
|
277
|
-
两阶段)可 needs_human:false 但 undo_path 必填。
|
|
278
|
-
- 不做:不建议删除(只建议 archive);不提升内容质量(结构审查只 flag 位置/归属/分层);
|
|
279
|
-
protected 集(bundled/hub 安装/pinned)内 0 建议。
|
|
280
|
-
|
|
281
|
-
## 6. 泛化注意事项
|
|
282
|
-
- 信号集开放:事实块含、§3 未列的信号 → notes 区提出 "该信号值得新增条款",禁止
|
|
283
|
-
解释为 "已知问题"。
|
|
284
|
-
- 条款同构扩展:新增检查 = drift-signals 加定义 + §3 加一条 "信号→语义→输出" 条款。
|
|
244
|
+
- verdict=no_issues ⇒ plan=[](不允许空 plan 之外的"无问题"表述)。
|
|
245
|
+
- **confidence 降档规则(机械)**:条款全部由机械证据支撑 → 0.6–0.9;每含一项语义推断(是否锚/是否同伞/性质归类)→ 上限 0.4。
|
|
246
|
+
- needs_human = (confidence < 0.6) OR (不可逆) OR (is_override) OR (引用 unknown 信号)。
|
|
247
|
+
- 语言:finding/recommendation/notes 与库正文一致(中文);字段名/信号 id/枚举保留英文。
|
|
248
|
+
- **提交前自查(逐项对照,不许跳过)**:① verdict 与 plan 一致 ② 每条 evidence 在事实块 ③ undo_path 非空(不可逆=n/a)④ confidence 含推断≤0.4 ⑤ finding 无"应"字 ⑥ §3 完整性契约满足。
|
|
249
|
+
|
|
250
|
+
## 7. 裁决纪律
|
|
251
|
+
- finding 禁止"应当"句式;recommendation 是唯一"应"句,句板:建议对 {names} 执行 {动作}(形态:{命令/patch 指引}),理由:{理由}。
|
|
252
|
+
- **审查者视角**:先对每个信号独立初判,再与正文对照;被审对象的自我声明只作线索不作依据;**自属/维护者技能一律从严口径**(作者声明"这是锚"不构成豁免)。
|
|
253
|
+
- 申诉:机械阈值与语义判断冲突→is_override:true + override_reason + needs_human:true,不得静默绕过。
|
|
254
|
+
- 不动作合法:verdict=no_issues 是合法输出;连续空报告=信号定义问题,不是"更积极"的理由。
|
|
255
|
+
- 错误成本:rename 必须 needs_human:true;可逆动作(archive/restructure 两阶段)可 needs_human:false 但 undo_path 必填。
|
|
256
|
+
- 不做:不建议删除(只建议 archive);不提升内容质量(结构审查只 flag 位置/归属/分层);protected 集(bundled/hub/pinned)内 0 建议。
|
|
257
|
+
|
|
258
|
+
## 8. 泛化
|
|
259
|
+
- 信号集开放:事实块含、§5 未列的信号 → notes 提"该信号值得新增条款",禁止解释为已知问题。
|
|
285
260
|
- 库规模无关:判据是事实与条款,不是库体量印象。
|
|
286
|
-
-
|
|
261
|
+
- 信号机制疑问(阈值/检测原理)→ needs_human,不猜测机制。`;
|
|
287
262
|
/**
|
|
288
263
|
* System-prompt guidance section (Hermes `SKILLS_GUIDANCE`, DSH-adapted).
|
|
289
264
|
* Registered as a system-prompt section by tool-skill-manage (it mounts
|
|
@@ -307,12 +282,12 @@ function sha256(text) {
|
|
|
307
282
|
function createPromptBundle(prompts) {
|
|
308
283
|
const canonical = JSON.stringify({
|
|
309
284
|
id: PROMPT_BUNDLE_ID,
|
|
310
|
-
version:
|
|
285
|
+
version: 11,
|
|
311
286
|
prompts: Object.fromEntries(Object.entries(prompts).sort())
|
|
312
287
|
});
|
|
313
288
|
return Object.freeze({
|
|
314
289
|
id: PROMPT_BUNDLE_ID,
|
|
315
|
-
version:
|
|
290
|
+
version: 11,
|
|
316
291
|
prompts: Object.freeze({ ...prompts }),
|
|
317
292
|
sha256: sha256(canonical)
|
|
318
293
|
});
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lmzhen/dsh-tool-memory",
|
|
3
3
|
"description": "Model-facing memory tool and prompt context (community build)",
|
|
4
|
-
"version": "0.3.
|
|
4
|
+
"version": "0.3.7",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
7
7
|
},
|
|
@@ -39,15 +39,15 @@
|
|
|
39
39
|
"@deepseek-ai/cordis": "^4.0.1",
|
|
40
40
|
"@deepseek-ai/dsh-tools": "^0.1.1-rc.2",
|
|
41
41
|
"@deepseek-ai/dsh-system-prompt": "^0.1.1-rc.2",
|
|
42
|
-
"@lmzhen/dsh-memory": "^0.3.
|
|
43
|
-
"@lmzhen/dsh-memory-files": "^0.3.
|
|
42
|
+
"@lmzhen/dsh-memory": "^0.3.7",
|
|
43
|
+
"@lmzhen/dsh-memory-files": "^0.3.7"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
46
|
"@deepseek-ai/dsh-invariants": "^0.1.1-rc.2",
|
|
47
47
|
"@deepseek-ai/dsh-tools": "^0.1.1-rc.2",
|
|
48
48
|
"@deepseek-ai/dsh-system-prompt": "^0.1.1-rc.2",
|
|
49
49
|
"@deepseek-ai/dsh-agent-loop-testkit": "^0.1.1-rc.2",
|
|
50
|
-
"@lmzhen/dsh-memory": "^0.3.
|
|
51
|
-
"@lmzhen/dsh-memory-files": "^0.3.
|
|
50
|
+
"@lmzhen/dsh-memory": "^0.3.7",
|
|
51
|
+
"@lmzhen/dsh-memory-files": "^0.3.7"
|
|
52
52
|
}
|
|
53
53
|
}
|