@aalis/plugin-adapter-onebot 0.10.1 → 0.11.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/dist/forward.js CHANGED
@@ -12,90 +12,57 @@
12
12
  * onebot_get_forward_msg 工具 / 缓存命中拿回。
13
13
  *
14
14
  * 本模块仅做"纯逻辑",不直接依赖 Context;适配器通过依赖注入提供
15
- * fetchForward / recognizeImage / summarize 三个能力函数。
15
+ * fetchForward / resolveMedia / summarize 三个能力函数。
16
16
  */
17
17
  import { getForwardNodes } from './types.js';
18
+ /** 各媒体类的占位符与识别成功时的包装 */
19
+ const MEDIA_LABEL = {
20
+ image: { placeholder: '[图片]', prefix: '[图片: ', suffix: ']' },
21
+ audio: { placeholder: '[语音]', prefix: '[语音: ', suffix: ']' },
22
+ video: { placeholder: '[视频]', prefix: '[视频: ', suffix: ']' },
23
+ };
24
+ /** 解析 CQ 段参数体(`,k=v,k=v`),含 CQ 转义还原。 */
25
+ function parseCqParams(body) {
26
+ const params = {};
27
+ for (const part of body.replace(/^,/, '').split(',')) {
28
+ const eq = part.indexOf('=');
29
+ if (eq <= 0)
30
+ continue;
31
+ params[part.slice(0, eq)] = part
32
+ .slice(eq + 1)
33
+ .replace(/&amp;/g, '&')
34
+ .replace(/&#91;/g, '[')
35
+ .replace(/&#93;/g, ']')
36
+ .replace(/&#44;/g, ',');
37
+ }
38
+ return params;
39
+ }
18
40
  /**
19
- * CQ 字符串里 [CQ:<kind>,...] 段替换为识别结果(或 fallback 占位)。
41
+ * 剥除 NUL:媒体 token 用 NUL 做哨兵,所有进入行文本的外部字符串(CQ 串、text 段、
42
+ * at/face/share/未知段、昵称)都必须过这道——剥掉后消息内容无法伪造/搬运 token
43
+ * (NUL 经 JSON \u0000 转义可达,非理论面)。
20
44
  */
21
- async function replaceCqWithRecognizer(text, kind, fallback, successPrefix, successSuffix, recognizer) {
22
- const re = new RegExp(`\\[CQ:${kind}(,[^\\]]+)?\\]`, 'g');
23
- if (!recognizer)
24
- return text.replace(re, fallback);
25
- const matches = [...text.matchAll(re)];
26
- if (matches.length === 0)
27
- return text;
28
- const replacements = await Promise.all(matches.map(async (m) => {
29
- const params = {};
30
- const body = m[1] ?? '';
31
- for (const part of body.replace(/^,/, '').split(',')) {
32
- const eq = part.indexOf('=');
33
- if (eq <= 0)
34
- continue;
35
- params[part.slice(0, eq)] = part
36
- .slice(eq + 1)
37
- .replace(/&amp;/g, '&')
38
- .replace(/&#91;/g, '[')
39
- .replace(/&#93;/g, ']')
40
- .replace(/&#44;/g, ',');
41
- }
42
- const src = params.url || params.file;
43
- if (!src)
44
- return { raw: m[0], rendered: fallback };
45
- try {
46
- const desc = await recognizer(src);
47
- return { raw: m[0], rendered: desc ? `${successPrefix}${desc}${successSuffix}` : fallback };
48
- }
49
- catch {
50
- return { raw: m[0], rendered: fallback };
51
- }
52
- }));
53
- let out = text;
54
- for (const r of replacements)
55
- out = out.replace(r.raw, r.rendered);
56
- return out;
45
+ function stripNul(s) {
46
+ return s.includes('\u0000') ? s.split('\u0000').join('') : s;
47
+ }
48
+ /** CQ 字符串里 [CQ:<cqType>,...] 段交给收集器(登记任务或落占位符)。 */
49
+ function replaceCqMedia(text, cqType, kind, collect) {
50
+ return text.replace(new RegExp(`\\[CQ:${cqType}(,[^\\]]+)?\\]`, 'g'), (_m, body) => {
51
+ const params = parseCqParams(body ?? '');
52
+ return collect(kind, params.url || params.file);
53
+ });
57
54
  }
58
- /** 渲染一个节点 content(消息段数组或 CQ 字符串)为纯文本,并把图片换成识别后描述。 */
59
- async function renderNodeContent(content, opts) {
55
+ /**
56
+ * 渲染一个节点 content(消息段数组或 CQ 字符串)为纯文本。
57
+ * 媒体段(图片/语音/视频)经收集器登记为待识别任务并放 token——本函数是纯结构渲染,
58
+ * 不发生任何网络/模型等待,保证 walk 快速完成、媒体源被尽早收集。
59
+ */
60
+ function renderNodeContent(content, collect) {
60
61
  if (typeof content === 'string') {
61
- // CQ 码字符串:用正则替换 image / face / at / reply
62
- let out = content;
63
- if (opts.imageRecognitionEnabled && opts.recognizeImage) {
64
- // [CQ:image,file=...,url=...]
65
- const matches = [...out.matchAll(/\[CQ:image,([^\]]+)\]/g)];
66
- const replacements = await Promise.all(matches.map(async (m) => {
67
- const params = {};
68
- for (const part of m[1].split(',')) {
69
- const eq = part.indexOf('=');
70
- if (eq <= 0)
71
- continue;
72
- params[part.slice(0, eq)] = part
73
- .slice(eq + 1)
74
- .replace(/&amp;/g, '&')
75
- .replace(/&#91;/g, '[')
76
- .replace(/&#93;/g, ']')
77
- .replace(/&#44;/g, ',');
78
- }
79
- const src = params.url || params.file;
80
- if (!src)
81
- return { raw: m[0], rendered: '[图片]' };
82
- try {
83
- const desc = await opts.recognizeImage(src);
84
- return { raw: m[0], rendered: desc ? `[图片: ${desc}]` : '[图片]' };
85
- }
86
- catch {
87
- return { raw: m[0], rendered: '[图片]' };
88
- }
89
- }));
90
- for (const r of replacements)
91
- out = out.replace(r.raw, r.rendered);
92
- }
93
- else {
94
- out = out.replace(/\[CQ:image[^\]]*\]/g, '[图片]');
95
- }
96
- // record / video CQ 段:参数里取 url/file,调对应识别回调
97
- out = await replaceCqWithRecognizer(out, 'record', '[语音]', '[语音: ', ']', opts.audioRecognitionEnabled !== false ? opts.recognizeAudio : undefined);
98
- out = await replaceCqWithRecognizer(out, 'video', '[视频]', '[视频: ', ']', opts.videoRecognitionEnabled !== false ? opts.recognizeVideo : undefined);
62
+ // CQ 码字符串:用正则替换 image / record / video / face / at / reply
63
+ let out = replaceCqMedia(stripNul(content), 'image', 'image', collect);
64
+ out = replaceCqMedia(out, 'record', 'audio', collect);
65
+ out = replaceCqMedia(out, 'video', 'video', collect);
99
66
  return out
100
67
  .replace(/\[CQ:face,[^\]]*id=(\d+)[^\]]*\]/g, '[表情:$1]')
101
68
  .replace(/\[CQ:at,[^\]]*qq=([^,\]]+)[^\]]*\]/g, '<at id="$1">$1</at>')
@@ -112,70 +79,33 @@ async function renderNodeContent(content, opts) {
112
79
  const data = s.data ?? {};
113
80
  switch (s.type) {
114
81
  case 'text':
115
- parts.push(String(data.text ?? ''));
82
+ parts.push(stripNul(String(data.text ?? '')));
116
83
  break;
117
- case 'at':
118
- parts.push(data.qq === 'all' ? '<at>all</at>' : `<at id="${String(data.qq ?? '')}">${String(data.qq ?? '')}</at>`);
84
+ case 'at': {
85
+ const qq = stripNul(String(data.qq ?? ''));
86
+ parts.push(data.qq === 'all' ? '<at>all</at>' : `<at id="${qq}">${qq}</at>`);
119
87
  break;
88
+ }
120
89
  case 'face':
121
- parts.push(`[表情:${String(data.id ?? '')}]`);
90
+ parts.push(`[表情:${stripNul(String(data.id ?? ''))}]`);
122
91
  break;
123
- case 'image': {
124
- const src = (data.url ?? data.file);
125
- if (opts.imageRecognitionEnabled && opts.recognizeImage && src) {
126
- try {
127
- const desc = await opts.recognizeImage(src);
128
- parts.push(desc ? `[图片: ${desc}]` : '[图片]');
129
- }
130
- catch {
131
- parts.push('[图片]');
132
- }
133
- }
134
- else {
135
- parts.push('[图片]');
136
- }
92
+ case 'image':
93
+ parts.push(collect('image', (data.url ?? data.file)));
137
94
  break;
138
- }
139
95
  case 'reply':
140
96
  break;
141
97
  case 'forward':
142
98
  // 嵌套占位符,递归展开会在外层处理;这里先放标记,外层 expand 用 inline content 优先
143
99
  parts.push(data.id ? `<<<NESTED_FORWARD:${String(data.id)}>>>` : '[合并转发]');
144
100
  break;
145
- case 'record': {
146
- const src = (data.url ?? data.file);
147
- if (opts.audioRecognitionEnabled !== false && opts.recognizeAudio && src) {
148
- try {
149
- const text = await opts.recognizeAudio(src);
150
- parts.push(text ? `[语音: ${text}]` : '[语音]');
151
- }
152
- catch {
153
- parts.push('[语音]');
154
- }
155
- }
156
- else {
157
- parts.push('[语音]');
158
- }
101
+ case 'record':
102
+ parts.push(collect('audio', (data.url ?? data.file)));
159
103
  break;
160
- }
161
- case 'video': {
162
- const src = (data.url ?? data.file);
163
- if (opts.videoRecognitionEnabled !== false && opts.recognizeVideo && src) {
164
- try {
165
- const text = await opts.recognizeVideo(src);
166
- parts.push(text ? `[视频: ${text}]` : '[视频]');
167
- }
168
- catch {
169
- parts.push('[视频]');
170
- }
171
- }
172
- else {
173
- parts.push('[视频]');
174
- }
104
+ case 'video':
105
+ parts.push(collect('video', (data.url ?? data.file)));
175
106
  break;
176
- }
177
107
  case 'share':
178
- parts.push(`[分享:${String(data.title ?? '')}]`);
108
+ parts.push(`[分享:${stripNul(String(data.title ?? ''))}]`);
179
109
  break;
180
110
  case 'json':
181
111
  parts.push('[JSON卡片]');
@@ -185,7 +115,7 @@ async function renderNodeContent(content, opts) {
185
115
  break;
186
116
  default:
187
117
  if (s.type)
188
- parts.push(`[${s.type}]`);
118
+ parts.push(`[${stripNul(s.type)}]`);
189
119
  }
190
120
  }
191
121
  return parts.join('');
@@ -201,7 +131,7 @@ function extractNodeMeta(item) {
201
131
  const node = item && typeof item === 'object' ? item : {};
202
132
  const data = (node.type === 'node' && node.data && typeof node.data === 'object' ? node.data : node);
203
133
  const sender = (node.sender && typeof node.sender === 'object' ? node.sender : undefined);
204
- const nickname = String(data.nickname ?? sender?.nickname ?? data.name ?? data.user_id ?? sender?.user_id ?? '匿名');
134
+ const nickname = stripNul(String(data.nickname ?? sender?.nickname ?? data.name ?? data.user_id ?? sender?.user_id ?? '匿名'));
205
135
  const userIdRaw = data.user_id ?? data.uin ?? sender?.user_id;
206
136
  const userId = userIdRaw != null ? String(userIdRaw) : undefined;
207
137
  const content = data.content ?? node.content ?? data.message ?? node.message;
@@ -235,6 +165,20 @@ export async function expandForward(topId, topNodes, opts) {
235
165
  let truncatedDepth = false;
236
166
  let truncatedNodes = false;
237
167
  let topCount = 0;
168
+ // 媒体两阶段:walk 只登记任务放 token,遍历完成后统一交 resolveMedia 再回填。
169
+ const tasks = [];
170
+ const kindEnabled = {
171
+ image: opts.imageRecognitionEnabled && !!opts.resolveMedia,
172
+ audio: opts.audioRecognitionEnabled !== false && !!opts.resolveMedia,
173
+ video: opts.videoRecognitionEnabled !== false && !!opts.resolveMedia,
174
+ };
175
+ const collect = (kind, src) => {
176
+ if (!src || !kindEnabled[kind])
177
+ return MEDIA_LABEL[kind].placeholder;
178
+ const token = `\u0000M${tasks.length}\u0000`;
179
+ tasks.push({ token, kind, src });
180
+ return token;
181
+ };
238
182
  async function walk(id, nodesInput, depth) {
239
183
  if (depth > opts.maxDepth) {
240
184
  truncatedDepth = true;
@@ -267,7 +211,7 @@ export async function expandForward(topId, topNodes, opts) {
267
211
  else {
268
212
  participants.set(meta.nickname, meta.nickname);
269
213
  }
270
- const rendered = await renderNodeContent(meta.content, opts);
214
+ const rendered = renderNodeContent(meta.content, collect);
271
215
  lines.push({
272
216
  depth,
273
217
  index: i + 1,
@@ -291,6 +235,37 @@ export async function expandForward(topId, topNodes, opts) {
291
235
  }
292
236
  }
293
237
  await walk(topId, topNodes, 1);
238
+ // 媒体解析回填:遍历已完成、全部任务在手,一次性交给注入方(下载先行、识别受限并发)。
239
+ // resolveMedia 整体失败按「全部未识别」处理,占位符兜底,不让展开本身失败。
240
+ if (tasks.length > 0) {
241
+ let resolved = new Map();
242
+ if (opts.resolveMedia) {
243
+ try {
244
+ // 返回值形态失约(非 Map)与抛错同罪同罚:占位符兜底,不让展开失败
245
+ const r = await opts.resolveMedia(tasks);
246
+ if (r instanceof Map)
247
+ resolved = r;
248
+ }
249
+ catch {
250
+ resolved = new Map();
251
+ }
252
+ }
253
+ const byToken = new Map(tasks.map(t => [t.token, t]));
254
+ // biome-ignore lint/suspicious/noControlCharactersInRegex: NUL 是刻意选的 token 哨兵;输入文本已在渲染时剥 NUL,仅我方 token 含之
255
+ const tokenRe = /\u0000M\d+\u0000/g;
256
+ for (const ln of lines) {
257
+ if (!ln.text.includes('\u0000'))
258
+ continue;
259
+ ln.text = ln.text.replace(tokenRe, tok => {
260
+ const task = byToken.get(tok);
261
+ if (!task)
262
+ return '';
263
+ const desc = resolved.get(tok)?.trim();
264
+ const label = MEDIA_LABEL[task.kind];
265
+ return desc ? `${label.prefix}${desc}${label.suffix}` : label.placeholder;
266
+ });
267
+ }
268
+ }
294
269
  // 拼接 fullText
295
270
  const indent = (d) => ' '.repeat(Math.max(0, d - 1));
296
271
  const fullLines = lines.map(ln => {
@@ -1 +1 @@
1
- {"version":3,"file":"forward.js","sourceRoot":"","sources":["../src/forward.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"forward.js","sourceRoot":"","sources":["../src/forward.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -10,6 +10,16 @@ export declare const inject: {
10
10
  export declare const provides: string[];
11
11
  export declare const reusable = true;
12
12
  export declare const configSchema: ConfigSchema;
13
+ /**
14
+ * 结清全部在飞 action:清定时器、reject 唤醒等待方、清账。返回结清条数。
15
+ * ws 断开与插件拆卸两条清理路共用——只清定时器不 reject 会让等待方的 promise
16
+ * 永久悬空(bounce 瞬间在飞的 get_forward_msg/get_msg 静默丢失、闭包泄漏)。
17
+ * @internal 导出仅为让对称性可被直接断言。
18
+ */
19
+ export declare function settlePendingActions(pendingActions: Map<string, {
20
+ reject: (err: Error) => void;
21
+ timer: ReturnType<typeof setTimeout>;
22
+ }>, reason: string): number;
13
23
  /**
14
24
  * 撤回通知文案(纯函数,供单测)。
15
25
  *
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAgEzD,eAAO,MAAM,IAAI,iCAAiC,CAAC;AACnD,eAAO,MAAM,WAAW,8BAAe,CAAC;AACxC,eAAO,MAAM,SAAS,aAAa,CAAC;AACpC,eAAO,MAAM,MAAM;;;CAGlB,CAAC;AACF,eAAO,MAAM,QAAQ,UAAe,CAAC;AACrC,eAAO,MAAM,QAAQ,OAAO,CAAC;AAE7B,eAAO,MAAM,YAAY,EAAE,YA0J1B,CAAC;AA8CF;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE;IAC7C,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACnD,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,GAAG,MAAM,CAoBT;AAmKD;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAyEvF;AA8BD,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAyuDzE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AA6DzD,eAAO,MAAM,IAAI,iCAAiC,CAAC;AACnD,eAAO,MAAM,WAAW,8BAAe,CAAC;AACxC,eAAO,MAAM,SAAS,aAAa,CAAC;AACpC,eAAO,MAAM,MAAM;;;CAGlB,CAAC;AACF,eAAO,MAAM,QAAQ,UAAe,CAAC;AACrC,eAAO,MAAM,QAAQ,OAAO,CAAC;AAE7B,eAAO,MAAM,YAAY,EAAE,YAoK1B,CAAC;AAyBF;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE;IAAE,MAAM,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC;IAAC,KAAK,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,CAAA;CAAE,CAAC,EACnG,MAAM,EAAE,MAAM,GACb,MAAM,CAQR;AAuBD;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE;IAC7C,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACnD,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,GAAG,MAAM,CAoBT;AAqID;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAyEvF;AA8BD,wBAAgB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAquDzE"}
package/dist/index.js CHANGED
@@ -3,7 +3,7 @@ import { createStorageGateway } from '@aalis/api-storage';
3
3
  import { AttachmentRefKind, formatAttachmentRef, getSenderLabel, WellKnownNoticeTypes, } from '@aalis/schema-message';
4
4
  import { truncateChars } from '@aalis/util-text-normalize';
5
5
  import WebSocket from 'ws';
6
- import { cacheAttachmentBuffer, detectExtensionFromBuffer, loadAttachmentBuffer, transcodeAudioBufferToWav, } from './attachment-cache.js';
6
+ import { cacheOneAttachment } from './attachment-cache.js';
7
7
  import { renderAttachmentsAsContentMarkers } from './attachments.js';
8
8
  import { createForwardExpander, DEFAULT_FORWARD_SUMMARY_PROMPT } from './forward-expand.js';
9
9
  import { extractSentMessageId, SentMessageTracker } from './sent-messages.js';
@@ -22,6 +22,7 @@ function parseForwardConfig(config) {
22
22
  imageRecognitionConcurrency: typeof fwdRaw.imageRecognitionConcurrency === 'number'
23
23
  ? Math.max(1, Math.floor(fwdRaw.imageRecognitionConcurrency))
24
24
  : 8,
25
+ recognitionMaxItems: typeof fwdRaw.recognitionMaxItems === 'number' ? Math.max(0, Math.floor(fwdRaw.recognitionMaxItems)) : 32,
25
26
  summarize: fwdRaw.summarize !== false,
26
27
  summaryLLM: fwdRaw.summaryLLM &&
27
28
  typeof fwdRaw.summaryLLM === 'object' &&
@@ -137,9 +138,17 @@ export const configSchema = {
137
138
  },
138
139
  imageRecognitionConcurrency: {
139
140
  type: 'number',
140
- label: '图片识别并发上限',
141
+ label: '媒体识别并发上限',
141
142
  default: 8,
142
- description: '同一条合并转发内允许同时进行的图片识别任务数。过高可能压垮上游模型;过低会拖慢长转发展开。',
143
+ description: '单条消息的转发展开内允许同时进行的媒体识别(图片/语音/视频)任务数。' +
144
+ '本地模型部署建议设 1-2:转发批量识别是后台工作,低并发能减少对实时入站识别的挤占' +
145
+ '(注意这是统计性缓解,不是优先级调度——多条消息各有各的并发额度,模型侧也无插队机制)。',
146
+ },
147
+ recognitionMaxItems: {
148
+ type: 'number',
149
+ label: '单条转发媒体识别上限',
150
+ default: 32,
151
+ description: '单条合并转发内最多识别多少个媒体(图片/语音/视频合计);超出的以 [图片] 等占位符保留,不再消耗模型算力。设为 0 表示不限。',
143
152
  },
144
153
  summarize: {
145
154
  type: 'boolean',
@@ -197,6 +206,21 @@ export const configSchema = {
197
206
  },
198
207
  },
199
208
  };
209
+ /**
210
+ * 结清全部在飞 action:清定时器、reject 唤醒等待方、清账。返回结清条数。
211
+ * ws 断开与插件拆卸两条清理路共用——只清定时器不 reject 会让等待方的 promise
212
+ * 永久悬空(bounce 瞬间在飞的 get_forward_msg/get_msg 静默丢失、闭包泄漏)。
213
+ * @internal 导出仅为让对称性可被直接断言。
214
+ */
215
+ export function settlePendingActions(pendingActions, reason) {
216
+ const n = pendingActions.size;
217
+ for (const [, pending] of pendingActions) {
218
+ clearTimeout(pending.timer);
219
+ pending.reject(new Error(reason));
220
+ }
221
+ pendingActions.clear();
222
+ return n;
223
+ }
200
224
  // ===== 聊天流控类型(已迁移)=====
201
225
  //
202
226
  // 旧的 ChatFlowConfig / FlowSessionState / 流控函数已抽出到独立插件:
@@ -290,28 +314,6 @@ const KIND_PLACEHOLDER = {
290
314
  video: { placeholder: '[视频]', ref: AttachmentRefKind.Video },
291
315
  file: { placeholder: '[文件]', ref: AttachmentRefKind.File },
292
316
  };
293
- /**
294
- * 把单个附件下载(必要时转码)后落盘,返回相对路径。失败返回 null。
295
- * - audio:先 ffmpeg → 16kHz mono WAV,再以 .wav 入库(用户期望转码后存储,
296
- * 方便后续 LLM 反复分析;同时避免下游每次重转码)。
297
- * - 其他 kind:原样落盘,扩展名按 magic header 推断。
298
- */
299
- async function cacheOneAttachment(storage, proc, kind, source, sessionId, maxBytes, logger) {
300
- const buf = await loadAttachmentBuffer(storage, proc, source, maxBytes);
301
- if (!buf)
302
- return null;
303
- if (kind === 'audio') {
304
- const inExt = detectExtensionFromBuffer(buf, 'bin');
305
- const wav = await transcodeAudioBufferToWav(proc, storage, buf, inExt);
306
- if (!wav) {
307
- logger.warn(`OneBot 音频转 WAV 失败 (in=${inExt}, size=${buf.byteLength}B),保留原 URL`);
308
- return null;
309
- }
310
- return await cacheAttachmentBuffer(storage, wav, 'audio', sessionId, 'wav', maxBytes);
311
- }
312
- const ext = detectExtensionFromBuffer(buf, kind === 'image' ? 'jpg' : kind === 'video' ? 'mp4' : 'bin');
313
- return await cacheAttachmentBuffer(storage, buf, kind, sessionId, ext, maxBytes);
314
- }
315
317
  /**
316
318
  * 把 text 中所有 [图片]/[语音]/[视频]/[文件] 占位按 attachments 顺序替换为
317
319
  * `[xxx | ref:data/...]`。落盘失败的占位保持原样。
@@ -795,7 +797,7 @@ export function apply(ctx, config) {
795
797
  // 2. 嵌套合并转发:展开为信封 + 摘要(命中现有 forward 缓存即零开销)
796
798
  if (content.includes('<forward id=')) {
797
799
  try {
798
- content = await expandForwardsInText(state, content, segments);
800
+ content = await expandForwardsInText(state, content, segments, sessionId ?? 'onebot:unknown');
799
801
  }
800
802
  catch (err) {
801
803
  ctx.logger.debug(`引用消息中的合并转发展开失败: ${err}`);
@@ -840,6 +842,7 @@ export function apply(ctx, config) {
840
842
  const forwardExpander = createForwardExpander({
841
843
  ctx,
842
844
  forwardCfg,
845
+ attachmentMaxBytes,
843
846
  sendAction,
844
847
  });
845
848
  const { getCachedForward, setCachedForward, loadPersistedForward, fetchForwardOnce, expandForwardsInText } = forwardExpander;
@@ -1259,11 +1262,7 @@ export function apply(ctx, config) {
1259
1262
  state.status = 'offline';
1260
1263
  state.ws = undefined;
1261
1264
  stopHeartbeat(state);
1262
- for (const [, pending] of state.pendingActions) {
1263
- clearTimeout(pending.timer);
1264
- pending.reject(new Error('连接已关闭'));
1265
- }
1266
- state.pendingActions.clear();
1265
+ settlePendingActions(state.pendingActions, '连接已关闭');
1267
1266
  ctx.logger.warn(`OneBot 连接断开: ${state.config.url},${RECONNECT_INTERVAL / 1000}s 后重连`);
1268
1267
  scheduleReconnect(state);
1269
1268
  });
@@ -1429,7 +1428,7 @@ export function apply(ctx, config) {
1429
1428
  // 这样 LLM 不必再调用工具,且展开后的内容会随 inbound:message 进入历史归档。
1430
1429
  if (event.text.includes('<forward id=')) {
1431
1430
  try {
1432
- event.text = await expandForwardsInText(state, event.text, event.message);
1431
+ event.text = await expandForwardsInText(state, event.text, event.message, sessionId);
1433
1432
  }
1434
1433
  catch (err) {
1435
1434
  ctx.logger.debug(`合并转发自动展开失败: ${err}`);
@@ -1709,15 +1708,15 @@ export function apply(ctx, config) {
1709
1708
  const opNick = isGroup ? await resolveNickname(state, operatorId, notice.groupId) : undefined;
1710
1709
  const userLabel = userNick ? `${userNick}(${notice.userId})` : (notice.userId ?? '某人');
1711
1710
  const opLabel = opNick ? `${opNick}(${operatorId})` : operatorId;
1712
- // 反查被撤回的归档原文:入站消息归档时带 metadata.messageId(archive:meta.messageId),
1713
- // 撤回多发生在发送后几分钟内,findByMessageId 默认 100 条扫描窗足够。
1711
+ // 反查被撤回的归档原文:入站消息归档时带 metadata.messageId(archive:meta.messageId)。
1712
+ // 显式传 500 条扫描窗(活跃群百条几分钟即滚过,撤回常发生在更久之后)。
1714
1713
  // 查不到(未归档/超窗)或反查抛错都退回旧文案,不阻塞通知入档。
1715
1714
  let original;
1716
1715
  if (messageId) {
1717
1716
  try {
1718
1717
  const found = await ctx
1719
1718
  .getService('message-archive')
1720
- ?.findByMessageId?.(sessionId, messageId);
1719
+ ?.findByMessageId?.(sessionId, messageId, 500);
1721
1720
  if (found && typeof found.content === 'string' && found.content) {
1722
1721
  original = { content: found.content, timestamp: found.timestamp };
1723
1722
  }
@@ -2015,9 +2014,9 @@ export function apply(ctx, config) {
2015
2014
  state.ws.close();
2016
2015
  }
2017
2016
  }
2018
- for (const [, pending] of state.pendingActions) {
2019
- clearTimeout(pending.timer);
2020
- }
2017
+ const settled = settlePendingActions(state.pendingActions, '适配器已停止');
2018
+ if (settled > 0)
2019
+ ctx.logger.debug(`适配器停止:拒绝 ${settled} 个在飞 action`);
2021
2020
  }
2022
2021
  states.length = 0;
2023
2022
  });