dsh-prime-memory 0.26.3 → 0.26.4

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.
@@ -78,6 +78,17 @@ export interface OwnInjectionFacts {
78
78
  * 署名判定走 `isOwnRecallSource`,同时吃 v4 `plugin:memory` 与 v3 旧行形状。
79
79
  */
80
80
  export declare function ownInjectionFromEvent(ev: InjectionEventLike): OwnInjectionFacts | undefined;
81
+ /**
82
+ * 会话事件统一读形状(issue #8):旧宿主 `session.events` 是数组属性;
83
+ * 0.2.x 宿主已删该属性,官方访问器是 `snapshotEvents()`(全量日志,seq 与日志
84
+ * 位置对齐,含 fork 前缀——与旧属性同口径)。两者都拿不到时返回 undefined,
85
+ * 由调用点的既有退路处置(粗标记 / 存储回填);不假设形状,不抛。
86
+ * 导出供双形状单测钉住。
87
+ */
88
+ export declare function readSessionEvents(session: {
89
+ events?: readonly InjectionEventLike[];
90
+ snapshotEvents?: () => readonly InjectionEventLike[];
91
+ }): readonly InjectionEventLike[] | undefined;
81
92
  export declare function buildRecallQuery(messages: Array<{
82
93
  content: unknown;
83
94
  }>, tailMessages?: number, maxChars?: number): string;
@@ -64,6 +64,20 @@ export function ownInjectionFromEvent(ev) {
64
64
  chars,
65
65
  };
66
66
  }
67
+ /**
68
+ * 会话事件统一读形状(issue #8):旧宿主 `session.events` 是数组属性;
69
+ * 0.2.x 宿主已删该属性,官方访问器是 `snapshotEvents()`(全量日志,seq 与日志
70
+ * 位置对齐,含 fork 前缀——与旧属性同口径)。两者都拿不到时返回 undefined,
71
+ * 由调用点的既有退路处置(粗标记 / 存储回填);不假设形状,不抛。
72
+ * 导出供双形状单测钉住。
73
+ */
74
+ export function readSessionEvents(session) {
75
+ if (Array.isArray(session.events))
76
+ return session.events;
77
+ if (typeof session.snapshotEvents === 'function')
78
+ return session.snapshotEvents();
79
+ return undefined;
80
+ }
67
81
  export function buildRecallQuery(messages, tailMessages = RECALL_QUERY_TAIL_MESSAGES, maxChars = RECALL_QUERY_MAX_CHARS) {
68
82
  const tail = messages.slice(-tailMessages);
69
83
  let text = tail.map((m) => blocksToText(m.content)).join(' ').trim();
@@ -572,14 +586,18 @@ usage) {
572
586
  return false;
573
587
  try {
574
588
  // 可选服务一律走 ctx.get() 的宽容路径(属性访问对未 inject 的服务会抛)
589
+ // events 形状双面:旧宿主数组属性 / 0.2.x snapshotEvents() 方法(issue #8)
575
590
  const sessions = ctx.get?.('sessions');
576
591
  const session = typeof sessions?.get === 'function' ? sessions.get(sessionId) : undefined;
577
592
  if (session === undefined)
578
593
  return false;
594
+ const events = readSessionEvents(session);
595
+ if (events === undefined)
596
+ return false; // 事件面不可得:调用方回退粗标记
579
597
  const visibleSeqs = new Set(session.surface.nodes);
580
598
  const visibleIds = new Set();
581
599
  const knownIds = new Set();
582
- for (const ev of session.events) {
600
+ for (const ev of events) {
583
601
  const own = ownInjectionFromEvent(ev);
584
602
  if (own === undefined || own.id.length === 0)
585
603
  continue;
@@ -633,12 +651,17 @@ usage) {
633
651
  try {
634
652
  // cordis 属性访问(ctx.sessions)对未 inject 的服务抛 "without inject";
635
653
  // 可选服务一律走 ctx.get() 的宽容路径
654
+ // events 形状双面:旧宿主数组属性 / 0.2.x snapshotEvents() 方法(issue #8)
636
655
  const sessions = ctx.get?.('sessions');
637
656
  const session = typeof sessions?.get === 'function' ? sessions.get(sessionId) : undefined;
638
657
  if (session) {
658
+ const events = readSessionEvents(session);
659
+ // 事件形状不可得:与「不在 live store」同一退路,走存储回填,不再静默归 null
660
+ if (events === undefined)
661
+ return estimateRecallFromStorage(sessionId);
639
662
  const visible = new Set(session.surface.nodes);
640
663
  let total = 0;
641
- for (const ev of session.events) {
664
+ for (const ev of events) {
642
665
  const own = ownInjectionFromEvent(ev);
643
666
  // 无 seq = 无法证明它可见,就不能算进份额(与原行为一致:原来它必须 visible.has(seq))。
644
667
  if (own === undefined || own.chars === 0 || own.seq === undefined || !visible.has(own.seq))
package/dsh.plugin.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "dsh-prime-memory",
3
3
  "name": "dsh-prime-memory",
4
- "version": "0.26.3",
4
+ "version": "0.26.4",
5
5
  "description": {
6
6
  "en": "Layered distilled memory plugin (L0 capture → L1 atomic memory → L2 scenes → L3 persona) with automatic recall injection before each model step.",
7
7
  "zh": "L0~L3 分层蒸馏记忆插件:自动捕获对话、抽取原子记忆、整合场景块、蒸馏核心画像,并在模型步骤前自动召回注入。"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-prime-memory",
3
- "version": "0.26.3",
3
+ "version": "0.26.4",
4
4
  "publishConfig": {
5
5
  "registry": "https://registry.npmjs.org",
6
6
  "access": "public",