@wecom/wecom-openclaw-plugin 2026.3.25-beta.3 → 2026.3.25-beta.4

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.js CHANGED
@@ -1403,19 +1403,6 @@ function normalizeTemplateCardFields(card, log) {
1403
1403
  }
1404
1404
  return card;
1405
1405
  }
1406
- // ============================================================================
1407
- // 必填字段校验与自动补全
1408
- // ============================================================================
1409
- /** task_id 合法字符:数字、字母、_-@ */
1410
- const TASK_ID_RE = /^[a-zA-Z0-9_\-@]+$/;
1411
- /**
1412
- * 生成一个合法的 task_id。
1413
- * 格式:task_{cardType}_{timestamp}_{随机4位},确保唯一且符合 API 要求。
1414
- */
1415
- function generateTaskId(cardType) {
1416
- const rand = Math.random().toString(36).slice(2, 6);
1417
- return `task_${cardType}_${Date.now()}_${rand}`;
1418
- }
1419
1406
  /**
1420
1407
  * 校验并补全模板卡片的必填字段。
1421
1408
  *
@@ -1435,29 +1422,25 @@ function validateAndFixRequiredFields(card, log) {
1435
1422
  const cardType = card.card_type;
1436
1423
  const fixes = [];
1437
1424
  const warnings = [];
1438
- // ── task_id(所有卡片) ────────────────────────────────────────────
1439
- if (!card.task_id || typeof card.task_id !== "string" || !card.task_id.trim()) {
1440
- const generated = generateTaskId(cardType);
1441
- fixes.push(`task_id: (missing) → "${generated}"`);
1442
- card.task_id = generated;
1425
+ // ── task_id(所有卡片:始终确保唯一性) ─────────────────────────────
1426
+ // LLM 可能编造时间戳导致重复,因此无论是否提供了 task_id,
1427
+ // 都提取语义前缀 + 代码追加真实时间戳和随机后缀来保证唯一。
1428
+ const rawTid = (typeof card.task_id === "string" && card.task_id.trim()) ? card.task_id.trim() : "";
1429
+ const rand = Math.random().toString(36).slice(2, 6);
1430
+ const ts = Date.now();
1431
+ let finalTid;
1432
+ if (rawTid) {
1433
+ // 提取 LLM 的语义前缀:去掉尾部的数字串(LLM 编造的假时间戳)
1434
+ const prefix = rawTid.replace(/_\d{8,}$/, "").replace(/[^a-zA-Z0-9_\-@]/g, "_").slice(0, 80);
1435
+ finalTid = prefix ? `${prefix}_${ts}_${rand}` : `task_${cardType}_${ts}_${rand}`;
1443
1436
  }
1444
1437
  else {
1445
- // 校验合法性:只能由数字、字母和 "_-@" 组成
1446
- const tid = card.task_id;
1447
- if (!TASK_ID_RE.test(tid)) {
1448
- // 尝试清理非法字符
1449
- const cleaned = tid.replace(/[^a-zA-Z0-9_\-@]/g, "_").slice(0, 128);
1450
- if (cleaned && TASK_ID_RE.test(cleaned)) {
1451
- fixes.push(`task_id: "${tid}" → "${cleaned}" (cleaned illegal chars)`);
1452
- card.task_id = cleaned;
1453
- }
1454
- else {
1455
- const generated = generateTaskId(cardType);
1456
- fixes.push(`task_id: "${tid}" → "${generated}" (replaced, too many illegal chars)`);
1457
- card.task_id = generated;
1458
- }
1459
- }
1438
+ finalTid = `task_${cardType}_${ts}_${rand}`;
1439
+ }
1440
+ if (finalTid !== rawTid) {
1441
+ fixes.push(`task_id: "${rawTid || "(missing)"}" → "${finalTid}"`);
1460
1442
  }
1443
+ card.task_id = finalTid;
1461
1444
  // ── main_title ────────────────────────────────────────────────────────
1462
1445
  const mainTitle = card.main_title;
1463
1446
  const hasMainTitle = mainTitle && typeof mainTitle === "object" &&