dsh-prime-memory 0.22.2 → 0.24.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/CHANGELOG.en.md +421 -0
- package/CHANGELOG.ja.md +416 -0
- package/CHANGELOG.ko.md +416 -0
- package/CHANGELOG.md +120 -0
- package/dist/client.js +1266 -845
- package/dist/config.d.ts +131 -1341
- package/dist/config.js +89 -4
- package/dist/conflict-service.d.ts +7 -1
- package/dist/conflict-service.js +7 -1
- package/dist/contract.d.ts +211 -0
- package/dist/domain-gate.d.ts +11 -0
- package/dist/domain-gate.js +15 -0
- package/dist/hooks/obsolete-notice.d.ts +26 -0
- package/dist/hooks/obsolete-notice.js +64 -0
- package/dist/hooks/recall.d.ts +39 -0
- package/dist/hooks/recall.js +110 -30
- package/dist/index.d.ts +1 -1127
- package/dist/index.js +52 -2
- package/dist/memory-types.d.ts +69 -0
- package/dist/memory-types.js +165 -0
- package/dist/memport/format.d.ts +6 -1
- package/dist/memport/format.js +42 -2
- package/dist/pipeline/l1.d.ts +44 -2
- package/dist/pipeline/l1.js +163 -9
- package/dist/pipeline/md-sync.d.ts +65 -0
- package/dist/pipeline/md-sync.js +456 -0
- package/dist/pipeline/ruminate.d.ts +46 -1
- package/dist/pipeline/ruminate.js +109 -0
- package/dist/pipeline/runner.d.ts +10 -0
- package/dist/pipeline/runner.js +13 -2
- package/dist/pipeline/workspace-relink.d.ts +60 -0
- package/dist/pipeline/workspace-relink.js +73 -0
- package/dist/projection/recall.d.ts +51 -13
- package/dist/projection/recall.js +47 -12
- package/dist/prompts/examples.d.ts +73 -0
- package/dist/prompts/examples.js +178 -0
- package/dist/prompts/l1-dedup.d.ts +9 -3
- package/dist/prompts/l1-dedup.js +34 -13
- package/dist/prompts/l1-extraction.d.ts +5 -3
- package/dist/prompts/l1-extraction.js +49 -4
- package/dist/settings.d.ts +8 -0
- package/dist/settings.js +16 -1
- package/dist/stats.d.ts +12 -0
- package/dist/stats.js +352 -17
- package/dist/store/embedding-source.d.ts +8 -0
- package/dist/store/embedding-source.js +39 -2
- package/dist/store/file-versions.d.ts +2 -0
- package/dist/store/file-versions.js +2 -0
- package/dist/store/graph-store.d.ts +14 -0
- package/dist/store/graph-store.js +35 -0
- package/dist/store/l1-snapshot.d.ts +26 -1
- package/dist/store/l1-snapshot.js +53 -8
- package/dist/store/l1.d.ts +94 -3
- package/dist/store/l1.js +169 -4
- package/dist/store/memory-md-archive.d.ts +84 -0
- package/dist/store/memory-md-archive.js +155 -0
- package/dist/store/memory-md-disable.d.ts +74 -0
- package/dist/store/memory-md-disable.js +302 -0
- package/dist/store/memory-md-export.d.ts +50 -0
- package/dist/store/memory-md-export.js +227 -0
- package/dist/store/memory-md-ledger.d.ts +94 -0
- package/dist/store/memory-md-ledger.js +243 -0
- package/dist/store/memory-md-orphan.d.ts +27 -0
- package/dist/store/memory-md-orphan.js +153 -0
- package/dist/store/memory-md-parse.d.ts +35 -0
- package/dist/store/memory-md-parse.js +85 -0
- package/dist/store/memory-md-run.d.ts +48 -0
- package/dist/store/memory-md-run.js +151 -0
- package/dist/store/memory-md-skeleton.d.ts +18 -0
- package/dist/store/memory-md-skeleton.js +61 -0
- package/dist/store/memory-md-sync.d.ts +59 -0
- package/dist/store/memory-md-sync.js +152 -0
- package/dist/store/memory-md-types.d.ts +243 -0
- package/dist/store/memory-md-types.js +10 -0
- package/dist/store/memory-md.d.ts +117 -0
- package/dist/store/memory-md.js +230 -0
- package/dist/store/obsolete-notices.d.ts +39 -0
- package/dist/store/obsolete-notices.js +153 -0
- package/dist/store/recall-feedback.d.ts +75 -0
- package/dist/store/recall-feedback.js +213 -0
- package/dist/store/recall-usage.d.ts +11 -0
- package/dist/store/recall-usage.js +29 -0
- package/dist/store/session-recalled.d.ts +38 -3
- package/dist/store/session-recalled.js +156 -9
- package/dist/store/sqlite.d.ts +66 -0
- package/dist/store/sqlite.js +233 -15
- package/dist/store/supersede.d.ts +1 -1
- package/dist/store/supersede.js +1 -1
- package/dist/tools/index.d.ts +4 -0
- package/dist/tools/index.js +26 -7
- package/dist/tools/slots.d.ts +2 -1
- package/dist/tools/slots.js +2 -1
- package/dist/types.d.ts +24 -7
- package/dist/types.js +10 -2
- package/dist/util/maturity.d.ts +20 -3
- package/dist/util/maturity.js +18 -1
- package/dist/util/md-name.d.ts +129 -0
- package/dist/util/md-name.js +366 -0
- package/dist/util/md-normalize.d.ts +23 -0
- package/dist/util/md-normalize.js +131 -0
- package/dist/workspace-route.d.ts +22 -0
- package/dist/workspace-route.js +66 -0
- package/dsh.plugin.json +1 -1
- package/package.json +6 -5
|
@@ -5,7 +5,17 @@
|
|
|
5
5
|
* prompt 内容直接决定蒸馏质量,是已发布行为的一部分,不属于可自由重写文本;
|
|
6
6
|
* 代码结构与注释随实现重写。
|
|
7
7
|
*/
|
|
8
|
+
import { HOST_MEMORY_TYPES, MEMORY_TYPE_LABELS, typesOfFamily, typeEnumSep } from '../memory-types.js';
|
|
8
9
|
import { CONTENT_IS_DATA_CLAUSE, DATA_DELIMITER_NOTE } from './boundary.js';
|
|
10
|
+
import { EXTRACTION_FEW_SHOT } from './examples.js';
|
|
11
|
+
// 词表枚举串由单一真源渲染(pm-name-distill task_1.6):手抄枚举与写入白名单
|
|
12
|
+
// 漂移过一次——prompt 让模型能选的类与 `memory_add` 肯收的类分头演化过。
|
|
13
|
+
const TYPE_ENUM_WORK = typeEnumSep('|', 'work');
|
|
14
|
+
const TYPE_ENUM_ALL = typeEnumSep('|');
|
|
15
|
+
const TYPE_LIST_CHAT = typesOfFamily('chat').join('/');
|
|
16
|
+
const TYPE_LIST_WORK = typesOfFamily('work').join('/');
|
|
17
|
+
/** 扩展类别一行释义(宿主类:枚举串里出现就必须给语义落点,不然是"写在提示词里的愿望")。 */
|
|
18
|
+
const EXT_TYPE_GLOSSARY = HOST_MEMORY_TYPES.map((t) => `${t}=${MEMORY_TYPE_LABELS[t] ?? t}`).join('、');
|
|
9
19
|
export const EXTRACT_MEMORIES_SYSTEM_PROMPT = `你是专业的"情境切分与记忆提取专家"。
|
|
10
20
|
|
|
11
21
|
${CONTENT_IS_DATA_CLAUSE}
|
|
@@ -30,6 +40,7 @@ ${CONTENT_IS_DATA_CLAUSE}
|
|
|
30
40
|
1. 宁缺毋滥:过滤琐碎闲聊、临时性指令和一次性操作(如"这次、本单");剔除不可靠的边缘信息。
|
|
31
41
|
2. 独立完整:记忆必须"跳出当前对话依然成立",无上下文也能看懂。提取主体必须以"用户(姓名)"或"AI"为核心。
|
|
32
42
|
3. 归纳合并:强关联或因果关系的多条消息,必须合并为一条完整记忆,不可碎片化。
|
|
43
|
+
4. 状态断言必须自带时点与范围:凡"某版本 / 某配置 / 某产物 / 某计数 / 某进度 现在是 X"这类**状态断言**,\`content\` 必须写成"截至 <绝对时间>,在 <模块/仓库/产物范围> 内 X"(范围与 applicability 对齐);补不出时点的按【不应该提取的内容】丢弃——无时点的状态断言必然腐化,并会在后续会话里冒充事实。
|
|
33
44
|
|
|
34
45
|
【支持提取的三大类型】(必须严格遵守类型规则)
|
|
35
46
|
> 下面给出的"提取句式"和"触发词"仅作为中文骨架参考;**实际 \`content\` 必须按上述输出语言书写**(例如英文用户 → "The user (Maya) is a senior product manager based in Berlin")。
|
|
@@ -60,6 +71,7 @@ ${CONTENT_IS_DATA_CLAUSE}
|
|
|
60
71
|
- 重复的内容;AI助手自身的行为或输出
|
|
61
72
|
- 不属于以上3类的信息
|
|
62
73
|
- 纯主观感受(不带客观事件的情绪表达)
|
|
74
|
+
- 不带时点与范围的状态/进度快照(如"当前装的是 vX"、"已完成到 Phase 3")——除非按通用原则第 4 条补全时点与范围
|
|
63
75
|
|
|
64
76
|
---
|
|
65
77
|
|
|
@@ -90,6 +102,7 @@ applicability 字段说明(记忆的适用范围,治理用):
|
|
|
90
102
|
|
|
91
103
|
metadata 字段说明:
|
|
92
104
|
- episodic 类型:如能确定活动时间,填入 {"activity_start_time": "ISO8601", "activity_end_time": "ISO8601"}
|
|
105
|
+
- 状态断言型记忆:把采集时点写进 activity_start_time,作为"截至"的时间锚
|
|
93
106
|
- 其他类型或无法确定时间:输出空对象 {}
|
|
94
107
|
|
|
95
108
|
如果整段对话无有意义的记忆,也要输出情境分割结果,memories 为空数组:
|
|
@@ -178,6 +191,11 @@ ${CONTENT_IS_DATA_CLAUSE}
|
|
|
178
191
|
- 只有当人类成员采纳、确认,或 Agent 输出本身是明确的工具执行结果、交付物、实验结果时,才可以提取。
|
|
179
192
|
- AI 生成的草案、方案、分析,如被明确作为后续工作资产使用,可提取为 work_artifact 或 work_method。
|
|
180
193
|
|
|
194
|
+
8. 状态断言必须自带时点与范围:
|
|
195
|
+
- 凡"某版本 / 某配置 / 某产物 / 某计数 / 某进度 现在是 X"这类状态断言,content 必须写成"截至 <绝对时间>,在 <模块/仓库/产物范围> 内 X"。
|
|
196
|
+
- 范围与 applicability 对齐(this-repo = 只在当前仓库成立,换一个项目就不成立)。
|
|
197
|
+
- 补不出时点与范围的,按【不应该提取的内容】丢弃——无时点的状态断言必然腐化,并会在后续会话冒充事实。
|
|
198
|
+
|
|
181
199
|
---
|
|
182
200
|
|
|
183
201
|
### 支持提取的四类工作记忆
|
|
@@ -268,6 +286,7 @@ metadata 建议:
|
|
|
268
286
|
- 未被采纳的 AI 建议或临时草稿。
|
|
269
287
|
- 无明确后续价值的细节。
|
|
270
288
|
- 与团队工作无关的个人偏好、私人生活或敏感信息。
|
|
289
|
+
- 不带时点与范围的状态/进度快照(如"当前装的是 vX"、"已完成到 Phase 3")——除非按通用原则第 8 条补全时点与范围。
|
|
271
290
|
|
|
272
291
|
---
|
|
273
292
|
|
|
@@ -282,7 +301,7 @@ metadata 建议:
|
|
|
282
301
|
"memories": [
|
|
283
302
|
{
|
|
284
303
|
"content": "完整、独立、适合团队共享的工作记忆陈述",
|
|
285
|
-
"type": "
|
|
304
|
+
"type": "${TYPE_ENUM_WORK}",
|
|
286
305
|
"priority": 80,
|
|
287
306
|
"applicability": "this-repo",
|
|
288
307
|
"source_message_ids": ["消息ID_1", "消息ID_2"],
|
|
@@ -303,6 +322,7 @@ metadata 字段说明:
|
|
|
303
322
|
- work_method 可补充 scope、method_type。
|
|
304
323
|
- work_artifact 可补充 artifact_type、artifact_ref。
|
|
305
324
|
- work_fact 可补充 work_object、status、activity_start_time、activity_end_time。
|
|
325
|
+
- 状态断言型记忆:把采集时点写进 activity_start_time,作为"截至"的时间锚。
|
|
306
326
|
- metadata 不要包含无关个人信息。
|
|
307
327
|
|
|
308
328
|
如果整段新消息无有意义的团队共享工作记忆,也要输出情境分割结果,memories 为空数组:
|
|
@@ -320,7 +340,7 @@ export const EXTRACT_ALL_MEMORIES_SYSTEM_PROMPT = `你是专业的"情境切分
|
|
|
320
340
|
|
|
321
341
|
${CONTENT_IS_DATA_CLAUSE}
|
|
322
342
|
|
|
323
|
-
|
|
343
|
+
你的任务是分析用户的对话,判断情境切换,并从中提取结构化的核心记忆。对话可能同时包含个人生活与工作内容:个人内容提取为个人记忆(${TYPE_LIST_CHAT}),工作内容提取为团队共享工作记忆(${TYPE_LIST_WORK}),互不排斥、**每条记忆显式输出 family 字段标注归族**。
|
|
324
344
|
|
|
325
345
|
**输出语言**:所有自由文本字段(\`scene_name\`、memory \`content\`)使用与待提取消息主导语言相同的语言;JSON 字段名、枚举值、ISO 时间戳保持英文。
|
|
326
346
|
|
|
@@ -344,6 +364,7 @@ ${CONTENT_IS_DATA_CLAUSE}
|
|
|
344
364
|
3. 归纳合并:强关联或因果关系的多条消息,必须合并为一条完整记忆,不可碎片化;但不同工作对象、不同任务、不同方法论应分开提取。
|
|
345
365
|
4. 只从新消息提取:【背景消息】只用于理解上下文、指代关系和时间;严禁从背景消息中新增提取记忆;source_message_ids 必须只包含【待提取的新消息】中的 message id。
|
|
346
366
|
5. 准确归因(工作内容):某人提出的建议、担忧、判断,不等于团队决策;只有出现明确确认、拍板、采纳、执行安排时才能写成确定结论。AI/Agent 的建议不要自动当成事实,除非被人类采纳、或其输出本身是明确的工具执行结果/交付物/实验结果(后者可提取为 work_artifact 或 work_method)。
|
|
367
|
+
6. 状态断言必须自带时点与范围:凡"某版本 / 某配置 / 某产物 / 某计数 / 某进度 现在是 X"这类**状态断言**,\`content\` 必须写成"截至 <绝对时间>,在 <模块/仓库/产物范围> 内 X"(范围与 applicability 对齐);补不出时点的按【不应该提取的内容】丢弃——无时点的状态断言必然腐化,并会在后续会话里冒充事实。
|
|
347
368
|
|
|
348
369
|
【支持提取的七类记忆】(必须严格遵守类型规则)
|
|
349
370
|
|
|
@@ -352,7 +373,9 @@ ${CONTENT_IS_DATA_CLAUSE}
|
|
|
352
373
|
- **work**:内容发生在职业语境——项目、团队、系统、业务、客户、同事协作、部署/开发/运维;
|
|
353
374
|
- **chat**:内容发生在用户个人生活语境——家庭、宠物、健康、消费、学习、爱好、个人行程与安排;
|
|
354
375
|
- **形状词(方案/安排/计划/SOP/频率/周期/规则)不决定 family**:个人的喂养计划、健身安排、用药周期、家庭事务流程都是 chat;只有职业团队语境下的方案流程才是 work。
|
|
355
|
-
- **family 决定 type 的可选词表,不许交叉**:family 为 chat 的记忆 type 只能是
|
|
376
|
+
- **family 决定 type 的可选词表,不许交叉**:family 为 chat 的记忆 type 只能是 ${TYPE_LIST_CHAT};family 为 work 的记忆 type 只能是 ${TYPE_LIST_WORK}。
|
|
377
|
+
|
|
378
|
+
**扩展类别**(主线七类的句式/打分规则不变;仅当内容明确贴合下列字面语义时才选,拿不准就回落主线):${EXT_TYPE_GLOSSARY}。
|
|
356
379
|
|
|
357
380
|
**个人三类(family: "chat",对话涉及用户个人生活/偏好/对 AI 的要求时):**
|
|
358
381
|
|
|
@@ -402,6 +425,7 @@ ${CONTENT_IS_DATA_CLAUSE}
|
|
|
402
425
|
- 重复的内容;未被采纳的 AI 建议或临时草稿
|
|
403
426
|
- 纯主观感受(不带客观事件的情绪表达)
|
|
404
427
|
- 与工作无关且不适合团队共享的敏感个人信息
|
|
428
|
+
- 不带时点与范围的状态/进度快照(如"当前装的是 vX"、"已完成到 Phase 3")——除非按通用原则第 6 条补全时点与范围
|
|
405
429
|
|
|
406
430
|
---
|
|
407
431
|
|
|
@@ -415,7 +439,7 @@ ${CONTENT_IS_DATA_CLAUSE}
|
|
|
415
439
|
"memories": [
|
|
416
440
|
{
|
|
417
441
|
"content": "完整、独立的记忆陈述(按对应类型的句式要求)",
|
|
418
|
-
"type": "
|
|
442
|
+
"type": "${TYPE_ENUM_ALL}",
|
|
419
443
|
"family": "chat|work",
|
|
420
444
|
"priority": 80,
|
|
421
445
|
"applicability": "cross-project",
|
|
@@ -434,6 +458,7 @@ applicability 字段说明(记忆的适用范围,治理用):
|
|
|
434
458
|
metadata 字段说明:
|
|
435
459
|
- episodic 类型:如能确定活动时间,填入 {"activity_start_time": "ISO8601", "activity_end_time": "ISO8601"}
|
|
436
460
|
- work_task 可补充 owner、deadline、status;work_method 可补充 scope、method_type;work_artifact 可补充 artifact_type、artifact_ref;work_fact 可补充 work_object、status、activity_start_time、activity_end_time。
|
|
461
|
+
- 状态断言型记忆:把采集时点写进 activity_start_time,作为"截至"的时间锚。
|
|
437
462
|
- 其他类型或无法确定:输出空对象 {};metadata 不要包含无关个人信息。
|
|
438
463
|
|
|
439
464
|
如果整段对话无有意义的记忆,也要输出情境分割结果,memories 为空数组:
|
|
@@ -456,8 +481,28 @@ export function getExtractMemoriesSystemPrompt(mode, opts) {
|
|
|
456
481
|
out += NARRATIVE_CLAUSE;
|
|
457
482
|
if (opts?.usageScenario)
|
|
458
483
|
out += USAGE_SCENARIO_CLAUSE;
|
|
484
|
+
// 名称蒸馏(Phase 3):跟上面两个开关同一形状——**不改那三个 schema 常量本体**。
|
|
485
|
+
// 改本体有两个代价:off 不再与旧行为逐字相同(零漂移红线被破),且钉死提示全文的
|
|
486
|
+
// 五条 sha1 金标准全得重锚——为了一个可选字段去换掉“旧产物逐字不变”这个保证不值。
|
|
487
|
+
if (opts?.title)
|
|
488
|
+
out += TITLE_CLAUSE;
|
|
489
|
+
if (opts?.fewShot)
|
|
490
|
+
out += EXTRACTION_FEW_SHOT;
|
|
459
491
|
return out;
|
|
460
492
|
}
|
|
493
|
+
/**
|
|
494
|
+
* 名称蒸馏(Phase 3)指令段:仅在 `cfg.naming.enabled` 时拼到系统提示末尾。
|
|
495
|
+
*
|
|
496
|
+
* 定义与 `examples.ts` 的止例同文:只给定义不给样子,模型就照着散文自由发挥(真机那批
|
|
497
|
+
* “句子残片名”就是这么来的);只给样子不给定义,新类型进来时没人知道规则是什么。
|
|
498
|
+
*/
|
|
499
|
+
const TITLE_CLAUSE = `
|
|
500
|
+
|
|
501
|
+
【记忆标题】每条记忆必须额外输出一个 "title" 字段,它与 content 是两个不同的产物:
|
|
502
|
+
- title:6–14 个字的**名词短语**,回答“这条讲的是什么”。不得是完整句子、不得以句末标点结尾(。!?.!?)、不得含文件路径或 / \\ 分隔符、不得含 URL、session- 开头的会话 id、连续长 hex、-1234 这类版本号尾巴;不得以“用户要求/用户规定/团队已/团队将/针对…需求/已生成/本次/目前/结论/要点”等叙述引子开头;**不得照抄 content 的开头**。
|
|
503
|
+
- content:完整叙述正文,定义与上面各类型的句式要求**不变**。
|
|
504
|
+
|
|
505
|
+
两者都必填。title 不合格时系统会丢弃它并另行命名(宁可短而准,不要长而像句子)。`;
|
|
461
506
|
/** 类型叙述模板(G2)指令段:仅在 cfg.narrativeTemplates.enabled 时拼到系统提示末尾。 */
|
|
462
507
|
const NARRATIVE_CLAUSE = `
|
|
463
508
|
|
package/dist/settings.d.ts
CHANGED
|
@@ -55,4 +55,12 @@ export declare const MEMORY_ENTRY_ID = "dsh-memory";
|
|
|
55
55
|
* 关掉宿主按 volatile 字段自动生成的表单页,避免同一个插件出现两份设置入口。
|
|
56
56
|
* settings 服务缺失/未挂 configure 时静默跳过(自动表单页照常生成,无害)。 */
|
|
57
57
|
export declare function suppressAutoSettingsForm(ctx: Context): void;
|
|
58
|
+
/**
|
|
59
|
+
* 读 live 节的当前值。两种形状都得接:
|
|
60
|
+
* - 新 schemastery:`liveSettingsSchema()` 成功标了 `.volatile()`,宿主给 `Volatile<T>`(有 `.get()`)。
|
|
61
|
+
* - 老 schemastery(0.1.5-rc.3 解析到的 4.0.2,无 `.volatile()`):config.ts 的探测不标,
|
|
62
|
+
* 宿主直接给配置对象本体——没有 `.get()`,当成冻结快照读即可。
|
|
63
|
+
* 不兼容这一形就是在老线报 `ref.get is not a function`(把加载期崩换成运行期崩)。
|
|
64
|
+
*/
|
|
65
|
+
export declare function readLiveRef(ref: unknown): MemoryLiveSettings;
|
|
58
66
|
export declare function registerLiveSettings(ctx: Context, config: MemoryConfig, logger: MemoryLogger): LiveSettingsHandle;
|
package/dist/settings.js
CHANGED
|
@@ -81,6 +81,8 @@ const ALWAYS_ON = {
|
|
|
81
81
|
memoryMutate: false,
|
|
82
82
|
conflictFreeze: false,
|
|
83
83
|
skillsEnabled: false,
|
|
84
|
+
// md 投射护栏运行时覆盖:0 = 跟随部署 cfg.memExport.maxRecords(面板上可改)
|
|
85
|
+
mdExportMaxRecords: 0,
|
|
84
86
|
toolRoom: true,
|
|
85
87
|
toolGraph: true,
|
|
86
88
|
toolRuminate: true,
|
|
@@ -98,12 +100,23 @@ export function suppressAutoSettingsForm(ctx) {
|
|
|
98
100
|
});
|
|
99
101
|
});
|
|
100
102
|
}
|
|
103
|
+
/**
|
|
104
|
+
* 读 live 节的当前值。两种形状都得接:
|
|
105
|
+
* - 新 schemastery:`liveSettingsSchema()` 成功标了 `.volatile()`,宿主给 `Volatile<T>`(有 `.get()`)。
|
|
106
|
+
* - 老 schemastery(0.1.5-rc.3 解析到的 4.0.2,无 `.volatile()`):config.ts 的探测不标,
|
|
107
|
+
* 宿主直接给配置对象本体——没有 `.get()`,当成冻结快照读即可。
|
|
108
|
+
* 不兼容这一形就是在老线报 `ref.get is not a function`(把加载期崩换成运行期崩)。
|
|
109
|
+
*/
|
|
110
|
+
export function readLiveRef(ref) {
|
|
111
|
+
const maybe = ref;
|
|
112
|
+
return typeof maybe?.get === 'function' ? maybe.get() : maybe;
|
|
113
|
+
}
|
|
101
114
|
export function registerLiveSettings(ctx, config, logger) {
|
|
102
115
|
// 读面:volatile 引用恒在(由 Config schema 默认值兜底),读数现取现解析,
|
|
103
116
|
// 无进程内缓存——旧「服务就绪探测 / scope 复用 / 实例判活」整套机制随
|
|
104
117
|
// 命令式注册面一起删除(0.1.7 无注册,自然无 already-registered 竞态)。
|
|
105
118
|
const ref = config.live;
|
|
106
|
-
const read = () => resolveSettings(ref
|
|
119
|
+
const read = () => resolveSettings(readLiveRef(ref));
|
|
107
120
|
// 变更诊断(替代旧 scope.watch):宿主把 volatile-only 变更提交进引用后,
|
|
108
121
|
// 向持有 fiber 广播一次 loader/volatile-update(路径为键数组,只关心 live 节)。
|
|
109
122
|
ctx.on('loader/volatile-update', (paths) => {
|
|
@@ -304,6 +317,8 @@ function resolveSettings(value) {
|
|
|
304
317
|
conflictFreeze: v.conflictFreeze === true,
|
|
305
318
|
// 轨2 技能结晶:严格 === true(默认关,新功能默认关)
|
|
306
319
|
skillsEnabled: v.skillsEnabled === true,
|
|
320
|
+
// md 投射护栏钳 0~10000(与 live schema 同上限);0 = 跟随部署默认
|
|
321
|
+
mdExportMaxRecords: Math.min(10_000, Math.max(0, num(v.mdExportMaxRecords))),
|
|
307
322
|
// 工具分组封印:严格 !== false(缺省/异常值 = 未封印,工具照常注册)
|
|
308
323
|
toolRoom: v.toolRoom !== false,
|
|
309
324
|
toolGraph: v.toolGraph !== false,
|
package/dist/stats.d.ts
CHANGED
|
@@ -19,6 +19,8 @@ import type { StateStore } from './store/state.js';
|
|
|
19
19
|
import { type MemoryFamily, type MemoryLogger } from './types.js';
|
|
20
20
|
import { type MemoryBackend } from './store/memory-backend.js';
|
|
21
21
|
import type { SessionRecalledStore } from './store/session-recalled.js';
|
|
22
|
+
import { type RecallFeedbackStore } from './store/recall-feedback.js';
|
|
23
|
+
import type { ObsoleteNoticeStore } from './store/obsolete-notices.js';
|
|
22
24
|
export declare const PLUGIN_VERSION: string;
|
|
23
25
|
/** 运行态来源(index.ts 注入):避免 stats 撒谎字段。 */
|
|
24
26
|
export interface MemoryStatusSource {
|
|
@@ -133,6 +135,12 @@ export interface EndpointDeps {
|
|
|
133
135
|
graph?: GraphStore;
|
|
134
136
|
/** 会话“活召回集”累积器(G-live);缺省 = 端点返回空。 */
|
|
135
137
|
recalled?: SessionRecalledStore;
|
|
138
|
+
/** 召回相关度反馈 sidecar(未装配 = recall-feedback 不可用、列表不带 userRelevance)。 */
|
|
139
|
+
feedback?: RecallFeedbackStore;
|
|
140
|
+
/** 「已声明过时」待播报队列(与 feedback 同进退)。*/
|
|
141
|
+
notices?: ObsoleteNoticeStore;
|
|
142
|
+
/** md 投射指纹账本(N9;未装配 = mem-export / mem-reconcile 不可用)。*/
|
|
143
|
+
mdLedger?: import('./store/memory-md-ledger.js').MdLedgerStore;
|
|
136
144
|
};
|
|
137
145
|
status?: MemoryStatusSource;
|
|
138
146
|
live?: LiveSettingsHandle;
|
|
@@ -179,4 +187,8 @@ export declare function hitToUiRecord(r: {
|
|
|
179
187
|
lastAttemptAt: number | null;
|
|
180
188
|
lastUsedAt: number | null;
|
|
181
189
|
} | null;
|
|
190
|
+
/** 人给的相关度均值(0..5);未打分 = 不传(字段缺席,不是 0)。 */
|
|
191
|
+
userRelevance?: number | null;
|
|
192
|
+
/** 人给的**最近一笔**打分(-1..5);成熟度只吃这一笔,不吃均值。 */
|
|
193
|
+
userMark?: number | null;
|
|
182
194
|
}): UiRecord;
|