@aalis/plugin-message-archive 0.12.2 → 0.14.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.
package/dist/index.d.ts CHANGED
@@ -1,6 +1,14 @@
1
1
  declare const _default: import("@aalis/core").PluginDefinition<{
2
- memory: import("@aalis/core").ServiceDescriptor<import("@aalis/api-memory").MemoryService, import("@aalis/core").ServiceRef<import("@aalis/api-memory").MemoryService>>;
3
- media: import("@aalis/core").OptionalUse<import("@aalis/api-media").MediaService, import("@aalis/core").ServiceRef<import("@aalis/api-media").MediaService>>;
2
+ memory: import("@aalis/core").ServiceDescriptor<import("@aalis/api-memory").MemoryService, import("@aalis/api-memory").MemoryService>;
3
+ media: import("@aalis/core").OptionalUse<import("@aalis/api-media").MediaService, import("@aalis/api-media").MediaService>;
4
+ storage: import("@aalis/core").OptionalUse<import("@aalis/api-storage").StorageService, import("@aalis/api-storage").BoundStorage>;
5
+ /**
6
+ * 认出子会话:它的出站没人认领时由这里认领;入站的发送者前缀按根会话的房间类别给(speakerOf)。不在时判不出,不认领,
7
+ * 入站一律写这条消息自己的说话人
8
+ */
9
+ sessionManager: import("@aalis/core").OptionalUse<import("@aalis/api-session-manager").SessionManagerService, import("@aalis/api-session-manager").SessionManagerService>;
10
+ /** 发送者前缀判谁是 owner、取 owner 在房间所在平台登记的账号;不在时没有人是 owner */
11
+ authority: import("@aalis/core").OptionalUse<import("@aalis/api-authority").AuthorityService, import("@aalis/api-authority").AuthorityService>;
4
12
  events: import("@aalis/core").ServiceDescriptor<(identity: symbol) => import("@aalis/core").Events, import("@aalis/core").Events>;
5
13
  logger: import("@aalis/core").ServiceDescriptor<(identity: symbol) => import("@aalis/core").Logger, import("@aalis/core").Logger>;
6
14
  config: import("@aalis/core").ServiceDescriptor<(identity: symbol) => Readonly<Record<string, unknown>>, Readonly<Record<string, unknown>>>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;AAmCA,wBAWG"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;IAyHE;;;OAGG;;IAEH,wDAAwD;;;;;;;AAS1D,wBA2BG"}
package/dist/index.js CHANGED
@@ -1,73 +1,221 @@
1
+ import { authority } from '@aalis/api-authority';
1
2
  import { media } from '@aalis/api-media';
2
3
  import { memory } from '@aalis/api-memory';
3
- import { messageArchive } from '@aalis/api-message-archive';
4
+ import { messageArchive, outboundAddress, speakerOf, unaddressedText } from '@aalis/api-message-archive';
5
+ import { sessionManager } from '@aalis/api-session-manager';
6
+ import { isStorageUri, isWebUrl, parseUriRoot, storage } from '@aalis/api-storage';
4
7
  import { config, definePlugin, events, logger, optional, provide } from '@aalis/core';
5
8
  import { defineConfig, parseConfig } from '@aalis/schema-config';
6
- import { buildIncomingContent, getMessageName, WellKnownKinds } from '@aalis/schema-message';
9
+ import { isTextRef, textOf, toSource, truncateParams } from '@aalis/schema-i18n';
10
+ import { buildIncomingContent, extractMentions, getMessageName, getSenderLabel, outboundMarkerMessage, outboundMediaMessage, WellKnownKinds, WellKnownMetadataKeys, } from '@aalis/schema-message';
11
+ import { t } from './texts.js';
7
12
  const configSchema = defineConfig({
8
13
  debugLogs: {
9
14
  type: 'boolean',
10
- label: '归档调试日志',
15
+ label: t('debugLogsLabel'),
11
16
  default: true,
12
- description: '记录图片解释完成和消息写入记忆等调试日志。',
17
+ description: t('debugLogsDescription'),
13
18
  },
14
19
  });
15
- /** 从消息文本中抽取 @提及的用户 ID 列表(平台无关:依赖各 adapter 输出统一的 <at id="X"> 标签) */
16
- function extractMentions(text) {
17
- if (!text)
18
- return [];
19
- const ids = new Set();
20
- const re = /<at(?:\s+self)?\s+id="([^"]+)">/g;
21
- let m = re.exec(text);
22
- while (m !== null) {
23
- const id = m[1];
24
- if (id && id !== 'all')
25
- ids.add(id);
26
- m = re.exec(text);
20
+ /**
21
+ * 能当地址的写法:网址,以及根在存储服务根表里的存储地址。预处理器换上的私有引用(形似存储地址、根不存在)与相对路径
22
+ * 不算
23
+ */
24
+ function addressOf(value, roots) {
25
+ if (!value)
26
+ return undefined;
27
+ if (isWebUrl(value))
28
+ return value;
29
+ return isStorageUri(value) && roots.has(parseUriRoot(value)) ? value : undefined;
30
+ }
31
+ /**
32
+ * 入站附件的清单:地址取附件的 data;data 不是地址(内联数据、本机路径、预处理器的私有引用)时,取预处理器写在附件 ref 上的
33
+ * 落盘地址(如媒体识别把上传的图片落盘后、文件读取把 data 换成文件引用前写的)。不从附件描述里取:描述里有群友起的文件名,
34
+ * 媒体判据把这份清单当作系统记下的引用
35
+ */
36
+ function attachmentList(incoming, roots) {
37
+ return (incoming.attachments ?? []).map(({ kind, name, data, ref: landed }) => {
38
+ const ref = addressOf(data, roots) ?? addressOf(landed, roots);
39
+ return { kind, ...(name ? { name } : {}), ...(ref ? { ref } : {}) };
40
+ });
41
+ }
42
+ /** 给人看的那句记进 metadata:参数截到 200 字(同其余落盘方);截完退成字符串的不记,读历史的一方照旧显示正文 */
43
+ function recordText(meta, text) {
44
+ const cut = text && truncateParams(text, 200);
45
+ if (isTextRef(cut))
46
+ meta[WellKnownMetadataKeys.Text] = cut;
47
+ }
48
+ /** 她发的网址图片与视频补描述时等识图的上限:视频要抽帧加转写,放得更宽 */
49
+ const DESCRIBE_TIMEOUT_MS = { image: 25_000, video: 30_000 };
50
+ /** 出站消息在会话历史里的各条,记法见 api-message-archive 的 recordOutbound */
51
+ function outboundRecords(msg) {
52
+ const marker = outboundMarkerMessage(msg);
53
+ const records = marker ? [{ message: marker }] : [];
54
+ for (const att of msg.attachments ?? []) {
55
+ const address = outboundAddress(att);
56
+ if (address === undefined) {
57
+ const text = unaddressedText(att);
58
+ const metadata = {};
59
+ recordText(metadata, text);
60
+ records.push({
61
+ message: { role: 'system', kind: WellKnownKinds.EventMarker, content: toSource(text), metadata },
62
+ });
63
+ continue;
64
+ }
65
+ const file = att.kind === 'file';
66
+ const message = {
67
+ ...outboundMediaMessage(att.kind, address, { desc: file ? att.name : att.description, source: msg.source }),
68
+ metadata: {
69
+ [WellKnownMetadataKeys.SentRef]: address,
70
+ ...(file && att.name ? { [WellKnownMetadataKeys.SentName]: att.name } : {}),
71
+ },
72
+ };
73
+ const { kind } = att;
74
+ const later = msg.source === 'agent' && (kind === 'image' || kind === 'video') && !att.description;
75
+ records.push(later && isWebUrl(address) ? { message, pending: { kind, url: address } } : { message });
27
76
  }
28
- return [...ids];
77
+ // 每条记录的元数据带出站的来源、回合 id 与调用 id,都是有才记
78
+ const facts = {
79
+ ...(msg.source ? { [WellKnownMetadataKeys.Source]: msg.source } : {}),
80
+ ...(msg.turnId ? { [WellKnownMetadataKeys.TurnId]: msg.turnId } : {}),
81
+ ...(msg.callId ? { [WellKnownMetadataKeys.CallId]: msg.callId } : {}),
82
+ };
83
+ return records.map(({ message, pending }) => {
84
+ const metadata = { ...facts, ...message.metadata };
85
+ return { message: Object.keys(metadata).length > 0 ? { ...message, metadata } : message, pending };
86
+ });
87
+ }
88
+ /** work 在 ms 内没有结果就以「超时」拒绝 */
89
+ function withTimeout(work, ms) {
90
+ let timer;
91
+ const timeout = new Promise((_, reject) => {
92
+ timer = setTimeout(() => reject(new Error(`识图超时(${ms / 1000} 秒)`)), ms);
93
+ });
94
+ return Promise.race([work, timeout]).finally(() => clearTimeout(timer));
29
95
  }
30
- const uses = { memory, media: optional(media), events, logger, config, provide };
96
+ const uses = {
97
+ memory,
98
+ media: optional(media),
99
+ storage: optional(storage),
100
+ /**
101
+ * 认出子会话:它的出站没人认领时由这里认领;入站的发送者前缀按根会话的房间类别给(speakerOf)。不在时判不出,不认领,
102
+ * 入站一律写这条消息自己的说话人
103
+ */
104
+ sessionManager: optional(sessionManager),
105
+ /** 发送者前缀判谁是 owner、取 owner 在房间所在平台登记的账号;不在时没有人是 owner */
106
+ authority: optional(authority),
107
+ events,
108
+ logger,
109
+ config,
110
+ provide,
111
+ };
31
112
  export default definePlugin({
32
113
  name: '@aalis/plugin-message-archive',
33
- displayName: '消息归档',
114
+ displayName: t('displayName'),
34
115
  subsystem: 'message',
35
116
  configSchema,
36
117
  provides: [messageArchive],
37
118
  uses,
38
119
  apply(caps) {
39
- const cfg = parseConfig(configSchema, caps.config, caps.logger);
40
- caps.provide(messageArchive, createArchiveService(caps, cfg.debugLogs));
120
+ const cfg = parseConfig(configSchema, caps.config.use, caps.logger.use);
121
+ const archive = createArchiveService(caps, cfg.debugLogs);
122
+ caps.provide.use(messageArchive, archive);
123
+ // 适配器送达之后发的快照记进会话历史;不等它写完,免得拖住同一事件的其它监听
124
+ caps.events.use.on('outbound:delivered', msg => {
125
+ archive
126
+ .recordOutbound(msg)
127
+ .catch(err => caps.logger.use.warn('[message-archive] 出站消息没能记进会话历史:', err));
128
+ });
129
+ // 子会话没有窗口,任何适配器都不认领它的出站:还没人认领的由这里认领,记进子会话自己的历史即算送达
130
+ caps.events.use.on('outbound:message', msg => {
131
+ if (msg.delivery || !caps.sessionManager.present)
132
+ return;
133
+ if (!caps.sessionManager.use.getSession(msg.sessionId)?.parentId)
134
+ return;
135
+ msg.delivery = archive.recordOutbound(msg).then(() => ({ ok: true }), error => ({ ok: false, error: textOf(error) }));
136
+ });
41
137
  },
42
138
  });
43
- function createArchiveService({ memory, media, events, logger }, debugLogs) {
44
- // 不缓存 memory 引用,每次调用现取:一次激活内胜者也可能换人(偏好变更、更高优先级的
45
- // 提供者登场),ServiceRef 的契约就是每次解析当前值。多一次查表的开销可忽。
139
+ function createArchiveService({ memory, media, storage, sessionManager, authority, events, logger }, debugLogs) {
140
+ // 经 memory 的业务句柄调用:一次激活内胜者也可能换人(偏好变更、更高优先级的提供者登场),
141
+ // 句柄每次调用都打到当时选中的那一家。
142
+ async function saveMessage(sessionId, message, options) {
143
+ await memory.use.saveMessage(sessionId, message);
144
+ void announce(sessionId, message);
145
+ if (debugLogs && options?.debugLabel) {
146
+ logger.use.debug(options.debugLabel);
147
+ }
148
+ }
149
+ /**
150
+ * 落库之后通知监听者,回这次派发(落库的一方不等它)。只发 assistant「对外可见的回复」(memory-vector 据此索引 AI 自身发言):
151
+ * 带 toolCalls 的行是工具调用回合的内部前言(「我来查一下」),从未发给任何人,不该进语义记忆;tool/摘要等其他 saveMessage
152
+ * 用途同理不发。core 的 emit 恒 resolve(per-handler try/catch),无需 catch。
153
+ */
154
+ function announce(sessionId, message) {
155
+ if (message.role !== 'assistant' || !message.content?.trim() || message.toolCalls?.length)
156
+ return Promise.resolve();
157
+ return events.use.emit('assistant:message:archived', { sessionId, message });
158
+ }
159
+ /**
160
+ * 她发的网址图片与视频记完之后补描述:识图拿到描述就把这一条正文里的附件引用换成带描述的(只改这个会话里最近一条含它的),
161
+ * 改到了发 memory:messages-rewritten。记忆后端不支持改写或媒体服务不在时不补;识图超时或失败记一条 warn,这一条保持不带描述
162
+ */
163
+ async function describeLater(sessionId, record, { kind, url }) {
164
+ const mem = memory.use;
165
+ if (!mem.updateMessageContent || !media.present)
166
+ return;
167
+ const service = media.use;
168
+ const described = kind === 'image' ? service.describeImage(url) : service.describeVideo(url);
169
+ const desc = (await withTimeout(described, DESCRIBE_TIMEOUT_MS[kind])).trim();
170
+ if (!desc)
171
+ return;
172
+ const before = outboundMediaMessage(kind, url, { source: 'agent' }).content;
173
+ const { content } = outboundMediaMessage(kind, url, { desc, source: 'agent' });
174
+ if ((await mem.updateMessageContent(sessionId, before, content, 1)) === 0)
175
+ return;
176
+ await events.use.emit('memory:messages-rewritten', { sessionId, messages: [{ ...record, content }] });
177
+ }
178
+ /** 上次出站记录用掉的时间戳:同一毫秒里的几次出站往后错开,同一会话里的出站记录时间戳各不相同 */
179
+ let lastOutboundAt = 0;
46
180
  return {
47
- async saveMessage(sessionId, message, options) {
48
- await memory.require().saveMessage(sessionId, message);
49
- // assistant 回复落库后通知监听者(memory-vector 据此索引 AI 自身发言)。
50
- // 只发「对外可见的回复」:带 toolCalls 的行是工具调用回合的内部前言
51
- //(「我来查一下」),从未发给任何人,不该进语义记忆;tool/摘要等其他
52
- // saveMessage 用途同理不发。core 的 emit 恒 resolve(per-handler try/catch),无需 catch。
53
- if (message.role === 'assistant' && message.content?.trim() && !message.toolCalls?.length) {
54
- void events.emit('assistant:message:archived', { sessionId, message });
55
- }
56
- if (debugLogs && options?.debugLabel) {
57
- logger.debug(options.debugLabel);
181
+ saveMessage,
182
+ async recordOutbound(msg) {
183
+ // 要记的内容在第一次等待之前取走(契约:调用之后对消息的改写不算)
184
+ const { sessionId } = msg;
185
+ const at = Math.max(Date.now(), lastOutboundAt + 1);
186
+ const records = outboundRecords(msg).map(({ message, pending }, i) => ({
187
+ message: { ...message, timestamp: at + i },
188
+ pending,
189
+ }));
190
+ lastOutboundAt = Math.max(lastOutboundAt, at + records.length - 1);
191
+ const announced = [];
192
+ for (const { message } of records) {
193
+ await memory.use.saveMessage(sessionId, message);
194
+ announced.push(announce(sessionId, message));
58
195
  }
196
+ // 补描述等这一条的落库通知派发完再开始:改写通知赶在它前面到的话,收录它的一方(memory-vector)删不到还没收录的旧条目
197
+ records.forEach(({ message, pending }, i) => {
198
+ if (!pending)
199
+ return;
200
+ announced[i]
201
+ .then(() => describeLater(sessionId, message, pending))
202
+ .catch(err => logger.use.warn('[message-archive] 发出的附件没能补上描述,这一条不带描述:', err));
203
+ });
59
204
  },
60
- async archiveIncoming(incoming) {
205
+ async archiveIncoming(incoming, turn) {
206
+ // 空闲开话题的提示是写给模型的话,不是谁的发言,也不是要留档的事件:不落档、不发 inbound:message:archived
207
+ if (incoming.triggerType === 'idle')
208
+ return undefined;
61
209
  // 调用 plugin-media 一站式处理(识别 attachments 并写回 _attachmentDescriptions)
62
210
  // 仅在 preprocessor 尚未运行(_attachmentDescriptions 未预设)时才调用,避免重复识别。
63
211
  // 对传入的消息对象调用(识别结果随之写回入参):processMessage 按消息对象只处理一次,
64
212
  // 触发判定已启动的识别在这里命中(在途则等它),对拷贝调用会再识别一遍
65
213
  if (incoming.attachments && incoming.attachments.length > 0 && !incoming._attachmentDescriptions) {
66
- const mediaSvc = media.current;
214
+ const mediaSvc = media.present ? media.use : undefined;
67
215
  if (mediaSvc) {
68
216
  const report = await mediaSvc.processMessage(incoming);
69
217
  if (debugLogs && report.total > 0) {
70
- logger.debug(`附件识别完成: ${report.successCount}/${report.total} 个成功 | ${incoming.content}`);
218
+ logger.use.debug(`附件识别完成: ${report.successCount}/${report.total} 个成功 | ${incoming.content}`);
71
219
  }
72
220
  }
73
221
  }
@@ -78,65 +226,103 @@ function createArchiveService({ memory, media, events, logger }, debugLogs) {
78
226
  ? [...incoming._attachmentDescriptions]
79
227
  : incoming._attachmentDescriptions,
80
228
  };
81
- const content = buildIncomingContent(working);
229
+ const speaker = speakerOf(working, {
230
+ sessionManager: sessionManager.present ? sessionManager.use : undefined,
231
+ authority: authority.present ? authority.use : undefined,
232
+ });
233
+ const content = buildIncomingContent(working, speaker);
82
234
  // 把会话身份信息存入 metadata,供向量检索/上下文渲染等场景使用
83
235
  const meta = {};
84
236
  if (working.userId)
85
- meta.userId = working.userId;
237
+ meta[WellKnownMetadataKeys.UserId] = working.userId;
86
238
  if (working.nickname)
87
- meta.nickname = working.nickname;
239
+ meta[WellKnownMetadataKeys.Nickname] = working.nickname;
88
240
  if (working.platform)
89
- meta.platform = working.platform;
241
+ meta[WellKnownMetadataKeys.Platform] = working.platform;
90
242
  if (working.groupId)
91
- meta.groupId = working.groupId;
243
+ meta[WellKnownMetadataKeys.GroupId] = working.groupId;
92
244
  if (working.groupName)
93
- meta.groupName = working.groupName;
245
+ meta[WellKnownMetadataKeys.GroupName] = working.groupName;
94
246
  if (working.sessionType)
95
- meta.sessionType = working.sessionType;
247
+ meta[WellKnownMetadataKeys.SessionType] = working.sessionType;
96
248
  // 平台侧消息 ID(如 OneBot message_id),用于"引用回复"反查归档原文
97
249
  if (working.messageId)
98
- meta.messageId = working.messageId;
99
- // 文件附件名称列表:供前端历史加载时重建文件标签,避免 content 里的 inline 文件内容
100
- // 污染对话气泡显示。此时 plugin-file-reader 已将 att.data 替换为 aalis-file://ID,
101
- // 但 att.name 仍保留原始文件名。
102
- const fileAttachments = working.attachments?.filter(a => a.kind === 'file') ?? [];
103
- if (fileAttachments.length > 0) {
104
- meta.fileNames = fileAttachments.map(a => a.name ?? '未知文件').filter(Boolean);
250
+ meta[WellKnownMetadataKeys.MessageId] = working.messageId;
251
+ // 发言人写的话、附件清单与转发:归档正文拼进了发送者前缀、转发的展开、引用与附件描述(给模型看),读历史给人看的一方取
252
+ // 这三样;转发只记 id 与事实,展开已在归档正文里
253
+ if (working.content !== content)
254
+ meta[WellKnownMetadataKeys.SpokenContent] = working.content;
255
+ if (working.forwards?.length) {
256
+ meta[WellKnownMetadataKeys.Forwards] = working.forwards.map(({ id, facts }) => facts ? { id, facts } : { id });
105
257
  }
106
- // 触发与来源溯源:用于区分真实用户消息 vs proactive 委派/调度等系统注入,
258
+ // 加了发送者前缀时记下用的标签:把归档正文重排给模型或界面看的一方按它去掉这一层
259
+ const label = speaker && getSenderLabel(speaker.nickname, speaker.userId);
260
+ if (label)
261
+ meta[WellKnownMetadataKeys.SenderLabel] = label;
262
+ const roots = new Set(storage.present ? storage.use.listRoots().map(root => root.name) : []);
263
+ const attachments = attachmentList(working, roots);
264
+ if (attachments.length > 0)
265
+ meta[WellKnownMetadataKeys.Attachments] = attachments;
266
+ // 触发与来源溯源:用于区分真实用户消息 vs proactive 代发任务/调度等系统注入,会话服务据此标出被点名与插话,
107
267
  // 也方便事后审计"agent 在 X 群做过什么"
108
268
  if (working.triggerType)
109
- meta.triggerType = working.triggerType;
269
+ meta[WellKnownMetadataKeys.TriggerType] = working.triggerType;
110
270
  if (working.source)
111
- meta.source = working.source;
112
- const mentions = extractMentions(content);
271
+ meta[WellKnownMetadataKeys.Source] = working.source;
272
+ // 进了哪一轮、怎么进的:会话服务据此把它归回回合,连对话回滚据此只删这一轮的
273
+ if (turn) {
274
+ meta[WellKnownMetadataKeys.TurnId] = turn.turnId;
275
+ meta[WellKnownMetadataKeys.TurnEntry] = turn.entry;
276
+ }
277
+ // 平台事件合成的入站给人看的那句:读历史的一方据此把它画成通知
278
+ recordText(meta, working.text);
279
+ // 被 @ 的人只从发言人自己写的话里取:引用、附件描述与转发里别人 @ 的不算
280
+ const mentions = extractMentions(working.content);
113
281
  if (mentions.length > 0)
114
- meta.mentions = mentions;
115
- // proactive 跨会话委派消息:作为 notice 角色 + kind='cross-session-delegation' 落盘,
116
- // 与 plugin-agent 的 buildMessages 保持一致,避免 B 下次回看历史时
282
+ meta[WellKnownMetadataKeys.Mentions] = mentions;
283
+ // proactive 代发任务(如 workflow agent 节点):作为 notice 角色 + kind='cross-session-delegation' 落盘,
284
+ // 与 plugin-agent 的 buildMessages 保持一致,避免目标会话下次回看历史时
117
285
  // 把派发任务误读为「曾经有用户说过这个」。
118
- const isProactive = working.triggerType === 'proactive';
286
+ //
287
+ // 宿主通知同样落成 notice,kind='host-notice'。只归档宿主正文:注入方包好的不可信段
288
+ // (hostNotice.untrusted)不写进消息也不写进 metadata——归档的 notice 出口转成 system,
289
+ // 之后这个房间每一轮都看得到它,不可信段只能在当轮出现。子类、id、给界面的事实与给人看的文字另记,读历史的一方据此画通知
290
+ if (working.hostNotice) {
291
+ const { kind, id, facts, text } = working.hostNotice;
292
+ meta[WellKnownMetadataKeys.HostNoticeKind] = kind;
293
+ if (id)
294
+ meta[WellKnownMetadataKeys.HostNoticeId] = id;
295
+ if (facts)
296
+ meta[WellKnownMetadataKeys.HostNoticeFacts] = facts;
297
+ recordText(meta, text);
298
+ }
299
+ const directive = working.hostNotice
300
+ ? WellKnownKinds.HostNotice
301
+ : working.triggerType === 'proactive'
302
+ ? WellKnownKinds.CrossSessionDelegation
303
+ : undefined;
304
+ // 平台事件转成的入站(如戳一戳)仍是 user 消息,子类(noticeType)记成 kind,读历史的一方据此给出通知的种类
119
305
  const message = {
120
- role: isProactive ? 'notice' : 'user',
121
- kind: isProactive ? WellKnownKinds.CrossSessionDelegation : undefined,
306
+ role: directive ? 'notice' : 'user',
307
+ kind: directive ?? working.noticeType,
122
308
  content,
123
- name: isProactive ? undefined : getMessageName(working.userId),
309
+ name: directive ? undefined : getMessageName(working.userId),
124
310
  timestamp: Date.now(),
125
311
  metadata: Object.keys(meta).length > 0 ? meta : undefined,
126
312
  };
127
- await memory.require().saveMessage(working.sessionId, message);
313
+ await memory.use.saveMessage(working.sessionId, message);
128
314
  if (debugLogs && working.attachments?.length) {
129
- logger.debug(`附件消息已写入记忆: session=${working.sessionId}, attachments=${working.attachments.length} | ${content}`);
315
+ logger.use.debug(`附件消息已写入记忆: session=${working.sessionId}, attachments=${working.attachments.length} | ${content}`);
130
316
  }
131
317
  // 通知监听者:入站消息已落库(用于触发用户档案事实提取等后台任务)
132
- // 与 agent 是否回复无关,所有走 archiveIncoming 的消息都会发出
133
- events
318
+ // 与 agent 是否回复无关,落了档的入站都会发出
319
+ events.use
134
320
  .emit('inbound:message:archived', {
135
321
  sessionId: working.sessionId,
136
322
  incoming: working,
137
323
  archivedMessage: message,
138
324
  })
139
- .catch(err => logger.debug(`inbound:message:archived 事件分发失败: ${err}`));
325
+ .catch(err => logger.use.debug(`inbound:message:archived 事件分发失败: ${err}`));
140
326
  return {
141
327
  message,
142
328
  content,
@@ -150,17 +336,18 @@ function createArchiveService({ memory, media, events, logger }, debugLogs) {
150
336
  if (opts.subType)
151
337
  metadata.subType = opts.subType;
152
338
  if (opts.platform)
153
- metadata.platform = opts.platform;
339
+ metadata[WellKnownMetadataKeys.Platform] = opts.platform;
154
340
  if (opts.userId)
155
- metadata.userId = opts.userId;
341
+ metadata[WellKnownMetadataKeys.UserId] = opts.userId;
156
342
  if (opts.targetId)
157
343
  metadata.targetId = opts.targetId;
158
344
  if (opts.groupId)
159
- metadata.groupId = opts.groupId;
345
+ metadata[WellKnownMetadataKeys.GroupId] = opts.groupId;
160
346
  if (opts.operatorId)
161
347
  metadata.operatorId = opts.operatorId;
162
348
  if (opts.data)
163
349
  Object.assign(metadata, opts.data);
350
+ recordText(metadata, opts.text);
164
351
  const message = {
165
352
  role: 'notice',
166
353
  kind: opts.noticeType,
@@ -168,9 +355,9 @@ function createArchiveService({ memory, media, events, logger }, debugLogs) {
168
355
  timestamp: opts.timestamp ?? Date.now(),
169
356
  metadata: Object.keys(metadata).length > 0 ? metadata : undefined,
170
357
  };
171
- await memory.require().saveMessage(opts.sessionId, message);
358
+ await memory.use.saveMessage(opts.sessionId, message);
172
359
  if (debugLogs) {
173
- logger.debug(`[notice 入档] session=${opts.sessionId} type=${opts.noticeType}${opts.subType ? `/${opts.subType}` : ''} | ${text}`);
360
+ logger.use.debug(`[notice 入档] session=${opts.sessionId} type=${opts.noticeType}${opts.subType ? `/${opts.subType}` : ''} | ${text}`);
174
361
  }
175
362
  return message;
176
363
  },
@@ -180,11 +367,11 @@ function createArchiveService({ memory, media, events, logger }, debugLogs) {
180
367
  // 缺省 100;撤回反查按需显式传大窗(见 onebot 撤回处)。不把缺省抬到 500:
181
368
  // 引用回填热路径也调本方法并按 maxDepth 递归,抬缺省会让它每层多扫 400 条。
182
369
  const limit = Math.max(1, Math.min(500, Math.floor(scanLimit ?? 100)));
183
- const history = await memory.require().getHistory(sessionId, limit);
370
+ const history = await memory.use.getHistory(sessionId, limit);
184
371
  // 从最新往旧找:引用通常指向最近发的消息
185
372
  for (let i = history.length - 1; i >= 0; i -= 1) {
186
373
  const m = history[i];
187
- const mid = m.metadata?.messageId;
374
+ const mid = m.metadata?.[WellKnownMetadataKeys.MessageId];
188
375
  if (mid != null && String(mid) === messageId)
189
376
  return m;
190
377
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ declare const _default: {
2
+ readonly displayName: "Message archive";
3
+ readonly debugLogsLabel: "Archive debug logs";
4
+ readonly debugLogsDescription: "Log debug lines such as image descriptions completing and messages being written to memory.";
5
+ };
6
+ export default _default;
7
+ //# sourceMappingURL=en.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../src/locales/en.ts"],"names":[],"mappings":";;;;;AAGA,wBAIG"}
@@ -0,0 +1,7 @@
1
+ import { defineLocale } from '@aalis/schema-i18n';
2
+ export default defineLocale()({
3
+ displayName: 'Message archive',
4
+ debugLogsLabel: 'Archive debug logs',
5
+ debugLogsDescription: 'Log debug lines such as image descriptions completing and messages being written to memory.',
6
+ });
7
+ //# sourceMappingURL=en.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"en.js","sourceRoot":"","sources":["../../src/locales/en.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,eAAe,YAAY,EAAU,CAAC;IACpC,WAAW,EAAE,iBAAiB;IAC9B,cAAc,EAAE,oBAAoB;IACpC,oBAAoB,EAAE,6FAA6F;CACpH,CAAC,CAAC"}
@@ -0,0 +1,13 @@
1
+ declare const SOURCE: {
2
+ readonly displayName: "消息归档";
3
+ readonly debugLogsLabel: "归档调试日志";
4
+ readonly debugLogsDescription: "记录图片解释完成和消息写入记忆等调试日志。";
5
+ };
6
+ export type Source = typeof SOURCE;
7
+ export declare const t: import("@aalis/schema-i18n").TextFactory<{
8
+ readonly displayName: "消息归档";
9
+ readonly debugLogsLabel: "归档调试日志";
10
+ readonly debugLogsDescription: "记录图片解释完成和消息写入记忆等调试日志。";
11
+ }>;
12
+ export {};
13
+ //# sourceMappingURL=texts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"texts.d.ts","sourceRoot":"","sources":["../src/texts.ts"],"names":[],"mappings":"AAIA,QAAA,MAAM,MAAM;;;;CAIF,CAAC;AACX,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC;AAEnC,eAAO,MAAM,CAAC;;;;EAKZ,CAAC"}
package/dist/texts.js ADDED
@@ -0,0 +1,15 @@
1
+ // 本插件自己的原文字典:显示名与配置项
2
+ import { defineTexts } from '@aalis/schema-i18n';
3
+ import en from './locales/en.js';
4
+ const SOURCE = {
5
+ displayName: '消息归档',
6
+ debugLogsLabel: '归档调试日志',
7
+ debugLogsDescription: '记录图片解释完成和消息写入记忆等调试日志。',
8
+ };
9
+ export const t = defineTexts({
10
+ ns: '@aalis/plugin-message-archive',
11
+ language: 'zh-CN',
12
+ source: SOURCE,
13
+ locales: { en },
14
+ });
15
+ //# sourceMappingURL=texts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"texts.js","sourceRoot":"","sources":["../src/texts.ts"],"names":[],"mappings":"AAAA,qBAAqB;AACrB,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAEjC,MAAM,MAAM,GAAG;IACb,WAAW,EAAE,MAAM;IACnB,cAAc,EAAE,QAAQ;IACxB,oBAAoB,EAAE,uBAAuB;CACrC,CAAC;AAGX,MAAM,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC;IAC3B,EAAE,EAAE,+BAA+B;IACnC,QAAQ,EAAE,OAAO;IACjB,MAAM,EAAE,MAAM;IACd,OAAO,EAAE,EAAE,EAAE,EAAE;CAChB,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aalis/plugin-message-archive",
3
- "version": "0.12.2",
3
+ "version": "0.14.0",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
@@ -24,19 +24,23 @@
24
24
  "dist"
25
25
  ],
26
26
  "dependencies": {
27
- "@aalis/schema-config": ">=0.14.0 <1.0.0",
28
- "@aalis/schema-message": ">=0.9.1 <1.0.0",
29
- "@aalis/api-media": ">=0.11.0 <1.0.0",
30
- "@aalis/api-memory": ">=0.7.0 <1.0.0",
31
- "@aalis/api-message-archive": ">=0.7.0 <1.0.0"
27
+ "@aalis/schema-config": ">=0.16.0 <1.0.0",
28
+ "@aalis/schema-i18n": ">=0.1.0 <1.0.0",
29
+ "@aalis/schema-message": ">=0.11.0 <1.0.0",
30
+ "@aalis/api-authority": ">=0.12.0 <1.0.0",
31
+ "@aalis/api-media": ">=0.13.0 <1.0.0",
32
+ "@aalis/api-memory": ">=0.9.0 <1.0.0",
33
+ "@aalis/api-message-archive": ">=0.9.0 <1.0.0",
34
+ "@aalis/api-session-manager": ">=0.12.0 <1.0.0",
35
+ "@aalis/api-storage": ">=0.9.0 <1.0.0"
32
36
  },
33
37
  "devDependencies": {
34
38
  "@types/node": "^22.0.0",
35
39
  "typescript": "^5.7.0",
36
- "@aalis/core": "0.19.1"
40
+ "@aalis/core": "0.21.0"
37
41
  },
38
42
  "peerDependencies": {
39
- "@aalis/core": ">=0.18.0 <1.0.0"
43
+ "@aalis/core": ">=0.21.0 <1.0.0"
40
44
  },
41
45
  "aalis": {
42
46
  "service": {
@@ -48,7 +52,10 @@
48
52
  "provide"
49
53
  ],
50
54
  "optional": [
51
- "media"
55
+ "authority",
56
+ "media",
57
+ "session-manager",
58
+ "storage"
52
59
  ],
53
60
  "provides": [
54
61
  "message-archive"