chatlab-cli 0.28.1 → 0.30.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chat-command-ISJ2DC7R.mjs → chat-command-UZ23GKO7.mjs} +8 -5
- package/dist/{chat-command-ISJ2DC7R.mjs.map → chat-command-UZ23GKO7.mjs.map} +1 -1
- package/dist/{chunk-AB6TAXTQ.mjs → chunk-4IZ3WKYU.mjs} +591 -310
- package/dist/chunk-4IZ3WKYU.mjs.map +1 -0
- package/dist/{chunk-3QBVO4J7.mjs → chunk-5UBHNQFZ.mjs} +101 -41
- package/dist/chunk-5UBHNQFZ.mjs.map +1 -0
- package/dist/chunk-7BZLS2KW.mjs +8965 -0
- package/dist/chunk-7BZLS2KW.mjs.map +1 -0
- package/dist/{chunk-ZVDOFWL7.mjs → chunk-A2SANKG4.mjs} +4043 -10895
- package/dist/chunk-A2SANKG4.mjs.map +1 -0
- package/dist/chunk-CNSYXRJP.mjs +526 -0
- package/dist/chunk-CNSYXRJP.mjs.map +1 -0
- package/dist/{chunk-T7IETWHN.mjs → chunk-FCCL5Z4W.mjs} +5 -3
- package/dist/{chunk-T7IETWHN.mjs.map → chunk-FCCL5Z4W.mjs.map} +1 -1
- package/dist/chunk-M55KW2HA.mjs +2323 -0
- package/dist/chunk-M55KW2HA.mjs.map +1 -0
- package/dist/chunk-MUPILWAZ.mjs +1339 -0
- package/dist/chunk-MUPILWAZ.mjs.map +1 -0
- package/dist/{chunk-YBS3YQB6.mjs → chunk-P3ZOLTGS.mjs} +31 -57
- package/dist/chunk-P3ZOLTGS.mjs.map +1 -0
- package/dist/{chunk-NJB2NNB2.mjs → chunk-RDR6PS2R.mjs} +2 -2
- package/dist/{chunk-ERAAWLEF.mjs → chunk-ZFU2CHW3.mjs} +11 -8
- package/dist/{chunk-ERAAWLEF.mjs.map → chunk-ZFU2CHW3.mjs.map} +1 -1
- package/dist/cli.mjs +7 -4
- package/dist/contacts-worker.mjs +48 -0
- package/dist/contacts-worker.mjs.map +1 -0
- package/dist/{http-MBILV37U.mjs → http-UWRA5FLB.mjs} +11 -8
- package/dist/{import-EYV3GXHE.mjs → import-745KQL7N.mjs} +7 -4
- package/dist/index.mjs +11 -8
- package/dist/{mcp-H55AEXU5.mjs → mcp-UHN5JOHC.mjs} +8 -5
- package/dist/{mcp-H55AEXU5.mjs.map → mcp-UHN5JOHC.mjs.map} +1 -1
- package/dist/people-relationships-worker.mjs +48 -0
- package/dist/people-relationships-worker.mjs.map +1 -0
- package/dist/semantic-index-worker.mjs +1 -1
- package/dist/{src-36ZIR65K.mjs → src-Y7MDRXLJ.mjs} +68 -44
- package/dist/{stream-import-YZMZ56B5.mjs → stream-import-3JMXQD7P.mjs} +7 -4
- package/dist/{worker-runtime-YDYS2C6T.mjs → worker-runtime-63RYMGZI.mjs} +7 -3
- package/dist/{worker-runtime-YDYS2C6T.mjs.map → worker-runtime-63RYMGZI.mjs.map} +1 -1
- package/dist-web/assets/BufferResource-BVdJ_I5X.js +185 -0
- package/dist-web/assets/CanvasRenderer-BaRuT54R.js +1 -0
- package/dist-web/assets/DebugToolsPanel-D_lFIW6j.css +1 -0
- package/dist-web/assets/DebugToolsPanel.vue_vue_type_script_setup_true_lang-N5CoiJzN.js +110 -0
- package/dist-web/assets/{EChartWordcloud-B_YisOW5.js → EChartWordcloud-Clg60FMo.js} +1 -1
- package/dist-web/assets/Filter-B7cNFtuE.js +1 -0
- package/dist-web/assets/LoadingState.vue_vue_type_script_setup_true_lang-D_dJuLWJ.js +1 -0
- package/dist-web/assets/MessageExportModal-B2Qm6VVj.js +1 -0
- package/dist-web/assets/PageHeader-Bbn87QZS.css +1 -0
- package/dist-web/assets/PageHeader-PjlWy9fC.js +1 -0
- package/dist-web/assets/RelationshipGalaxyCanvas-11MafciW.js +244 -0
- package/dist-web/assets/RelationshipGalaxyThreeCanvas-BluPHjCR.css +1 -0
- package/dist-web/assets/RelationshipGalaxyThreeCanvas-C1I4B8NX.js +4108 -0
- package/dist-web/assets/RenderTargetSystem-Chkz1WlI.js +184 -0
- package/dist-web/assets/WebGLRenderer-xK19ru58.js +156 -0
- package/dist-web/assets/WebGPURenderer-CL5ZaKsn.js +41 -0
- package/dist-web/assets/browserAll-CyyNzRD_.js +14 -0
- package/dist-web/assets/electron-MXaTKaMu.js +1 -0
- package/dist-web/assets/{fetch-29ZBtGV0.js → fetch-D1dDiFO4.js} +1 -1
- package/dist-web/assets/{fetch-TCeykOkO.js → fetch-DDnVXGte.js} +1 -1
- package/dist-web/assets/{fetch-Bh1fo3Df.js → fetch-DTwdRTXM.js} +1 -1
- package/dist-web/assets/{fetch-BcxrU2mr.js → fetch-DaaJwT-5.js} +1 -1
- package/dist-web/assets/{fetch-tIIVdXSv.js → fetch-DeA0ztwT.js} +1 -1
- package/dist-web/assets/fetch-DpnIGZSN.js +17 -0
- package/dist-web/assets/{fetch-C3yhWO2S.js → fetch-DsE-xcP2.js} +1 -1
- package/dist-web/assets/{fetch-BYczbT4C.js → fetch-DsTgYu_X.js} +1 -1
- package/dist-web/assets/fetch-hKE53UO4.js +1 -0
- package/dist-web/assets/fetch-u9GTMhMF.js +1 -0
- package/dist-web/assets/index---rXG1hZ.css +1 -0
- package/dist-web/assets/index-BVkE4qis.js +22 -0
- package/dist-web/assets/index-BcXLcFnV.css +1 -0
- package/dist-web/assets/index-BnHKyESZ.js +1 -0
- package/dist-web/assets/index-Btr5H7d-.js +2 -0
- package/dist-web/assets/{index-BX3tqfLz.css → index-C1p9CbmN.css} +1 -1
- package/dist-web/assets/index-COpza1A4.css +1 -0
- package/dist-web/assets/index-D04LWJop.js +173 -0
- package/dist-web/assets/index-DFCYmzGE.js +2 -0
- package/dist-web/assets/index-DosG7LmJ.css +1 -0
- package/dist-web/assets/index-DqXHRIhI.js +1 -0
- package/dist-web/assets/{index-fbWrQpgH.js → index-DqtXt3wl.js} +1 -1
- package/dist-web/assets/index-Dszv-QFp.js +64 -0
- package/dist-web/assets/index-DzLrWGXu.js +1 -0
- package/dist-web/assets/people-page-header-Mupn-U_b.js +1 -0
- package/dist-web/assets/relationship-galaxy-viewport-Cwfa51ER.js +1 -0
- package/dist-web/assets/{vendor-echarts-CITQeskI.js → vendor-echarts-hJVnODyU.js} +2 -2
- package/dist-web/assets/{vendor-echarts-wordcloud-B1kQMklB.js → vendor-echarts-wordcloud-k5ih2Jl4.js} +1 -1
- package/dist-web/assets/{vendor-nuxt-ui-Zy8txNdC.js → vendor-nuxt-ui-DaLxYaC4.js} +2 -2
- package/dist-web/assets/{vendor-reka-ui-mMvma1EP.js → vendor-reka-ui-CzM4kDQ7.js} +1 -1
- package/dist-web/assets/{vendor-zrender-DFl4U2Oe.js → vendor-zrender-5DcYjSZk.js} +1 -1
- package/dist-web/assets/{web-H3XLx159.js → web-DPVWfPS-.js} +1 -1
- package/dist-web/assets/webworkerAll-DF5QV_vN.js +83 -0
- package/dist-web/index.html +4 -4
- package/package.json +1 -1
- package/dist/chunk-3QBVO4J7.mjs.map +0 -1
- package/dist/chunk-AB6TAXTQ.mjs.map +0 -1
- package/dist/chunk-GHTGFM6O.mjs +0 -540
- package/dist/chunk-GHTGFM6O.mjs.map +0 -1
- package/dist/chunk-YBS3YQB6.mjs.map +0 -1
- package/dist/chunk-ZVDOFWL7.mjs.map +0 -1
- package/dist-web/assets/DebugToolsPanel-DFw6_G5V.css +0 -1
- package/dist-web/assets/DebugToolsPanel.vue_vue_type_script_setup_true_lang-Do3x4aL3.js +0 -110
- package/dist-web/assets/MessageExportModal-rijqUusq.js +0 -1
- package/dist-web/assets/electron-DWDCqx_d.js +0 -1
- package/dist-web/assets/fetch-BAxKmbKF.js +0 -1
- package/dist-web/assets/fetch-Da_TBxrX.js +0 -1
- package/dist-web/assets/fetch-DyD8wDhb.js +0 -17
- package/dist-web/assets/index-BzjLqlW_.js +0 -173
- package/dist-web/assets/index-C74qEDFh.js +0 -64
- package/dist-web/assets/index-CM6xNPFp.css +0 -1
- package/dist-web/assets/index-CgK2LLIF.js +0 -12
- package/dist-web/assets/index-CjkOvM3N.js +0 -2
- package/dist-web/assets/index-Dno7CADA.js +0 -1
- package/dist-web/assets/index-I3SWZjnW.css +0 -1
- /package/dist/{chunk-NJB2NNB2.mjs.map → chunk-RDR6PS2R.mjs.map} +0 -0
- /package/dist/{http-MBILV37U.mjs.map → http-UWRA5FLB.mjs.map} +0 -0
- /package/dist/{import-EYV3GXHE.mjs.map → import-745KQL7N.mjs.map} +0 -0
- /package/dist/{src-36ZIR65K.mjs.map → src-Y7MDRXLJ.mjs.map} +0 -0
- /package/dist/{stream-import-YZMZ56B5.mjs.map → stream-import-3JMXQD7P.mjs.map} +0 -0
|
@@ -6,6 +6,7 @@ const __filename = __fileURLToPath(import.meta.url);
|
|
|
6
6
|
const __dirname = __pathDirname(__filename);
|
|
7
7
|
import {
|
|
8
8
|
buildChartPayload,
|
|
9
|
+
computeResponseTimeStats,
|
|
9
10
|
executeParameterizedSql,
|
|
10
11
|
executeReadonlySql,
|
|
11
12
|
getChatOverview,
|
|
@@ -18,15 +19,22 @@ import {
|
|
|
18
19
|
getMembers,
|
|
19
20
|
getMembersWithAliases,
|
|
20
21
|
getMessageContext,
|
|
21
|
-
|
|
22
|
+
getMonthlyActivity,
|
|
22
23
|
getSearchMessageContext,
|
|
23
24
|
getSegmentMessages,
|
|
24
25
|
getSegmentSummaries,
|
|
25
26
|
getSessionMeta,
|
|
26
27
|
getSessionOverview,
|
|
27
28
|
getWeekdayActivity,
|
|
29
|
+
queryMessages,
|
|
28
30
|
searchMessagesByKeywords
|
|
29
|
-
} from "./chunk-
|
|
31
|
+
} from "./chunk-7BZLS2KW.mjs";
|
|
32
|
+
|
|
33
|
+
// ../../packages/tools/src/utils/limits.ts
|
|
34
|
+
function resolveMessageLimit(requestedLimit, defaultLimit, maxMessagesLimit) {
|
|
35
|
+
const requested = typeof requestedLimit === "number" && requestedLimit > 0 ? requestedLimit : defaultLimit;
|
|
36
|
+
return maxMessagesLimit && maxMessagesLimit > 0 ? Math.min(requested, maxMessagesLimit) : requested;
|
|
37
|
+
}
|
|
30
38
|
|
|
31
39
|
// ../../packages/tools/src/definitions/sql-query.ts
|
|
32
40
|
var inputSchema = {
|
|
@@ -34,15 +42,31 @@ var inputSchema = {
|
|
|
34
42
|
properties: {
|
|
35
43
|
sql: {
|
|
36
44
|
type: "string",
|
|
37
|
-
description: "\u8981\u6267\u884C\u7684 SELECT SQL \u67E5\u8BE2\u8BED\u53E5"
|
|
45
|
+
description: "\u8981\u6267\u884C\u7684 SELECT SQL \u67E5\u8BE2\u8BED\u53E5\u3002\u5EFA\u8BAE\u663E\u5F0F\u6DFB\u52A0 LIMIT\uFF0C\u5DE5\u5177\u8F93\u51FA\u4ECD\u4F1A\u88AB max_rows \u622A\u65AD\u3002"
|
|
46
|
+
},
|
|
47
|
+
max_rows: {
|
|
48
|
+
type: "number",
|
|
49
|
+
description: "\u6700\u591A\u8FD4\u56DE\u591A\u5C11\u884C\uFF0C\u9ED8\u8BA4 1000\uFF1B\u8FD8\u4F1A\u53D7\u8C03\u7528\u4E0A\u4E0B\u6587\u7684\u6D88\u606F\u4E0A\u9650\u9650\u5236\u3002"
|
|
38
50
|
}
|
|
39
51
|
},
|
|
40
52
|
required: ["sql"]
|
|
41
53
|
};
|
|
54
|
+
function clampSqlResultRows(result, maxRows) {
|
|
55
|
+
if (!result || typeof result !== "object" || maxRows <= 0) return result;
|
|
56
|
+
const resultLike = result;
|
|
57
|
+
if (!Array.isArray(resultLike.rows) || resultLike.rows.length <= maxRows) return result;
|
|
58
|
+
return {
|
|
59
|
+
...resultLike,
|
|
60
|
+
rows: resultLike.rows.slice(0, maxRows),
|
|
61
|
+
rowCount: maxRows,
|
|
62
|
+
truncated: true
|
|
63
|
+
};
|
|
64
|
+
}
|
|
42
65
|
async function handler(params, context) {
|
|
43
66
|
const sql = params.sql;
|
|
67
|
+
const maxRows = resolveMessageLimit(params.max_rows, 1e3, context.maxMessagesLimit);
|
|
44
68
|
try {
|
|
45
|
-
const result = await context.dataProvider.executeSql(sql);
|
|
69
|
+
const result = clampSqlResultRows(await context.dataProvider.executeSql(sql, { maxRows }), maxRows);
|
|
46
70
|
return {
|
|
47
71
|
content: JSON.stringify(result),
|
|
48
72
|
data: result
|
|
@@ -66,7 +90,7 @@ async function schemaHandler(_params, context) {
|
|
|
66
90
|
}
|
|
67
91
|
var sqlQueryTool = {
|
|
68
92
|
name: "execute_sql",
|
|
69
|
-
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",
|
|
93
|
+
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\u5EFA\u8BAE SQL \u663E\u5F0F\u6DFB\u52A0 LIMIT\uFF1B\u5DE5\u5177\u4F1A\u6309 max_rows \u622A\u65AD\u8F93\u51FA\uFF0C\u907F\u514D\u8FD4\u56DE\u8FC7\u5927\u7ED3\u679C\u96C6\u3002",
|
|
70
94
|
inputSchema,
|
|
71
95
|
handler,
|
|
72
96
|
category: "analysis"
|
|
@@ -394,6 +418,32 @@ var timeParamProperties = {
|
|
|
394
418
|
}
|
|
395
419
|
};
|
|
396
420
|
|
|
421
|
+
// ../../packages/tools/src/definitions/search-context.ts
|
|
422
|
+
function trimMessagesPreservingHits(messages, hitIds, limit) {
|
|
423
|
+
if (limit <= 0) return [];
|
|
424
|
+
if (messages.length <= limit) return messages;
|
|
425
|
+
const requiredIds = new Set(hitIds);
|
|
426
|
+
if (requiredIds.size === 0) return messages.slice(0, limit);
|
|
427
|
+
const trimmed = messages.slice(0, limit);
|
|
428
|
+
const presentIds = new Set(trimmed.map((message) => message.id).filter((id) => id != null));
|
|
429
|
+
const missingHits = messages.filter(
|
|
430
|
+
(message) => message.id != null && requiredIds.has(message.id) && !presentIds.has(message.id)
|
|
431
|
+
);
|
|
432
|
+
for (const hit of missingHits) {
|
|
433
|
+
let replaceIndex = -1;
|
|
434
|
+
for (let i = trimmed.length - 1; i >= 0; i--) {
|
|
435
|
+
const id = trimmed[i].id;
|
|
436
|
+
if (id == null || !requiredIds.has(id)) {
|
|
437
|
+
replaceIndex = i;
|
|
438
|
+
break;
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
if (replaceIndex === -1) break;
|
|
442
|
+
trimmed[replaceIndex] = hit;
|
|
443
|
+
}
|
|
444
|
+
return trimmed.sort((a, b) => messages.indexOf(a) - messages.indexOf(b));
|
|
445
|
+
}
|
|
446
|
+
|
|
397
447
|
// ../../packages/tools/src/definitions/search-messages.ts
|
|
398
448
|
var inputSchema6 = {
|
|
399
449
|
type: "object",
|
|
@@ -408,7 +458,7 @@ var inputSchema6 = {
|
|
|
408
458
|
async function handler6(params, context) {
|
|
409
459
|
const { locale, timeFilter: contextTimeFilter, maxMessagesLimit } = context;
|
|
410
460
|
const keywords = params.keywords;
|
|
411
|
-
const limit = Math.min(
|
|
461
|
+
const limit = Math.min(resolveMessageLimit(params.limit, 1e3, maxMessagesLimit), 5e4);
|
|
412
462
|
const effectiveTimeFilter = parseExtendedTimeParams(params, contextTimeFilter);
|
|
413
463
|
const result = await context.dataProvider.searchMessages(keywords, {
|
|
414
464
|
timeFilter: effectiveTimeFilter,
|
|
@@ -418,12 +468,13 @@ async function handler6(params, context) {
|
|
|
418
468
|
const contextBefore = context.searchContextBefore ?? 2;
|
|
419
469
|
const contextAfter = context.searchContextAfter ?? 2;
|
|
420
470
|
let finalMessages = result.messages;
|
|
471
|
+
const hitIds = result.messages.map((m) => m.id).filter((id) => id != null);
|
|
421
472
|
if ((contextBefore > 0 || contextAfter > 0) && result.messages.length > 0) {
|
|
422
|
-
const hitIds = result.messages.map((m) => m.id).filter((id) => id != null);
|
|
423
473
|
if (hitIds.length > 0) {
|
|
424
474
|
finalMessages = await context.dataProvider.getSearchMessageContext(hitIds, contextBefore, contextAfter);
|
|
425
475
|
}
|
|
426
476
|
}
|
|
477
|
+
finalMessages = trimMessagesPreservingHits(finalMessages, hitIds, limit);
|
|
427
478
|
const data = {
|
|
428
479
|
total: result.total,
|
|
429
480
|
returned: finalMessages.length,
|
|
@@ -455,7 +506,7 @@ var inputSchema7 = {
|
|
|
455
506
|
async function handler7(params, context) {
|
|
456
507
|
const { locale, timeFilter: contextTimeFilter, maxMessagesLimit } = context;
|
|
457
508
|
const keywords = params.keywords;
|
|
458
|
-
const limit = Math.min(
|
|
509
|
+
const limit = Math.min(resolveMessageLimit(params.limit, 1e3, maxMessagesLimit), 5e4);
|
|
459
510
|
const effectiveTimeFilter = parseExtendedTimeParams(params, contextTimeFilter);
|
|
460
511
|
const result = await context.dataProvider.deepSearchMessages(keywords, {
|
|
461
512
|
timeFilter: effectiveTimeFilter,
|
|
@@ -465,12 +516,13 @@ async function handler7(params, context) {
|
|
|
465
516
|
const contextBefore = context.searchContextBefore ?? 2;
|
|
466
517
|
const contextAfter = context.searchContextAfter ?? 2;
|
|
467
518
|
let finalMessages = result.messages;
|
|
519
|
+
const hitIds = result.messages.map((m) => m.id).filter((id) => id != null);
|
|
468
520
|
if ((contextBefore > 0 || contextAfter > 0) && result.messages.length > 0) {
|
|
469
|
-
const hitIds = result.messages.map((m) => m.id).filter((id) => id != null);
|
|
470
521
|
if (hitIds.length > 0) {
|
|
471
522
|
finalMessages = await context.dataProvider.getSearchMessageContext(hitIds, contextBefore, contextAfter);
|
|
472
523
|
}
|
|
473
524
|
}
|
|
525
|
+
finalMessages = trimMessagesPreservingHits(finalMessages, hitIds, limit);
|
|
474
526
|
const data = {
|
|
475
527
|
total: result.total,
|
|
476
528
|
returned: finalMessages.length,
|
|
@@ -499,8 +551,16 @@ var inputSchema8 = {
|
|
|
499
551
|
};
|
|
500
552
|
async function handler8(params, context) {
|
|
501
553
|
const { locale } = context;
|
|
502
|
-
const
|
|
503
|
-
const
|
|
554
|
+
const maxMessagesLimit = context.maxMessagesLimit;
|
|
555
|
+
const requestedMessageIds = params.message_ids;
|
|
556
|
+
const messageIds = maxMessagesLimit && maxMessagesLimit > 0 ? requestedMessageIds.slice(0, maxMessagesLimit) : requestedMessageIds;
|
|
557
|
+
const requestedContextSize = params.context_size;
|
|
558
|
+
let contextSize = typeof requestedContextSize === "number" && Number.isFinite(requestedContextSize) ? Math.max(0, Math.floor(requestedContextSize)) : 20;
|
|
559
|
+
if (maxMessagesLimit && maxMessagesLimit > 0 && messageIds.length > 0) {
|
|
560
|
+
const maxMessagesPerId = Math.max(1, Math.floor(maxMessagesLimit / messageIds.length));
|
|
561
|
+
const maxContextSize = Math.max(0, Math.floor((maxMessagesPerId - 1) / 2));
|
|
562
|
+
contextSize = Math.min(contextSize, maxContextSize);
|
|
563
|
+
}
|
|
504
564
|
const messages = await context.dataProvider.getMessageContext(messageIds, contextSize);
|
|
505
565
|
if (messages.length === 0) {
|
|
506
566
|
const data2 = {
|
|
@@ -537,7 +597,7 @@ var inputSchema9 = {
|
|
|
537
597
|
};
|
|
538
598
|
async function handler9(params, context) {
|
|
539
599
|
const { locale, maxMessagesLimit } = context;
|
|
540
|
-
const limit =
|
|
600
|
+
const limit = resolveMessageLimit(params.limit, 1e3, maxMessagesLimit);
|
|
541
601
|
const result = await context.dataProvider.getSegmentMessages(params.segment_id, limit);
|
|
542
602
|
if (!result) {
|
|
543
603
|
const data2 = {
|
|
@@ -664,12 +724,14 @@ var inputSchema12 = {
|
|
|
664
724
|
description: "\u7EDF\u8BA1\u7C7B\u578B\uFF1Ahourly\uFF08\u6309\u5C0F\u65F6\uFF09\u3001weekday\uFF08\u6309\u661F\u671F\uFF09\u3001daily\uFF08\u6309\u5929\uFF09",
|
|
665
725
|
enum: ["hourly", "weekday", "daily"],
|
|
666
726
|
default: "hourly"
|
|
667
|
-
}
|
|
727
|
+
},
|
|
728
|
+
...timeParamProperties
|
|
668
729
|
}
|
|
669
730
|
};
|
|
670
731
|
async function handler12(params, context) {
|
|
671
732
|
const type = params.type || "hourly";
|
|
672
|
-
const
|
|
733
|
+
const effectiveTimeFilter = parseExtendedTimeParams(params, context.timeFilter);
|
|
734
|
+
const data = await context.dataProvider.getTimeStats(type, { timeFilter: effectiveTimeFilter });
|
|
673
735
|
return {
|
|
674
736
|
content: JSON.stringify({ type, data }),
|
|
675
737
|
data
|
|
@@ -697,7 +759,7 @@ var inputSchema13 = {
|
|
|
697
759
|
};
|
|
698
760
|
async function handler13(params, context) {
|
|
699
761
|
const { locale, timeFilter: contextTimeFilter, maxMessagesLimit } = context;
|
|
700
|
-
const limit =
|
|
762
|
+
const limit = resolveMessageLimit(params.limit, 100, maxMessagesLimit);
|
|
701
763
|
const effectiveTimeFilter = parseExtendedTimeParams(params, contextTimeFilter);
|
|
702
764
|
const result = await context.dataProvider.getRecentMessages({ timeFilter: effectiveTimeFilter, limit });
|
|
703
765
|
const data = {
|
|
@@ -783,7 +845,7 @@ var inputSchema15 = {
|
|
|
783
845
|
};
|
|
784
846
|
async function handler15(params, context) {
|
|
785
847
|
const { locale, timeFilter: contextTimeFilter, maxMessagesLimit } = context;
|
|
786
|
-
const limit =
|
|
848
|
+
const limit = resolveMessageLimit(params.limit, 100, maxMessagesLimit);
|
|
787
849
|
const effectiveTimeFilter = parseExtendedTimeParams(params, contextTimeFilter);
|
|
788
850
|
const result = await context.dataProvider.getConversationBetween(
|
|
789
851
|
params.member_id_1,
|
|
@@ -904,24 +966,10 @@ async function handler17(params, context) {
|
|
|
904
966
|
const text = isZh ? "\u8BE5\u65F6\u95F4\u8303\u56F4\u5185\u6D88\u606F\u4E0D\u8DB3\uFF0C\u65E0\u6CD5\u5206\u6790\u54CD\u5E94\u65F6\u95F4" : "Not enough messages in this time range to analyze response time";
|
|
905
967
|
return { content: text, data: null };
|
|
906
968
|
}
|
|
907
|
-
const
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
if (curr.sender_id === prev.sender_id) continue;
|
|
912
|
-
const gap = curr.ts - prev.ts;
|
|
913
|
-
if (gap < 5 || gap > 1800) continue;
|
|
914
|
-
if (!responseTimes.has(curr.sender_id)) {
|
|
915
|
-
responseTimes.set(curr.sender_id, { name: curr.name, times: [] });
|
|
916
|
-
}
|
|
917
|
-
responseTimes.get(curr.sender_id).times.push(gap);
|
|
918
|
-
}
|
|
919
|
-
const stats = [...responseTimes.entries()].map(([id, { name, times }]) => {
|
|
920
|
-
times.sort((a, b) => a - b);
|
|
921
|
-
const avg = Math.round(times.reduce((s, t2) => s + t2, 0) / times.length);
|
|
922
|
-
const median = times[Math.floor(times.length / 2)];
|
|
923
|
-
return { id, name, avgSeconds: avg, medianSeconds: median, responseCount: times.length };
|
|
924
|
-
}).filter((s) => s.responseCount >= 3).sort((a, b) => a.medianSeconds - b.medianSeconds).slice(0, topN);
|
|
969
|
+
const stats = computeResponseTimeStats(
|
|
970
|
+
rows.map((r) => ({ senderId: r.sender_id, name: r.name, ts: r.ts })),
|
|
971
|
+
topN
|
|
972
|
+
);
|
|
925
973
|
if (stats.length === 0) {
|
|
926
974
|
const text = isZh ? "\u6CA1\u6709\u8DB3\u591F\u7684\u54CD\u5E94\u6570\u636E\u8FDB\u884C\u5206\u6790" : "Not enough response data for analysis";
|
|
927
975
|
return { content: text, data: null };
|
|
@@ -1725,6 +1773,7 @@ var MCP_TOOL_REGISTRY = [
|
|
|
1725
1773
|
];
|
|
1726
1774
|
|
|
1727
1775
|
// ../../packages/tools/src/providers/core-data-provider.ts
|
|
1776
|
+
var TOOL_MESSAGE_LIMIT_CAP = 5e4;
|
|
1728
1777
|
var CoreDataProvider = class {
|
|
1729
1778
|
constructor(db) {
|
|
1730
1779
|
this.db = db;
|
|
@@ -1735,7 +1784,11 @@ var CoreDataProvider = class {
|
|
|
1735
1784
|
startTs: options?.timeFilter?.startTs,
|
|
1736
1785
|
endTs: options?.timeFilter?.endTs,
|
|
1737
1786
|
senderId: options?.senderId,
|
|
1738
|
-
limit: options?.limit ?? 50
|
|
1787
|
+
limit: options?.limit ?? 50,
|
|
1788
|
+
offset: options?.offset,
|
|
1789
|
+
matchMode: options?.matchMode,
|
|
1790
|
+
excludeKeywords: options?.excludeKeywords,
|
|
1791
|
+
sort: options?.sort
|
|
1739
1792
|
});
|
|
1740
1793
|
return {
|
|
1741
1794
|
messages: result.messages.map((m) => ({
|
|
@@ -1756,9 +1809,14 @@ var CoreDataProvider = class {
|
|
|
1756
1809
|
return getSearchMessageContext(this.db, messageIds, contextBefore, contextAfter);
|
|
1757
1810
|
}
|
|
1758
1811
|
async getRecentMessages(options) {
|
|
1759
|
-
const
|
|
1812
|
+
const result = queryMessages(this.db, {
|
|
1813
|
+
limit: options?.limit ?? 50,
|
|
1814
|
+
maxLimit: TOOL_MESSAGE_LIMIT_CAP,
|
|
1815
|
+
startTs: options?.timeFilter?.startTs,
|
|
1816
|
+
endTs: options?.timeFilter?.endTs
|
|
1817
|
+
});
|
|
1760
1818
|
return {
|
|
1761
|
-
messages: messages.map((m) => ({
|
|
1819
|
+
messages: result.messages.map((m) => ({
|
|
1762
1820
|
id: m.id,
|
|
1763
1821
|
senderId: m.senderId,
|
|
1764
1822
|
senderName: m.senderName,
|
|
@@ -1766,7 +1824,7 @@ var CoreDataProvider = class {
|
|
|
1766
1824
|
content: m.content,
|
|
1767
1825
|
timestamp: m.timestamp
|
|
1768
1826
|
})),
|
|
1769
|
-
total:
|
|
1827
|
+
total: result.total
|
|
1770
1828
|
};
|
|
1771
1829
|
}
|
|
1772
1830
|
async getMessageContext(messageIds, contextSize) {
|
|
@@ -1797,6 +1855,8 @@ var CoreDataProvider = class {
|
|
|
1797
1855
|
return getWeekdayActivity(this.db, filter);
|
|
1798
1856
|
case "daily":
|
|
1799
1857
|
return getDailyActivity(this.db, filter);
|
|
1858
|
+
case "monthly":
|
|
1859
|
+
return getMonthlyActivity(this.db, filter);
|
|
1800
1860
|
case "hourly":
|
|
1801
1861
|
default:
|
|
1802
1862
|
return getHourlyActivity(this.db, filter);
|
|
@@ -1811,8 +1871,8 @@ var CoreDataProvider = class {
|
|
|
1811
1871
|
async getConversationBetween(memberId1, memberId2, timeFilter, limit) {
|
|
1812
1872
|
return getConversationBetween(this.db, memberId1, memberId2, timeFilter, limit);
|
|
1813
1873
|
}
|
|
1814
|
-
async executeSql(sql) {
|
|
1815
|
-
return executeReadonlySql(this.db, sql);
|
|
1874
|
+
async executeSql(sql, options) {
|
|
1875
|
+
return executeReadonlySql(this.db, sql, options?.maxRows);
|
|
1816
1876
|
}
|
|
1817
1877
|
async executeParameterizedSql(query, params) {
|
|
1818
1878
|
return executeParameterizedSql(this.db, query, params);
|
|
@@ -1828,4 +1888,4 @@ export {
|
|
|
1828
1888
|
MCP_TOOL_REGISTRY,
|
|
1829
1889
|
CoreDataProvider
|
|
1830
1890
|
};
|
|
1831
|
-
//# sourceMappingURL=chunk-
|
|
1891
|
+
//# sourceMappingURL=chunk-5UBHNQFZ.mjs.map
|