dsh-recall-plugin 2.3.1 → 2.3.3

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.
@@ -1,71 +1,56 @@
1
- /**
2
- * dsh-recall-plugin — 会话信息域(R2 从 index.js 拆出)
3
- *
4
- * 会话标题/消息文本的「两段式」读取:纯函数(titleFromEvents /
5
- * messageTextFromEvents)模块级导出供单测与工厂共用;live 快速查询
6
- * (liveTitleFast / liveMessageTextFast)带 apply 级跨请求缓存(sessionTitles /
7
- * messageTexts Map),由 createSessionInfo 工厂生产——无模块级可变状态(HMR 假设)。
8
- *
9
- * 冷会话标题/文本要 readSession 整日志解压(10 秒级),列表首屏只查 live/缓存
10
- * (同步、瞬时),冷数据由 Client 拿到列表后异步调 titles/messages 端点补齐。
11
- */
12
-
13
- // 从事件序列里取最新一条 session/title(倒序,标题事件通常靠后)
14
- export function titleFromEvents(events) {
15
- if (!Array.isArray(events)) return null
1
+ function titleFromEvents(events) {
2
+ if (!Array.isArray(events)) return null;
16
3
  for (let i = events.length - 1; i >= 0; i--) {
17
- const e = events[i]
18
- if (e && e.type === 'session/title' && e.data && typeof e.data.title === 'string' && e.data.title) return e.data.title
4
+ const e = events[i];
5
+ if (e && e.type === "session/title" && e.data && typeof e.data.title === "string" && e.data.title) return e.data.title;
19
6
  }
20
- return null
7
+ return null;
21
8
  }
22
-
23
- // 从事件序列里取指定用户消息的纯文本(text 块拼接)
24
- export function messageTextFromEvents(events, messageId) {
25
- if (!Array.isArray(events) || !messageId) return null
9
+ function messageTextFromEvents(events, messageId) {
10
+ if (!Array.isArray(events) || !messageId) return null;
26
11
  for (const e of events) {
27
- if (e && e.type === 'user/message' && e.data && String(e.data.id) === String(messageId)) {
28
- const blocks = Array.isArray(e.data.content) ? e.data.content : []
29
- const text = blocks
30
- .filter((b) => b && b.type === 'text' && typeof b.text === 'string')
31
- .map((b) => b.text)
32
- .join('')
33
- return text || null
12
+ if (e && e.type === "user/message" && e.data && String(e.data.id) === String(messageId)) {
13
+ const blocks = Array.isArray(e.data.content) ? e.data.content : [];
14
+ const text = blocks.filter((b) => b && b.type === "text" && typeof b.text === "string").map((b) => b.text).join("");
15
+ return text || null;
34
16
  }
35
17
  }
36
- return null
18
+ return null;
37
19
  }
38
-
39
- export function createSessionInfo(ctx) {
40
- // 会话标题缓存:值为 null 表示「查过、确实没有」(已删除会话),同样命中缓存
41
- const sessionTitles = new Map()
42
- // 消息文本缓存:null 也缓存(避免无文本消息每次刷新重复解压冷日志)
43
- const messageTexts = new Map()
44
-
20
+ function createSessionInfo(ctx) {
21
+ const sessionTitles = /* @__PURE__ */ new Map();
22
+ const messageTexts = /* @__PURE__ */ new Map();
45
23
  function liveMessageTextFast(sessionId, messageId) {
46
- if (!sessionId || !messageId) return null
47
- const key = String(sessionId) + '\u0000' + String(messageId)
48
- if (messageTexts.has(key)) return messageTexts.get(key)
49
- let text = null
24
+ if (!sessionId || !messageId) return null;
25
+ const key = String(sessionId) + "\0" + String(messageId);
26
+ if (messageTexts.has(key)) return messageTexts.get(key);
27
+ let text = null;
50
28
  try {
51
- const live = ctx.sessions.get(sessionId)
52
- if (live) text = messageTextFromEvents(live.events, messageId)
53
- } catch (error) { text = null }
54
- if (text !== null) messageTexts.set(key, text)
55
- return text
29
+ const live = ctx.sessions.get(sessionId);
30
+ if (live) text = messageTextFromEvents(live.events, messageId);
31
+ } catch (error) {
32
+ text = null;
33
+ }
34
+ if (text !== null) messageTexts.set(key, text);
35
+ return text;
56
36
  }
57
-
58
37
  function liveTitleFast(sessionId) {
59
- if (!sessionId) return null
60
- if (sessionTitles.has(sessionId)) return sessionTitles.get(sessionId)
61
- let t = null
38
+ if (!sessionId) return null;
39
+ if (sessionTitles.has(sessionId)) return sessionTitles.get(sessionId);
40
+ let t = null;
62
41
  try {
63
- const live = ctx.sessions.get(sessionId)
64
- if (live) t = titleFromEvents(live.events)
65
- } catch (error) { t = null }
66
- if (t !== null) sessionTitles.set(sessionId, t)
67
- return t
42
+ const live = ctx.sessions.get(sessionId);
43
+ if (live) t = titleFromEvents(live.events);
44
+ } catch (error) {
45
+ t = null;
46
+ }
47
+ if (t !== null) sessionTitles.set(sessionId, t);
48
+ return t;
68
49
  }
69
-
70
- return { sessionTitles, messageTexts, liveTitleFast, liveMessageTextFast }
50
+ return { sessionTitles, messageTexts, liveTitleFast, liveMessageTextFast };
71
51
  }
52
+ export {
53
+ createSessionInfo,
54
+ messageTextFromEvents,
55
+ titleFromEvents
56
+ };