@aalis/plugin-image-sender 0.8.0 → 0.9.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/README.md +4 -0
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +73 -70
- package/dist/index.js.map +1 -1
- package/package.json +10 -9
- package/dist/media-signature.d.ts +0 -13
- package/dist/media-signature.d.ts.map +0 -1
- package/dist/media-signature.js +0 -154
- package/dist/media-signature.js.map +0 -1
package/README.md
CHANGED
package/dist/index.d.ts
CHANGED
|
@@ -3,10 +3,10 @@ declare const _default: import("@aalis/core").PluginDefinition<{
|
|
|
3
3
|
tools: import("@aalis/core").OptionalUse<import("@aalis/api-tools").ToolService, import("@aalis/api-tools").BoundTools>;
|
|
4
4
|
events: import("@aalis/core").ServiceDescriptor<(identity: symbol) => import("@aalis/core").Events, import("@aalis/core").Events>;
|
|
5
5
|
logger: import("@aalis/core").ServiceDescriptor<(identity: symbol) => import("@aalis/core").Logger, import("@aalis/core").Logger>;
|
|
6
|
-
storage: import("@aalis/core").OptionalUse<StorageService, import("@aalis/
|
|
7
|
-
media: import("@aalis/core").OptionalUse<import("@aalis/api-media").MediaService, import("@aalis/
|
|
8
|
-
memory: import("@aalis/core").OptionalUse<import("@aalis/api-memory").MemoryService, import("@aalis/
|
|
9
|
-
archive: import("@aalis/core").OptionalUse<import("@aalis/api-message-archive").MessageArchiveService, import("@aalis/
|
|
6
|
+
storage: import("@aalis/core").OptionalUse<StorageService, import("@aalis/api-storage").BoundStorage>;
|
|
7
|
+
media: import("@aalis/core").OptionalUse<import("@aalis/api-media").MediaService, import("@aalis/api-media").MediaService>;
|
|
8
|
+
memory: import("@aalis/core").OptionalUse<import("@aalis/api-memory").MemoryService, import("@aalis/api-memory").MemoryService>;
|
|
9
|
+
archive: import("@aalis/core").OptionalUse<import("@aalis/api-message-archive").MessageArchiveService, import("@aalis/api-message-archive").MessageArchiveService>;
|
|
10
10
|
}>;
|
|
11
11
|
export default _default;
|
|
12
12
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAkBA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAmC,KAAK,cAAc,EAAyB,MAAM,oBAAoB,CAAC;;;;;;;;;;AAwCjH,wBAMG"}
|
package/dist/index.js
CHANGED
|
@@ -8,18 +8,18 @@
|
|
|
8
8
|
// 发过的图/视频"能被 memory_recall 召回
|
|
9
9
|
//
|
|
10
10
|
// send_attachment 来源:url / storage_uri / history_ref(不接受裸本地路径);
|
|
11
|
-
// 取自存储库的文件发送前读文件头核对格式(见 media-signature
|
|
11
|
+
// 取自存储库的文件发送前读文件头核对格式(见 @aalis/util-media-signature)。
|
|
12
12
|
// 此插件不直接调用平台 API,而是 emit `outbound:message`(含 attachments[]);
|
|
13
13
|
// 由各 platform adapter(OneBot / WebUI)按自身能力处理结构化附件。
|
|
14
14
|
// ============================================================
|
|
15
15
|
import { media } from '@aalis/api-media';
|
|
16
16
|
import { memory } from '@aalis/api-memory';
|
|
17
17
|
import { messageArchive } from '@aalis/api-message-archive';
|
|
18
|
-
import {
|
|
18
|
+
import { isStorageNotFound, isStorageUri, storage, toStorageUri } from '@aalis/api-storage';
|
|
19
19
|
import { tools } from '@aalis/api-tools';
|
|
20
20
|
import { definePlugin, events, logger, optional } from '@aalis/core';
|
|
21
|
-
import {
|
|
22
|
-
import { checkMediaHead, MEDIA_HEAD_BYTES } from '
|
|
21
|
+
import { awaitDelivery, outboundMediaMessage, WellKnownMetadataKeys, } from '@aalis/schema-message';
|
|
22
|
+
import { checkMediaHead, MEDIA_HEAD_BYTES } from '@aalis/util-media-signature';
|
|
23
23
|
/** preview_image 单张候选识别等待上限。preview 的目的就是"看清"图,
|
|
24
24
|
* 本地视觉模型(如 33B)单图常需 15-25s,必须给足预算,否则必然超时使 preview 形同虚设。 */
|
|
25
25
|
const PREVIEW_TIMEOUT_MS = 25_000;
|
|
@@ -29,9 +29,7 @@ const ARCHIVE_DESCRIBE_TIMEOUT_MS = 25_000;
|
|
|
29
29
|
const VIDEO_DESCRIBE_TIMEOUT_MS = 30_000;
|
|
30
30
|
/** preview_image 单次允许的候选数量上限。 */
|
|
31
31
|
const PREVIEW_MAX_CANDIDATES = 8;
|
|
32
|
-
|
|
33
|
-
const HOST_ABSOLUTE_PATH = /^(?:\/|[a-zA-Z]:[\\/])/;
|
|
34
|
-
// tools 不入激活闸:出站附件归档(outbound:message 监听)只靠 archive / media,
|
|
32
|
+
// tools 不入激活闸:出站附件归档(outbound:delivered 监听)只靠 archive / media,
|
|
35
33
|
// 没有工具服务时也该照常挂上;工具登记走注册账本,提供者上线后自动补挂。
|
|
36
34
|
const uses = {
|
|
37
35
|
tools: optional(tools),
|
|
@@ -51,10 +49,10 @@ export default definePlugin({
|
|
|
51
49
|
});
|
|
52
50
|
function registerImageSender(caps) {
|
|
53
51
|
const { tools, events, logger, media, memory, archive } = caps;
|
|
54
|
-
const storage =
|
|
55
|
-
//
|
|
56
|
-
//
|
|
57
|
-
//
|
|
52
|
+
const storage = caps.storage.use;
|
|
53
|
+
// 核对存储库内的文件能否按 kind 发送:只读文件头,按 kind 核对格式,不符拒发(存储根里还有配置、令牌、
|
|
54
|
+
// 记忆库等非媒体文件)。放行的交出 storage URI,送达形态由平台适配器决定:onebot 读回内容内联,超过内联上限
|
|
55
|
+
// 时再核对一次文件头才交宿主路径;预先换成 file:// 的话,适配器落不了盘的大文件只能原样透传、无从核对
|
|
58
56
|
async function loadStorageMedia(uri, kind) {
|
|
59
57
|
let head;
|
|
60
58
|
try {
|
|
@@ -68,13 +66,12 @@ function registerImageSender(caps) {
|
|
|
68
66
|
const rejection = checkMediaHead(head, kind);
|
|
69
67
|
if (rejection)
|
|
70
68
|
return { ok: false, error: rejection };
|
|
71
|
-
|
|
72
|
-
return { ok: true, data: local ? `file://${local}` : uri };
|
|
69
|
+
return { ok: true, data: uri };
|
|
73
70
|
}
|
|
74
71
|
// ── preview_image ─────────────────────────────────────────────────────────
|
|
75
72
|
// 识别全靠 media:media 在场才挂,离场即撤(follow 在 media 上线 / 换人时各调一次,
|
|
76
73
|
// 返回的退订函数即清理),media 缺席的部署里 agent 看不到这个用不了的工具。
|
|
77
|
-
media.follow(service => tools.register({
|
|
74
|
+
media.follow(service => tools.use.register({
|
|
78
75
|
definition: {
|
|
79
76
|
type: 'function',
|
|
80
77
|
function: {
|
|
@@ -136,7 +133,7 @@ function registerImageSender(caps) {
|
|
|
136
133
|
},
|
|
137
134
|
}));
|
|
138
135
|
// ── send_attachment ───────────────────────────────────────────────────────
|
|
139
|
-
tools.register({
|
|
136
|
+
tools.use.register({
|
|
140
137
|
definition: {
|
|
141
138
|
type: 'function',
|
|
142
139
|
function: {
|
|
@@ -146,9 +143,10 @@ function registerImageSender(caps) {
|
|
|
146
143
|
'kind 必填,指定附件类型;来源三选一:\n' +
|
|
147
144
|
' - url:网络资源 URL(http/https)。\n' +
|
|
148
145
|
' - storage_uri:存储库内的资源 URI(如 data:/images/xxx)。\n' +
|
|
149
|
-
' - history_ref:历史消息中已识别的引用([
|
|
146
|
+
' - history_ref:历史消息中已识别的引用([图片/音频/视频: ... | ref:xxx] 中 xxx 部分),\n' +
|
|
150
147
|
' 用于"把之前那条媒体重发/转发回去"。\n' +
|
|
151
148
|
'建议流程(图片):search_images 拿候选 URL →(有 preview_image 时可先看清内容)→ send_attachment 选其一发出。\n' +
|
|
149
|
+
'只有返回 ok:true 才能说已发送;返回 error 时没有成功确认,下载失败可改选另一张图片,不要反复重发同一失效地址。\n' +
|
|
152
150
|
'若想重发自己之前发过的媒体,先用 memory_recall 按描述检索历史,从命中消息里找到 ref 再传 history_ref。\n' +
|
|
153
151
|
'注意:本工具不发送任何文字。如需配文,请把文字写在你本轮最终输出的 message 字段里——' +
|
|
154
152
|
'不要在 message 中重复媒体描述。',
|
|
@@ -194,7 +192,11 @@ function registerImageSender(caps) {
|
|
|
194
192
|
else if (storageUri) {
|
|
195
193
|
// 归一化:归档给 agent 的 ref 是历史相对路径 `data/images/...`(无冒号),
|
|
196
194
|
// 而 storage 消费需要 storage URI `data:/images/...`。漏这步就是「图明明在却报找不到」。
|
|
197
|
-
const
|
|
195
|
+
const uri = storeUriOf(storageUri);
|
|
196
|
+
if (!uri) {
|
|
197
|
+
return JSON.stringify({ error: 'storage_uri 要写存储地址(如 data:/images/…),不能写本机路径' });
|
|
198
|
+
}
|
|
199
|
+
const loaded = await loadStorageMedia(uri, kind);
|
|
198
200
|
if (!loaded.ok)
|
|
199
201
|
return JSON.stringify({ error: loaded.error });
|
|
200
202
|
data = loaded.data;
|
|
@@ -210,10 +212,10 @@ function registerImageSender(caps) {
|
|
|
210
212
|
data = found;
|
|
211
213
|
}
|
|
212
214
|
else {
|
|
213
|
-
// 本地来源只认存储库内的文件:storage URI 或历史相对路径(data/images
|
|
215
|
+
// 本地来源只认存储库内的文件:storage URI 或历史相对路径(data/images/…)。本机路径、
|
|
214
216
|
// file://、data URI 等来源不在存储库内,读不了文件头,无从核对格式
|
|
215
|
-
const uri =
|
|
216
|
-
if (
|
|
217
|
+
const uri = storeUriOf(found);
|
|
218
|
+
if (!uri || !isStorageUri(uri)) {
|
|
217
219
|
return JSON.stringify({ error: `引用 ${historyRef} 的来源不在存储库内,无法核对格式,不能发送` });
|
|
218
220
|
}
|
|
219
221
|
const loaded = await loadStorageMedia(uri, kind);
|
|
@@ -227,25 +229,35 @@ function registerImageSender(caps) {
|
|
|
227
229
|
else {
|
|
228
230
|
return JSON.stringify({ error: '必须提供 url / storage_uri / history_ref 之一' });
|
|
229
231
|
}
|
|
230
|
-
//
|
|
231
|
-
//
|
|
232
|
-
// 描述改由全局出站归档监听器在后台计算(见下方 outbound:message 监听),
|
|
233
|
-
// 不阻塞发送,且用稳定 ref 规避平台落盘改写 data 的竞态。
|
|
232
|
+
// 等待传输确认,但不等 vision:描述由成功归档监听器在后台计算。
|
|
233
|
+
// 用稳定 ref 规避平台落盘改写 data 的竞态。
|
|
234
234
|
const attachment = {
|
|
235
235
|
kind,
|
|
236
236
|
data,
|
|
237
|
-
// 归档承载:ref
|
|
237
|
+
// 归档承载:ref 随事件携带,成功投递后才入档。
|
|
238
238
|
// history_ref 重发标记 skipArchive,避免重复入档 / 向量库膨胀。
|
|
239
239
|
ref: refTag ?? data,
|
|
240
240
|
skipArchive: via === 'history_ref',
|
|
241
241
|
};
|
|
242
242
|
const outgoing = {
|
|
243
243
|
sessionId: callCtx.sessionId,
|
|
244
|
+
platform: callCtx.platform,
|
|
244
245
|
content: '',
|
|
245
246
|
attachments: [attachment],
|
|
246
247
|
source: 'agent',
|
|
248
|
+
callId: callCtx.callId,
|
|
247
249
|
};
|
|
248
|
-
events.emit('outbound:message', outgoing);
|
|
250
|
+
await events.use.emit('outbound:message', outgoing);
|
|
251
|
+
if (!outgoing.delivery)
|
|
252
|
+
return JSON.stringify({ error: '没有目标适配器确认附件发送,请勿声称已发出' });
|
|
253
|
+
const result = await awaitDelivery(outgoing.delivery, callCtx.signal);
|
|
254
|
+
if (!result)
|
|
255
|
+
return JSON.stringify({ error: '附件仍在发送,结果未确认,请勿重发' });
|
|
256
|
+
if (!result.ok) {
|
|
257
|
+
return JSON.stringify({
|
|
258
|
+
error: result.unconfirmed ? '附件发送结果未知(可能已经送达),请勿重发' : result.error,
|
|
259
|
+
});
|
|
260
|
+
}
|
|
249
261
|
return JSON.stringify({ ok: true, sent: { kind, via, ref: refTag } });
|
|
250
262
|
}
|
|
251
263
|
catch (err) {
|
|
@@ -253,16 +265,16 @@ function registerImageSender(caps) {
|
|
|
253
265
|
}
|
|
254
266
|
},
|
|
255
267
|
});
|
|
256
|
-
logger.info('[image-sender] 工具 send_attachment 已注册(preview_image 随 media 在场注册)');
|
|
268
|
+
logger.use.info('[image-sender] 工具 send_attachment 已注册(preview_image 随 media 在场注册)');
|
|
257
269
|
// ── 出站附件归档:统一咽喉 ───────────────────────────────────────────────
|
|
258
|
-
//
|
|
270
|
+
// 只归档传输端确认后的附件,出站请求本身不代表发送成功。
|
|
259
271
|
// 与生产者(send_attachment 或将来任何直接 emit 附件的插件)和平台都解耦。
|
|
260
272
|
// 用 att.ref(生产者声明的稳定引用)而非 att.data 入档,避免 onebot 等适配器
|
|
261
|
-
// 落盘后改写 data 造成归档到不可访问路径;att.skipArchive
|
|
262
|
-
events.on('outbound:
|
|
273
|
+
// 落盘后改写 data 造成归档到不可访问路径;att.skipArchive 跳过已在档的(history_ref 重发、WebUI 收件箱已记下的)。
|
|
274
|
+
events.use.on('outbound:delivered', msg => {
|
|
263
275
|
if (msg.source !== 'agent' || !msg.attachments?.length)
|
|
264
276
|
return;
|
|
265
|
-
if (!archive.
|
|
277
|
+
if (!archive.present || typeof archive.use.saveMessage !== 'function')
|
|
266
278
|
return;
|
|
267
279
|
for (const att of msg.attachments) {
|
|
268
280
|
if (att.skipArchive)
|
|
@@ -291,7 +303,7 @@ async function safeDescribeMedia(caps, kind, data) {
|
|
|
291
303
|
}
|
|
292
304
|
/** 调 media.describeImage,超时或失败返回空串(不阻塞发送)。 */
|
|
293
305
|
async function safeDescribe(caps, imageData) {
|
|
294
|
-
const service = caps.media.
|
|
306
|
+
const service = caps.media.present ? caps.media.use : undefined;
|
|
295
307
|
if (!service?.describeImage)
|
|
296
308
|
return '';
|
|
297
309
|
try {
|
|
@@ -302,13 +314,13 @@ async function safeDescribe(caps, imageData) {
|
|
|
302
314
|
return (desc ?? '').trim();
|
|
303
315
|
}
|
|
304
316
|
catch (err) {
|
|
305
|
-
caps.logger.debug(`[image-sender] vision 失败,跳过描述: ${err instanceof Error ? err.message : err}`);
|
|
317
|
+
caps.logger.use.debug(`[image-sender] vision 失败,跳过描述: ${err instanceof Error ? err.message : err}`);
|
|
306
318
|
return '';
|
|
307
319
|
}
|
|
308
320
|
}
|
|
309
321
|
/** 调 media.describeVideo,超时或失败返回空串(视频抽帧耗时长,用更宽松的超时)。 */
|
|
310
322
|
async function safeDescribeVideo(caps, videoUrl) {
|
|
311
|
-
const service = caps.media.
|
|
323
|
+
const service = caps.media.present ? caps.media.use : undefined;
|
|
312
324
|
if (!service?.describeVideo)
|
|
313
325
|
return '';
|
|
314
326
|
try {
|
|
@@ -319,29 +331,20 @@ async function safeDescribeVideo(caps, videoUrl) {
|
|
|
319
331
|
return (desc ?? '').trim();
|
|
320
332
|
}
|
|
321
333
|
catch (err) {
|
|
322
|
-
caps.logger.debug(`[image-sender] video 描述失败,跳过: ${err instanceof Error ? err.message : err}`);
|
|
334
|
+
caps.logger.use.debug(`[image-sender] video 描述失败,跳过: ${err instanceof Error ? err.message : err}`);
|
|
323
335
|
return '';
|
|
324
336
|
}
|
|
325
337
|
}
|
|
326
338
|
/** 把 AI 自己发出的图/语音/视频入档为一条 assistant 消息,让 memory_recall 能找到。 */
|
|
327
339
|
async function archiveOutboundAttachment(caps, sessionId, ref, description, kind) {
|
|
328
|
-
const archive = caps.archive.
|
|
340
|
+
const archive = caps.archive.present ? caps.archive.use : undefined;
|
|
329
341
|
if (!archive?.saveMessage)
|
|
330
342
|
return;
|
|
331
|
-
const
|
|
332
|
-
const msgKind = kind === 'video'
|
|
333
|
-
? WellKnownKinds.OutboundVideo
|
|
334
|
-
: kind === 'audio'
|
|
335
|
-
? WellKnownKinds.OutboundAudio
|
|
336
|
-
: WellKnownKinds.OutboundImage;
|
|
337
|
-
const label = kind === 'video' ? '视频' : kind === 'audio' ? '语音' : '图片';
|
|
338
|
-
const tag = formatAttachmentRef({ kind: attachKind, desc: description, ref });
|
|
343
|
+
const label = kind === 'video' ? '视频' : kind === 'audio' ? '音频' : '图片';
|
|
339
344
|
const message = {
|
|
340
|
-
|
|
341
|
-
kind: msgKind,
|
|
342
|
-
content: tag,
|
|
345
|
+
...outboundMediaMessage(kind, ref, description),
|
|
343
346
|
timestamp: Date.now(),
|
|
344
|
-
metadata: {
|
|
347
|
+
metadata: { [WellKnownMetadataKeys.Source]: 'image-sender', [WellKnownMetadataKeys.SentRef]: ref },
|
|
345
348
|
};
|
|
346
349
|
try {
|
|
347
350
|
await archive.saveMessage(sessionId, message, {
|
|
@@ -349,7 +352,16 @@ async function archiveOutboundAttachment(caps, sessionId, ref, description, kind
|
|
|
349
352
|
});
|
|
350
353
|
}
|
|
351
354
|
catch (err) {
|
|
352
|
-
caps.logger.warn(`[image-sender] 入档失败: ${err instanceof Error ? err.message : err}`);
|
|
355
|
+
caps.logger.use.warn(`[image-sender] 入档失败: ${err instanceof Error ? err.message : err}`);
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
/** 输入对应的存储地址;本机路径(宿主机绝对路径与家目录简写)不是存储地址,没有。toStorageUri 只在遇到本机路径时抛错 */
|
|
359
|
+
function storeUriOf(input) {
|
|
360
|
+
try {
|
|
361
|
+
return toStorageUri(input);
|
|
362
|
+
}
|
|
363
|
+
catch {
|
|
364
|
+
return undefined;
|
|
353
365
|
}
|
|
354
366
|
}
|
|
355
367
|
/**
|
|
@@ -357,9 +369,9 @@ async function archiveOutboundAttachment(caps, sessionId, ref, description, kind
|
|
|
357
369
|
* 或历史附件里的原样数据串(能否发送由调用方判定)。
|
|
358
370
|
*/
|
|
359
371
|
async function resolveHistoryRef(memory, storage, sessionId, ref) {
|
|
360
|
-
|
|
361
|
-
if (!service)
|
|
372
|
+
if (!memory.present)
|
|
362
373
|
return null;
|
|
374
|
+
const service = memory.use;
|
|
363
375
|
const history = service.getFullHistory
|
|
364
376
|
? await service.getFullHistory(sessionId, 200)
|
|
365
377
|
: await service.getHistory(sessionId, 200);
|
|
@@ -371,13 +383,16 @@ async function resolveHistoryRef(memory, storage, sessionId, ref) {
|
|
|
371
383
|
// storage URI / 历史相对路径:归一化后 stat;命中即用,未命中 fallthrough 到子串匹配。
|
|
372
384
|
// 完整相对路径 `data/images/x.jpg` → `data:/images/x.jpg` 能直接命中;
|
|
373
385
|
// 单段 hash(如 `abc123.jpg`)归一化成 `data:/abc123.jpg` stat 失败,正确回落子串匹配。
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
386
|
+
// 本机路径不是存储地址,直接走子串匹配
|
|
387
|
+
const asUri = storeUriOf(normalized);
|
|
388
|
+
if (asUri) {
|
|
389
|
+
try {
|
|
390
|
+
await storage.stat(asUri);
|
|
391
|
+
return asUri;
|
|
392
|
+
}
|
|
393
|
+
catch {
|
|
394
|
+
// fallthrough 到历史子串匹配
|
|
395
|
+
}
|
|
381
396
|
}
|
|
382
397
|
// 回退:搜历史里 images / attachments 数组里包含 normalized 子串的项
|
|
383
398
|
for (const msg of history) {
|
|
@@ -397,16 +412,4 @@ async function resolveHistoryRef(memory, storage, sessionId, ref) {
|
|
|
397
412
|
}
|
|
398
413
|
return null;
|
|
399
414
|
}
|
|
400
|
-
/** 如果 storage 支持 resolveLocalPath,则解析为本地绝对路径供下游 file:// 直链使用。 */
|
|
401
|
-
async function tryResolveLocal(storage, uri) {
|
|
402
|
-
if (typeof storage.resolveLocalPath !== 'function')
|
|
403
|
-
return null;
|
|
404
|
-
try {
|
|
405
|
-
const p = await storage.resolveLocalPath(uri, 'read');
|
|
406
|
-
return p ?? null;
|
|
407
|
-
}
|
|
408
|
-
catch {
|
|
409
|
-
return null;
|
|
410
|
-
}
|
|
411
|
-
}
|
|
412
415
|
//# sourceMappingURL=index.js.map
|
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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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aalis/plugin-image-sender",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -24,20 +24,21 @@
|
|
|
24
24
|
"dist"
|
|
25
25
|
],
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@aalis/schema-message": ">=0.
|
|
28
|
-
"@aalis/api-media": ">=0.
|
|
29
|
-
"@aalis/api-memory": ">=0.
|
|
30
|
-
"@aalis/api-message-archive": ">=0.
|
|
31
|
-
"@aalis/api-storage": ">=0.
|
|
32
|
-
"@aalis/api-tools": ">=0.
|
|
27
|
+
"@aalis/schema-message": ">=0.10.0 <1.0.0",
|
|
28
|
+
"@aalis/api-media": ">=0.12.0 <1.0.0",
|
|
29
|
+
"@aalis/api-memory": ">=0.8.0 <1.0.0",
|
|
30
|
+
"@aalis/api-message-archive": ">=0.8.0 <1.0.0",
|
|
31
|
+
"@aalis/api-storage": ">=0.8.0 <1.0.0",
|
|
32
|
+
"@aalis/api-tools": ">=0.11.0 <1.0.0",
|
|
33
|
+
"@aalis/util-media-signature": ">=0.1.0 <1.0.0"
|
|
33
34
|
},
|
|
34
35
|
"devDependencies": {
|
|
35
36
|
"@types/node": "^22.0.0",
|
|
36
37
|
"typescript": "^5.7.0",
|
|
37
|
-
"@aalis/core": "0.
|
|
38
|
+
"@aalis/core": "0.20.0"
|
|
38
39
|
},
|
|
39
40
|
"peerDependencies": {
|
|
40
|
-
"@aalis/core": ">=0.
|
|
41
|
+
"@aalis/core": ">=0.20.0 <1.0.0"
|
|
41
42
|
},
|
|
42
43
|
"aalis": {
|
|
43
44
|
"service": {
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
/** 可发送的附件类型。 */
|
|
2
|
-
export type MediaKind = 'image' | 'audio' | 'video';
|
|
3
|
-
/**
|
|
4
|
-
* 认定格式要读的文件头长度:与 file(1) 在前 4 KiB 里找 Matroska DocType 的范围一致,也容得下 ftyp 盒的
|
|
5
|
-
* 兼容品牌表;其余签名都在前 20 字节内。
|
|
6
|
-
*/
|
|
7
|
-
export declare const MEDIA_HEAD_BYTES = 4096;
|
|
8
|
-
/**
|
|
9
|
-
* 核对文件头是否为所请求 kind 的受支持格式。相符返回 null;不符返回给模型的拒发说明:
|
|
10
|
-
* 不是任何受支持的媒体格式时说明不能按该类型发送,是别类媒体时说出检测到的格式与该用的 kind。
|
|
11
|
-
*/
|
|
12
|
-
export declare function checkMediaHead(head: Uint8Array, kind: MediaKind): string | null;
|
|
13
|
-
//# sourceMappingURL=media-signature.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"media-signature.d.ts","sourceRoot":"","sources":["../src/media-signature.ts"],"names":[],"mappings":"AASA,gBAAgB;AAChB,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;AAEpD;;;GAGG;AACH,eAAO,MAAM,gBAAgB,OAAO,CAAC;AAoDrC;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,CAY/E"}
|
package/dist/media-signature.js
DELETED
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
// ============================================================
|
|
2
|
-
// media-signature.ts — 按文件头核对附件格式
|
|
3
|
-
//
|
|
4
|
-
// 存储根里除了媒体,还有配置、令牌、记忆库、日志;只凭 kind 与路径发送,
|
|
5
|
-
// 这些文件会被当成图片发出去。send_attachment 从本地取文件时先读文件开头的
|
|
6
|
-
// 字节,按下表的格式签名认定格式,只有落在所请求 kind 的白名单里才放行。
|
|
7
|
-
// 签名依据各格式的规范,并与 file(1) 的 magic 库对照(SILK 不在该库里)。
|
|
8
|
-
// ============================================================
|
|
9
|
-
/**
|
|
10
|
-
* 认定格式要读的文件头长度:与 file(1) 在前 4 KiB 里找 Matroska DocType 的范围一致,也容得下 ftyp 盒的
|
|
11
|
-
* 兼容品牌表;其余签名都在前 20 字节内。
|
|
12
|
-
*/
|
|
13
|
-
export const MEDIA_HEAD_BYTES = 4096;
|
|
14
|
-
const KIND_LABEL = { image: '图片', audio: '音频', video: '视频' };
|
|
15
|
-
/** BMP 偏移 14 处 DIB 头长度的合法取值(file(1) 认的各版本);只有 'BM' 两字节太弱,文本也可能以它开头。 */
|
|
16
|
-
const BMP_DIB_HEADER_SIZES = new Set([12, 16, 24, 40, 48, 52, 56, 64, 108, 124]);
|
|
17
|
-
/** AMR 文件存储格式的魔数:单声道窄带、宽带与各自的多声道版本(RFC 4867 §5)。 */
|
|
18
|
-
const AMR_MAGICS = ['#!AMR\n', '#!AMR-WB\n', '#!AMR_MC1.0\n', '#!AMR-WB_MC1.0\n'];
|
|
19
|
-
const AVIF_BRANDS = new Set(['avif', 'avis']);
|
|
20
|
-
/** HEIF 的图片与图片序列品牌(ISO/IEC 23008-12):HEVC 编码的 heic 系与通用的 mif1、msf1。 */
|
|
21
|
-
const HEIF_BRANDS = new Set(['heic', 'heix', 'heim', 'heis', 'hevc', 'hevx', 'hevm', 'hevs', 'mif1', 'msf1']);
|
|
22
|
-
const M4A_BRANDS = new Set(['M4A ', 'M4B ', 'M4P ']);
|
|
23
|
-
const SIGNATURES = [
|
|
24
|
-
{ kind: 'image', format: 'PNG', matches: h => hasBytes(h, 0, [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]) },
|
|
25
|
-
// SOI 标记 FFD8 之后紧跟下一个标记的 FF
|
|
26
|
-
{ kind: 'image', format: 'JPEG', matches: h => hasBytes(h, 0, [0xff, 0xd8, 0xff]) },
|
|
27
|
-
{ kind: 'image', format: 'GIF', matches: h => hasAscii(h, 0, 'GIF87a') || hasAscii(h, 0, 'GIF89a') },
|
|
28
|
-
{ kind: 'image', format: 'WebP', matches: h => isRiff(h, 'WEBP') },
|
|
29
|
-
{
|
|
30
|
-
kind: 'image',
|
|
31
|
-
format: 'BMP',
|
|
32
|
-
matches: h => hasAscii(h, 0, 'BM') && h.length >= 18 && BMP_DIB_HEADER_SIZES.has(readUint32LE(h, 14)),
|
|
33
|
-
},
|
|
34
|
-
{ kind: 'image', format: 'AVIF', matches: h => isoMediaFormat(h) === 'AVIF' },
|
|
35
|
-
{ kind: 'image', format: 'HEIC', matches: h => isoMediaFormat(h) === 'HEIC' },
|
|
36
|
-
{ kind: 'audio', format: 'MP3', matches: h => isId3v2(h) || isMp3Frame(h) },
|
|
37
|
-
{ kind: 'audio', format: 'WAV', matches: h => isRiff(h, 'WAVE') },
|
|
38
|
-
// 页头捕获模式 'OggS' 加结构版本 0(RFC 3533)
|
|
39
|
-
{ kind: 'audio', format: 'OGG', matches: h => hasBytes(h, 0, [0x4f, 0x67, 0x67, 0x53, 0x00]) },
|
|
40
|
-
{ kind: 'audio', format: 'FLAC', matches: h => hasAscii(h, 0, 'fLaC') },
|
|
41
|
-
{ kind: 'audio', format: 'AMR', matches: h => AMR_MAGICS.some(m => hasAscii(h, 0, m)) },
|
|
42
|
-
// QQ 语音的 SILK 前面可能多一个 0x02
|
|
43
|
-
{
|
|
44
|
-
kind: 'audio',
|
|
45
|
-
format: 'SILK',
|
|
46
|
-
matches: h => hasAscii(h, 0, '#!SILK_V3') || (h[0] === 0x02 && hasAscii(h, 1, '#!SILK_V3')),
|
|
47
|
-
},
|
|
48
|
-
{ kind: 'audio', format: 'M4A', matches: h => isoMediaFormat(h) === 'M4A' },
|
|
49
|
-
{ kind: 'video', format: 'MP4', matches: h => isoMediaFormat(h) === 'MP4' },
|
|
50
|
-
{ kind: 'video', format: 'MOV', matches: h => isoMediaFormat(h) === 'MOV' },
|
|
51
|
-
{ kind: 'video', format: 'WebM', matches: h => ebmlDocType(h) === 'webm' },
|
|
52
|
-
{ kind: 'video', format: 'MKV', matches: h => ebmlDocType(h) === 'matroska' },
|
|
53
|
-
{ kind: 'video', format: 'AVI', matches: h => isRiff(h, 'AVI ') },
|
|
54
|
-
];
|
|
55
|
-
/**
|
|
56
|
-
* 核对文件头是否为所请求 kind 的受支持格式。相符返回 null;不符返回给模型的拒发说明:
|
|
57
|
-
* 不是任何受支持的媒体格式时说明不能按该类型发送,是别类媒体时说出检测到的格式与该用的 kind。
|
|
58
|
-
*/
|
|
59
|
-
export function checkMediaHead(head, kind) {
|
|
60
|
-
const detected = SIGNATURES.find(s => s.matches(head));
|
|
61
|
-
if (!detected) {
|
|
62
|
-
const supported = SIGNATURES.filter(s => s.kind === kind)
|
|
63
|
-
.map(s => s.format)
|
|
64
|
-
.join('、');
|
|
65
|
-
return `文件不是受支持的${KIND_LABEL[kind]}格式(${supported}),不能按 ${kind} 发送`;
|
|
66
|
-
}
|
|
67
|
-
if (detected.kind !== kind) {
|
|
68
|
-
return `文件是 ${detected.format} ${KIND_LABEL[detected.kind]},不能按 ${kind} 发送;请改用 kind=${detected.kind} 重新发送`;
|
|
69
|
-
}
|
|
70
|
-
return null;
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* ISO 基础媒体文件(ISO/IEC 14496-12)按 ftyp 盒的品牌分类。AVIF 与 HEIF 在主品牌与兼容品牌里都找:
|
|
74
|
-
* AVIF 文件的主品牌也可能写 mif1,avif 只列在兼容品牌里。M4A 与 MOV 只看主品牌:iTunes 的 M4V 视频
|
|
75
|
-
* 会把 'M4A ' 列进兼容品牌。其余品牌(isom、mp41、mp42、3gp 系等)都归 MP4 家族的视频容器。
|
|
76
|
-
*/
|
|
77
|
-
function isoMediaFormat(h) {
|
|
78
|
-
if (h.length < 12 || !hasAscii(h, 4, 'ftyp'))
|
|
79
|
-
return null;
|
|
80
|
-
const major = ascii(h, 8, 4);
|
|
81
|
-
const boxEnd = Math.min(readUint32BE(h, 0), h.length);
|
|
82
|
-
const brands = [major];
|
|
83
|
-
for (let offset = 16; offset + 4 <= boxEnd; offset += 4)
|
|
84
|
-
brands.push(ascii(h, offset, 4));
|
|
85
|
-
if (brands.some(b => AVIF_BRANDS.has(b)))
|
|
86
|
-
return 'AVIF';
|
|
87
|
-
if (brands.some(b => HEIF_BRANDS.has(b)))
|
|
88
|
-
return 'HEIC';
|
|
89
|
-
if (M4A_BRANDS.has(major))
|
|
90
|
-
return 'M4A';
|
|
91
|
-
if (major === 'qt ')
|
|
92
|
-
return 'MOV';
|
|
93
|
-
return 'MP4';
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* Matroska 与 WebM 同为 EBML 容器(魔数 1A45DFA3),靠 DocType 元素(ID 0x4282)区分:
|
|
97
|
-
* 与 file(1) 一样在文件头里找到它,跳过一字节长度后比对。
|
|
98
|
-
*/
|
|
99
|
-
function ebmlDocType(h) {
|
|
100
|
-
if (!hasBytes(h, 0, [0x1a, 0x45, 0xdf, 0xa3]))
|
|
101
|
-
return null;
|
|
102
|
-
for (let i = 4; i + 1 < h.length; i++) {
|
|
103
|
-
if (h[i] !== 0x42 || h[i + 1] !== 0x82)
|
|
104
|
-
continue;
|
|
105
|
-
if (hasAscii(h, i + 3, 'webm'))
|
|
106
|
-
return 'webm';
|
|
107
|
-
if (hasAscii(h, i + 3, 'matroska'))
|
|
108
|
-
return 'matroska';
|
|
109
|
-
return null;
|
|
110
|
-
}
|
|
111
|
-
return null;
|
|
112
|
-
}
|
|
113
|
-
/** ID3v2 标签:'ID3' 后接主版本号(现有 2、3、4 三版)与不为 FF 的修订号。 */
|
|
114
|
-
function isId3v2(h) {
|
|
115
|
-
return hasAscii(h, 0, 'ID3') && h.length >= 5 && h[3] >= 2 && h[3] <= 4 && h[4] !== 0xff;
|
|
116
|
-
}
|
|
117
|
-
/** MPEG 音频帧头:11 位同步,版本不为保留值 01,层为 Layer III(01),码率索引不为 1111,采样率索引不为 11。 */
|
|
118
|
-
function isMp3Frame(h) {
|
|
119
|
-
if (h.length < 3 || h[0] !== 0xff || (h[1] & 0xe0) !== 0xe0)
|
|
120
|
-
return false;
|
|
121
|
-
const version = (h[1] >> 3) & 0x03;
|
|
122
|
-
const layer = (h[1] >> 1) & 0x03;
|
|
123
|
-
const bitrateIndex = h[2] >> 4;
|
|
124
|
-
const sampleRateIndex = (h[2] >> 2) & 0x03;
|
|
125
|
-
return version !== 0x01 && layer === 0x01 && bitrateIndex !== 0x0f && sampleRateIndex !== 0x03;
|
|
126
|
-
}
|
|
127
|
-
/** RIFF 容器:'RIFF' 加 4 字节长度,偏移 8 处是形式类型(WAVE、AVI 、WEBP)。 */
|
|
128
|
-
function isRiff(h, formType) {
|
|
129
|
-
return hasAscii(h, 0, 'RIFF') && hasAscii(h, 8, formType);
|
|
130
|
-
}
|
|
131
|
-
function hasBytes(h, offset, bytes) {
|
|
132
|
-
if (h.length < offset + bytes.length)
|
|
133
|
-
return false;
|
|
134
|
-
return bytes.every((b, i) => h[offset + i] === b);
|
|
135
|
-
}
|
|
136
|
-
function hasAscii(h, offset, text) {
|
|
137
|
-
if (h.length < offset + text.length)
|
|
138
|
-
return false;
|
|
139
|
-
for (let i = 0; i < text.length; i++) {
|
|
140
|
-
if (h[offset + i] !== text.charCodeAt(i))
|
|
141
|
-
return false;
|
|
142
|
-
}
|
|
143
|
-
return true;
|
|
144
|
-
}
|
|
145
|
-
function ascii(h, offset, length) {
|
|
146
|
-
return String.fromCharCode(...h.subarray(offset, offset + length));
|
|
147
|
-
}
|
|
148
|
-
function readUint32BE(h, offset) {
|
|
149
|
-
return ((h[offset] << 24) | (h[offset + 1] << 16) | (h[offset + 2] << 8) | h[offset + 3]) >>> 0;
|
|
150
|
-
}
|
|
151
|
-
function readUint32LE(h, offset) {
|
|
152
|
-
return (h[offset] | (h[offset + 1] << 8) | (h[offset + 2] << 16) | (h[offset + 3] << 24)) >>> 0;
|
|
153
|
-
}
|
|
154
|
-
//# sourceMappingURL=media-signature.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"media-signature.js","sourceRoot":"","sources":["../src/media-signature.ts"],"names":[],"mappings":"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"}
|