@lemoncat7/dsh-partner 2.0.0 → 2.2.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 +12 -0
- package/docs/channel-questions-and-avatar.md +30 -0
- package/docs/direct-channels.md +13 -1
- package/docs/releases/2.1.0.md +13 -0
- package/docs/releases/2.2.0.md +25 -0
- package/lib/agent-runtime.d.ts +1 -0
- package/lib/agent-runtime.d.ts.map +1 -1
- package/lib/agent-runtime.js +19 -7
- package/lib/agent-runtime.js.map +1 -1
- package/lib/attachments/service.d.ts +2 -0
- package/lib/attachments/service.d.ts.map +1 -1
- package/lib/attachments/service.js +1 -1
- package/lib/attachments/service.js.map +1 -1
- package/lib/attachments/tool.d.ts.map +1 -1
- package/lib/attachments/tool.js +7 -3
- package/lib/attachments/tool.js.map +1 -1
- package/lib/channels/avatar-file.d.ts +3 -0
- package/lib/channels/avatar-file.d.ts.map +1 -0
- package/lib/channels/avatar-file.js +43 -0
- package/lib/channels/avatar-file.js.map +1 -0
- package/lib/channels/avatar-tool.d.ts +12 -0
- package/lib/channels/avatar-tool.d.ts.map +1 -0
- package/lib/channels/avatar-tool.js +78 -0
- package/lib/channels/avatar-tool.js.map +1 -0
- package/lib/channels/direct/avatar.d.ts +11 -0
- package/lib/channels/direct/avatar.d.ts.map +1 -0
- package/lib/channels/direct/avatar.js +57 -0
- package/lib/channels/direct/avatar.js.map +1 -0
- package/lib/channels/direct/discovery.d.ts +1 -1
- package/lib/channels/direct/discovery.d.ts.map +1 -1
- package/lib/channels/direct/discovery.js +6 -5
- package/lib/channels/direct/discovery.js.map +1 -1
- package/lib/channels/direct/inbound-batch.d.ts +8 -0
- package/lib/channels/direct/inbound-batch.d.ts.map +1 -0
- package/lib/channels/direct/inbound-batch.js +45 -0
- package/lib/channels/direct/inbound-batch.js.map +1 -0
- package/lib/channels/direct/media.d.ts +24 -0
- package/lib/channels/direct/media.d.ts.map +1 -0
- package/lib/channels/direct/media.js +147 -0
- package/lib/channels/direct/media.js.map +1 -0
- package/lib/channels/direct/message.d.ts +4 -0
- package/lib/channels/direct/message.d.ts.map +1 -0
- package/lib/channels/direct/message.js +16 -0
- package/lib/channels/direct/message.js.map +1 -0
- package/lib/channels/direct/transport.d.ts +8 -3
- package/lib/channels/direct/transport.d.ts.map +1 -1
- package/lib/channels/direct/transport.js +39 -16
- package/lib/channels/direct/transport.js.map +1 -1
- package/lib/channels/manager.d.ts +3 -1
- package/lib/channels/manager.d.ts.map +1 -1
- package/lib/channels/manager.js +142 -34
- package/lib/channels/manager.js.map +1 -1
- package/lib/channels/outbound-media.d.ts.map +1 -1
- package/lib/channels/outbound-media.js +2 -0
- package/lib/channels/outbound-media.js.map +1 -1
- package/lib/channels/question-origin.d.ts +5 -0
- package/lib/channels/question-origin.d.ts.map +1 -0
- package/lib/channels/question-origin.js +14 -0
- package/lib/channels/question-origin.js.map +1 -0
- package/lib/collaboration/composition.d.ts +2 -0
- package/lib/collaboration/composition.d.ts.map +1 -1
- package/lib/collaboration/composition.js +4 -0
- package/lib/collaboration/composition.js.map +1 -1
- package/lib/domain.d.ts +2 -0
- package/lib/domain.d.ts.map +1 -1
- package/lib/domain.js.map +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +3 -0
- package/lib/index.js.map +1 -1
- package/package.json +4 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/attachments/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACrE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACpF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAA;AAC1E,OAAO,EAAE,uBAAuB,EAAkC,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/attachments/service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/attachments/tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAG5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;
|
|
1
|
+
{"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/attachments/tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAG5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAG5D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAA;AAE7D,eAAO,MAAM,mBAAmB,k9CAAsT,CAAA;AAEtV,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,yBAAyB,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,GAAG,cAAc,CA6CnL"}
|
package/lib/attachments/tool.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { createUserMessage } from '@deepseek-ai/dsh-llm';
|
|
2
2
|
import { isInternalTaskNotice } from '../channels/delivery-policy.js';
|
|
3
|
+
import { questionOrigin } from '../channels/question-origin.js';
|
|
3
4
|
export const ATTACHMENT_PROTOCOL = '交付图片或文档时,如果当前提供 partner_send_attachment,必须调用它,path 填生成工具返回的真实本地文件路径。普通 Markdown 链接仅是引用,不代表发送成功。工具会把指定文件显示在会话中,并在当前会话绑定渠道时发送真实附件;必须以工具返回的 channel 状态为准。失败用 deliveryId 重试原附件,无需重新生成。远端文件先下载到当前会话目录,不要编造 sandbox 地址。不要提交中间产物、内部核验材料或用户未要求交付的文件。工具完成后最终回复只简述结论,不要再次粘贴附件下载地址。若临时执行环境未提供此工具,只向负责人交回真实文件位置和结果,不得声称附件已发送。';
|
|
4
5
|
export function attachmentTool(companionId, store, service, ctx, channels, prefix) {
|
|
5
6
|
return {
|
|
@@ -23,17 +24,20 @@ export function attachmentTool(companionId, store, service, ctx, channels, prefi
|
|
|
23
24
|
const events = agent.session.snapshotEvents();
|
|
24
25
|
const origin = [...events].reverse().find(e => e.type === 'user/message' && (e.data.source.kind === 'user' || isInternalTaskNotice(e)));
|
|
25
26
|
const internal = origin ? isInternalTaskNotice(origin) : true;
|
|
26
|
-
const
|
|
27
|
+
const source = questionOrigin(sessionId, events, state.sessions.filter(item => item.companionId === companionId));
|
|
28
|
+
const channel = !!source && !internal;
|
|
27
29
|
const cwd = route.cwd ?? agent.session.header.cwd;
|
|
28
30
|
if (!cwd)
|
|
29
31
|
throw new Error('当前会话缺少工作目录');
|
|
30
|
-
let item = typeof input.deliveryId === 'string' ? service.get(input.deliveryId) : await service.serial('prepare', () => service.prepare({ companionId, sessionId, turn: origin?.seq ?? agent.session.seq, cwd, path: input.path, channel }, exec.signal));
|
|
32
|
+
let item = typeof input.deliveryId === 'string' ? service.get(input.deliveryId) : await service.serial('prepare', () => service.prepare({ companionId, sessionId, turn: origin?.seq ?? agent.session.seq, cwd, path: input.path, channel, ...(source ? { channelRouteId: source.id } : {}) }, exec.signal));
|
|
31
33
|
if (!item || item.companionId !== companionId || item.sessionId !== sessionId)
|
|
32
34
|
throw new Error('附件交付不存在或不属于当前伙伴会话');
|
|
33
35
|
if (!channel && item.channel !== 'none')
|
|
34
36
|
throw new Error('当前执行不能向原渠道重发附件,请回到直接对话重试');
|
|
35
37
|
if (channel && item.channel === 'none' && typeof input.deliveryId === 'string')
|
|
36
38
|
throw new Error('这份附件原本仅供会话查看。若要正式发送到渠道,请使用 path 明确提交原文件');
|
|
39
|
+
if (channel && item.channelRouteId !== source?.id)
|
|
40
|
+
throw new Error('附件原始投递渠道与当前来源不一致,请回到原渠道重试;旧版未记录目标的附件请用 path 重新提交');
|
|
37
41
|
const url = `${prefix.replace(/\/$/, '')}/attachments/${item.id}`;
|
|
38
42
|
const escaped = item.name.replace(/[\[\]\\]/g, '_');
|
|
39
43
|
const content = [{ type: 'text', text: `[下载附件:${escaped}](${url})` }];
|
|
@@ -43,7 +47,7 @@ export function attachmentTool(companionId, store, service, ctx, channels, prefi
|
|
|
43
47
|
}
|
|
44
48
|
let error;
|
|
45
49
|
try {
|
|
46
|
-
item = await service.deliver(item, file => channels.sendExplicitAttachment(sessionId, file, exec.signal));
|
|
50
|
+
item = await service.deliver(item, file => channels.sendExplicitAttachment(sessionId, file, exec.signal, item.channelRouteId));
|
|
47
51
|
}
|
|
48
52
|
catch (cause) {
|
|
49
53
|
error = cause instanceof Error ? cause.message : String(cause);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool.js","sourceRoot":"","sources":["../../src/attachments/tool.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAqB,MAAM,sBAAsB,CAAA;AAI3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAA;
|
|
1
|
+
{"version":3,"file":"tool.js","sourceRoot":"","sources":["../../src/attachments/tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"avatar-file.d.ts","sourceRoot":"","sources":["../../src/channels/avatar-file.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAGrD,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CA2B1G"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { constants } from 'node:fs';
|
|
2
|
+
import { open, realpath } from 'node:fs/promises';
|
|
3
|
+
import { isAbsolute, relative, resolve, sep } from 'node:path';
|
|
4
|
+
const LIMIT = 2 * 1024 * 1024;
|
|
5
|
+
export async function readAvatarImage(cwd, path, signal) {
|
|
6
|
+
signal.throwIfAborted();
|
|
7
|
+
if (!path || path.length > 4096 || path.includes('\0') || /^[a-z]+:\/\//i.test(path))
|
|
8
|
+
throw new Error('头像必须使用当前会话目录内的本地图片路径');
|
|
9
|
+
const root = await realpath(cwd), actual = await realpath(resolve(root, path));
|
|
10
|
+
const rel = relative(root, actual);
|
|
11
|
+
if (rel === '..' || rel.startsWith(`..${sep}`) || isAbsolute(rel))
|
|
12
|
+
throw new Error('头像图片超出当前会话目录,不能读取其他伙伴或系统文件');
|
|
13
|
+
const file = await open(actual, constants.O_RDONLY | constants.O_NOFOLLOW);
|
|
14
|
+
try {
|
|
15
|
+
const before = await file.stat();
|
|
16
|
+
if (!before.isFile() || before.size < 4 || before.size > LIMIT)
|
|
17
|
+
throw new Error('头像必须是 2 MB 以内的 PNG/JPEG 普通文件');
|
|
18
|
+
const bytes = Buffer.alloc(before.size + 1);
|
|
19
|
+
let size = 0;
|
|
20
|
+
while (size < bytes.length) {
|
|
21
|
+
signal.throwIfAborted();
|
|
22
|
+
const read = await file.read(bytes, size, bytes.length - size, size);
|
|
23
|
+
if (!read.bytesRead)
|
|
24
|
+
break;
|
|
25
|
+
size += read.bytesRead;
|
|
26
|
+
}
|
|
27
|
+
const after = await file.stat();
|
|
28
|
+
if (size !== before.size || after.size !== before.size || after.mtimeMs !== before.mtimeMs)
|
|
29
|
+
throw new Error('头像文件在读取时发生变化,请重试');
|
|
30
|
+
const data = bytes.subarray(0, size);
|
|
31
|
+
const png = data.length >= 24 && data.subarray(0, 8).equals(Buffer.from([137, 80, 78, 71, 13, 10, 26, 10])) && data.toString('ascii', 12, 16) === 'IHDR';
|
|
32
|
+
const jpeg = data[0] === 255 && data[1] === 216 && data[2] === 255;
|
|
33
|
+
if (!png && !jpeg)
|
|
34
|
+
throw new Error('头像文件不是有效的 PNG/JPEG 图片;不支持 SVG、HTML 或仅修改扩展名的文件');
|
|
35
|
+
if (png && (!data.readUInt32BE(16) || !data.readUInt32BE(20) || data.readUInt32BE(16) > 4096 || data.readUInt32BE(20) > 4096))
|
|
36
|
+
throw new Error('PNG 头像尺寸不得超过 4096 × 4096');
|
|
37
|
+
return { bytes: data, mediaType: png ? 'image/png' : 'image/jpeg' };
|
|
38
|
+
}
|
|
39
|
+
finally {
|
|
40
|
+
await file.close();
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=avatar-file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"avatar-file.js","sourceRoot":"","sources":["../../src/channels/avatar-file.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ToolDefinition } from '@deepseek-ai/dsh-tools';
|
|
2
|
+
import type { PartnerStore } from '../store.js';
|
|
3
|
+
import type { PartnerCredentialVault } from '../credentials.js';
|
|
4
|
+
/** One service owns serialization and live authorization; credentials never enter tool results. */
|
|
5
|
+
export declare class ChannelAvatarService {
|
|
6
|
+
private readonly store;
|
|
7
|
+
private readonly credentials;
|
|
8
|
+
private readonly queues;
|
|
9
|
+
constructor(store: PartnerStore, credentials: PartnerCredentialVault);
|
|
10
|
+
tool(companionId: string): ToolDefinition;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=avatar-tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"avatar-tool.d.ts","sourceRoot":"","sources":["../../src/channels/avatar-tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAA;AAK/D,mGAAmG;AACnG,qBAAa,oBAAoB;IAEnB,OAAO,CAAC,QAAQ,CAAC,KAAK;IAAgB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAD9E,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsC;gBAChC,KAAK,EAAE,YAAY,EAAmB,WAAW,EAAE,sBAAsB;IAEtG,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,cAAc;CAiD1C"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { directConfig } from './direct/transport.js';
|
|
2
|
+
import { updateDirectAvatar } from './direct/avatar.js';
|
|
3
|
+
import { readAvatarImage } from './avatar-file.js';
|
|
4
|
+
/** One service owns serialization and live authorization; credentials never enter tool results. */
|
|
5
|
+
export class ChannelAvatarService {
|
|
6
|
+
store;
|
|
7
|
+
credentials;
|
|
8
|
+
queues = new Map();
|
|
9
|
+
constructor(store, credentials) {
|
|
10
|
+
this.store = store;
|
|
11
|
+
this.credentials = credentials;
|
|
12
|
+
}
|
|
13
|
+
tool(companionId) {
|
|
14
|
+
const service = this;
|
|
15
|
+
return {
|
|
16
|
+
name: 'partner_channel_avatar',
|
|
17
|
+
description: '伙伴默认可用:修改自己的 Matrix / Mattermost 渠道账号头像。先 list 查看可修改渠道,再 set 提供 channelId 和当前会话目录内的真实 PNG/JPEG 图片 path(最多 2 MB)。账号级修改影响该账号全部会话,不是房间头像或 DSH 卡片图案。不支持微信、不改其他伙伴、禁止跨伙伴共用账号修改。不自动生成或下载 URL,必须以 updated=true 为成功依据。',
|
|
18
|
+
parameters: { type: 'object', additionalProperties: false, properties: { action: { type: 'string', enum: ['list', 'set'] }, channelId: { type: 'string' }, path: { type: 'string' } }, required: ['action'] },
|
|
19
|
+
output: { schema: { type: 'string' }, render: (_args, value) => [{ type: 'text', text: String(value) }] },
|
|
20
|
+
presentCall: () => ({ card: 'generic', title: '伙伴渠道头像' }),
|
|
21
|
+
async execute(raw, exec) {
|
|
22
|
+
const input = raw;
|
|
23
|
+
const agent = exec.agent;
|
|
24
|
+
if (!agent || !input || typeof input !== 'object')
|
|
25
|
+
throw new Error('头像修改需要当前伙伴会话');
|
|
26
|
+
const authorize = () => {
|
|
27
|
+
exec.signal.throwIfAborted();
|
|
28
|
+
const state = service.store.snapshot();
|
|
29
|
+
if (!state.companions.some(companion => companion.id === companionId) || service.store.isCompanionRemoving(companionId)
|
|
30
|
+
|| !state.sessions.some(route => route.sessionId === agent.session.id && route.companionId === companionId))
|
|
31
|
+
throw new Error('伙伴已删除、正在删除或会话不属于当前伙伴');
|
|
32
|
+
};
|
|
33
|
+
authorize();
|
|
34
|
+
const owned = service.store.snapshot().channels.filter(channel => channel.companionId === companionId && (channel.platform === 'matrix' || channel.platform === 'mattermost'));
|
|
35
|
+
if (input.action === 'list')
|
|
36
|
+
return JSON.stringify({ channels: owned.map(channel => ({ channelId: channel.id, name: channel.name, platform: channel.platform, accountId: channel.accountId, enabled: channel.enabled })), scope: '账号级头像,跨伙伴共用账号禁止修改' });
|
|
37
|
+
if (input.action !== 'set' || typeof input.channelId !== 'string' || typeof input.path !== 'string')
|
|
38
|
+
throw new Error('set 需要 channelId 和本地图片 path');
|
|
39
|
+
const channel = owned.find(item => item.id === input.channelId);
|
|
40
|
+
if (!channel || !channel.enabled || !channel.direct)
|
|
41
|
+
throw new Error('渠道不存在、未启用或不属于当前伙伴');
|
|
42
|
+
const cwd = agent.session.header.cwd;
|
|
43
|
+
if (!cwd)
|
|
44
|
+
throw new Error('当前会话缺少工作目录');
|
|
45
|
+
const key = `${channel.platform}:${channel.direct.baseUrl}:${channel.accountId}`;
|
|
46
|
+
const previous = service.queues.get(key) ?? Promise.resolve();
|
|
47
|
+
const path = input.path;
|
|
48
|
+
const job = previous.catch(() => { }).then(async () => {
|
|
49
|
+
const guard = () => {
|
|
50
|
+
authorize();
|
|
51
|
+
const state = service.store.snapshot(), current = state.channels.find(item => item.id === channel.id);
|
|
52
|
+
if (!current?.enabled || current.companionId !== companionId || current.platform !== channel.platform || current.accountId !== channel.accountId || current.direct?.baseUrl !== channel.direct?.baseUrl)
|
|
53
|
+
throw new Error('渠道配置已变化,头像未继续更新');
|
|
54
|
+
if (state.channels.some(other => other.companionId !== companionId && other.platform === channel.platform && other.accountId === channel.accountId && other.direct?.baseUrl.replace(/\/$/, '') === channel.direct?.baseUrl.replace(/\/$/, '')))
|
|
55
|
+
throw new Error('该账号被其他伙伴共用,修改头像会影响其他伙伴;请先使用独立账号');
|
|
56
|
+
};
|
|
57
|
+
guard();
|
|
58
|
+
const image = await readAvatarImage(cwd, path, exec.signal);
|
|
59
|
+
const credential = await service.credentials.read(channel.id);
|
|
60
|
+
const config = directConfig({ platform: channel.platform, baseUrl: credential.baseUrl, targetId: '' });
|
|
61
|
+
if (config.baseUrl !== channel.direct.baseUrl.replace(/\/$/, ''))
|
|
62
|
+
throw new Error('渠道地址和凭据地址不一致,请重新配置');
|
|
63
|
+
const result = await updateDirectAvatar(config, credential.botToken, channel.accountId, image, exec.signal, guard);
|
|
64
|
+
return JSON.stringify({ updated: true, channelId: channel.id, platform: channel.platform, ...result, scope: 'account' });
|
|
65
|
+
});
|
|
66
|
+
service.queues.set(key, job);
|
|
67
|
+
try {
|
|
68
|
+
return await job;
|
|
69
|
+
}
|
|
70
|
+
finally {
|
|
71
|
+
if (service.queues.get(key) === job)
|
|
72
|
+
service.queues.delete(key);
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=avatar-tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"avatar-tool.js","sourceRoot":"","sources":["../../src/channels/avatar-tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { DirectConfig } from './transport.js';
|
|
2
|
+
export interface AvatarImage {
|
|
3
|
+
bytes: Uint8Array;
|
|
4
|
+
mediaType: 'image/png' | 'image/jpeg';
|
|
5
|
+
}
|
|
6
|
+
/** Only updates the authenticated account. No caller-controlled user id or remote image fetch. */
|
|
7
|
+
export declare function updateDirectAvatar(config: DirectConfig, token: string, accountId: string, image: AvatarImage, signal: AbortSignal, guard: () => void): Promise<{
|
|
8
|
+
accountId: string;
|
|
9
|
+
avatar: string;
|
|
10
|
+
}>;
|
|
11
|
+
//# sourceMappingURL=avatar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"avatar.d.ts","sourceRoot":"","sources":["../../../src/channels/direct/avatar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAElD,MAAM,WAAW,WAAW;IAAG,KAAK,EAAE,UAAU,CAAC;IAAC,SAAS,EAAE,WAAW,GAAG,YAAY,CAAA;CAAE;AAEzF,kGAAkG;AAClG,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAqC3M"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/** Only updates the authenticated account. No caller-controlled user id or remote image fetch. */
|
|
2
|
+
export async function updateDirectAvatar(config, token, accountId, image, signal, guard) {
|
|
3
|
+
const request = async (path, method = 'GET', body, contentType) => {
|
|
4
|
+
signal.throwIfAborted();
|
|
5
|
+
guard();
|
|
6
|
+
const response = await fetch(config.baseUrl + path, {
|
|
7
|
+
method, redirect: 'error', headers: { Authorization: `Bearer ${token}`, ...(contentType ? { 'Content-Type': contentType } : {}) },
|
|
8
|
+
...(body === undefined ? {} : { body }), signal: AbortSignal.any([signal, AbortSignal.timeout(30_000)]),
|
|
9
|
+
});
|
|
10
|
+
if (!response.ok) {
|
|
11
|
+
await response.body?.cancel();
|
|
12
|
+
throw new Error(`头像请求失败(HTTP ${response.status}),未确认更新成功`);
|
|
13
|
+
}
|
|
14
|
+
if (response.status === 204)
|
|
15
|
+
return {};
|
|
16
|
+
const reader = response.body?.getReader();
|
|
17
|
+
if (!reader)
|
|
18
|
+
return {};
|
|
19
|
+
const chunks = [];
|
|
20
|
+
let size = 0;
|
|
21
|
+
try {
|
|
22
|
+
while (true) {
|
|
23
|
+
const part = await reader.read();
|
|
24
|
+
if (part.done)
|
|
25
|
+
break;
|
|
26
|
+
size += part.value.length;
|
|
27
|
+
if (size > 64 * 1024) {
|
|
28
|
+
await reader.cancel();
|
|
29
|
+
throw new Error('头像接口响应超过限制');
|
|
30
|
+
}
|
|
31
|
+
chunks.push(part.value);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
finally {
|
|
35
|
+
reader.releaseLock();
|
|
36
|
+
}
|
|
37
|
+
const text = Buffer.concat(chunks).toString('utf8');
|
|
38
|
+
return text ? JSON.parse(text) : {};
|
|
39
|
+
};
|
|
40
|
+
const matrix = config.platform === 'matrix';
|
|
41
|
+
const who = await request(matrix ? '/_matrix/client/v3/account/whoami' : '/api/v4/users/me');
|
|
42
|
+
if ((matrix ? who.user_id : who.id) !== accountId)
|
|
43
|
+
throw new Error('渠道凭据账号已变化,拒绝修改头像,请重新配置渠道');
|
|
44
|
+
const user = encodeURIComponent(accountId);
|
|
45
|
+
if (matrix) {
|
|
46
|
+
const uploaded = await request('/_matrix/media/v3/upload', 'POST', new Uint8Array(image.bytes), image.mediaType);
|
|
47
|
+
if (typeof uploaded.content_uri !== 'string' || !/^mxc:\/\/[^\s/]+\/[^\s/?#]+$/.test(uploaded.content_uri))
|
|
48
|
+
throw new Error('Matrix 未返回有效媒体地址,头像尚未修改');
|
|
49
|
+
await request(`/_matrix/client/v3/profile/${user}/avatar_url`, 'PUT', JSON.stringify({ avatar_url: uploaded.content_uri }), 'application/json');
|
|
50
|
+
return { accountId, avatar: uploaded.content_uri };
|
|
51
|
+
}
|
|
52
|
+
const form = new FormData();
|
|
53
|
+
form.set('image', new Blob([new Uint8Array(image.bytes)], { type: image.mediaType }), image.mediaType === 'image/png' ? 'avatar.png' : 'avatar.jpg');
|
|
54
|
+
await request(`/api/v4/users/${user}/image`, 'POST', form);
|
|
55
|
+
return { accountId, avatar: `${config.baseUrl}/api/v4/users/${user}/image` };
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=avatar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"avatar.js","sourceRoot":"","sources":["../../../src/channels/direct/avatar.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { DirectBatch, DirectPlatform, DirectTransport } from './transport.js';
|
|
2
2
|
/** Discover conversations without granting access. Every candidate still passes
|
|
3
3
|
* the same two-member / no-encryption validation as explicitly pinned rooms. */
|
|
4
|
-
export declare function pollDiscovered(platform: DirectPlatform, accountId: string, cursor: string | undefined, signal: AbortSignal, request: (path: string, body?: unknown) => Promise<any>, room: (id: string) => DirectTransport): Promise<DirectBatch>;
|
|
4
|
+
export declare function pollDiscovered(platform: DirectPlatform, accountId: string, cursor: string | undefined, signal: AbortSignal, request: (path: string, body?: unknown) => Promise<any>, room: (id: string) => DirectTransport, waitMs?: number): Promise<DirectBatch>;
|
|
5
5
|
//# sourceMappingURL=discovery.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../../src/channels/direct/discovery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,WAAW,EAAiB,cAAc,EAAE,eAAe,EAAC,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../../src/channels/direct/discovery.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,WAAW,EAAiB,cAAc,EAAE,eAAe,EAAC,MAAM,gBAAgB,CAAA;AAG/F;gFACgF;AAChF,wBAAsB,cAAc,CAAC,QAAQ,EAAC,cAAc,EAAE,SAAS,EAAC,MAAM,EAAE,MAAM,EAAC,MAAM,GAAC,SAAS,EAAE,MAAM,EAAC,WAAW,EACzH,OAAO,EAAC,CAAC,IAAI,EAAC,MAAM,EAAC,IAAI,CAAC,EAAC,OAAO,KAAG,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,EAAC,CAAC,EAAE,EAAC,MAAM,KAAG,eAAe,EAAE,MAAM,SAAM,GAAE,OAAO,CAAC,WAAW,CAAC,CAsDzH"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
+
import { matrixMessage } from './message.js';
|
|
1
2
|
/** Discover conversations without granting access. Every candidate still passes
|
|
2
3
|
* the same two-member / no-encryption validation as explicitly pinned rooms. */
|
|
3
|
-
export async function pollDiscovered(platform, accountId, cursor, signal, request, room) {
|
|
4
|
+
export async function pollDiscovered(platform, accountId, cursor, signal, request, room, waitMs = 20000) {
|
|
4
5
|
const messages = [];
|
|
5
6
|
if (platform === 'matrix') {
|
|
6
7
|
let encrypted = false;
|
|
7
8
|
const filter = JSON.stringify({ room: { timeline: { limit: 100 } }, presence: { types: [] } });
|
|
8
|
-
const data = await request('/_matrix/client/v3/sync?timeout=
|
|
9
|
+
const data = await request('/_matrix/client/v3/sync?timeout=' + waitMs + '&filter=' + encodeURIComponent(filter) + (cursor ? '&since=' + encodeURIComponent(cursor) : ''));
|
|
9
10
|
if (typeof data.next_batch !== 'string')
|
|
10
11
|
throw new Error('Matrix 同步游标缺失');
|
|
11
12
|
const invites = Object.entries(data.rooms?.invite ?? {});
|
|
@@ -53,9 +54,9 @@ export async function pollDiscovered(platform, accountId, cursor, signal, reques
|
|
|
53
54
|
if (timeline.limited)
|
|
54
55
|
throw new Error('Matrix 私聊消息出现缺口,请检查后重连');
|
|
55
56
|
for (const event of timeline.events) {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
57
|
+
const message = matrixMessage(event, identity.peerId, id);
|
|
58
|
+
if (message)
|
|
59
|
+
messages.push(message);
|
|
59
60
|
}
|
|
60
61
|
}
|
|
61
62
|
return { cursor: data.next_batch, messages, ...(encrypted ? { warning: '检测到 Matrix 加密会话,已跳过:只有未加密的双人会话才能获取配对码和交流。请新建未开启加密的会话并邀请机器人;其他未加密会话不受影响。' } : {}) };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../../src/channels/direct/discovery.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"discovery.js","sourceRoot":"","sources":["../../../src/channels/direct/discovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { DirectBatch, DirectMessage } from './transport.js';
|
|
2
|
+
/** Matrix clients may send caption and file as separate adjacent events. Only
|
|
3
|
+
* coalesce a bounded burst containing media, never plain-text conversations. */
|
|
4
|
+
export declare function groupDirectMessages(messages: readonly DirectMessage[], defaultTarget?: string): DirectMessage[][];
|
|
5
|
+
/** One bounded lookahead, not a background queue. The cursor is committed only
|
|
6
|
+
* after every collected event is handed off, so restart never discards a buffer. */
|
|
7
|
+
export declare function collectDirectBatch(first: DirectBatch, poll: (cursor: string, signal: AbortSignal) => Promise<DirectBatch>, signal: AbortSignal, waitMs?: number): Promise<DirectBatch>;
|
|
8
|
+
//# sourceMappingURL=inbound-batch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inbound-batch.d.ts","sourceRoot":"","sources":["../../../src/channels/direct/inbound-batch.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAKhE;gFACgF;AAChF,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,SAAS,aAAa,EAAE,EAAE,aAAa,SAAK,GAAG,aAAa,EAAE,EAAE,CAkB7G;AAED;oFACoF;AACpF,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,SAAO,GAAG,OAAO,CAAC,WAAW,CAAC,CAW1L"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { setTimeout as delay } from 'node:timers/promises';
|
|
2
|
+
const GROUP_WINDOW_MS = 2000;
|
|
3
|
+
const MAX_GROUP_EVENTS = 16;
|
|
4
|
+
/** Matrix clients may send caption and file as separate adjacent events. Only
|
|
5
|
+
* coalesce a bounded burst containing media, never plain-text conversations. */
|
|
6
|
+
export function groupDirectMessages(messages, defaultTarget = '') {
|
|
7
|
+
const groups = [];
|
|
8
|
+
let burst = [];
|
|
9
|
+
const flush = () => {
|
|
10
|
+
if (burst.some(message => message.media?.length))
|
|
11
|
+
groups.push(burst);
|
|
12
|
+
else
|
|
13
|
+
groups.push(...burst.map(message => [message]));
|
|
14
|
+
burst = [];
|
|
15
|
+
};
|
|
16
|
+
for (const message of messages) {
|
|
17
|
+
const first = burst[0], previous = burst.at(-1);
|
|
18
|
+
if (first && previous && (burst.length >= MAX_GROUP_EVENTS || message.sender !== first.sender
|
|
19
|
+
|| (message.targetId ?? defaultTarget) !== (first.targetId ?? defaultTarget)
|
|
20
|
+
|| !Number.isFinite(message.timestamp) || !Number.isFinite(first.timestamp)
|
|
21
|
+
|| message.timestamp < previous.timestamp || message.timestamp - first.timestamp > GROUP_WINDOW_MS))
|
|
22
|
+
flush();
|
|
23
|
+
burst.push(message);
|
|
24
|
+
}
|
|
25
|
+
flush();
|
|
26
|
+
return groups;
|
|
27
|
+
}
|
|
28
|
+
/** One bounded lookahead, not a background queue. The cursor is committed only
|
|
29
|
+
* after every collected event is handed off, so restart never discards a buffer. */
|
|
30
|
+
export async function collectDirectBatch(first, poll, signal, waitMs = 1000) {
|
|
31
|
+
if (!first.messages.length)
|
|
32
|
+
return first;
|
|
33
|
+
await delay(waitMs, undefined, { signal });
|
|
34
|
+
const next = await poll(first.cursor, signal);
|
|
35
|
+
const seen = new Set();
|
|
36
|
+
const messages = [...first.messages, ...next.messages].filter(message => {
|
|
37
|
+
const key = JSON.stringify([message.targetId, message.sender, message.id]);
|
|
38
|
+
if (seen.has(key))
|
|
39
|
+
return false;
|
|
40
|
+
seen.add(key);
|
|
41
|
+
return true;
|
|
42
|
+
});
|
|
43
|
+
return { cursor: next.cursor, messages, ...(next.warning ?? first.warning ? { warning: next.warning ?? first.warning } : {}) };
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=inbound-batch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inbound-batch.js","sourceRoot":"","sources":["../../../src/channels/direct/inbound-batch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,IAAI,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAG1D,MAAM,eAAe,GAAG,IAAI,CAAA;AAC5B,MAAM,gBAAgB,GAAG,EAAE,CAAA;AAE3B;gFACgF;AAChF,MAAM,UAAU,mBAAmB,CAAC,QAAkC,EAAE,aAAa,GAAG,EAAE;IACxF,MAAM,MAAM,GAAsB,EAAE,CAAA;IACpC,IAAI,KAAK,GAAoB,EAAE,CAAA;IAC/B,MAAM,KAAK,GAAG,GAAG,EAAE;QACjB,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;;YAC/D,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;QACpD,KAAK,GAAG,EAAE,CAAA;IACZ,CAAC,CAAA;IACD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QAC/C,IAAI,KAAK,IAAI,QAAQ,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,gBAAgB,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;eACxF,CAAC,OAAO,CAAC,QAAQ,IAAI,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,IAAI,aAAa,CAAC;eACzE,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC;eACxE,OAAO,CAAC,SAAU,GAAG,QAAQ,CAAC,SAAU,IAAI,OAAO,CAAC,SAAU,GAAG,KAAK,CAAC,SAAU,GAAG,eAAe,CAAC;YAAE,KAAK,EAAE,CAAA;QAClH,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACrB,CAAC;IACD,KAAK,EAAE,CAAA;IACP,OAAO,MAAM,CAAA;AACf,CAAC;AAED;oFACoF;AACpF,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,KAAkB,EAAE,IAAmE,EAAE,MAAmB,EAAE,MAAM,GAAG,IAAI;IAClK,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM;QAAE,OAAO,KAAK,CAAA;IACxC,MAAM,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;IAC1C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;IAC9B,MAAM,QAAQ,GAAG,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;QACtE,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,CAAA;QAC1E,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAA;QAC/B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAAC,OAAO,IAAI,CAAA;IAC5B,CAAC,CAAC,CAAA;IACF,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,OAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;AACjI,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type PartnerInboundAttachment, type PartnerOutboundAttachment } from '../../channel-message.js';
|
|
2
|
+
import type { DirectConfig } from './transport.js';
|
|
3
|
+
export interface DirectMedia {
|
|
4
|
+
source: string;
|
|
5
|
+
name?: string;
|
|
6
|
+
mediaType?: string;
|
|
7
|
+
size?: number;
|
|
8
|
+
encrypted?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export declare const DIRECT_MEDIA_MAX_COUNT = 8;
|
|
11
|
+
type Guard = () => Promise<void>;
|
|
12
|
+
/** Only server-relative, authenticated media APIs. Never fetch a message-provided HTTP URL. */
|
|
13
|
+
export declare class DirectMediaTransfer {
|
|
14
|
+
private config;
|
|
15
|
+
private token;
|
|
16
|
+
private guard;
|
|
17
|
+
constructor(config: DirectConfig, token: string, guard: Guard);
|
|
18
|
+
private bytes;
|
|
19
|
+
private json;
|
|
20
|
+
receive(postId: string, refs: DirectMedia[], signal: AbortSignal, maxBytes?: number): Promise<PartnerInboundAttachment[]>;
|
|
21
|
+
send(file: PartnerOutboundAttachment, signal: AbortSignal): Promise<void>;
|
|
22
|
+
}
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=media.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../../../src/channels/direct/media.ts"],"names":[],"mappings":"AAGA,OAAO,EAA0C,KAAK,wBAAwB,EAAE,KAAK,yBAAyB,EAAE,MAAM,0BAA0B,CAAA;AAChJ,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAElD,MAAM,WAAW,WAAW;IAAG,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE;AACtH,eAAO,MAAM,sBAAsB,IAAI,CAAA;AACvC,KAAK,KAAK,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;AAEhC,+FAA+F;AAC/F,qBAAa,mBAAmB;IAClB,OAAO,CAAC,MAAM;IAAgB,OAAO,CAAC,KAAK;IAAU,OAAO,CAAC,KAAK;gBAA1D,MAAM,EAAE,YAAY,EAAU,KAAK,EAAE,MAAM,EAAU,KAAK,EAAE,KAAK;YAEvE,KAAK;YAwBL,IAAI;IAIZ,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,SAA0B,GAAG,OAAO,CAAC,wBAAwB,EAAE,CAAC;IA4B1I,IAAI,CAAC,IAAI,EAAE,yBAAyB,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CAqChF"}
|