chatlab-cli 0.29.0 → 0.30.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.
Files changed (101) hide show
  1. package/dist/{chat-command-JKG3FY5B.mjs → chat-command-UZ23GKO7.mjs} +8 -8
  2. package/dist/{chunk-KL2NGIMQ.mjs → chunk-4IZ3WKYU.mjs} +429 -272
  3. package/dist/chunk-4IZ3WKYU.mjs.map +1 -0
  4. package/dist/{chunk-CIB23U32.mjs → chunk-5UBHNQFZ.mjs} +101 -41
  5. package/dist/chunk-5UBHNQFZ.mjs.map +1 -0
  6. package/dist/{chunk-WPI6YSAR.mjs → chunk-7BZLS2KW.mjs} +4114 -3962
  7. package/dist/chunk-7BZLS2KW.mjs.map +1 -0
  8. package/dist/{chunk-QQK7MLCR.mjs → chunk-A2SANKG4.mjs} +121 -32
  9. package/dist/chunk-A2SANKG4.mjs.map +1 -0
  10. package/dist/{chunk-D4WTE7LV.mjs → chunk-CNSYXRJP.mjs} +2 -2
  11. package/dist/{chunk-I35WHWA6.mjs → chunk-FCCL5Z4W.mjs} +3 -3
  12. package/dist/chunk-M55KW2HA.mjs +2323 -0
  13. package/dist/chunk-M55KW2HA.mjs.map +1 -0
  14. package/dist/{chunk-2MZ6G4AC.mjs → chunk-MUPILWAZ.mjs} +2 -2
  15. package/dist/{chunk-7RW4CQAO.mjs → chunk-P3ZOLTGS.mjs} +3 -3
  16. package/dist/{chunk-6FPEP2ZX.mjs → chunk-RDR6PS2R.mjs} +2 -2
  17. package/dist/{chunk-SKUG5XVD.mjs → chunk-ZFU2CHW3.mjs} +5 -4
  18. package/dist/cli.mjs +7 -7
  19. package/dist/contacts-worker.mjs +2 -2
  20. package/dist/{http-5E7ARYFW.mjs → http-UWRA5FLB.mjs} +11 -11
  21. package/dist/{import-3KG6VK6O.mjs → import-745KQL7N.mjs} +7 -7
  22. package/dist/index.mjs +11 -11
  23. package/dist/{mcp-JBI4CUQT.mjs → mcp-UHN5JOHC.mjs} +8 -8
  24. package/dist/people-relationships-worker.mjs +2 -2
  25. package/dist/semantic-index-worker.mjs +1 -1
  26. package/dist/{src-UTBQAOJ3.mjs → src-Y7MDRXLJ.mjs} +12 -6
  27. package/dist/{stream-import-7HZ4IRYJ.mjs → stream-import-3JMXQD7P.mjs} +7 -7
  28. package/dist/{worker-runtime-ALS4MR2A.mjs → worker-runtime-63RYMGZI.mjs} +5 -5
  29. package/dist-web/assets/{BufferResource-MsqP5sq3.js → BufferResource-BVdJ_I5X.js} +1 -1
  30. package/dist-web/assets/CanvasRenderer-BaRuT54R.js +1 -0
  31. package/dist-web/assets/DebugToolsPanel.vue_vue_type_script_setup_true_lang-N5CoiJzN.js +110 -0
  32. package/dist-web/assets/{Filter-wRJtdXx9.js → Filter-B7cNFtuE.js} +1 -1
  33. package/dist-web/assets/LoadingState.vue_vue_type_script_setup_true_lang-D_dJuLWJ.js +1 -0
  34. package/dist-web/assets/{MessageExportModal-BCrMf5Kw.js → MessageExportModal-B2Qm6VVj.js} +1 -1
  35. package/dist-web/assets/{PageHeader-C_yw54le.js → PageHeader-PjlWy9fC.js} +1 -1
  36. package/dist-web/assets/{RelationshipGalaxyCanvas-DTzJq7q7.js → RelationshipGalaxyCanvas-11MafciW.js} +3 -3
  37. package/dist-web/assets/{RelationshipGalaxyThreeCanvas-DIE-0_iM.js → RelationshipGalaxyThreeCanvas-C1I4B8NX.js} +1 -1
  38. package/dist-web/assets/{RenderTargetSystem-BSAQFamI.js → RenderTargetSystem-Chkz1WlI.js} +1 -1
  39. package/dist-web/assets/{WebGLRenderer-lfzmCZNT.js → WebGLRenderer-xK19ru58.js} +1 -1
  40. package/dist-web/assets/{WebGPURenderer-BnEdfdr_.js → WebGPURenderer-CL5ZaKsn.js} +1 -1
  41. package/dist-web/assets/{browserAll-gRNfDyPu.js → browserAll-CyyNzRD_.js} +1 -1
  42. package/dist-web/assets/electron-MXaTKaMu.js +1 -0
  43. package/dist-web/assets/{fetch-BW3aO7PS.js → fetch-D1dDiFO4.js} +1 -1
  44. package/dist-web/assets/{fetch-DPCJ-1l-.js → fetch-DDnVXGte.js} +1 -1
  45. package/dist-web/assets/{fetch-C1fI_KOX.js → fetch-DTwdRTXM.js} +1 -1
  46. package/dist-web/assets/{fetch-CQt-gb-f.js → fetch-DaaJwT-5.js} +1 -1
  47. package/dist-web/assets/{fetch-gMB4wuBd.js → fetch-DeA0ztwT.js} +1 -1
  48. package/dist-web/assets/fetch-DpnIGZSN.js +17 -0
  49. package/dist-web/assets/{fetch-CFRoSIAn.js → fetch-DsE-xcP2.js} +1 -1
  50. package/dist-web/assets/{fetch-mFlEBZyB.js → fetch-DsTgYu_X.js} +1 -1
  51. package/dist-web/assets/{fetch-CN91TIwV.js → fetch-hKE53UO4.js} +1 -1
  52. package/dist-web/assets/{fetch-BwF5hNuF.js → fetch-u9GTMhMF.js} +1 -1
  53. package/dist-web/assets/index-BVkE4qis.js +22 -0
  54. package/dist-web/assets/index-BcXLcFnV.css +1 -0
  55. package/dist-web/assets/{index-Bg4GGPXv.js → index-BnHKyESZ.js} +1 -1
  56. package/dist-web/assets/index-Btr5H7d-.js +2 -0
  57. package/dist-web/assets/{index-MBRD3wPd.css → index-C1p9CbmN.css} +1 -1
  58. package/dist-web/assets/index-COpza1A4.css +1 -0
  59. package/dist-web/assets/index-D04LWJop.js +173 -0
  60. package/dist-web/assets/index-DFCYmzGE.js +2 -0
  61. package/dist-web/assets/{index-DveHdPfK.js → index-DqXHRIhI.js} +1 -1
  62. package/dist-web/assets/{index-ZdCB7xcf.js → index-DqtXt3wl.js} +4 -4
  63. package/dist-web/assets/index-Dszv-QFp.js +64 -0
  64. package/dist-web/assets/index-DzLrWGXu.js +1 -0
  65. package/dist-web/assets/{vendor-nuxt-ui-Dr2T8_OZ.js → vendor-nuxt-ui-DaLxYaC4.js} +1 -1
  66. package/dist-web/assets/{web-BakeV58u.js → web-DPVWfPS-.js} +1 -1
  67. package/dist-web/assets/{webworkerAll-D_6PgURS.js → webworkerAll-DF5QV_vN.js} +1 -1
  68. package/dist-web/index.html +3 -3
  69. package/package.json +1 -1
  70. package/dist/chunk-ARZM6HBX.mjs +0 -542
  71. package/dist/chunk-ARZM6HBX.mjs.map +0 -1
  72. package/dist/chunk-CIB23U32.mjs.map +0 -1
  73. package/dist/chunk-KL2NGIMQ.mjs.map +0 -1
  74. package/dist/chunk-QQK7MLCR.mjs.map +0 -1
  75. package/dist/chunk-WPI6YSAR.mjs.map +0 -1
  76. package/dist-web/assets/CanvasRenderer-BKCvcc2p.js +0 -1
  77. package/dist-web/assets/DebugToolsPanel.vue_vue_type_script_setup_true_lang-HGJb0Et1.js +0 -110
  78. package/dist-web/assets/electron-BHaEaaZP.js +0 -1
  79. package/dist-web/assets/fetch-CBZbgZqk.js +0 -17
  80. package/dist-web/assets/index--6C0sK6a.css +0 -1
  81. package/dist-web/assets/index-B6wEGata.js +0 -173
  82. package/dist-web/assets/index-BgVbj5qX.js +0 -12
  83. package/dist-web/assets/index-BkoXaBV_.js +0 -64
  84. package/dist-web/assets/index-C56IuV5U.css +0 -1
  85. package/dist-web/assets/index-CLRaKwpT.js +0 -2
  86. package/dist-web/assets/index-Dj1BSD7O.js +0 -1
  87. package/dist-web/assets/index-RoDgJcHU.js +0 -2
  88. package/dist-web/assets/index-aljYO5ms.js +0 -1
  89. /package/dist/{chat-command-JKG3FY5B.mjs.map → chat-command-UZ23GKO7.mjs.map} +0 -0
  90. /package/dist/{chunk-D4WTE7LV.mjs.map → chunk-CNSYXRJP.mjs.map} +0 -0
  91. /package/dist/{chunk-I35WHWA6.mjs.map → chunk-FCCL5Z4W.mjs.map} +0 -0
  92. /package/dist/{chunk-2MZ6G4AC.mjs.map → chunk-MUPILWAZ.mjs.map} +0 -0
  93. /package/dist/{chunk-7RW4CQAO.mjs.map → chunk-P3ZOLTGS.mjs.map} +0 -0
  94. /package/dist/{chunk-6FPEP2ZX.mjs.map → chunk-RDR6PS2R.mjs.map} +0 -0
  95. /package/dist/{chunk-SKUG5XVD.mjs.map → chunk-ZFU2CHW3.mjs.map} +0 -0
  96. /package/dist/{http-5E7ARYFW.mjs.map → http-UWRA5FLB.mjs.map} +0 -0
  97. /package/dist/{import-3KG6VK6O.mjs.map → import-745KQL7N.mjs.map} +0 -0
  98. /package/dist/{mcp-JBI4CUQT.mjs.map → mcp-UHN5JOHC.mjs.map} +0 -0
  99. /package/dist/{src-UTBQAOJ3.mjs.map → src-Y7MDRXLJ.mjs.map} +0 -0
  100. /package/dist/{stream-import-7HZ4IRYJ.mjs.map → stream-import-3JMXQD7P.mjs.map} +0 -0
  101. /package/dist/{worker-runtime-ALS4MR2A.mjs.map → worker-runtime-63RYMGZI.mjs.map} +0 -0
@@ -9,7 +9,7 @@ import {
9
9
  createEmptyContactsDiagnostics,
10
10
  normalizeContactsTimeRangePreset,
11
11
  resolveContactsTimeRange
12
- } from "./chunk-D4WTE7LV.mjs";
12
+ } from "./chunk-CNSYXRJP.mjs";
13
13
  import {
14
14
  PEOPLE_RELATIONSHIPS_ALGORITHM_VERSION,
15
15
  buildPeopleRelationshipsNeighborhoodGraph,
@@ -18,7 +18,7 @@ import {
18
18
  computePeopleRelationshipsSnapshot,
19
19
  normalizePeopleRelationshipsTimeRangePreset,
20
20
  resolvePeopleRelationshipsTimeRange
21
- } from "./chunk-2MZ6G4AC.mjs";
21
+ } from "./chunk-MUPILWAZ.mjs";
22
22
  import {
23
23
  BUILTIN_MODELS,
24
24
  BUILTIN_PROVIDERS,
@@ -32,6 +32,7 @@ import {
32
32
  appLogger,
33
33
  batchSegmentChineseWithStats,
34
34
  batchSegmentWithFrequency,
35
+ buildExcludeKeywordsConditions,
35
36
  buildSessionInfo,
36
37
  clearJiebaInstance,
37
38
  clearSessionIndex,
@@ -79,7 +80,7 @@ import {
79
80
  updateMemberAliases,
80
81
  updateSessionOwnerId,
81
82
  writeAuthProfile
82
- } from "./chunk-WPI6YSAR.mjs";
83
+ } from "./chunk-7BZLS2KW.mjs";
83
84
  import {
84
85
  __commonJS,
85
86
  __export,
@@ -6874,7 +6875,7 @@ async function streamParseFile(filePath, callbacks, formatId) {
6874
6875
  }
6875
6876
 
6876
6877
  // ../../packages/node-runtime/src/nlp/word-frequency.ts
6877
- function buildMessageQuery(timeFilter, memberId) {
6878
+ function buildMessageQuery(timeFilter, memberId, excludeKeywords) {
6878
6879
  const conditions = [];
6879
6880
  const params = [];
6880
6881
  if (timeFilter?.startTs !== void 0) {
@@ -6889,6 +6890,11 @@ function buildMessageQuery(timeFilter, memberId) {
6889
6890
  conditions.push("msg.sender_id = ?");
6890
6891
  params.push(memberId);
6891
6892
  }
6893
+ if (excludeKeywords && excludeKeywords.length > 0) {
6894
+ const exclude = buildExcludeKeywordsConditions(excludeKeywords);
6895
+ conditions.push(...exclude.conditions);
6896
+ params.push(...exclude.params);
6897
+ }
6892
6898
  conditions.push("COALESCE(m.account_name, '') != '\u7CFB\u7EDF\u6D88\u606F'");
6893
6899
  conditions.push("msg.type = 0");
6894
6900
  conditions.push("msg.content IS NOT NULL");
@@ -6910,9 +6916,10 @@ function computeWordFrequency(db, params) {
6910
6916
  customPosTags,
6911
6917
  enableStopwords = true,
6912
6918
  dictType = "default",
6913
- excludeWords
6919
+ excludeWords,
6920
+ excludeKeywords
6914
6921
  } = params;
6915
- const { clause, params: filterParams } = buildMessageQuery(timeFilter, memberId);
6922
+ const { clause, params: filterParams } = buildMessageQuery(timeFilter, memberId, excludeKeywords);
6916
6923
  const messages = db.prepare(`SELECT msg.content FROM message msg JOIN member m ON msg.sender_id = m.id${clause}`).all(...filterParams);
6917
6924
  if (messages.length === 0) {
6918
6925
  return { words: [], totalWords: 0, totalMessages: 0, uniqueWords: 0 };
@@ -7254,7 +7261,13 @@ async function streamImportSingle(filePath, deps, formatFeature, formatOptions,
7254
7261
  `INSERT INTO meta (name, platform, type, imported_at, group_id, group_avatar, owner_id) VALUES (?, ?, ?, ?, ?, ?, ?)`
7255
7262
  );
7256
7263
  const insertMember = db.prepare(
7257
- `INSERT OR IGNORE INTO member (platform_id, account_name, group_nickname, avatar, roles) VALUES (?, ?, ?, ?, ?)`
7264
+ `INSERT INTO member (platform_id, account_name, group_nickname, avatar, roles)
7265
+ VALUES (?, ?, ?, ?, ?)
7266
+ ON CONFLICT(platform_id) DO UPDATE SET
7267
+ account_name = COALESCE(NULLIF(excluded.account_name, ''), account_name),
7268
+ group_nickname = COALESCE(NULLIF(excluded.group_nickname, ''), group_nickname),
7269
+ avatar = COALESCE(NULLIF(excluded.avatar, ''), avatar),
7270
+ roles = CASE WHEN excluded.roles != '[]' THEN excluded.roles ELSE roles END`
7258
7271
  );
7259
7272
  const getMemberId = db.prepare(`SELECT id FROM member WHERE platform_id = ?`);
7260
7273
  const insertMessage = db.prepare(
@@ -10550,45 +10563,65 @@ var defaultLogger4 = {
10550
10563
  warn: () => {
10551
10564
  }
10552
10565
  };
10566
+ function emptyStats(count) {
10567
+ return {
10568
+ input: count,
10569
+ output: count,
10570
+ cleaned: 0,
10571
+ blacklistRemoved: 0,
10572
+ denoiseRemoved: 0,
10573
+ mergeCombined: 0,
10574
+ desensitizeRulesApplied: 0
10575
+ };
10576
+ }
10553
10577
  function preprocessMessages(messages, config, logger = defaultLogger4) {
10554
- if (!config || !hasAnyEnabled(config)) return messages;
10555
- if (messages.length === 0) return messages;
10556
- const inputCount = messages.length;
10578
+ return preprocessMessagesWithStats(messages, config, logger).messages;
10579
+ }
10580
+ function preprocessMessagesWithStats(messages, config, logger = defaultLogger4) {
10581
+ if (!config || !hasAnyEnabled(config)) return { messages, stats: emptyStats(messages.length) };
10582
+ if (messages.length === 0) return { messages, stats: emptyStats(0) };
10583
+ const stats = emptyStats(messages.length);
10557
10584
  let result = [...messages];
10558
10585
  const applied = [];
10559
10586
  if (config.dataCleaning !== false) {
10560
10587
  const cleaned = applyDataCleaning(result);
10561
10588
  if (cleaned.changed > 0) {
10562
10589
  result = cleaned.messages;
10590
+ stats.cleaned = cleaned.changed;
10563
10591
  applied.push(`dataCleaning: ${cleaned.changed} messages cleaned`);
10564
10592
  }
10565
10593
  }
10566
10594
  if (config.blacklistKeywords.length > 0) {
10567
10595
  const before = result.length;
10568
10596
  result = applyBlacklistFilter(result, config.blacklistKeywords);
10597
+ stats.blacklistRemoved = before - result.length;
10569
10598
  applied.push(`blacklist: ${before} \u2192 ${result.length} (-${before - result.length})`);
10570
10599
  }
10571
10600
  if (config.denoise) {
10572
10601
  const before = result.length;
10573
10602
  result = applyDenoise(result);
10603
+ stats.denoiseRemoved = before - result.length;
10574
10604
  applied.push(`denoise: ${before} \u2192 ${result.length} (-${before - result.length})`);
10575
10605
  }
10576
10606
  if (config.mergeConsecutive) {
10577
10607
  const before = result.length;
10578
10608
  result = applyMergeConsecutive(result, config.mergeWindowSeconds ?? MERGE_WINDOW_DEFAULT);
10609
+ stats.mergeCombined = before - result.length;
10579
10610
  applied.push(`merge: ${before} \u2192 ${result.length} (-${before - result.length})`);
10580
10611
  }
10581
10612
  if (config.desensitize) {
10582
10613
  const enabledRules = (config.desensitizeRules || []).filter((r) => r.enabled);
10583
10614
  if (enabledRules.length > 0) {
10584
10615
  result = applyDesensitize(result, enabledRules, logger);
10616
+ stats.desensitizeRulesApplied = enabledRules.length;
10585
10617
  applied.push(`desensitize: ${enabledRules.length} rules applied`);
10586
10618
  }
10587
10619
  }
10588
- logger.info("Preprocess", `Pipeline: ${inputCount} \u2192 ${result.length} messages`, {
10620
+ stats.output = result.length;
10621
+ logger.info("Preprocess", `Pipeline: ${stats.input} \u2192 ${result.length} messages`, {
10589
10622
  strategies: applied
10590
10623
  });
10591
- return result;
10624
+ return { messages: result, stats };
10592
10625
  }
10593
10626
  function hasAnyEnabled(config) {
10594
10627
  return config.dataCleaning !== false || config.mergeConsecutive || config.blacklistKeywords.length > 0 || config.denoise || config.desensitize;
@@ -10683,9 +10716,16 @@ function applyMergeConsecutive(messages, windowSeconds) {
10683
10716
  const sameSender = isSameSender(current, msg);
10684
10717
  const withinWindow = Math.abs(msg.timestamp - current.timestamp) <= windowSeconds;
10685
10718
  if (sameSender && withinWindow) {
10719
+ const mergedIds = [
10720
+ ...current.mergedIds ?? (current.id != null ? [current.id] : []),
10721
+ ...msg.mergedIds ?? (msg.id != null ? [msg.id] : [])
10722
+ ];
10686
10723
  current = {
10687
10724
  ...current,
10688
- content: [current.content, msg.content].filter(Boolean).join("\n")
10725
+ content: [current.content, msg.content].filter(Boolean).join("\n"),
10726
+ // keep first message's id, track last id for [#start-end] range citations
10727
+ mergedEndId: msg.id ?? current.mergedEndId,
10728
+ ...mergedIds.length > 0 ? { mergedIds } : {}
10689
10729
  };
10690
10730
  } else {
10691
10731
  merged.push(current);
@@ -10706,15 +10746,29 @@ function applyDesensitize(messages, rules, logger) {
10706
10746
  if (compiledRules.length === 0) return messages;
10707
10747
  return messages.map((msg) => {
10708
10748
  if (!msg.content) return msg;
10709
- let content = msg.content;
10710
- for (const { regex, replacement } of compiledRules) {
10711
- regex.lastIndex = 0;
10712
- content = content.replace(regex, replacement);
10713
- }
10749
+ const content = applyCompiledRules(msg.content, compiledRules);
10714
10750
  if (content === msg.content) return msg;
10715
10751
  return { ...msg, content };
10716
10752
  });
10717
10753
  }
10754
+ function applyCompiledRules(text, compiledRules) {
10755
+ let result = text;
10756
+ for (const { regex, replacement } of compiledRules) {
10757
+ regex.lastIndex = 0;
10758
+ result = result.replace(regex, replacement);
10759
+ }
10760
+ return result;
10761
+ }
10762
+ function desensitizeText(text, rules, logger = defaultLogger4) {
10763
+ const enabledRules = rules.filter((r) => r.enabled);
10764
+ if (enabledRules.length === 0 || !text) return text;
10765
+ return applyCompiledRules(text, compileRules(enabledRules, logger));
10766
+ }
10767
+ function matchesBlacklist(text, keywords) {
10768
+ if (keywords.length === 0 || !text) return false;
10769
+ const lower = text.toLowerCase();
10770
+ return keywords.some((kw) => lower.includes(kw.toLowerCase()));
10771
+ }
10718
10772
  var regexCache = /* @__PURE__ */ new Map();
10719
10773
  function compileRules(rules, logger) {
10720
10774
  const result = [];
@@ -11040,14 +11094,26 @@ function t(key, locale) {
11040
11094
  return "";
11041
11095
  }
11042
11096
  var MAX_MESSAGE_CONTENT_LENGTH = 200;
11043
- function formatMessageCompact(msg, locale) {
11097
+ function formatMessageCompact(msg, locale, options2) {
11044
11098
  const localeStr = isChineseLocale(locale) ? "zh-CN" : "en-US";
11045
11099
  const time = new Date(msg.timestamp * 1e3).toLocaleString(localeStr);
11046
11100
  let content = msg.content || t("noContent", locale);
11047
- if (content.length > MAX_MESSAGE_CONTENT_LENGTH) {
11048
- content = content.slice(0, MAX_MESSAGE_CONTENT_LENGTH) + "...";
11101
+ const maxLength = options2?.maxContentLength ?? MAX_MESSAGE_CONTENT_LENGTH;
11102
+ if (maxLength > 0 && content.length > maxLength) {
11103
+ content = content.slice(0, maxLength) + "...";
11104
+ }
11105
+ let idPrefix = "";
11106
+ if (options2?.includeMessageId && msg.id != null) {
11107
+ const range = msg.mergedEndId != null && msg.mergedEndId !== msg.id ? `${msg.id}-${msg.mergedEndId}` : `${msg.id}`;
11108
+ const hitMark = isHitMessage(msg, options2.hitIds) ? "*" : "";
11109
+ idPrefix = `[#${range}${hitMark}] `;
11049
11110
  }
11050
- return `${time} ${msg.senderName}: ${content}`;
11111
+ return `${idPrefix}${time} ${msg.senderName}: ${content}`;
11112
+ }
11113
+ function isHitMessage(msg, hitIds) {
11114
+ if (!hitIds) return false;
11115
+ if (msg.id != null && hitIds.has(msg.id)) return true;
11116
+ return msg.mergedIds?.some((id) => hitIds.has(id)) ?? false;
11051
11117
  }
11052
11118
  function formatTimeRange(timeFilter, locale) {
11053
11119
  if (!timeFilter) return t("allTime", locale);
@@ -11081,16 +11147,19 @@ function formatToolResultAsText(details) {
11081
11147
  lines.push("");
11082
11148
  let lastDate = "";
11083
11149
  for (const msg of messages) {
11084
- const spaceIdx = msg.indexOf(" ");
11085
- const secondSpaceIdx = msg.indexOf(" ", spaceIdx + 1);
11150
+ const prefixMatch = /^(\[#[^\]]+\] )/.exec(msg);
11151
+ const prefix = prefixMatch ? prefixMatch[1] : "";
11152
+ const body = prefix ? msg.slice(prefix.length) : msg;
11153
+ const spaceIdx = body.indexOf(" ");
11154
+ const secondSpaceIdx = body.indexOf(" ", spaceIdx + 1);
11086
11155
  if (spaceIdx > 0 && secondSpaceIdx > 0) {
11087
- const date = msg.slice(0, spaceIdx);
11088
- const rest = msg.slice(spaceIdx + 1);
11156
+ const date = body.slice(0, spaceIdx);
11157
+ const rest = body.slice(spaceIdx + 1);
11089
11158
  if (date !== lastDate) {
11090
11159
  lines.push(`--- ${date} ---`);
11091
11160
  lastDate = date;
11092
11161
  }
11093
- lines.push(rest);
11162
+ lines.push(prefix + rest);
11094
11163
  } else {
11095
11164
  lines.push(msg);
11096
11165
  }
@@ -11163,14 +11232,26 @@ function applyPreprocessingPipeline(options2) {
11163
11232
  maxToolResultTokens,
11164
11233
  truncationStrategy = "keep_last",
11165
11234
  extraDetails = {},
11166
- logger
11235
+ logger,
11236
+ includeMessageIds = false,
11237
+ hitIds,
11238
+ maxContentChars
11167
11239
  } = options2;
11168
- const processed = preprocessMessages(rawMessages, preprocessConfig, logger);
11240
+ const { messages: processed, stats: preprocessStats } = preprocessMessagesWithStats(
11241
+ rawMessages,
11242
+ preprocessConfig,
11243
+ logger
11244
+ );
11169
11245
  let nameMapLine = "";
11170
11246
  if (anonymizeNames) {
11171
11247
  nameMapLine = anonymizeMessageNames(processed, ownerPlatformId);
11172
11248
  }
11173
- let formatted = processed.map((m) => formatMessageCompact(m, locale));
11249
+ const formatOptions = includeMessageIds || maxContentChars != null ? {
11250
+ includeMessageId: includeMessageIds,
11251
+ hitIds: hitIds ? new Set(hitIds) : void 0,
11252
+ maxContentLength: maxContentChars
11253
+ } : void 0;
11254
+ let formatted = processed.map((m) => formatMessageCompact(m, locale, formatOptions));
11174
11255
  let wasTruncated = false;
11175
11256
  const originalCount = formatted.length;
11176
11257
  if (maxToolResultTokens && maxToolResultTokens > 0) {
@@ -11190,7 +11271,12 @@ function applyPreprocessingPipeline(options2) {
11190
11271
  if (nameMapLine) {
11191
11272
  textContent = nameMapLine + "\n" + textContent;
11192
11273
  }
11193
- return { text: textContent, details: finalDetails };
11274
+ const stats = {
11275
+ ...preprocessStats,
11276
+ renderedBlocks: formatted.length,
11277
+ truncated: wasTruncated
11278
+ };
11279
+ return { text: textContent, details: finalDetails, stats };
11194
11280
  }
11195
11281
 
11196
11282
  // ../../packages/node-runtime/src/ai/agent/constants.ts
@@ -19316,6 +19402,9 @@ export {
19316
19402
  manualCompress,
19317
19403
  createCompressionLlmAdapter,
19318
19404
  preprocessMessages,
19405
+ preprocessMessagesWithStats,
19406
+ desensitizeText,
19407
+ matchesBlacklist,
19319
19408
  DESENSITIZE_RULES_SCHEMA_VERSION,
19320
19409
  BUILTIN_DESENSITIZE_RULES,
19321
19410
  getDefaultRulesForLocale,
@@ -19440,4 +19529,4 @@ export {
19440
19529
  MergeSessionCache,
19441
19530
  pushImport
19442
19531
  };
19443
- //# sourceMappingURL=chunk-QQK7MLCR.mjs.map
19532
+ //# sourceMappingURL=chunk-A2SANKG4.mjs.map