liangzimixin 0.3.21 → 0.3.22

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.cjs CHANGED
@@ -18412,21 +18412,81 @@ function buildInboundPayload(msg, resolvedContent, config2) {
18412
18412
  // src/reply-dispatcher/dispatcher.ts
18413
18413
  var log11 = createLogger("reply-dispatcher/dispatcher");
18414
18414
  function createQuantumImDeliverFn(deps) {
18415
- const { messagePipe, chatId, senderId, replyToMessageId } = deps;
18415
+ const {
18416
+ messagePipe,
18417
+ chatId,
18418
+ senderId,
18419
+ replyToMessageId,
18420
+ tokenManager,
18421
+ fileServerUrl,
18422
+ sdkRuntimeGetter: sdkRuntimeGetter2,
18423
+ allowedLocalRoots,
18424
+ allowPrivateNetwork = false,
18425
+ maxFileSizeMb,
18426
+ chunkSizeMb,
18427
+ timeoutMs
18428
+ } = deps;
18416
18429
  const deliver = async (payload) => {
18417
- if (!payload.text?.trim()) return;
18418
- await messagePipe.sendMessage({
18419
- chatId,
18420
- senderId,
18421
- msgType: "markdown",
18422
- content: JSON.stringify({ content: payload.text }),
18423
- replyToMessageId
18424
- });
18425
- log11.info("\u{1F4E4} AI \u56DE\u590D\u5DF2\u53D1\u9001", {
18426
- chatId,
18427
- \u957F\u5EA6: payload.text.length,
18428
- \u56DE\u590D\u9884\u89C8: payload.text.slice(0, 200)
18429
- });
18430
+ const mediaUrls = [];
18431
+ if (payload.mediaUrls?.length) {
18432
+ mediaUrls.push(...payload.mediaUrls);
18433
+ } else if (payload.mediaUrl) {
18434
+ mediaUrls.push(payload.mediaUrl);
18435
+ }
18436
+ const hasText = Boolean(payload.text?.trim());
18437
+ const hasMedia = mediaUrls.length > 0;
18438
+ if (!hasText && !hasMedia) return;
18439
+ if (hasText) {
18440
+ await messagePipe.sendMessage({
18441
+ chatId,
18442
+ senderId,
18443
+ msgType: "markdown",
18444
+ content: JSON.stringify({ content: payload.text }),
18445
+ replyToMessageId
18446
+ });
18447
+ log11.info("\u{1F4E4} AI \u6587\u672C\u56DE\u590D\u5DF2\u53D1\u9001", {
18448
+ chatId,
18449
+ \u957F\u5EA6: payload.text.length,
18450
+ \u56DE\u590D\u9884\u89C8: payload.text.slice(0, 200)
18451
+ });
18452
+ }
18453
+ if (hasMedia) {
18454
+ for (const mediaUrl of mediaUrls) {
18455
+ try {
18456
+ const result = await resolveAndUploadMedia({
18457
+ mediaUrl,
18458
+ tokenManager,
18459
+ serverUrl: fileServerUrl,
18460
+ allowedLocalRoots,
18461
+ allowPrivateNetwork,
18462
+ sdkRuntime: sdkRuntimeGetter2(),
18463
+ messagePipe,
18464
+ chatId,
18465
+ maxFileSizeMb,
18466
+ chunkSizeMb,
18467
+ timeoutMs
18468
+ });
18469
+ if (result.warning) {
18470
+ log11.warn("\u{1F4E4} \u5A92\u4F53\u53D1\u9001\u964D\u7EA7", { chatId, mediaUrl, warning: result.warning });
18471
+ } else {
18472
+ log11.info("\u{1F4E4} \u5A92\u4F53\u6D88\u606F\u5DF2\u53D1\u9001", { chatId, mediaUrl });
18473
+ }
18474
+ } catch (err) {
18475
+ log11.error("\u{1F4E4} \u5A92\u4F53\u53D1\u9001\u5931\u8D25\uFF0C\u964D\u7EA7\u4E3A\u6587\u672C\u94FE\u63A5", {
18476
+ chatId,
18477
+ mediaUrl,
18478
+ error: err.message
18479
+ });
18480
+ await messagePipe.sendMessage({
18481
+ chatId,
18482
+ senderId,
18483
+ msgType: "markdown",
18484
+ content: JSON.stringify({ content: `\u{1F4CE} ${mediaUrl}` }),
18485
+ replyToMessageId
18486
+ });
18487
+ }
18488
+ }
18489
+ }
18430
18490
  };
18431
18491
  return { deliver };
18432
18492
  }
@@ -18475,7 +18535,8 @@ var InboundPipeline = class {
18475
18535
  chatId: msg.chatId,
18476
18536
  senderId: msg.senderId,
18477
18537
  msgType: "markdown",
18478
- content: JSON.stringify({ content: "\u601D\u8003\u4E2D..." })
18538
+ content: JSON.stringify({ content: "\u601D\u8003\u4E2D..." }),
18539
+ skipEncrypt: true
18479
18540
  }).catch((err) => {
18480
18541
  log12.warn('\u26A0\uFE0F "\u601D\u8003\u4E2D"\u53D1\u9001\u5931\u8D25', { error: err.message });
18481
18542
  });
@@ -18495,7 +18556,14 @@ var InboundPipeline = class {
18495
18556
  messagePipe: this.deps.messagePipe,
18496
18557
  chatId: msg.chatId,
18497
18558
  senderId: msg.senderId,
18498
- replyToMessageId: msg.messageId
18559
+ replyToMessageId: msg.messageId,
18560
+ tokenManager: this.deps.tokenManager,
18561
+ fileServerUrl: this.deps.pluginConfig.file.fileServiceBaseUrl,
18562
+ sdkRuntimeGetter: () => getPluginRuntime(),
18563
+ allowedLocalRoots: void 0,
18564
+ allowPrivateNetwork: this.deps.pluginConfig.file.allowPrivateNetwork,
18565
+ maxFileSizeMb: this.deps.pluginConfig.file.maxFileSizeMb,
18566
+ timeoutMs: this.deps.pluginConfig.file.fetchTimeoutMs
18499
18567
  });
18500
18568
  const { dispatcher, replyOptions } = core.channel.reply.createReplyDispatcherWithTyping({
18501
18569
  deliver
@@ -19836,7 +19904,7 @@ var MessagePipe = class {
19836
19904
  async sendMessage(msg) {
19837
19905
  let content = msg.content;
19838
19906
  let extra = "";
19839
- if (this.quantumAccount) {
19907
+ if (this.quantumAccount && !msg.skipEncrypt) {
19840
19908
  try {
19841
19909
  const { ciphertext, keyId, iv } = await this.crypto.encrypt(msg.content);
19842
19910
  extra = JSON.stringify({
package/dist/index.d.cts CHANGED
@@ -181,6 +181,8 @@ interface OutboundMessage {
181
181
  content: string;
182
182
  /** 回复的原消息 ID */
183
183
  replyToMessageId?: string;
184
+ /** 跳过出站加密 — 用于"思考中"等无需加密的系统提示消息 */
185
+ skipEncrypt?: boolean;
184
186
  }
185
187
  /**
186
188
  * 加密策略枚举 — 根据消息类型选择不同的加密等级
@@ -19040,7 +19040,7 @@ var MessagePipe = class {
19040
19040
  async sendMessage(msg) {
19041
19041
  let content = msg.content;
19042
19042
  let extra = "";
19043
- if (this.quantumAccount) {
19043
+ if (this.quantumAccount && !msg.skipEncrypt) {
19044
19044
  try {
19045
19045
  const { ciphertext, keyId, iv } = await this.crypto.encrypt(msg.content);
19046
19046
  extra = JSON.stringify({
@@ -20213,21 +20213,81 @@ function buildInboundPayload(msg, resolvedContent, config2) {
20213
20213
  // src/reply-dispatcher/dispatcher.ts
20214
20214
  var log23 = createLogger("reply-dispatcher/dispatcher");
20215
20215
  function createQuantumImDeliverFn(deps) {
20216
- const { messagePipe, chatId, senderId, replyToMessageId } = deps;
20216
+ const {
20217
+ messagePipe,
20218
+ chatId,
20219
+ senderId,
20220
+ replyToMessageId,
20221
+ tokenManager,
20222
+ fileServerUrl,
20223
+ sdkRuntimeGetter: sdkRuntimeGetter2,
20224
+ allowedLocalRoots,
20225
+ allowPrivateNetwork = false,
20226
+ maxFileSizeMb,
20227
+ chunkSizeMb,
20228
+ timeoutMs
20229
+ } = deps;
20217
20230
  const deliver = async (payload) => {
20218
- if (!payload.text?.trim()) return;
20219
- await messagePipe.sendMessage({
20220
- chatId,
20221
- senderId,
20222
- msgType: "markdown",
20223
- content: JSON.stringify({ content: payload.text }),
20224
- replyToMessageId
20225
- });
20226
- log23.info("\u{1F4E4} AI \u56DE\u590D\u5DF2\u53D1\u9001", {
20227
- chatId,
20228
- \u957F\u5EA6: payload.text.length,
20229
- \u56DE\u590D\u9884\u89C8: payload.text.slice(0, 200)
20230
- });
20231
+ const mediaUrls = [];
20232
+ if (payload.mediaUrls?.length) {
20233
+ mediaUrls.push(...payload.mediaUrls);
20234
+ } else if (payload.mediaUrl) {
20235
+ mediaUrls.push(payload.mediaUrl);
20236
+ }
20237
+ const hasText = Boolean(payload.text?.trim());
20238
+ const hasMedia = mediaUrls.length > 0;
20239
+ if (!hasText && !hasMedia) return;
20240
+ if (hasText) {
20241
+ await messagePipe.sendMessage({
20242
+ chatId,
20243
+ senderId,
20244
+ msgType: "markdown",
20245
+ content: JSON.stringify({ content: payload.text }),
20246
+ replyToMessageId
20247
+ });
20248
+ log23.info("\u{1F4E4} AI \u6587\u672C\u56DE\u590D\u5DF2\u53D1\u9001", {
20249
+ chatId,
20250
+ \u957F\u5EA6: payload.text.length,
20251
+ \u56DE\u590D\u9884\u89C8: payload.text.slice(0, 200)
20252
+ });
20253
+ }
20254
+ if (hasMedia) {
20255
+ for (const mediaUrl of mediaUrls) {
20256
+ try {
20257
+ const result = await resolveAndUploadMedia({
20258
+ mediaUrl,
20259
+ tokenManager,
20260
+ serverUrl: fileServerUrl,
20261
+ allowedLocalRoots,
20262
+ allowPrivateNetwork,
20263
+ sdkRuntime: sdkRuntimeGetter2(),
20264
+ messagePipe,
20265
+ chatId,
20266
+ maxFileSizeMb,
20267
+ chunkSizeMb,
20268
+ timeoutMs
20269
+ });
20270
+ if (result.warning) {
20271
+ log23.warn("\u{1F4E4} \u5A92\u4F53\u53D1\u9001\u964D\u7EA7", { chatId, mediaUrl, warning: result.warning });
20272
+ } else {
20273
+ log23.info("\u{1F4E4} \u5A92\u4F53\u6D88\u606F\u5DF2\u53D1\u9001", { chatId, mediaUrl });
20274
+ }
20275
+ } catch (err) {
20276
+ log23.error("\u{1F4E4} \u5A92\u4F53\u53D1\u9001\u5931\u8D25\uFF0C\u964D\u7EA7\u4E3A\u6587\u672C\u94FE\u63A5", {
20277
+ chatId,
20278
+ mediaUrl,
20279
+ error: err.message
20280
+ });
20281
+ await messagePipe.sendMessage({
20282
+ chatId,
20283
+ senderId,
20284
+ msgType: "markdown",
20285
+ content: JSON.stringify({ content: `\u{1F4CE} ${mediaUrl}` }),
20286
+ replyToMessageId
20287
+ });
20288
+ }
20289
+ }
20290
+ }
20231
20291
  };
20232
20292
  return { deliver };
20233
20293
  }
@@ -20264,7 +20324,8 @@ var InboundPipeline = class {
20264
20324
  chatId: msg.chatId,
20265
20325
  senderId: msg.senderId,
20266
20326
  msgType: "markdown",
20267
- content: JSON.stringify({ content: "\u601D\u8003\u4E2D..." })
20327
+ content: JSON.stringify({ content: "\u601D\u8003\u4E2D..." }),
20328
+ skipEncrypt: true
20268
20329
  }).catch((err) => {
20269
20330
  log24.warn('\u26A0\uFE0F "\u601D\u8003\u4E2D"\u53D1\u9001\u5931\u8D25', { error: err.message });
20270
20331
  });
@@ -20284,7 +20345,14 @@ var InboundPipeline = class {
20284
20345
  messagePipe: this.deps.messagePipe,
20285
20346
  chatId: msg.chatId,
20286
20347
  senderId: msg.senderId,
20287
- replyToMessageId: msg.messageId
20348
+ replyToMessageId: msg.messageId,
20349
+ tokenManager: this.deps.tokenManager,
20350
+ fileServerUrl: this.deps.pluginConfig.file.fileServiceBaseUrl,
20351
+ sdkRuntimeGetter: () => getPluginRuntime(),
20352
+ allowedLocalRoots: void 0,
20353
+ allowPrivateNetwork: this.deps.pluginConfig.file.allowPrivateNetwork,
20354
+ maxFileSizeMb: this.deps.pluginConfig.file.maxFileSizeMb,
20355
+ timeoutMs: this.deps.pluginConfig.file.fetchTimeoutMs
20288
20356
  });
20289
20357
  const { dispatcher, replyOptions } = core.channel.reply.createReplyDispatcherWithTyping({
20290
20358
  deliver
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "liangzimixin",
3
- "version": "0.3.21",
3
+ "version": "0.3.22",
4
4
  "description": "Quantum-encrypted IM channel plugin for OpenClaw",
5
5
  "type": "module",
6
6
  "main": "dist/index.cjs",