chatlab-cli 0.24.1 → 0.25.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 (73) hide show
  1. package/dist/chat-command-5XMRLXZM.mjs +166 -0
  2. package/dist/chat-command-5XMRLXZM.mjs.map +1 -0
  3. package/dist/{chunk-N5DGZQB4.mjs → chunk-7VG6QGQ2.mjs} +1543 -664
  4. package/dist/chunk-7VG6QGQ2.mjs.map +1 -0
  5. package/dist/{chunk-QJI6AOAT.mjs → chunk-CUCDRAY6.mjs} +17 -25
  6. package/dist/chunk-CUCDRAY6.mjs.map +1 -0
  7. package/dist/chunk-FDK6SPCG.mjs +40 -0
  8. package/dist/chunk-FDK6SPCG.mjs.map +1 -0
  9. package/dist/{chunk-ZL322NVL.mjs → chunk-GTCTDD2Z.mjs} +116 -504
  10. package/dist/chunk-GTCTDD2Z.mjs.map +1 -0
  11. package/dist/{chunk-43XWYC3M.mjs → chunk-JE3FOFF7.mjs} +219 -123
  12. package/dist/chunk-JE3FOFF7.mjs.map +1 -0
  13. package/dist/{chunk-QY6P2YS7.mjs → chunk-PDQFSQO6.mjs} +59 -33
  14. package/dist/chunk-PDQFSQO6.mjs.map +1 -0
  15. package/dist/chunk-WYHGWTA4.mjs +485 -0
  16. package/dist/chunk-WYHGWTA4.mjs.map +1 -0
  17. package/dist/{chunk-CIIQ3S2X.mjs → chunk-YZYP5ST6.mjs} +37 -8
  18. package/dist/chunk-YZYP5ST6.mjs.map +1 -0
  19. package/dist/cli.mjs +3 -2
  20. package/dist/{http-TPX74BLK.mjs → http-C3CGXUBU.mjs} +8 -6
  21. package/dist/{import-B745DRHD.mjs → import-VS7L5JDX.mjs} +4 -4
  22. package/dist/index.mjs +10 -8
  23. package/dist/{mcp-YWAVG5XW.mjs → mcp-6VXDPUQK.mjs} +11 -6
  24. package/dist/mcp-6VXDPUQK.mjs.map +1 -0
  25. package/dist/{stream-import-OPALPVWF.mjs → stream-import-TFDBNVIW.mjs} +3 -3
  26. package/dist-web/assets/{DebugToolsPanel-DaSNc1o-.css → DebugToolsPanel-vn-bnUxn.css} +1 -1
  27. package/dist-web/assets/DebugToolsPanel.vue_vue_type_script_setup_true_lang-B1xZmp9r.js +161 -0
  28. package/dist-web/assets/{EChartWordcloud-VpNJDurs.js → EChartWordcloud-CzhfrEF_.js} +1 -1
  29. package/dist-web/assets/{MessageExportModal-CSfaY25B.js → MessageExportModal-B79pPBL9.js} +1 -1
  30. package/dist-web/assets/{electron-BUeXfvxT.js → electron-DRkrjeIl.js} +1 -1
  31. package/dist-web/assets/electron-Dv8jdn_2.js +1 -0
  32. package/dist-web/assets/{fetch-RDFt3hmp.js → fetch-BmZIm6mS.js} +1 -1
  33. package/dist-web/assets/fetch-BqLy63aj.js +1 -0
  34. package/dist-web/assets/fetch-BstX-wd4.js +1 -0
  35. package/dist-web/assets/{fetch-BohUj3CQ.js → fetch-Bvcxe5PI.js} +1 -1
  36. package/dist-web/assets/{fetch-BneHn5qk.js → fetch-CDamdvtb.js} +1 -1
  37. package/dist-web/assets/{fetch-DypPduyQ.js → fetch-DWg-2kOp.js} +1 -1
  38. package/dist-web/assets/{fetch-CARsBVl0.js → fetch-DfgdagMN.js} +1 -1
  39. package/dist-web/assets/{fetch-Ck3tjoLa.js → fetch-Drk9dLaF.js} +1 -1
  40. package/dist-web/assets/{fetch-B2q6973s.js → fetch-Y-_WsCuk.js} +1 -1
  41. package/dist-web/assets/{fetch-BGMRmQx0.js → fetch-ph2_d79v.js} +1 -1
  42. package/dist-web/assets/{index-Bvlj3dMn.js → index-9urfJP1r.js} +1 -1
  43. package/dist-web/assets/index-CfKjh0Jr.js +9 -0
  44. package/dist-web/assets/index-CprJOAB1.css +1 -0
  45. package/dist-web/assets/{index-BvaWRM6_.js → index-DMWf5On7.js} +1 -1
  46. package/dist-web/assets/{index-DCWvD-4L.js → index-D_hHm7bQ.js} +2 -2
  47. package/dist-web/assets/index-MCdpiX_O.js +173 -0
  48. package/dist-web/assets/{index-C5LrQG3N.js → index-deYDOVUa.js} +4 -4
  49. package/dist-web/assets/vendor-echarts-CITQeskI.js +11 -0
  50. package/dist-web/assets/{vendor-echarts-wordcloud-CZ9gsX8l.js → vendor-echarts-wordcloud-B1kQMklB.js} +1 -1
  51. package/dist-web/assets/{vendor-nuxt-ui-BYU7dz8t.js → vendor-nuxt-ui-C_8CsH6e.js} +1 -1
  52. package/dist-web/assets/{vendor-reka-ui-CnB0mMNX.js → vendor-reka-ui-CIMXwvEp.js} +1 -1
  53. package/dist-web/assets/{web-CXPkmhis.js → web-XJV6Vj5t.js} +1 -1
  54. package/dist-web/index.html +4 -4
  55. package/package.json +1 -1
  56. package/dist/chunk-43XWYC3M.mjs.map +0 -1
  57. package/dist/chunk-CIIQ3S2X.mjs.map +0 -1
  58. package/dist/chunk-N5DGZQB4.mjs.map +0 -1
  59. package/dist/chunk-QJI6AOAT.mjs.map +0 -1
  60. package/dist/chunk-QY6P2YS7.mjs.map +0 -1
  61. package/dist/chunk-ZL322NVL.mjs.map +0 -1
  62. package/dist/mcp-YWAVG5XW.mjs.map +0 -1
  63. package/dist-web/assets/DebugToolsPanel.vue_vue_type_script_setup_true_lang-BBDrsJfe.js +0 -161
  64. package/dist-web/assets/electron-BynNUuEA.js +0 -1
  65. package/dist-web/assets/fetch-BtHwWs8A.js +0 -1
  66. package/dist-web/assets/fetch-DzNuFdFM.js +0 -1
  67. package/dist-web/assets/index-BRwEubUe.js +0 -173
  68. package/dist-web/assets/index-DB-iqXzV.css +0 -1
  69. package/dist-web/assets/index-DS1rzk1I.js +0 -8
  70. package/dist-web/assets/vendor-echarts-C5u62NnM.js +0 -11
  71. /package/dist/{http-TPX74BLK.mjs.map → http-C3CGXUBU.mjs.map} +0 -0
  72. /package/dist/{import-B745DRHD.mjs.map → import-VS7L5JDX.mjs.map} +0 -0
  73. /package/dist/{stream-import-OPALPVWF.mjs.map → stream-import-TFDBNVIW.mjs.map} +0 -0
@@ -5,6 +5,7 @@ const require = __createRequire(import.meta.url);
5
5
  const __filename = __fileURLToPath(import.meta.url);
6
6
  const __dirname = __pathDirname(__filename);
7
7
  import {
8
+ buildChartPayload,
8
9
  executeParameterizedSql,
9
10
  executeReadonlySql,
10
11
  getChatOverview,
@@ -19,14 +20,14 @@ import {
19
20
  getMessageContext,
20
21
  getRecentMessages,
21
22
  getSearchMessageContext,
22
- getSessionMessages,
23
+ getSegmentMessages,
24
+ getSegmentSummaries,
23
25
  getSessionMeta,
24
26
  getSessionOverview,
25
- getSessionSummaries,
26
27
  getWeekdayActivity,
27
28
  searchMessagesLike,
28
- searchSessions
29
- } from "./chunk-N5DGZQB4.mjs";
29
+ searchSegments
30
+ } from "./chunk-7VG6QGQ2.mjs";
30
31
 
31
32
  // ../../packages/tools/src/definitions/sql-query.ts
32
33
  var inputSchema = {
@@ -68,7 +69,8 @@ var sqlQueryTool = {
68
69
  name: "execute_sql",
69
70
  description: "\u5BF9\u804A\u5929\u6570\u636E\u5E93\u6267\u884C\u53EA\u8BFB SELECT \u67E5\u8BE2\u3002\u4F7F\u7528\u524D\u53EF\u5148\u8C03\u7528 get_schema \u67E5\u770B\u8868\u7ED3\u6784\u3002",
70
71
  inputSchema,
71
- handler
72
+ handler,
73
+ category: "analysis"
72
74
  };
73
75
  var schemaTool = {
74
76
  name: "get_schema",
@@ -77,8 +79,101 @@ var schemaTool = {
77
79
  handler: schemaHandler
78
80
  };
79
81
 
80
- // ../../packages/tools/src/definitions/session-info.ts
82
+ // ../../packages/tools/src/definitions/render-chart.ts
83
+ var DEFAULT_MAX_ROWS = 1e3;
84
+ var RE_SECONDS_TIMESTAMP_DIVIDED_AS_MILLISECONDS = /\b(?:\w+\.)?ts\s*\/\s*1000\b/i;
81
85
  var inputSchema2 = {
86
+ type: "object",
87
+ properties: {
88
+ sql: {
89
+ type: "string",
90
+ description: "Read-only SELECT or WITH SELECT SQL used to produce chart rows."
91
+ },
92
+ params: {
93
+ type: "object",
94
+ description: "Named SQL parameters. Use an empty object when no parameters are needed.",
95
+ additionalProperties: true,
96
+ default: {}
97
+ },
98
+ chartSpec: {
99
+ type: "object",
100
+ description: "ChartSpec v1. Required fields: version, type, title, encoding. Supported types: bar, line, pie, heatmap.",
101
+ additionalProperties: true
102
+ },
103
+ maxRows: {
104
+ type: "number",
105
+ description: "Maximum rows to fetch before chart normalization.",
106
+ default: DEFAULT_MAX_ROWS,
107
+ minimum: 1,
108
+ maximum: 5e3
109
+ }
110
+ },
111
+ required: ["sql", "chartSpec"]
112
+ };
113
+ function normalizeSql(sql, maxRows) {
114
+ if (typeof sql !== "string" || sql.trim().length === 0) {
115
+ throw new Error("sql must be a non-empty string");
116
+ }
117
+ const trimmed = sql.trim().replace(/;+\s*$/, "");
118
+ if (trimmed.includes(";")) {
119
+ throw new Error("Only a single read-only SQL statement is allowed");
120
+ }
121
+ const statementStart = trimmed.replace(/^(\s|--[^\n]*(\n|$)|\/\*[\s\S]*?\*\/)*/, "");
122
+ if (!/^(SELECT|WITH)\b/i.test(statementStart)) {
123
+ throw new Error("render_chart only accepts SELECT or WITH SELECT SQL");
124
+ }
125
+ if (RE_SECONDS_TIMESTAMP_DIVIDED_AS_MILLISECONDS.test(trimmed)) {
126
+ throw new Error("message.ts is already a Unix timestamp in seconds; do not divide ts by 1000");
127
+ }
128
+ return `SELECT * FROM (
129
+ ${trimmed}
130
+ ) AS chart_query LIMIT ${maxRows + 1}`;
131
+ }
132
+ function normalizeParams(raw) {
133
+ if (!raw || typeof raw !== "object" || Array.isArray(raw)) return {};
134
+ return raw;
135
+ }
136
+ function normalizeMaxRows(raw) {
137
+ const value = typeof raw === "number" ? raw : DEFAULT_MAX_ROWS;
138
+ if (!Number.isFinite(value)) return DEFAULT_MAX_ROWS;
139
+ return Math.min(5e3, Math.max(1, Math.floor(value)));
140
+ }
141
+ function summarizeChart(type, title, rowCount, truncated, locale) {
142
+ if (locale?.startsWith("zh")) {
143
+ return `\u5DF2\u751F\u6210\u56FE\u8868\u300C${title}\u300D\uFF08${type}\uFF0C${rowCount} \u884C\u6570\u636E${truncated ? "\uFF0C\u5DF2\u622A\u65AD" : ""}\uFF09\u3002`;
144
+ }
145
+ return `Generated chart "${title}" (${type}, ${rowCount} rows${truncated ? ", truncated" : ""}).`;
146
+ }
147
+ async function handler2(params, context) {
148
+ if (!context.dataProvider) throw new Error("render_chart requires a data provider");
149
+ const maxRows = normalizeMaxRows(params.maxRows);
150
+ const sql = normalizeSql(params.sql, maxRows);
151
+ const sqlParams = normalizeParams(params.params);
152
+ const fetchedRows = await context.dataProvider.executeParameterizedSql(sql, sqlParams);
153
+ const truncated = fetchedRows.length > maxRows;
154
+ const rows = truncated ? fetchedRows.slice(0, maxRows) : fetchedRows;
155
+ const chart = buildChartPayload(rows, params.chartSpec, { truncated });
156
+ return {
157
+ content: summarizeChart(chart.spec.type, chart.spec.title, rows.length, truncated, context.locale),
158
+ data: {
159
+ rowCount: rows.length,
160
+ truncated,
161
+ chartType: chart.spec.type,
162
+ title: chart.spec.title
163
+ },
164
+ chart
165
+ };
166
+ }
167
+ var renderChartTool = {
168
+ name: "render_chart",
169
+ description: "Generate a native ChatLab chart from read-only SQL plus ChartSpec v1. Use this for flexible bar, line, pie, and heatmap charts. Never output HTML, JavaScript, SVG, ECharts options, or rendering code.",
170
+ inputSchema: inputSchema2,
171
+ handler: handler2,
172
+ category: "analysis"
173
+ };
174
+
175
+ // ../../packages/tools/src/definitions/session-info.ts
176
+ var inputSchema3 = {
82
177
  type: "object",
83
178
  properties: {
84
179
  include_members: {
@@ -88,7 +183,7 @@ var inputSchema2 = {
88
183
  }
89
184
  }
90
185
  };
91
- function handler2(params, context) {
186
+ function handler3(params, context) {
92
187
  const db = context.db;
93
188
  const meta = getSessionMeta(db);
94
189
  const overview = getSessionOverview(db);
@@ -105,12 +200,12 @@ function handler2(params, context) {
105
200
  var sessionInfoTool = {
106
201
  name: "get_session_info",
107
202
  description: "\u83B7\u53D6\u5F53\u524D\u4F1A\u8BDD\u7684\u8BE6\u7EC6\u4FE1\u606F\uFF0C\u5305\u62EC\u540D\u79F0\u3001\u5E73\u53F0\u3001\u6D88\u606F\u603B\u6570\u3001\u6210\u5458\u6570\u3001\u65F6\u95F4\u8303\u56F4\u7B49",
108
- inputSchema: inputSchema2,
109
- handler: handler2
203
+ inputSchema: inputSchema3,
204
+ handler: handler3
110
205
  };
111
206
 
112
207
  // ../../packages/tools/src/definitions/sessions.ts
113
- var inputSchema3 = {
208
+ var inputSchema4 = {
114
209
  type: "object",
115
210
  properties: {
116
211
  keyword: {
@@ -119,7 +214,7 @@ var inputSchema3 = {
119
214
  }
120
215
  }
121
216
  };
122
- function handler3(_params, context) {
217
+ function handler4(_params, context) {
123
218
  const keyword = _params.keyword?.toLowerCase();
124
219
  const sessionIds = context.listSessionIds();
125
220
  const sessions = sessionIds.map((id) => {
@@ -139,8 +234,8 @@ function handler3(_params, context) {
139
234
  var sessionsListTool = {
140
235
  name: "list_sessions",
141
236
  description: "\u5217\u51FA\u6240\u6709\u53EF\u7528\u7684\u804A\u5929\u4F1A\u8BDD\uFF0C\u8FD4\u56DE\u4F1A\u8BDD\u540D\u79F0\u3001\u5E73\u53F0\u3001\u6D88\u606F\u6570\u7B49\u57FA\u672C\u4FE1\u606F",
142
- inputSchema: inputSchema3,
143
- handler: handler3
237
+ inputSchema: inputSchema4,
238
+ handler: handler4
144
239
  };
145
240
 
146
241
  // ../../packages/tools/src/utils/format.ts
@@ -184,13 +279,13 @@ function formatMessageCompact(msg, locale) {
184
279
  }
185
280
 
186
281
  // ../../packages/tools/src/definitions/chat-overview.ts
187
- var inputSchema4 = {
282
+ var inputSchema5 = {
188
283
  type: "object",
189
284
  properties: {
190
285
  top_n: { type: "number", description: "\u8FD4\u56DE\u6D3B\u8DC3\u5EA6\u6700\u9AD8\u7684\u524D N \u4E2A\u6210\u5458\uFF0C\u9ED8\u8BA4 10" }
191
286
  }
192
287
  };
193
- async function handler4(params, context) {
288
+ async function handler5(params, context) {
194
289
  const { locale } = context;
195
290
  const topN = params.top_n || 10;
196
291
  const result = await context.dataProvider.getChatOverview(topN);
@@ -224,8 +319,8 @@ async function handler4(params, context) {
224
319
  var chatOverviewTool = {
225
320
  name: "get_chat_overview",
226
321
  description: "\u83B7\u53D6\u804A\u5929\u6982\u89C8\u4FE1\u606F\uFF0C\u5305\u62EC\u804A\u5929\u540D\u79F0\u3001\u5E73\u53F0\u3001\u603B\u6D88\u606F\u6570\u3001\u603B\u6210\u5458\u6570\u3001\u65F6\u95F4\u8303\u56F4\u548C\u6D3B\u8DC3\u6210\u5458\u6392\u884C",
227
- inputSchema: inputSchema4,
228
- handler: handler4,
322
+ inputSchema: inputSchema5,
323
+ handler: handler5,
229
324
  category: "core"
230
325
  };
231
326
 
@@ -269,7 +364,7 @@ var timeParamProperties = {
269
364
  };
270
365
 
271
366
  // ../../packages/tools/src/definitions/search-messages.ts
272
- var inputSchema5 = {
367
+ var inputSchema6 = {
273
368
  type: "object",
274
369
  properties: {
275
370
  keywords: { type: "array", items: { type: "string" }, description: "\u641C\u7D22\u5173\u952E\u8BCD\u5217\u8868" },
@@ -279,7 +374,7 @@ var inputSchema5 = {
279
374
  },
280
375
  required: ["keywords"]
281
376
  };
282
- async function handler5(params, context) {
377
+ async function handler6(params, context) {
283
378
  const { locale, timeFilter: contextTimeFilter, maxMessagesLimit } = context;
284
379
  const keywords = params.keywords;
285
380
  const limit = Math.min(maxMessagesLimit || params.limit || 1e3, 5e4);
@@ -309,14 +404,14 @@ async function handler5(params, context) {
309
404
  var searchMessagesTool = {
310
405
  name: "search_messages",
311
406
  description: "\u6839\u636E\u5173\u952E\u8BCD\u641C\u7D22\u7FA4\u804A\u8BB0\u5F55\u3002\u9002\u7528\u4E8E\u7528\u6237\u60F3\u8981\u67E5\u627E\u7279\u5B9A\u8BDD\u9898\u3001\u5173\u952E\u8BCD\u76F8\u5173\u7684\u804A\u5929\u5185\u5BB9\u3002\u53EF\u4EE5\u6307\u5B9A\u65F6\u95F4\u8303\u56F4\u548C\u53D1\u9001\u8005\u6765\u7B5B\u9009\u6D88\u606F\u3002",
312
- inputSchema: inputSchema5,
313
- handler: handler5,
407
+ inputSchema: inputSchema6,
408
+ handler: handler6,
314
409
  category: "core",
315
410
  truncationStrategy: "keep_first"
316
411
  };
317
412
 
318
413
  // ../../packages/tools/src/definitions/deep-search-messages.ts
319
- var inputSchema6 = {
414
+ var inputSchema7 = {
320
415
  type: "object",
321
416
  properties: {
322
417
  keywords: { type: "array", items: { type: "string" }, description: "\u641C\u7D22\u5173\u952E\u8BCD\u5217\u8868" },
@@ -326,7 +421,7 @@ var inputSchema6 = {
326
421
  },
327
422
  required: ["keywords"]
328
423
  };
329
- async function handler6(params, context) {
424
+ async function handler7(params, context) {
330
425
  const { locale, timeFilter: contextTimeFilter, maxMessagesLimit } = context;
331
426
  const keywords = params.keywords;
332
427
  const limit = Math.min(maxMessagesLimit || params.limit || 1e3, 5e4);
@@ -356,14 +451,14 @@ async function handler6(params, context) {
356
451
  var deepSearchMessagesTool = {
357
452
  name: "deep_search_messages",
358
453
  description: "\u6DF1\u5EA6\u641C\u7D22\u6D88\u606F\uFF08LIKE \u5B50\u4E32\u5339\u914D\uFF0C\u901F\u5EA6\u8F83\u6162\u4F46\u4E0D\u4F1A\u9057\u6F0F\uFF09\uFF0C\u9002\u7528\u4E8E\u5168\u6587\u641C\u7D22\u7CBE\u786E\u5339\u914D\u6216 FTS \u641C\u7D22\u65E0\u7ED3\u679C\u65F6\u7684\u8865\u5145\u641C\u7D22\u3002",
359
- inputSchema: inputSchema6,
360
- handler: handler6,
454
+ inputSchema: inputSchema7,
455
+ handler: handler7,
361
456
  category: "core",
362
457
  truncationStrategy: "keep_first"
363
458
  };
364
459
 
365
460
  // ../../packages/tools/src/definitions/get-message-context.ts
366
- var inputSchema7 = {
461
+ var inputSchema8 = {
367
462
  type: "object",
368
463
  properties: {
369
464
  message_ids: { type: "array", items: { type: "number" }, description: "\u6D88\u606F ID \u5217\u8868" },
@@ -371,7 +466,7 @@ var inputSchema7 = {
371
466
  },
372
467
  required: ["message_ids"]
373
468
  };
374
- async function handler7(params, context) {
469
+ async function handler8(params, context) {
375
470
  const { locale } = context;
376
471
  const messageIds = params.message_ids;
377
472
  const contextSize = params.context_size || 20;
@@ -394,50 +489,50 @@ async function handler7(params, context) {
394
489
  var getMessageContextTool = {
395
490
  name: "get_message_context",
396
491
  description: "\u6839\u636E\u6D88\u606F ID \u83B7\u53D6\u524D\u540E\u7684\u4E0A\u4E0B\u6587\u6D88\u606F\u3002\u9002\u7528\u4E8E\u9700\u8981\u67E5\u770B\u67D0\u6761\u6D88\u606F\u524D\u540E\u804A\u5929\u5185\u5BB9\u7684\u573A\u666F\u3002",
397
- inputSchema: inputSchema7,
398
- handler: handler7,
492
+ inputSchema: inputSchema8,
493
+ handler: handler8,
399
494
  category: "core",
400
495
  truncationStrategy: "keep_last"
401
496
  };
402
497
 
403
- // ../../packages/tools/src/definitions/search-sessions.ts
404
- var inputSchema8 = {
498
+ // ../../packages/tools/src/definitions/search-segments.ts
499
+ var inputSchema9 = {
405
500
  type: "object",
406
501
  properties: {
407
502
  keywords: { type: "array", items: { type: "string" }, description: "\u641C\u7D22\u5173\u952E\u8BCD\u5217\u8868" },
408
- limit: { type: "number", description: "\u8FD4\u56DE\u7684\u6700\u5927\u4F1A\u8BDD\u6570\uFF0C\u9ED8\u8BA4 20" },
503
+ limit: { type: "number", description: "\u8FD4\u56DE\u7684\u6700\u5927\u6BB5\u843D\u6570\uFF0C\u9ED8\u8BA4 20" },
409
504
  ...timeParamProperties
410
505
  }
411
506
  };
412
- async function handler8(params, context) {
507
+ async function handler9(params, context) {
413
508
  const { locale, timeFilter: contextTimeFilter } = context;
414
509
  const limit = params.limit || 20;
415
510
  const effectiveTimeFilter = parseExtendedTimeParams(params, contextTimeFilter);
416
- const sessions = await context.dataProvider.searchSessions(
511
+ const segments = await context.dataProvider.searchSegments(
417
512
  params.keywords,
418
513
  effectiveTimeFilter,
419
514
  limit,
420
515
  5
421
516
  );
422
- if (sessions.length === 0) {
517
+ if (segments.length === 0) {
423
518
  const data2 = {
424
519
  total: 0,
425
- message: isChineseLocale(locale) ? "\u672A\u627E\u5230\u5339\u914D\u7684\u4F1A\u8BDD" : "No matching sessions found"
520
+ message: isChineseLocale(locale) ? "\u672A\u627E\u5230\u5339\u914D\u7684\u6BB5\u843D" : "No matching segments found"
426
521
  };
427
522
  return { content: JSON.stringify(data2), data: data2 };
428
523
  }
429
524
  const localeStr = isChineseLocale(locale) ? "zh-CN" : "en-US";
430
525
  const msgSuffix = isChineseLocale(locale) ? "\u6761\u6D88\u606F" : " messages";
431
- const completeLabel = isChineseLocale(locale) ? "\u5B8C\u6574\u4F1A\u8BDD" : "complete";
526
+ const completeLabel = isChineseLocale(locale) ? "\u5B8C\u6574\u6BB5\u843D" : "complete";
432
527
  const data = {
433
- total: sessions.length,
528
+ total: segments.length,
434
529
  timeRange: formatTimeRange(effectiveTimeFilter, locale),
435
- sessions: sessions.map((s) => {
530
+ segments: segments.map((s) => {
436
531
  const startTime = new Date(s.startTs * 1e3).toLocaleString(localeStr);
437
532
  const endTime = new Date(s.endTs * 1e3).toLocaleString(localeStr);
438
533
  const completeTag = s.isComplete ? ` [${completeLabel}]` : "";
439
534
  return {
440
- sessionId: s.id,
535
+ segmentId: s.id,
441
536
  time: `${startTime} ~ ${endTime}`,
442
537
  messageCount: `${s.messageCount}${msgSuffix}${completeTag}`,
443
538
  preview: s.previewMessages.map((m) => formatMessageCompact(m, locale))
@@ -446,31 +541,31 @@ async function handler8(params, context) {
446
541
  };
447
542
  return { content: JSON.stringify(data), data };
448
543
  }
449
- var searchSessionsTool = {
450
- name: "search_sessions",
451
- description: "\u641C\u7D22\u804A\u5929\u4F1A\u8BDD\uFF08\u5BF9\u8BDD\u6BB5\u843D\uFF09\u3002\u4F1A\u8BDD\u662F\u6839\u636E\u6D88\u606F\u65F6\u95F4\u95F4\u9694\u81EA\u52A8\u5207\u5206\u7684\u5BF9\u8BDD\u5355\u5143\u3002\u8FD4\u56DE\u5339\u914D\u7684\u4F1A\u8BDD\u5217\u8868\u53CA\u6BCF\u4E2A\u4F1A\u8BDD\u7684\u524D5\u6761\u6D88\u606F\u9884\u89C8\u3002",
452
- inputSchema: inputSchema8,
453
- handler: handler8,
544
+ var searchSegmentsTool = {
545
+ name: "search_segments",
546
+ description: "\u641C\u7D22\u804A\u5929\u6BB5\u843D\uFF08\u5BF9\u8BDD\u6BB5\u843D\uFF09\u3002\u6BB5\u843D\u662F\u6839\u636E\u6D88\u606F\u65F6\u95F4\u95F4\u9694\u81EA\u52A8\u5207\u5206\u7684\u5BF9\u8BDD\u5355\u5143\u3002\u8FD4\u56DE\u5339\u914D\u7684\u6BB5\u843D\u5217\u8868\u53CA\u6BCF\u4E2A\u6BB5\u843D\u7684\u524D5\u6761\u6D88\u606F\u9884\u89C8\u3002",
547
+ inputSchema: inputSchema9,
548
+ handler: handler9,
454
549
  category: "core"
455
550
  };
456
551
 
457
- // ../../packages/tools/src/definitions/get-session-messages.ts
458
- var inputSchema9 = {
552
+ // ../../packages/tools/src/definitions/get-segment-messages.ts
553
+ var inputSchema10 = {
459
554
  type: "object",
460
555
  properties: {
461
- session_id: { type: "number", description: "\u4F1A\u8BDD ID\uFF08\u901A\u8FC7 search_sessions \u83B7\u53D6\uFF09" },
556
+ segment_id: { type: "number", description: "\u6BB5\u843D ID\uFF08\u901A\u8FC7 search_segments \u83B7\u53D6\uFF09" },
462
557
  limit: { type: "number", description: "\u8FD4\u56DE\u7684\u6700\u5927\u6D88\u606F\u6761\u6570" }
463
558
  },
464
- required: ["session_id"]
559
+ required: ["segment_id"]
465
560
  };
466
- async function handler9(params, context) {
561
+ async function handler10(params, context) {
467
562
  const { locale, maxMessagesLimit } = context;
468
563
  const limit = maxMessagesLimit || params.limit || 1e3;
469
- const result = await context.dataProvider.getSessionMessages(params.session_id, limit);
564
+ const result = await context.dataProvider.getSegmentMessages(params.segment_id, limit);
470
565
  if (!result) {
471
566
  const data2 = {
472
- error: isChineseLocale(locale) ? "\u672A\u627E\u5230\u6307\u5B9A\u7684\u4F1A\u8BDD" : "Session not found",
473
- sessionId: params.session_id
567
+ error: isChineseLocale(locale) ? "\u672A\u627E\u5230\u6307\u5B9A\u7684\u6BB5\u843D" : "Segment not found",
568
+ segmentId: params.segment_id
474
569
  };
475
570
  return { content: JSON.stringify(data2), data: data2 };
476
571
  }
@@ -484,7 +579,7 @@ async function handler9(params, context) {
484
579
  timestamp: m.timestamp
485
580
  }));
486
581
  const data = {
487
- sessionId: result.sessionId,
582
+ segmentId: result.segmentId,
488
583
  time: `${startTime} ~ ${endTime}`,
489
584
  messageCount: result.messageCount,
490
585
  returnedCount: result.returnedCount,
@@ -493,24 +588,24 @@ async function handler9(params, context) {
493
588
  };
494
589
  return { content: JSON.stringify(data), data, rawMessages };
495
590
  }
496
- var getSessionMessagesTool = {
497
- name: "get_session_messages",
498
- description: "\u83B7\u53D6\u6307\u5B9A\u4F1A\u8BDD\u7684\u5B8C\u6574\u6D88\u606F\u5217\u8868\u3002\u7528\u4E8E\u5728 search_sessions \u627E\u5230\u76F8\u5173\u4F1A\u8BDD\u540E\uFF0C\u83B7\u53D6\u8BE5\u4F1A\u8BDD\u7684\u5B8C\u6574\u4E0A\u4E0B\u6587\u3002",
499
- inputSchema: inputSchema9,
500
- handler: handler9,
591
+ var getSegmentMessagesTool = {
592
+ name: "get_segment_messages",
593
+ description: "\u83B7\u53D6\u6307\u5B9A\u6BB5\u843D\u7684\u5B8C\u6574\u6D88\u606F\u5217\u8868\u3002\u7528\u4E8E\u5728 search_segments \u627E\u5230\u76F8\u5173\u6BB5\u843D\u540E\uFF0C\u83B7\u53D6\u8BE5\u6BB5\u843D\u7684\u5B8C\u6574\u4E0A\u4E0B\u6587\u3002",
594
+ inputSchema: inputSchema10,
595
+ handler: handler10,
501
596
  category: "core",
502
597
  truncationStrategy: "keep_last"
503
598
  };
504
599
 
505
600
  // ../../packages/tools/src/definitions/get-members.ts
506
- var inputSchema10 = {
601
+ var inputSchema11 = {
507
602
  type: "object",
508
603
  properties: {
509
604
  search: { type: "string", description: "\u6309\u540D\u79F0/\u522B\u540D/\u5E73\u53F0ID\u641C\u7D22\u8FC7\u6EE4" },
510
605
  limit: { type: "number", description: "\u6700\u5927\u8FD4\u56DE\u6570\u91CF" }
511
606
  }
512
607
  };
513
- async function handler10(params, context) {
608
+ async function handler11(params, context) {
514
609
  const { locale } = context;
515
610
  const members = await context.dataProvider.getMembers();
516
611
  let filteredMembers = members;
@@ -543,13 +638,13 @@ async function handler10(params, context) {
543
638
  var getMembersTool = {
544
639
  name: "get_members",
545
640
  description: '\u83B7\u53D6\u6210\u5458\u5217\u8868\uFF0C\u5305\u62EC\u6210\u5458\u7684\u57FA\u672C\u4FE1\u606F\u3001\u522B\u540D\u548C\u6D88\u606F\u7EDF\u8BA1\u3002\u9002\u7528\u4E8E\u67E5\u8BE2"\u6709\u54EA\u4E9B\u4EBA"\u3001"\u67D0\u4EBA\u7684\u522B\u540D\u662F\u4EC0\u4E48"\u7B49\u95EE\u9898\u3002',
546
- inputSchema: inputSchema10,
547
- handler: handler10,
641
+ inputSchema: inputSchema11,
642
+ handler: handler11,
548
643
  category: "core"
549
644
  };
550
645
 
551
646
  // ../../packages/tools/src/definitions/member-stats.ts
552
- var inputSchema11 = {
647
+ var inputSchema12 = {
553
648
  type: "object",
554
649
  properties: {
555
650
  top: {
@@ -559,7 +654,7 @@ var inputSchema11 = {
559
654
  }
560
655
  }
561
656
  };
562
- async function handler11(params, context) {
657
+ async function handler12(params, context) {
563
658
  const top = params.top || 20;
564
659
  const members = await context.dataProvider.getMemberStats({ timeFilter: context.timeFilter, top });
565
660
  const data = {
@@ -578,13 +673,13 @@ async function handler11(params, context) {
578
673
  var memberStatsTool = {
579
674
  name: "get_member_stats",
580
675
  description: "\u83B7\u53D6\u6210\u5458\u6D3B\u8DC3\u5EA6\u6392\u884C\uFF0C\u5305\u62EC\u6D88\u606F\u6570\u91CF\u548C\u5360\u6BD4",
581
- inputSchema: inputSchema11,
582
- handler: handler11,
676
+ inputSchema: inputSchema12,
677
+ handler: handler12,
583
678
  category: "core"
584
679
  };
585
680
 
586
681
  // ../../packages/tools/src/definitions/time-stats.ts
587
- var inputSchema12 = {
682
+ var inputSchema13 = {
588
683
  type: "object",
589
684
  properties: {
590
685
  type: {
@@ -595,7 +690,7 @@ var inputSchema12 = {
595
690
  }
596
691
  }
597
692
  };
598
- async function handler12(params, context) {
693
+ async function handler13(params, context) {
599
694
  const type = params.type || "hourly";
600
695
  const data = await context.dataProvider.getTimeStats(type, { timeFilter: context.timeFilter });
601
696
  return {
@@ -606,13 +701,13 @@ async function handler12(params, context) {
606
701
  var timeStatsTool = {
607
702
  name: "get_time_stats",
608
703
  description: "\u83B7\u53D6\u804A\u5929\u6D3B\u8DC3\u65F6\u6BB5\u5206\u5E03\uFF08\u6309\u5C0F\u65F6/\u661F\u671F/\u6BCF\u65E5\u8D8B\u52BF\uFF09",
609
- inputSchema: inputSchema12,
610
- handler: handler12,
704
+ inputSchema: inputSchema13,
705
+ handler: handler13,
611
706
  category: "core"
612
707
  };
613
708
 
614
709
  // ../../packages/tools/src/definitions/recent-messages.ts
615
- var inputSchema13 = {
710
+ var inputSchema14 = {
616
711
  type: "object",
617
712
  properties: {
618
713
  limit: {
@@ -623,7 +718,7 @@ var inputSchema13 = {
623
718
  ...timeParamProperties
624
719
  }
625
720
  };
626
- async function handler13(params, context) {
721
+ async function handler14(params, context) {
627
722
  const { locale, timeFilter: contextTimeFilter, maxMessagesLimit } = context;
628
723
  const limit = maxMessagesLimit || params.limit || 100;
629
724
  const effectiveTimeFilter = parseExtendedTimeParams(params, contextTimeFilter);
@@ -643,21 +738,21 @@ async function handler13(params, context) {
643
738
  var recentMessagesTool = {
644
739
  name: "get_recent_messages",
645
740
  description: '\u83B7\u53D6\u6307\u5B9A\u65F6\u95F4\u6BB5\u5185\u7684\u7FA4\u804A\u6D88\u606F\u3002\u9002\u7528\u4E8E\u56DE\u7B54"\u6700\u8FD1\u5927\u5BB6\u804A\u4E86\u4EC0\u4E48"\u7B49\u6982\u89C8\u6027\u95EE\u9898\u3002\u652F\u6301\u7CBE\u786E\u5230\u5206\u949F\u7EA7\u522B\u7684\u65F6\u95F4\u67E5\u8BE2\u3002',
646
- inputSchema: inputSchema13,
647
- handler: handler13,
741
+ inputSchema: inputSchema14,
742
+ handler: handler14,
648
743
  category: "core",
649
744
  truncationStrategy: "keep_last"
650
745
  };
651
746
 
652
747
  // ../../packages/tools/src/definitions/get-member-name-history.ts
653
- var inputSchema14 = {
748
+ var inputSchema15 = {
654
749
  type: "object",
655
750
  properties: {
656
751
  member_id: { type: "number", description: "\u6210\u5458 ID\uFF08\u901A\u8FC7 get_members \u83B7\u53D6\uFF09" }
657
752
  },
658
753
  required: ["member_id"]
659
754
  };
660
- async function handler14(params, context) {
755
+ async function handler15(params, context) {
661
756
  const { locale } = context;
662
757
  const memberId = params.member_id;
663
758
  const members = await context.dataProvider.getMembers();
@@ -693,13 +788,13 @@ async function handler14(params, context) {
693
788
  var getMemberNameHistoryTool = {
694
789
  name: "get_member_name_history",
695
790
  description: '\u83B7\u53D6\u6210\u5458\u7684\u6635\u79F0\u53D8\u66F4\u5386\u53F2\u8BB0\u5F55\u3002\u9002\u7528\u4E8E\u56DE\u7B54"\u67D0\u4EBA\u4EE5\u524D\u53EB\u4EC0\u4E48\u540D\u5B57"\u3001"\u67D0\u4EBA\u7684\u6635\u79F0\u53D8\u5316"\u7B49\u95EE\u9898\u3002',
696
- inputSchema: inputSchema14,
697
- handler: handler14,
791
+ inputSchema: inputSchema15,
792
+ handler: handler15,
698
793
  category: "analysis"
699
794
  };
700
795
 
701
796
  // ../../packages/tools/src/definitions/get-conversation-between.ts
702
- var inputSchema15 = {
797
+ var inputSchema16 = {
703
798
  type: "object",
704
799
  properties: {
705
800
  member_id_1: { type: "number", description: "\u7B2C\u4E00\u4E2A\u6210\u5458\u7684 ID\uFF08\u901A\u8FC7 get_members \u83B7\u53D6\uFF09" },
@@ -709,7 +804,7 @@ var inputSchema15 = {
709
804
  },
710
805
  required: ["member_id_1", "member_id_2"]
711
806
  };
712
- async function handler15(params, context) {
807
+ async function handler16(params, context) {
713
808
  const { locale, timeFilter: contextTimeFilter, maxMessagesLimit } = context;
714
809
  const limit = maxMessagesLimit || params.limit || 100;
715
810
  const effectiveTimeFilter = parseExtendedTimeParams(params, contextTimeFilter);
@@ -740,55 +835,55 @@ async function handler15(params, context) {
740
835
  var getConversationBetweenTool = {
741
836
  name: "get_conversation_between",
742
837
  description: '\u83B7\u53D6\u4E24\u4E2A\u7FA4\u6210\u5458\u4E4B\u95F4\u7684\u5BF9\u8BDD\u8BB0\u5F55\u3002\u9002\u7528\u4E8E\u56DE\u7B54"A\u548CB\u4E4B\u95F4\u804A\u4E86\u4EC0\u4E48"\u7B49\u95EE\u9898\u3002\u9700\u8981\u5148\u901A\u8FC7 get_members \u83B7\u53D6\u6210\u5458 ID\u3002',
743
- inputSchema: inputSchema15,
744
- handler: handler15,
838
+ inputSchema: inputSchema16,
839
+ handler: handler16,
745
840
  category: "analysis",
746
841
  truncationStrategy: "keep_last"
747
842
  };
748
843
 
749
- // ../../packages/tools/src/definitions/get-session-summaries.ts
750
- var inputSchema16 = {
844
+ // ../../packages/tools/src/definitions/get-segment-summaries.ts
845
+ var inputSchema17 = {
751
846
  type: "object",
752
847
  properties: {
753
848
  keywords: { type: "array", items: { type: "string" }, description: "\u6309\u5173\u952E\u8BCD\u8FC7\u6EE4\u6458\u8981\u5185\u5BB9" },
754
- limit: { type: "number", description: "\u8FD4\u56DE\u7684\u6700\u5927\u4F1A\u8BDD\u6570\uFF0C\u9ED8\u8BA4 20" },
849
+ limit: { type: "number", description: "\u8FD4\u56DE\u7684\u6700\u5927\u6BB5\u843D\u6570\uFF0C\u9ED8\u8BA4 20" },
755
850
  ...timeParamProperties
756
851
  }
757
852
  };
758
- async function handler16(params, context) {
853
+ async function handler17(params, context) {
759
854
  const { locale, timeFilter: contextTimeFilter } = context;
760
855
  const limit = params.limit || 20;
761
856
  const effectiveTimeFilter = parseExtendedTimeParams(params, contextTimeFilter);
762
- const sessions = await context.dataProvider.getSessionSummaries({
857
+ const segments = await context.dataProvider.getSegmentSummaries({
763
858
  limit: limit * 2,
764
859
  timeFilter: effectiveTimeFilter
765
860
  });
766
- if (!sessions || sessions.length === 0) {
861
+ if (!segments || segments.length === 0) {
767
862
  const data2 = {
768
- message: isChineseLocale(locale) ? '\u672A\u627E\u5230\u5E26\u6458\u8981\u7684\u4F1A\u8BDD\u3002\u53EF\u80FD\u8FD8\u6CA1\u6709\u751F\u6210\u6458\u8981\uFF0C\u8BF7\u5728\u4F1A\u8BDD\u65F6\u95F4\u7EBF\u4E2D\u70B9\u51FB"\u6279\u91CF\u751F\u6210"\u6309\u94AE\u3002' : "No sessions with summaries found. Summaries may not have been generated yet."
863
+ message: isChineseLocale(locale) ? '\u672A\u627E\u5230\u5E26\u6458\u8981\u7684\u6BB5\u843D\u3002\u53EF\u80FD\u8FD8\u6CA1\u6709\u751F\u6210\u6458\u8981\uFF0C\u8BF7\u5728\u6BB5\u843D\u65F6\u95F4\u7EBF\u4E2D\u70B9\u51FB"\u6279\u91CF\u751F\u6210"\u6309\u94AE\u3002' : "No segments with summaries found. Summaries may not have been generated yet."
769
864
  };
770
865
  return { content: JSON.stringify(data2), data: data2 };
771
866
  }
772
- let filteredSessions = sessions;
867
+ let filteredSegments = segments;
773
868
  const keywords = params.keywords;
774
869
  if (keywords && keywords.length > 0) {
775
870
  const lowerKeywords = keywords.map((k) => k.toLowerCase());
776
- filteredSessions = sessions.filter(
871
+ filteredSegments = segments.filter(
777
872
  (s) => lowerKeywords.some((keyword) => s.summary?.toLowerCase().includes(keyword))
778
873
  );
779
874
  }
780
- filteredSessions = filteredSessions.filter((s) => s.summary);
781
- const limitedSessions = filteredSessions.slice(0, limit);
875
+ filteredSegments = filteredSegments.filter((s) => s.summary);
876
+ const limitedSegments = filteredSegments.slice(0, limit);
782
877
  const localeStr = isChineseLocale(locale) ? "zh-CN" : "en-US";
783
878
  const data = {
784
- total: filteredSessions.length,
785
- returned: limitedSessions.length,
879
+ total: filteredSegments.length,
880
+ returned: limitedSegments.length,
786
881
  timeRange: formatTimeRange(effectiveTimeFilter, locale),
787
- sessions: limitedSessions.map((s) => {
882
+ segments: limitedSegments.map((s) => {
788
883
  const startTime = new Date(s.startTs * 1e3).toLocaleString(localeStr);
789
884
  const endTime = new Date(s.endTs * 1e3).toLocaleString(localeStr);
790
885
  return {
791
- sessionId: s.id,
886
+ segmentId: s.id,
792
887
  time: `${startTime} ~ ${endTime}`,
793
888
  messageCount: s.messageCount,
794
889
  participants: s.participants,
@@ -798,23 +893,23 @@ async function handler16(params, context) {
798
893
  };
799
894
  return { content: JSON.stringify(data), data };
800
895
  }
801
- var getSessionSummariesTool = {
802
- name: "get_session_summaries",
803
- description: "\u83B7\u53D6\u4F1A\u8BDD\u6458\u8981\u5217\u8868\uFF0C\u5FEB\u901F\u4E86\u89E3\u7FA4\u804A\u5386\u53F2\u8BA8\u8BBA\u7684\u4E3B\u9898\u3002\u53EF\u4EE5\u6309\u5173\u952E\u8BCD\u641C\u7D22\u8BA8\u8BBA\u8FC7\u7684\u8BDD\u9898\u3002",
804
- inputSchema: inputSchema16,
805
- handler: handler16,
896
+ var getSegmentSummariesTool = {
897
+ name: "get_segment_summaries",
898
+ description: "\u83B7\u53D6\u6BB5\u843D\u6458\u8981\u5217\u8868\uFF0C\u5FEB\u901F\u4E86\u89E3\u7FA4\u804A\u5386\u53F2\u8BA8\u8BBA\u7684\u4E3B\u9898\u3002\u53EF\u4EE5\u6309\u5173\u952E\u8BCD\u641C\u7D22\u8BA8\u8BBA\u8FC7\u7684\u8BDD\u9898\u3002",
899
+ inputSchema: inputSchema17,
900
+ handler: handler17,
806
901
  category: "analysis"
807
902
  };
808
903
 
809
904
  // ../../packages/tools/src/definitions/response-time-analysis.ts
810
- var inputSchema17 = {
905
+ var inputSchema18 = {
811
906
  type: "object",
812
907
  properties: {
813
908
  days: { type: "number", description: "\u5206\u6790\u6700\u8FD1\u591A\u5C11\u5929\u7684\u6570\u636E\uFF0C\u9ED8\u8BA4 30" },
814
909
  top_n: { type: "number", description: "\u8FD4\u56DE\u524D\u591A\u5C11\u540D\uFF0C\u9ED8\u8BA4 10" }
815
910
  }
816
911
  };
817
- async function handler17(params, context) {
912
+ async function handler18(params, context) {
818
913
  const { locale } = context;
819
914
  const isZh = isChineseLocale(locale);
820
915
  const days = params.days || 30;
@@ -879,20 +974,20 @@ async function handler17(params, context) {
879
974
  var responseTimeAnalysisTool = {
880
975
  name: "response_time_analysis",
881
976
  description: "\u5206\u6790\u7FA4\u6210\u5458\u7684\u54CD\u5E94\u901F\u5EA6\u6392\u884C\uFF0C\u57FA\u4E8E\u56DE\u590D\u95F4\u9694\u7684\u4E2D\u4F4D\u6570\u548C\u5E73\u5747\u503C\u3002",
882
- inputSchema: inputSchema17,
883
- handler: handler17,
977
+ inputSchema: inputSchema18,
978
+ handler: handler18,
884
979
  category: "analysis"
885
980
  };
886
981
 
887
982
  // ../../packages/tools/src/definitions/keyword-frequency.ts
888
- var inputSchema18 = {
983
+ var inputSchema19 = {
889
984
  type: "object",
890
985
  properties: {
891
986
  days: { type: "number", description: "\u5206\u6790\u6700\u8FD1\u591A\u5C11\u5929\u7684\u6570\u636E\uFF0C\u9ED8\u8BA4 30" },
892
987
  top_n: { type: "number", description: "\u8FD4\u56DE\u524D\u591A\u5C11\u4E2A\u9AD8\u9891\u8BCD\uFF0C\u9ED8\u8BA4 50" }
893
988
  }
894
989
  };
895
- async function handler18(params, context) {
990
+ async function handler19(params, context) {
896
991
  const { locale, segmentText } = context;
897
992
  const isZh = isChineseLocale(locale);
898
993
  const days = params.days || 30;
@@ -940,8 +1035,8 @@ async function handler18(params, context) {
940
1035
  var keywordFrequencyTool = {
941
1036
  name: "keyword_frequency",
942
1037
  description: "\u7EDF\u8BA1\u7FA4\u804A\u4E2D\u7684\u9AD8\u9891\u5173\u952E\u8BCD\uFF0C\u901A\u8FC7 NLP \u5206\u8BCD\u5206\u6790\u6D88\u606F\u5185\u5BB9\u3002",
943
- inputSchema: inputSchema18,
944
- handler: handler18,
1038
+ inputSchema: inputSchema19,
1039
+ handler: handler19,
945
1040
  category: "analysis"
946
1041
  };
947
1042
 
@@ -1113,7 +1208,7 @@ var SQL_TOOL_DEFS = [
1113
1208
  },
1114
1209
  execution: {
1115
1210
  type: "sqlite",
1116
- query: "SELECT COALESCE(m.group_nickname, m.account_name) AS name, COUNT(*) AS initiated_count FROM chat_session cs JOIN message_context mc ON mc.session_id = cs.id JOIN message msg ON msg.id = mc.message_id JOIN member m ON msg.sender_id = m.id WHERE msg.ts = cs.start_ts AND cs.start_ts > unixepoch('now', '-' || @days || ' days') GROUP BY msg.sender_id ORDER BY initiated_count DESC LIMIT @limit",
1211
+ query: "SELECT COALESCE(m.group_nickname, m.account_name) AS name, COUNT(*) AS initiated_count FROM segment cs JOIN message_context mc ON mc.segment_id = cs.id JOIN message msg ON msg.id = mc.message_id JOIN member m ON msg.sender_id = m.id WHERE msg.ts = cs.start_ts AND cs.start_ts > unixepoch('now', '-' || @days || ' days') GROUP BY msg.sender_id ORDER BY initiated_count DESC LIMIT @limit",
1117
1212
  rowTemplate: "{name}\uFF1A\u53D1\u8D77 {initiated_count} \u6B21\u8BDD\u9898",
1118
1213
  summaryTemplate: "\u8BDD\u9898\u53D1\u8D77\u8005 Top {rowCount}\uFF1A",
1119
1214
  fallback: "\u8BE5\u65F6\u95F4\u8303\u56F4\u5185\u6CA1\u6709\u4F1A\u8BDD\u8BB0\u5F55\uFF0C\u53EF\u80FD\u9700\u8981\u5148\u751F\u6210\u4F1A\u8BDD\u7D22\u5F15"
@@ -1215,17 +1310,19 @@ var SHARED_TOOLS = [
1215
1310
  deepSearchMessagesTool,
1216
1311
  recentMessagesTool,
1217
1312
  getMessageContextTool,
1218
- searchSessionsTool,
1219
- getSessionMessagesTool,
1313
+ searchSegmentsTool,
1314
+ getSegmentMessagesTool,
1220
1315
  getMembersTool,
1316
+ schemaTool,
1221
1317
  // Analysis
1222
1318
  memberStatsTool,
1223
1319
  timeStatsTool,
1224
1320
  getMemberNameHistoryTool,
1225
1321
  getConversationBetweenTool,
1226
- getSessionSummariesTool,
1322
+ getSegmentSummariesTool,
1227
1323
  responseTimeAnalysisTool,
1228
1324
  keywordFrequencyTool,
1325
+ renderChartTool,
1229
1326
  // Raw SQL
1230
1327
  sqlQueryTool
1231
1328
  ];
@@ -1234,7 +1331,6 @@ var MCP_TOOL_REGISTRY = [
1234
1331
  // MCP-specific: session discovery & schema
1235
1332
  sessionsListTool,
1236
1333
  sessionInfoTool,
1237
- schemaTool,
1238
1334
  // Shared core + analysis + raw SQL
1239
1335
  ...SHARED_TOOLS
1240
1336
  ];
@@ -1313,14 +1409,14 @@ var CoreDataProvider = class {
1313
1409
  return getHourlyActivity(this.db, filter);
1314
1410
  }
1315
1411
  }
1316
- async searchSessions(keywords, timeFilter, limit, previewCount) {
1317
- return searchSessions(this.db, keywords, timeFilter, limit, previewCount);
1412
+ async searchSegments(keywords, timeFilter, limit, previewCount) {
1413
+ return searchSegments(this.db, keywords, timeFilter, limit, previewCount);
1318
1414
  }
1319
- async getSessionMessages(chatSessionId, limit) {
1320
- return getSessionMessages(this.db, chatSessionId, limit);
1415
+ async getSegmentMessages(segmentId, limit) {
1416
+ return getSegmentMessages(this.db, segmentId, limit);
1321
1417
  }
1322
- async getSessionSummaries(options) {
1323
- return getSessionSummaries(this.db, options);
1418
+ async getSegmentSummaries(options) {
1419
+ return getSegmentSummaries(this.db, options);
1324
1420
  }
1325
1421
  async getConversationBetween(memberId1, memberId2, timeFilter, limit) {
1326
1422
  return getConversationBetween(this.db, memberId1, memberId2, timeFilter, limit);
@@ -1341,4 +1437,4 @@ export {
1341
1437
  MCP_TOOL_REGISTRY,
1342
1438
  CoreDataProvider
1343
1439
  };
1344
- //# sourceMappingURL=chunk-43XWYC3M.mjs.map
1440
+ //# sourceMappingURL=chunk-JE3FOFF7.mjs.map