chatlab-cli 0.22.0 → 0.22.1

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 (43) hide show
  1. package/dist/{chunk-6GLMVWGA.mjs → chunk-LZ3W6NS5.mjs} +9 -9
  2. package/dist/{chunk-3UBWLWXB.mjs → chunk-OC2W5Q5T.mjs} +2 -2
  3. package/dist/{chunk-4U45E7TO.mjs → chunk-QRC3RSER.mjs} +2 -2
  4. package/dist/{chunk-QJQJIUUS.mjs → chunk-SQKT45MM.mjs} +73 -25
  5. package/dist/chunk-SQKT45MM.mjs.map +1 -0
  6. package/dist/{chunk-AMMSVJG4.mjs → chunk-XPBPKH6B.mjs} +32 -13
  7. package/dist/chunk-XPBPKH6B.mjs.map +1 -0
  8. package/dist/{chunk-D2XJ4Z7G.mjs → chunk-Z2LYMKCC.mjs} +2 -2
  9. package/dist/cli.mjs +2 -2
  10. package/dist/{http-R5UECMPJ.mjs → http-O5P4BYXU.mjs} +6 -6
  11. package/dist/{import-3LOWRXWA.mjs → import-BDLL3DG7.mjs} +4 -4
  12. package/dist/index.mjs +6 -6
  13. package/dist/{mcp-WBHNLED2.mjs → mcp-L2TPZFE7.mjs} +3 -3
  14. package/dist/{src-UHM2UDRD.mjs → src-FVJL5ENA.mjs} +2 -2
  15. package/dist/{stream-import-V6Z7DXSW.mjs → stream-import-ZTEW3YVL.mjs} +3 -3
  16. package/dist-web/assets/{DebugToolsPanel.vue_vue_type_script_setup_true_lang-CxYyne-Q.js → DebugToolsPanel.vue_vue_type_script_setup_true_lang-CqacsKDU.js} +1 -1
  17. package/dist-web/assets/{MessageExportModal-De5_tX6a.js → MessageExportModal-D1GY6WSV.js} +1 -1
  18. package/dist-web/assets/{electron-H65bUnhW.js → electron-CsUM2O_Y.js} +1 -1
  19. package/dist-web/assets/{fetch-cFjLAPG2.js → fetch-BOogCPfg.js} +1 -1
  20. package/dist-web/assets/{fetch-Q-PqsiMb.js → fetch-CxwnEEqk.js} +1 -1
  21. package/dist-web/assets/index-CM29Kc4p.js +173 -0
  22. package/dist-web/assets/index-D183wYuz.js +7 -0
  23. package/dist-web/assets/{index-BJUGnYn5.js → index-DOwQB7In.js} +1 -1
  24. package/dist-web/assets/index-DSpvXged.css +1 -0
  25. package/dist-web/assets/{index-D_ksezTw.js → index-DTxRy2FH.js} +3 -3
  26. package/dist-web/assets/{index-B_31fXeB.js → index-grds3iG-.js} +2 -2
  27. package/dist-web/assets/{web-CZe0Ismu.js → web-Cx5APyCN.js} +1 -1
  28. package/dist-web/index.html +2 -2
  29. package/package.json +1 -1
  30. package/dist/chunk-AMMSVJG4.mjs.map +0 -1
  31. package/dist/chunk-QJQJIUUS.mjs.map +0 -1
  32. package/dist-web/assets/index-CbOwHYzO.css +0 -1
  33. package/dist-web/assets/index-DKMUn8F5.js +0 -173
  34. package/dist-web/assets/index-Dhg3SDb6.js +0 -7
  35. /package/dist/{chunk-6GLMVWGA.mjs.map → chunk-LZ3W6NS5.mjs.map} +0 -0
  36. /package/dist/{chunk-3UBWLWXB.mjs.map → chunk-OC2W5Q5T.mjs.map} +0 -0
  37. /package/dist/{chunk-4U45E7TO.mjs.map → chunk-QRC3RSER.mjs.map} +0 -0
  38. /package/dist/{chunk-D2XJ4Z7G.mjs.map → chunk-Z2LYMKCC.mjs.map} +0 -0
  39. /package/dist/{http-R5UECMPJ.mjs.map → http-O5P4BYXU.mjs.map} +0 -0
  40. /package/dist/{import-3LOWRXWA.mjs.map → import-BDLL3DG7.mjs.map} +0 -0
  41. /package/dist/{mcp-WBHNLED2.mjs.map → mcp-L2TPZFE7.mjs.map} +0 -0
  42. /package/dist/{src-UHM2UDRD.mjs.map → src-FVJL5ENA.mjs.map} +0 -0
  43. /package/dist/{stream-import-V6Z7DXSW.mjs.map → stream-import-ZTEW3YVL.mjs.map} +0 -0
@@ -22,7 +22,7 @@ import {
22
22
  loadConfig,
23
23
  searchMessagesLike,
24
24
  verifyCliDataPath
25
- } from "./chunk-QJQJIUUS.mjs";
25
+ } from "./chunk-SQKT45MM.mjs";
26
26
 
27
27
  // src/cli.ts
28
28
  import * as fs from "fs";
@@ -173,7 +173,7 @@ program.command("import <file>").description("Import a chat history file (14+ fo
173
173
  console.error(`File not found: ${file}`);
174
174
  process.exit(1);
175
175
  }
176
- const { streamImport, detectFormat } = await import("./import-3LOWRXWA.mjs");
176
+ const { streamImport, detectFormat } = await import("./import-BDLL3DG7.mjs");
177
177
  const { dbManager } = initRuntime();
178
178
  const nativeBinding = resolveNativeBinding();
179
179
  const format = detectFormat(file);
@@ -215,7 +215,7 @@ Import error: ${err instanceof Error ? err.message : err}`);
215
215
  }
216
216
  });
217
217
  program.command("formats").description("List all supported chat history formats").action(async () => {
218
- const { getSupportedFormats } = await import("./import-3LOWRXWA.mjs");
218
+ const { getSupportedFormats } = await import("./import-BDLL3DG7.mjs");
219
219
  const formats = getSupportedFormats();
220
220
  console.log(`${formats.length} supported format(s):
221
221
  `);
@@ -224,11 +224,11 @@ program.command("formats").description("List all supported chat history formats"
224
224
  }
225
225
  });
226
226
  program.command("mcp").description("Start MCP Server (stdio transport, for ClaudeCode / Cursor / AI agents)").action(async () => {
227
- const { startCliMcpServer } = await import("./mcp-WBHNLED2.mjs");
227
+ const { startCliMcpServer } = await import("./mcp-L2TPZFE7.mjs");
228
228
  await startCliMcpServer();
229
229
  });
230
230
  program.command("serve").description("Start the HTTP API server").option("--port <port>", "Server port", String(DEFAULT_API_PORT)).option("--host <host>", "Listen address", "127.0.0.1").option("--token <token>", "Custom Bearer Token (reads from config or auto-generates if omitted)").option("--web [dir]", "Serve Web frontend static assets (defaults to dist-web/)").action(async (options) => {
231
- const { startHttpServer } = await import("./http-R5UECMPJ.mjs");
231
+ const { startHttpServer } = await import("./http-O5P4BYXU.mjs");
232
232
  const port = parseInt(options.port, 10);
233
233
  let webRoot;
234
234
  if (options.web !== void 0) {
@@ -263,7 +263,7 @@ Press Ctrl+C to stop.
263
263
  `);
264
264
  const shutdown = async () => {
265
265
  console.log("\nShutting down...");
266
- const { stopHttpServer } = await import("./http-R5UECMPJ.mjs");
266
+ const { stopHttpServer } = await import("./http-O5P4BYXU.mjs");
267
267
  await stopHttpServer();
268
268
  process.exit(0);
269
269
  };
@@ -280,7 +280,7 @@ Press Ctrl+C to stop.
280
280
  }
281
281
  });
282
282
  program.command("web").description("Launch Web UI with one click (HTTP API + browser auto-open)").option("--port <port>", "Server port", String(DEFAULT_API_PORT)).option("--host <host>", "Listen address", "127.0.0.1").option("--no-open", "Do not auto-open browser").action(async (options) => {
283
- const { startHttpServer } = await import("./http-R5UECMPJ.mjs");
283
+ const { startHttpServer } = await import("./http-O5P4BYXU.mjs");
284
284
  const port = parseInt(options.port, 10);
285
285
  const webDir = resolveCliPath("dist-web");
286
286
  let webRoot;
@@ -308,7 +308,7 @@ Press Ctrl+C to stop.`);
308
308
  }
309
309
  const shutdown = async () => {
310
310
  console.log("\nShutting down...");
311
- const { stopHttpServer } = await import("./http-R5UECMPJ.mjs");
311
+ const { stopHttpServer } = await import("./http-O5P4BYXU.mjs");
312
312
  await stopHttpServer();
313
313
  process.exit(0);
314
314
  };
@@ -417,4 +417,4 @@ if (isDirectRun) {
417
417
  export {
418
418
  run
419
419
  };
420
- //# sourceMappingURL=chunk-6GLMVWGA.mjs.map
420
+ //# sourceMappingURL=chunk-LZ3W6NS5.mjs.map
@@ -11,7 +11,7 @@ import {
11
11
  generateMessageKey,
12
12
  openBetterSqliteDatabase,
13
13
  writeParseResultToDb
14
- } from "./chunk-QJQJIUUS.mjs";
14
+ } from "./chunk-SQKT45MM.mjs";
15
15
 
16
16
  // src/import/chatlab-reader.ts
17
17
  import * as fs from "fs";
@@ -392,4 +392,4 @@ export {
392
392
  parseFile,
393
393
  importData
394
394
  };
395
- //# sourceMappingURL=chunk-3UBWLWXB.mjs.map
395
+ //# sourceMappingURL=chunk-OC2W5Q5T.mjs.map
@@ -13,7 +13,7 @@ import {
13
13
  incrementalImport,
14
14
  openBetterSqliteDatabase,
15
15
  streamingImport
16
- } from "./chunk-QJQJIUUS.mjs";
16
+ } from "./chunk-SQKT45MM.mjs";
17
17
 
18
18
  // src/import/stream-import.ts
19
19
  import * as fs from "fs";
@@ -141,4 +141,4 @@ export {
141
141
  analyzeIncrementalImport2 as analyzeIncrementalImport,
142
142
  analyzeNewImport2 as analyzeNewImport
143
143
  };
144
- //# sourceMappingURL=chunk-4U45E7TO.mjs.map
144
+ //# sourceMappingURL=chunk-QRC3RSER.mjs.map
@@ -14909,11 +14909,17 @@ var aiLocales = { "zh-CN": zh_CN_default, "en-US": en_US_default, "ja-JP": ja_JP
14909
14909
  var MIN_MESSAGE_COUNT = 3;
14910
14910
  var MAX_CONTENT_PER_CALL = 8e3;
14911
14911
  var SEGMENT_THRESHOLD = 8e3;
14912
- function getSummaryLengthLimit(messageCount) {
14913
- if (messageCount <= 10) return 50;
14914
- if (messageCount <= 30) return 80;
14915
- if (messageCount <= 100) return 120;
14916
- return 200;
14912
+ function getSummaryLengthLimit(messageCount, strategy = "standard") {
14913
+ if (strategy === "brief") {
14914
+ if (messageCount <= 10) return 50;
14915
+ if (messageCount <= 30) return 80;
14916
+ if (messageCount <= 100) return 120;
14917
+ return 200;
14918
+ }
14919
+ if (messageCount <= 10) return 100;
14920
+ if (messageCount <= 30) return 200;
14921
+ if (messageCount <= 100) return 350;
14922
+ return 500;
14917
14923
  }
14918
14924
  var MEANINGFUL_SHORT_ZH = ["\u597D\u7684", "\u4E0D\u662F", "\u662F\u7684", "\u53EF\u4EE5", "\u4E0D\u884C", "\u597D\u5427", "\u660E\u767D", "\u77E5\u9053", "\u540C\u610F"];
14919
14925
  var MEANINGLESS_SHORT_EN = [
@@ -15009,34 +15015,55 @@ function splitIntoSegments(messages, maxCharsPerSegment) {
15009
15015
  if (currentSegment.length > 0) segments.push(currentSegment);
15010
15016
  return segments;
15011
15017
  }
15012
- function buildSummaryPrompt(content, lengthLimit, locale) {
15018
+ function buildSummaryPrompt(content, lengthLimit, locale, strategy) {
15019
+ if (strategy === "brief") {
15020
+ if (locale.startsWith("zh")) {
15021
+ return `\u8BF7\u7528\u7B80\u6D01\u7684\u8BED\u8A00\uFF08${lengthLimit}\u5B57\u4EE5\u5185\uFF09\u603B\u7ED3\u4EE5\u4E0B\u5BF9\u8BDD\u7684\u4E3B\u8981\u5185\u5BB9\u6216\u8BDD\u9898\u3002\u53EA\u8F93\u51FA\u6458\u8981\u5185\u5BB9\uFF0C\u4E0D\u8981\u6DFB\u52A0\u4EFB\u4F55\u524D\u7F00\u3001\u89E3\u91CA\u6216\u5F15\u53F7\u3002
15022
+
15023
+ ${content}`;
15024
+ }
15025
+ return `Summarize the following conversation concisely (max ${lengthLimit} characters). Output only the summary, no prefix, explanation, or quotes.
15026
+
15027
+ ${content}`;
15028
+ }
15013
15029
  if (locale.startsWith("zh")) {
15014
- return `\u8BF7\u7528\u7B80\u6D01\u7684\u8BED\u8A00\uFF08${lengthLimit}\u5B57\u4EE5\u5185\uFF09\u603B\u7ED3\u4EE5\u4E0B\u5BF9\u8BDD\u7684\u4E3B\u8981\u5185\u5BB9\u6216\u8BDD\u9898\u3002\u53EA\u8F93\u51FA\u6458\u8981\u5185\u5BB9\uFF0C\u4E0D\u8981\u6DFB\u52A0\u4EFB\u4F55\u524D\u7F00\u3001\u89E3\u91CA\u6216\u5F15\u53F7\u3002
15030
+ return `\u8BF7\u603B\u7ED3\u4EE5\u4E0B\u804A\u5929\u8BB0\u5F55\uFF08${lengthLimit}\u5B57\u4EE5\u5185\uFF09\uFF0C\u9700\u5305\u542B\uFF1A\u8C01\u53C2\u4E0E\u4E86\u8BA8\u8BBA\u3001\u8BA8\u8BBA\u4E86\u4EC0\u4E48\u4E8B\u60C5\u3001\u5173\u952E\u7EC6\u8282\u548C\u7ED3\u8BBA\u3002\u75282-4\u53E5\u8BDD\u63CF\u8FF0\uFF0C\u4E0D\u8981\u7F57\u5217\u6BCF\u6761\u6D88\u606F\u3002\u53EA\u8F93\u51FA\u6458\u8981\u5185\u5BB9\uFF0C\u4E0D\u8981\u6DFB\u52A0\u4EFB\u4F55\u524D\u7F00\u3001\u89E3\u91CA\u6216\u5F15\u53F7\u3002
15015
15031
 
15016
15032
  ${content}`;
15017
15033
  }
15018
- return `Summarize the following conversation concisely (max ${lengthLimit} characters). Output only the summary, no prefix, explanation, or quotes.
15034
+ return `Summarize the following chat log (max ${lengthLimit} characters). Include: who participated, what was discussed, key details and conclusions. Use 2-4 sentences, don't list individual messages. Output only the summary, no prefix, explanation, or quotes.
15019
15035
 
15020
15036
  ${content}`;
15021
15037
  }
15022
- function buildSubSummaryPrompt(content, locale) {
15038
+ function buildSubSummaryPrompt(content, locale, strategy) {
15039
+ const limit = strategy === "brief" ? 50 : 100;
15023
15040
  if (locale.startsWith("zh")) {
15024
- return `\u8BF7\u7528\u4E00\u53E5\u8BDD\uFF08\u4E0D\u8D85\u8FC750\u5B57\uFF09\u6982\u62EC\u4EE5\u4E0B\u5BF9\u8BDD\u7247\u6BB5\u7684\u4E3B\u8981\u5185\u5BB9\u3002\u53EA\u8F93\u51FA\u6458\u8981\u5185\u5BB9\uFF0C\u4E0D\u8981\u6DFB\u52A0\u4EFB\u4F55\u524D\u7F00\u3001\u89E3\u91CA\u6216\u5F15\u53F7\u3002
15041
+ return `\u8BF7\u7528\u4E00\u5230\u4E24\u53E5\u8BDD\uFF08\u4E0D\u8D85\u8FC7${limit}\u5B57\uFF09\u6982\u62EC\u4EE5\u4E0B\u5BF9\u8BDD\u7247\u6BB5\u7684\u4E3B\u8981\u5185\u5BB9\uFF0C\u5305\u62EC\u8C01\u8BF4\u4E86\u4EC0\u4E48\u3002\u53EA\u8F93\u51FA\u6458\u8981\u5185\u5BB9\uFF0C\u4E0D\u8981\u6DFB\u52A0\u4EFB\u4F55\u524D\u7F00\u3001\u89E3\u91CA\u6216\u5F15\u53F7\u3002
15025
15042
 
15026
15043
  ${content}`;
15027
15044
  }
15028
- return `Summarize this conversation segment in one sentence (max 50 characters). Output only the summary, no prefix or quotes.
15045
+ return `Summarize this conversation segment in 1-2 sentences (max ${limit} characters), including who said what. Output only the summary, no prefix or quotes.
15029
15046
 
15030
15047
  ${content}`;
15031
15048
  }
15032
- function buildMergePrompt(subSummaries, lengthLimit, locale) {
15049
+ function buildMergePrompt(subSummaries, lengthLimit, locale, strategy) {
15033
15050
  const list = subSummaries.map((s, i) => `${i + 1}. ${s}`).join("\n");
15051
+ if (strategy === "brief") {
15052
+ if (locale.startsWith("zh")) {
15053
+ return `\u4EE5\u4E0B\u662F\u4E00\u6BB5\u5BF9\u8BDD\u7684\u591A\u4E2A\u7247\u6BB5\u6458\u8981\uFF0C\u8BF7\u5C06\u5B83\u4EEC\u5408\u5E76\u6210\u4E00\u4E2A\u5B8C\u6574\u7684\u603B\u7ED3\uFF08${lengthLimit}\u5B57\u4EE5\u5185\uFF09\u3002\u53EA\u8F93\u51FA\u6458\u8981\u5185\u5BB9\uFF0C\u4E0D\u8981\u6DFB\u52A0\u4EFB\u4F55\u524D\u7F00\u3001\u89E3\u91CA\u6216\u5F15\u53F7\u3002
15054
+
15055
+ ${list}`;
15056
+ }
15057
+ return `Below are summaries of different parts of a conversation. Merge them into one cohesive summary (max ${lengthLimit} characters). Output only the summary, no prefix or quotes.
15058
+
15059
+ ${list}`;
15060
+ }
15034
15061
  if (locale.startsWith("zh")) {
15035
- return `\u4EE5\u4E0B\u662F\u4E00\u6BB5\u5BF9\u8BDD\u7684\u591A\u4E2A\u7247\u6BB5\u6458\u8981\uFF0C\u8BF7\u5C06\u5B83\u4EEC\u5408\u5E76\u6210\u4E00\u4E2A\u5B8C\u6574\u7684\u603B\u7ED3\uFF08${lengthLimit}\u5B57\u4EE5\u5185\uFF09\u3002\u53EA\u8F93\u51FA\u6458\u8981\u5185\u5BB9\uFF0C\u4E0D\u8981\u6DFB\u52A0\u4EFB\u4F55\u524D\u7F00\u3001\u89E3\u91CA\u6216\u5F15\u53F7\u3002
15062
+ return `\u4EE5\u4E0B\u662F\u4E00\u6BB5\u5BF9\u8BDD\u7684\u591A\u4E2A\u7247\u6BB5\u6458\u8981\uFF0C\u8BF7\u5C06\u5B83\u4EEC\u5408\u5E76\u6210\u4E00\u4E2A\u5B8C\u6574\u7684\u603B\u7ED3\uFF08${lengthLimit}\u5B57\u4EE5\u5185\uFF09\u3002\u4FDD\u7559\u53C2\u4E0E\u8005\u3001\u4E8B\u4EF6\u548C\u5173\u952E\u7EC6\u8282\u3002\u53EA\u8F93\u51FA\u6458\u8981\u5185\u5BB9\uFF0C\u4E0D\u8981\u6DFB\u52A0\u4EFB\u4F55\u524D\u7F00\u3001\u89E3\u91CA\u6216\u5F15\u53F7\u3002
15036
15063
 
15037
15064
  ${list}`;
15038
15065
  }
15039
- return `Below are summaries of different parts of a conversation. Merge them into one cohesive summary (max ${lengthLimit} characters). Output only the summary, no prefix or quotes.
15066
+ return `Below are summaries of different parts of a conversation. Merge them into one cohesive summary (max ${lengthLimit} characters). Preserve participants, events, and key details. Output only the summary, no prefix or quotes.
15040
15067
 
15041
15068
  ${list}`;
15042
15069
  }
@@ -15052,7 +15079,7 @@ function postProcessSummary(summary, lengthLimit) {
15052
15079
  return result;
15053
15080
  }
15054
15081
  async function generateSessionSummary(deps, chatSessionId, options = {}) {
15055
- const { locale = "zh-CN", forceRegenerate = false } = options;
15082
+ const { locale = "zh-CN", forceRegenerate = false, strategy = "standard" } = options;
15056
15083
  const log = deps.logger;
15057
15084
  try {
15058
15085
  if (!forceRegenerate) {
@@ -15070,18 +15097,20 @@ async function generateSessionSummary(deps, chatSessionId, options = {}) {
15070
15097
  if (validMessages.length < MIN_MESSAGE_COUNT) {
15071
15098
  return { success: false, error: deps.t("summary.tooFewValidMessages", { count: MIN_MESSAGE_COUNT }) };
15072
15099
  }
15073
- const lengthLimit = getSummaryLengthLimit(validMessages.length);
15100
+ const lengthLimit = getSummaryLengthLimit(validMessages.length, strategy);
15101
+ const maxTokens = strategy === "brief" ? 300 : 600;
15102
+ const subMaxTokens = strategy === "brief" ? 100 : 200;
15074
15103
  const content = formatMessages(validMessages);
15075
15104
  log?.info(
15076
15105
  "Summary",
15077
- `Generating summary: sessionId=${chatSessionId}, raw=${rawMessages.length}, valid=${validMessages.length}, chars=${content.length}`
15106
+ `Generating summary: sessionId=${chatSessionId}, strategy=${strategy}, raw=${rawMessages.length}, valid=${validMessages.length}, chars=${content.length}`
15078
15107
  );
15079
15108
  let summary;
15080
15109
  if (content.length <= SEGMENT_THRESHOLD) {
15081
15110
  summary = await deps.llmComplete(
15082
15111
  deps.t("summary.systemPromptDirect"),
15083
- buildSummaryPrompt(content, lengthLimit, locale),
15084
- { temperature: 0.3, maxTokens: 300 }
15112
+ buildSummaryPrompt(content, lengthLimit, locale, strategy),
15113
+ { temperature: 0.3, maxTokens }
15085
15114
  );
15086
15115
  summary = summary.trim();
15087
15116
  } else {
@@ -15092,8 +15121,8 @@ async function generateSessionSummary(deps, chatSessionId, options = {}) {
15092
15121
  const segContent = formatMessages(segment2);
15093
15122
  const sub = await deps.llmComplete(
15094
15123
  deps.t("summary.systemPromptDirect"),
15095
- buildSubSummaryPrompt(segContent, locale),
15096
- { temperature: 0.3, maxTokens: 100 }
15124
+ buildSubSummaryPrompt(segContent, locale, strategy),
15125
+ { temperature: 0.3, maxTokens: subMaxTokens }
15097
15126
  );
15098
15127
  subSummaries.push(sub.trim());
15099
15128
  }
@@ -15102,8 +15131,8 @@ async function generateSessionSummary(deps, chatSessionId, options = {}) {
15102
15131
  } else {
15103
15132
  summary = await deps.llmComplete(
15104
15133
  deps.t("summary.systemPromptMerge"),
15105
- buildMergePrompt(subSummaries, lengthLimit, locale),
15106
- { temperature: 0.3, maxTokens: 300 }
15134
+ buildMergePrompt(subSummaries, lengthLimit, locale, strategy),
15135
+ { temperature: 0.3, maxTokens }
15107
15136
  );
15108
15137
  summary = summary.trim();
15109
15138
  }
@@ -16842,7 +16871,8 @@ var localeConfigSchema = z.object({
16842
16871
  });
16843
16872
  var uiConfigSchema = z.object({
16844
16873
  default_session_tab: z.enum(["overview", "ai-chat"]).default("overview"),
16845
- session_gap_threshold: z.number().int().min(60).max(86400).default(1800)
16874
+ session_gap_threshold: z.number().int().min(60).max(86400).default(1800),
16875
+ summary_strategy: z.enum(["brief", "standard"]).default("standard")
16846
16876
  });
16847
16877
  var configSchema = z.object({
16848
16878
  llm: llmConfigSchema.default({}),
@@ -18806,6 +18836,7 @@ function rebuildFts(adapter, sessionId) {
18806
18836
  // ../../packages/node-runtime/src/services/summary-service.ts
18807
18837
  var summary_service_exports = {};
18808
18838
  __export(summary_service_exports, {
18839
+ checkCanGenerate: () => checkCanGenerate,
18809
18840
  generateAllSummaries: () => generateAllSummaries,
18810
18841
  generateSummary: () => generateSummary
18811
18842
  });
@@ -18863,6 +18894,23 @@ async function generateAllSummaries(adapter, sessionId, serviceDeps, options) {
18863
18894
  }
18864
18895
  return { success, failed, total: chatSessions.length };
18865
18896
  }
18897
+ function checkCanGenerate(adapter, sessionId, chatSessionIds) {
18898
+ const db = adapter.ensureReadonly(sessionId);
18899
+ const deps = {
18900
+ loadMessages(chatSessionId, limit = 500) {
18901
+ const data = getSessionMessages(db, chatSessionId, limit);
18902
+ if (!data) return null;
18903
+ return data.messages.map((m) => ({ senderName: m.senderName, content: m.content }));
18904
+ },
18905
+ t: (key) => key
18906
+ };
18907
+ const resultMap = checkSessionsCanGenerateSummary(deps, chatSessionIds);
18908
+ const result = {};
18909
+ for (const [id, info] of resultMap) {
18910
+ result[id] = info;
18911
+ }
18912
+ return result;
18913
+ }
18866
18914
 
18867
18915
  // ../../packages/node-runtime/src/services/export-service.ts
18868
18916
  var export_service_exports = {};
@@ -19153,4 +19201,4 @@ export {
19153
19201
  export_service_exports,
19154
19202
  createDatabaseManagerAdapter
19155
19203
  };
19156
- //# sourceMappingURL=chunk-QJQJIUUS.mjs.map
19204
+ //# sourceMappingURL=chunk-SQKT45MM.mjs.map