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.
- package/dist/chat-command-5XMRLXZM.mjs +166 -0
- package/dist/chat-command-5XMRLXZM.mjs.map +1 -0
- package/dist/{chunk-N5DGZQB4.mjs → chunk-7VG6QGQ2.mjs} +1543 -664
- package/dist/chunk-7VG6QGQ2.mjs.map +1 -0
- package/dist/{chunk-QJI6AOAT.mjs → chunk-CUCDRAY6.mjs} +17 -25
- package/dist/chunk-CUCDRAY6.mjs.map +1 -0
- package/dist/chunk-FDK6SPCG.mjs +40 -0
- package/dist/chunk-FDK6SPCG.mjs.map +1 -0
- package/dist/{chunk-ZL322NVL.mjs → chunk-GTCTDD2Z.mjs} +116 -504
- package/dist/chunk-GTCTDD2Z.mjs.map +1 -0
- package/dist/{chunk-43XWYC3M.mjs → chunk-JE3FOFF7.mjs} +219 -123
- package/dist/chunk-JE3FOFF7.mjs.map +1 -0
- package/dist/{chunk-QY6P2YS7.mjs → chunk-PDQFSQO6.mjs} +59 -33
- package/dist/chunk-PDQFSQO6.mjs.map +1 -0
- package/dist/chunk-WYHGWTA4.mjs +485 -0
- package/dist/chunk-WYHGWTA4.mjs.map +1 -0
- package/dist/{chunk-CIIQ3S2X.mjs → chunk-YZYP5ST6.mjs} +37 -8
- package/dist/chunk-YZYP5ST6.mjs.map +1 -0
- package/dist/cli.mjs +3 -2
- package/dist/{http-TPX74BLK.mjs → http-C3CGXUBU.mjs} +8 -6
- package/dist/{import-B745DRHD.mjs → import-VS7L5JDX.mjs} +4 -4
- package/dist/index.mjs +10 -8
- package/dist/{mcp-YWAVG5XW.mjs → mcp-6VXDPUQK.mjs} +11 -6
- package/dist/mcp-6VXDPUQK.mjs.map +1 -0
- package/dist/{stream-import-OPALPVWF.mjs → stream-import-TFDBNVIW.mjs} +3 -3
- package/dist-web/assets/{DebugToolsPanel-DaSNc1o-.css → DebugToolsPanel-vn-bnUxn.css} +1 -1
- package/dist-web/assets/DebugToolsPanel.vue_vue_type_script_setup_true_lang-B1xZmp9r.js +161 -0
- package/dist-web/assets/{EChartWordcloud-VpNJDurs.js → EChartWordcloud-CzhfrEF_.js} +1 -1
- package/dist-web/assets/{MessageExportModal-CSfaY25B.js → MessageExportModal-B79pPBL9.js} +1 -1
- package/dist-web/assets/{electron-BUeXfvxT.js → electron-DRkrjeIl.js} +1 -1
- package/dist-web/assets/electron-Dv8jdn_2.js +1 -0
- package/dist-web/assets/{fetch-RDFt3hmp.js → fetch-BmZIm6mS.js} +1 -1
- package/dist-web/assets/fetch-BqLy63aj.js +1 -0
- package/dist-web/assets/fetch-BstX-wd4.js +1 -0
- package/dist-web/assets/{fetch-BohUj3CQ.js → fetch-Bvcxe5PI.js} +1 -1
- package/dist-web/assets/{fetch-BneHn5qk.js → fetch-CDamdvtb.js} +1 -1
- package/dist-web/assets/{fetch-DypPduyQ.js → fetch-DWg-2kOp.js} +1 -1
- package/dist-web/assets/{fetch-CARsBVl0.js → fetch-DfgdagMN.js} +1 -1
- package/dist-web/assets/{fetch-Ck3tjoLa.js → fetch-Drk9dLaF.js} +1 -1
- package/dist-web/assets/{fetch-B2q6973s.js → fetch-Y-_WsCuk.js} +1 -1
- package/dist-web/assets/{fetch-BGMRmQx0.js → fetch-ph2_d79v.js} +1 -1
- package/dist-web/assets/{index-Bvlj3dMn.js → index-9urfJP1r.js} +1 -1
- package/dist-web/assets/index-CfKjh0Jr.js +9 -0
- package/dist-web/assets/index-CprJOAB1.css +1 -0
- package/dist-web/assets/{index-BvaWRM6_.js → index-DMWf5On7.js} +1 -1
- package/dist-web/assets/{index-DCWvD-4L.js → index-D_hHm7bQ.js} +2 -2
- package/dist-web/assets/index-MCdpiX_O.js +173 -0
- package/dist-web/assets/{index-C5LrQG3N.js → index-deYDOVUa.js} +4 -4
- package/dist-web/assets/vendor-echarts-CITQeskI.js +11 -0
- package/dist-web/assets/{vendor-echarts-wordcloud-CZ9gsX8l.js → vendor-echarts-wordcloud-B1kQMklB.js} +1 -1
- package/dist-web/assets/{vendor-nuxt-ui-BYU7dz8t.js → vendor-nuxt-ui-C_8CsH6e.js} +1 -1
- package/dist-web/assets/{vendor-reka-ui-CnB0mMNX.js → vendor-reka-ui-CIMXwvEp.js} +1 -1
- package/dist-web/assets/{web-CXPkmhis.js → web-XJV6Vj5t.js} +1 -1
- package/dist-web/index.html +4 -4
- package/package.json +1 -1
- package/dist/chunk-43XWYC3M.mjs.map +0 -1
- package/dist/chunk-CIIQ3S2X.mjs.map +0 -1
- package/dist/chunk-N5DGZQB4.mjs.map +0 -1
- package/dist/chunk-QJI6AOAT.mjs.map +0 -1
- package/dist/chunk-QY6P2YS7.mjs.map +0 -1
- package/dist/chunk-ZL322NVL.mjs.map +0 -1
- package/dist/mcp-YWAVG5XW.mjs.map +0 -1
- package/dist-web/assets/DebugToolsPanel.vue_vue_type_script_setup_true_lang-BBDrsJfe.js +0 -161
- package/dist-web/assets/electron-BynNUuEA.js +0 -1
- package/dist-web/assets/fetch-BtHwWs8A.js +0 -1
- package/dist-web/assets/fetch-DzNuFdFM.js +0 -1
- package/dist-web/assets/index-BRwEubUe.js +0 -173
- package/dist-web/assets/index-DB-iqXzV.css +0 -1
- package/dist-web/assets/index-DS1rzk1I.js +0 -8
- package/dist-web/assets/vendor-echarts-C5u62NnM.js +0 -11
- /package/dist/{http-TPX74BLK.mjs.map → http-C3CGXUBU.mjs.map} +0 -0
- /package/dist/{import-B745DRHD.mjs.map → import-VS7L5JDX.mjs.map} +0 -0
- /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
|
-
|
|
23
|
+
getSegmentMessages,
|
|
24
|
+
getSegmentSummaries,
|
|
23
25
|
getSessionMeta,
|
|
24
26
|
getSessionOverview,
|
|
25
|
-
getSessionSummaries,
|
|
26
27
|
getWeekdayActivity,
|
|
27
28
|
searchMessagesLike,
|
|
28
|
-
|
|
29
|
-
} from "./chunk-
|
|
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/
|
|
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
|
|
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:
|
|
109
|
-
handler:
|
|
203
|
+
inputSchema: inputSchema3,
|
|
204
|
+
handler: handler3
|
|
110
205
|
};
|
|
111
206
|
|
|
112
207
|
// ../../packages/tools/src/definitions/sessions.ts
|
|
113
|
-
var
|
|
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
|
|
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:
|
|
143
|
-
handler:
|
|
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
|
|
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
|
|
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:
|
|
228
|
-
handler:
|
|
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
|
|
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
|
|
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:
|
|
313
|
-
handler:
|
|
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
|
|
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
|
|
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:
|
|
360
|
-
handler:
|
|
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
|
|
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
|
|
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:
|
|
398
|
-
handler:
|
|
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-
|
|
404
|
-
var
|
|
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\
|
|
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
|
|
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
|
|
511
|
+
const segments = await context.dataProvider.searchSegments(
|
|
417
512
|
params.keywords,
|
|
418
513
|
effectiveTimeFilter,
|
|
419
514
|
limit,
|
|
420
515
|
5
|
|
421
516
|
);
|
|
422
|
-
if (
|
|
517
|
+
if (segments.length === 0) {
|
|
423
518
|
const data2 = {
|
|
424
519
|
total: 0,
|
|
425
|
-
message: isChineseLocale(locale) ? "\u672A\u627E\u5230\u5339\u914D\u7684\
|
|
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\
|
|
526
|
+
const completeLabel = isChineseLocale(locale) ? "\u5B8C\u6574\u6BB5\u843D" : "complete";
|
|
432
527
|
const data = {
|
|
433
|
-
total:
|
|
528
|
+
total: segments.length,
|
|
434
529
|
timeRange: formatTimeRange(effectiveTimeFilter, locale),
|
|
435
|
-
|
|
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
|
-
|
|
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
|
|
450
|
-
name: "
|
|
451
|
-
description: "\u641C\u7D22\u804A\u5929\
|
|
452
|
-
inputSchema:
|
|
453
|
-
handler:
|
|
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-
|
|
458
|
-
var
|
|
552
|
+
// ../../packages/tools/src/definitions/get-segment-messages.ts
|
|
553
|
+
var inputSchema10 = {
|
|
459
554
|
type: "object",
|
|
460
555
|
properties: {
|
|
461
|
-
|
|
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: ["
|
|
559
|
+
required: ["segment_id"]
|
|
465
560
|
};
|
|
466
|
-
async function
|
|
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.
|
|
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\
|
|
473
|
-
|
|
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
|
-
|
|
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
|
|
497
|
-
name: "
|
|
498
|
-
description: "\u83B7\u53D6\u6307\u5B9A\
|
|
499
|
-
inputSchema:
|
|
500
|
-
handler:
|
|
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
|
|
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
|
|
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:
|
|
547
|
-
handler:
|
|
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
|
|
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
|
|
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:
|
|
582
|
-
handler:
|
|
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
|
|
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
|
|
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:
|
|
610
|
-
handler:
|
|
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
|
|
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
|
|
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:
|
|
647
|
-
handler:
|
|
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
|
|
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
|
|
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:
|
|
697
|
-
handler:
|
|
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
|
|
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
|
|
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:
|
|
744
|
-
handler:
|
|
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-
|
|
750
|
-
var
|
|
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\
|
|
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
|
|
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
|
|
857
|
+
const segments = await context.dataProvider.getSegmentSummaries({
|
|
763
858
|
limit: limit * 2,
|
|
764
859
|
timeFilter: effectiveTimeFilter
|
|
765
860
|
});
|
|
766
|
-
if (!
|
|
861
|
+
if (!segments || segments.length === 0) {
|
|
767
862
|
const data2 = {
|
|
768
|
-
message: isChineseLocale(locale) ? '\u672A\u627E\u5230\u5E26\u6458\u8981\u7684\
|
|
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
|
|
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
|
-
|
|
871
|
+
filteredSegments = segments.filter(
|
|
777
872
|
(s) => lowerKeywords.some((keyword) => s.summary?.toLowerCase().includes(keyword))
|
|
778
873
|
);
|
|
779
874
|
}
|
|
780
|
-
|
|
781
|
-
const
|
|
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:
|
|
785
|
-
returned:
|
|
879
|
+
total: filteredSegments.length,
|
|
880
|
+
returned: limitedSegments.length,
|
|
786
881
|
timeRange: formatTimeRange(effectiveTimeFilter, locale),
|
|
787
|
-
|
|
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
|
-
|
|
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
|
|
802
|
-
name: "
|
|
803
|
-
description: "\u83B7\u53D6\
|
|
804
|
-
inputSchema:
|
|
805
|
-
handler:
|
|
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
|
|
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
|
|
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:
|
|
883
|
-
handler:
|
|
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
|
|
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
|
|
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:
|
|
944
|
-
handler:
|
|
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
|
|
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
|
-
|
|
1219
|
-
|
|
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
|
-
|
|
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
|
|
1317
|
-
return
|
|
1412
|
+
async searchSegments(keywords, timeFilter, limit, previewCount) {
|
|
1413
|
+
return searchSegments(this.db, keywords, timeFilter, limit, previewCount);
|
|
1318
1414
|
}
|
|
1319
|
-
async
|
|
1320
|
-
return
|
|
1415
|
+
async getSegmentMessages(segmentId, limit) {
|
|
1416
|
+
return getSegmentMessages(this.db, segmentId, limit);
|
|
1321
1417
|
}
|
|
1322
|
-
async
|
|
1323
|
-
return
|
|
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-
|
|
1440
|
+
//# sourceMappingURL=chunk-JE3FOFF7.mjs.map
|