elasticsearch-mcp-vsee-stage 0.5.13 → 0.5.14

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 (99) hide show
  1. package/LICENSE +0 -0
  2. package/README.md +0 -0
  3. package/build/config.d.ts +0 -0
  4. package/build/config.d.ts.map +0 -0
  5. package/build/config.js +0 -0
  6. package/build/config.js.map +0 -0
  7. package/build/elasticsearch/client.d.ts +0 -0
  8. package/build/elasticsearch/client.d.ts.map +0 -0
  9. package/build/elasticsearch/client.js +0 -0
  10. package/build/elasticsearch/client.js.map +0 -0
  11. package/build/errors/handlers.d.ts +0 -0
  12. package/build/errors/handlers.d.ts.map +0 -0
  13. package/build/errors/handlers.js +0 -0
  14. package/build/errors/handlers.js.map +0 -0
  15. package/build/index.d.ts +0 -0
  16. package/build/index.d.ts.map +0 -0
  17. package/build/index.js +0 -0
  18. package/build/index.js.map +0 -0
  19. package/build/logger.d.ts +0 -0
  20. package/build/logger.d.ts.map +0 -0
  21. package/build/logger.js +0 -0
  22. package/build/logger.js.map +0 -0
  23. package/build/server.d.ts +2 -9
  24. package/build/server.d.ts.map +1 -1
  25. package/build/server.js +24 -445
  26. package/build/server.js.map +1 -1
  27. package/build/tools/base-tool.d.ts +41 -0
  28. package/build/tools/base-tool.d.ts.map +1 -0
  29. package/build/tools/base-tool.js +75 -0
  30. package/build/tools/base-tool.js.map +1 -0
  31. package/build/tools/find-entities-by-metric.d.ts +315 -24
  32. package/build/tools/find-entities-by-metric.d.ts.map +1 -1
  33. package/build/tools/find-entities-by-metric.js +280 -284
  34. package/build/tools/find-entities-by-metric.js.map +1 -1
  35. package/build/tools/get-index-fields.d.ts +38 -4
  36. package/build/tools/get-index-fields.d.ts.map +1 -1
  37. package/build/tools/get-index-fields.js +37 -49
  38. package/build/tools/get-index-fields.js.map +1 -1
  39. package/build/tools/get-platform-breakdown.d.ts +61 -22
  40. package/build/tools/get-platform-breakdown.d.ts.map +1 -1
  41. package/build/tools/get-platform-breakdown.js +223 -266
  42. package/build/tools/get-platform-breakdown.js.map +1 -1
  43. package/build/tools/get-rating-distribution.d.ts +66 -25
  44. package/build/tools/get-rating-distribution.d.ts.map +1 -1
  45. package/build/tools/get-rating-distribution.js +209 -245
  46. package/build/tools/get-rating-distribution.js.map +1 -1
  47. package/build/tools/get-subscription-breakdown.d.ts +31 -15
  48. package/build/tools/get-subscription-breakdown.d.ts.map +1 -1
  49. package/build/tools/get-subscription-breakdown.js +143 -155
  50. package/build/tools/get-subscription-breakdown.js.map +1 -1
  51. package/build/tools/get-usage-leaderboard.d.ts +102 -25
  52. package/build/tools/get-usage-leaderboard.d.ts.map +1 -1
  53. package/build/tools/get-usage-leaderboard.js +131 -136
  54. package/build/tools/get-usage-leaderboard.js.map +1 -1
  55. package/build/tools/get-usage-profile.d.ts +54 -22
  56. package/build/tools/get-usage-profile.d.ts.map +1 -1
  57. package/build/tools/get-usage-profile.js +209 -244
  58. package/build/tools/get-usage-profile.js.map +1 -1
  59. package/build/tools/get-visit-trends.d.ts +60 -25
  60. package/build/tools/get-visit-trends.d.ts.map +1 -1
  61. package/build/tools/get-visit-trends.js +185 -241
  62. package/build/tools/get-visit-trends.js.map +1 -1
  63. package/build/tools/index.d.ts +0 -0
  64. package/build/tools/index.d.ts.map +0 -0
  65. package/build/tools/index.js +0 -0
  66. package/build/tools/index.js.map +0 -0
  67. package/build/tools/top-change.d.ts +57 -23
  68. package/build/tools/top-change.d.ts.map +1 -1
  69. package/build/tools/top-change.js +172 -217
  70. package/build/tools/top-change.js.map +1 -1
  71. package/build/tools/types.d.ts +24 -0
  72. package/build/tools/types.d.ts.map +1 -0
  73. package/build/tools/types.js +3 -0
  74. package/build/tools/types.js.map +1 -0
  75. package/build/utils/aggregation-limits.d.ts +0 -0
  76. package/build/utils/aggregation-limits.d.ts.map +0 -0
  77. package/build/utils/aggregation-limits.js +0 -0
  78. package/build/utils/aggregation-limits.js.map +0 -0
  79. package/build/utils/date-math.d.ts +0 -0
  80. package/build/utils/date-math.d.ts.map +0 -0
  81. package/build/utils/date-math.js +0 -0
  82. package/build/utils/date-math.js.map +0 -0
  83. package/build/utils/field-constants.d.ts +0 -0
  84. package/build/utils/field-constants.d.ts.map +0 -0
  85. package/build/utils/field-constants.js +0 -0
  86. package/build/utils/field-constants.js.map +0 -0
  87. package/build/utils/query-helpers.d.ts +10 -0
  88. package/build/utils/query-helpers.d.ts.map +1 -0
  89. package/build/utils/query-helpers.js +48 -0
  90. package/build/utils/query-helpers.js.map +1 -0
  91. package/build/utils/schema-converter.d.ts +17 -0
  92. package/build/utils/schema-converter.d.ts.map +1 -0
  93. package/build/utils/schema-converter.js +101 -0
  94. package/build/utils/schema-converter.js.map +1 -0
  95. package/build/validation/schemas.d.ts +0 -0
  96. package/build/validation/schemas.d.ts.map +0 -0
  97. package/build/validation/schemas.js +0 -0
  98. package/build/validation/schemas.js.map +0 -0
  99. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"get-visit-trends.d.ts","sourceRoot":"","sources":["../../src/tools/get-visit-trends.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAgBtC,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,GAAG,OAAO,CAAC;IACxD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,YAAY,GAAG,SAAS,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;CAClE;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAiB,SAAQ,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAC3D,WAAW,EAAE,cAAc,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,cAAc,EAAE,GAAG,gBAAgB,EAAE,CAAC;IAC9C,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,MAAM,CAAS;gBAEX,aAAa,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM;IAKzD,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAkSzD"}
1
+ {"version":3,"file":"get-visit-trends.d.ts","sourceRoot":"","sources":["../../src/tools/get-visit-trends.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAG9C,QAAA,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;EAQnB,CAAC;AAEZ,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAiB,SAAQ,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAC3D,WAAW,EAAE,cAAc,EAAE,CAAC;CAC/B;AAED,MAAM,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,cAAc,EAAE,GAAG,gBAAgB,EAAE,CAAC,CAAC;AAExF,qBAAa,kBAAmB,SAAQ,QAAQ,CAAC,OAAO,wBAAwB,EAAE,iBAAiB,CAAC;gBACtF,aAAa,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG;IAI3C,IAAI,MAAM;;;;;;;;;;;;;;;;;;;;;;;;OAET;IAED,IAAI,WAAW,WAEd;cAEe,GAAG,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC;CA2N1E"}
@@ -1,222 +1,195 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.GetVisitTrendsTool = void 0;
4
+ const base_tool_js_1 = require("./base-tool.js");
4
5
  const zod_1 = require("zod");
5
- const handlers_js_1 = require("../errors/handlers.js");
6
- const aggregation_limits_js_1 = require("../utils/aggregation-limits.js");
7
6
  const field_constants_js_1 = require("../utils/field-constants.js");
7
+ const query_helpers_js_1 = require("../utils/query-helpers.js");
8
+ const aggregation_limits_js_1 = require("../utils/aggregation-limits.js");
8
9
  const GetVisitTrendsArgsSchema = zod_1.z.object({
9
- interval: zod_1.z.enum(['daily', 'weekly', 'monthly']).describe('Time interval for trends: "daily", "weekly", or "monthly"'),
10
- startDate: zod_1.z.string().optional().describe('Start date in ISO format (YYYY-MM-DD) or date math (e.g., "now-180d", "now-1y"). Defaults to "now-180d" (6 months)'),
10
+ interval: zod_1.z.enum(['daily', 'weekly', 'monthly']).default('weekly').describe('Time interval for trends: "daily", "weekly", or "monthly" (default: weekly)'),
11
+ startDate: zod_1.z.string().optional().describe('Start date in ISO format (YYYY-MM-DD) or date math (e.g., "now-30d", "now-1y"). Defaults to "now-30d" (1 month)'),
11
12
  endDate: zod_1.z.string().optional().describe('End date in ISO format (YYYY-MM-DD) or date math (e.g., "now"). Defaults to "now"'),
12
13
  groupBy: zod_1.z.enum(['none', 'subscription', 'account', 'group']).optional().default('none').describe('Optional grouping dimension (default: none)'),
13
14
  account: zod_1.z.string().optional().describe('Optional account name to filter by'),
14
15
  group: zod_1.z.string().optional().describe('Optional group name to filter by'),
15
16
  subscription: zod_1.z.enum(['Enterprise', 'Premium', 'FVC', 'BVC', 'Plus']).optional().describe('Optional subscription tier to filter by'),
16
17
  }).strict();
17
- class GetVisitTrendsTool {
18
- elasticsearch;
19
- logger;
18
+ class GetVisitTrendsTool extends base_tool_js_1.BaseTool {
20
19
  constructor(elasticsearch, logger) {
21
- this.elasticsearch = elasticsearch;
22
- this.logger = logger.child({ tool: 'get-visit-trends' });
20
+ super(elasticsearch, logger, 'get-visit-trends');
23
21
  }
24
- async execute(args) {
25
- try {
26
- const validatedArgs = GetVisitTrendsArgsSchema.parse(args);
27
- let startDate = validatedArgs.startDate || 'now-180d';
28
- const endDate = validatedArgs.endDate || 'now';
29
- const groupBy = validatedArgs.groupBy || 'none';
30
- // Calculate estimated buckets for logging
31
- const parseDateMathDays = (dateMath) => {
32
- const match = dateMath.match(/now-(\d+)([dwMy])/i);
33
- if (!match)
34
- return 90;
35
- const value = parseInt(match[1], 10);
36
- const unit = match[2].toLowerCase();
37
- switch (unit) {
38
- case 'd': return value;
39
- case 'w': return value * 7;
40
- case 'm': return value * 30;
41
- case 'y': return value * 365;
42
- default: return value;
43
- }
44
- };
45
- const calculateBuckets = (interval, daysDiff) => {
46
- switch (interval) {
47
- case 'daily': return Math.ceil(daysDiff);
48
- case 'weekly': return Math.ceil(daysDiff / 7);
49
- case 'monthly': return Math.ceil(daysDiff / 30);
50
- default: return daysDiff;
51
- }
52
- };
53
- const estimatedDays = parseDateMathDays(startDate);
54
- const estimatedBuckets = calculateBuckets(validatedArgs.interval, estimatedDays);
55
- this.logger.info('Getting visit trends', {
56
- interval: validatedArgs.interval,
57
- startDate,
58
- endDate,
59
- groupBy,
60
- estimatedBuckets,
61
- account: validatedArgs.account,
62
- group: validatedArgs.group,
63
- subscription: validatedArgs.subscription,
64
- });
65
- const client = this.elasticsearch.getClient();
66
- const index = field_constants_js_1.FIELD_CONSTANTS.index;
67
- const timeField = field_constants_js_1.FIELD_CONSTANTS.timeField;
68
- const testVisitField = field_constants_js_1.FIELD_CONSTANTS.testVisitField;
69
- const accountField = field_constants_js_1.FIELD_CONSTANTS.accountField;
70
- const groupField = field_constants_js_1.FIELD_CONSTANTS.groupField;
71
- const subscriptionField = field_constants_js_1.FIELD_CONSTANTS.subscriptionField;
72
- const providerField = field_constants_js_1.FIELD_CONSTANTS.providerField;
73
- const patientField = field_constants_js_1.FIELD_CONSTANTS.patientField;
74
- const callDurationField = field_constants_js_1.FIELD_CONSTANTS.callDurationField;
75
- const meetingBasedField = field_constants_js_1.FIELD_CONSTANTS.meetingBasedField;
76
- // Build filters
77
- const filters = [
78
- {
79
- range: {
80
- [timeField]: {
81
- gte: startDate,
82
- lt: endDate,
83
- },
84
- },
85
- },
86
- {
87
- term: {
88
- [testVisitField]: 'No',
89
- },
90
- },
91
- {
92
- bool: {
93
- should: [
94
- { exists: { field: callDurationField } },
95
- { term: { [meetingBasedField]: false } },
96
- ],
97
- minimum_should_match: 1,
22
+ get schema() {
23
+ return GetVisitTrendsArgsSchema;
24
+ }
25
+ get description() {
26
+ return 'Get visit/usage count trends over time (daily, weekly, or monthly intervals) with optional grouping by subscription, account, or group. Returns time series data points with visit counts and unique counts (accounts, providers, patients) per period.';
27
+ }
28
+ async run(args) {
29
+ const interval = args.interval || 'weekly';
30
+ const groupBy = args.groupBy || 'none';
31
+ const { startIso: startDateIso, endIso: endDateIso } = this.resolveTimeRange(args.startDate, args.endDate, 'now-30d', 'now');
32
+ this.logger.info('Getting visit trends', {
33
+ interval,
34
+ startDate: startDateIso,
35
+ endDate: endDateIso,
36
+ groupBy,
37
+ account: args.account,
38
+ group: args.group,
39
+ subscription: args.subscription,
40
+ });
41
+ const client = this.elasticsearch.getClient();
42
+ const index = field_constants_js_1.FIELD_CONSTANTS.index;
43
+ const timeField = field_constants_js_1.FIELD_CONSTANTS.timeField;
44
+ const accountField = field_constants_js_1.FIELD_CONSTANTS.accountField;
45
+ const groupField = field_constants_js_1.FIELD_CONSTANTS.groupField;
46
+ const subscriptionField = field_constants_js_1.FIELD_CONSTANTS.subscriptionField;
47
+ const providerField = field_constants_js_1.FIELD_CONSTANTS.providerField;
48
+ const patientField = field_constants_js_1.FIELD_CONSTANTS.patientField;
49
+ const callDurationField = field_constants_js_1.FIELD_CONSTANTS.callDurationField;
50
+ // Common filters
51
+ const filters = (0, query_helpers_js_1.buildCommonFilters)({
52
+ startDate: startDateIso,
53
+ endDate: endDateIso,
54
+ account: args.account,
55
+ group: args.group,
56
+ subscription: args.subscription,
57
+ excludeTestVisits: true
58
+ });
59
+ // Extra filter
60
+ filters.push({
61
+ bool: {
62
+ should: [
63
+ { exists: { field: callDurationField } },
64
+ { term: { [field_constants_js_1.FIELD_CONSTANTS.meetingBasedField]: false } },
65
+ ],
66
+ minimum_should_match: 1,
67
+ },
68
+ });
69
+ let calendarInterval;
70
+ switch (interval) {
71
+ case 'daily':
72
+ calendarInterval = 'day';
73
+ break;
74
+ case 'weekly':
75
+ calendarInterval = 'week';
76
+ break;
77
+ case 'monthly':
78
+ calendarInterval = 'month';
79
+ break;
80
+ default:
81
+ calendarInterval = 'week';
82
+ }
83
+ const aggs = {
84
+ trends_over_time: {
85
+ date_histogram: {
86
+ field: timeField,
87
+ calendar_interval: calendarInterval,
88
+ min_doc_count: 0,
89
+ extended_bounds: {
90
+ min: startDateIso,
91
+ max: endDateIso,
98
92
  },
99
93
  },
100
- ];
101
- if (validatedArgs.account) {
102
- filters.push({
103
- term: {
104
- [accountField]: validatedArgs.account,
94
+ aggs: {
95
+ unique_accounts: {
96
+ cardinality: { field: accountField },
105
97
  },
106
- });
107
- }
108
- if (validatedArgs.group) {
109
- filters.push({
110
- term: {
111
- [groupField]: validatedArgs.group,
98
+ unique_providers: {
99
+ cardinality: { field: providerField },
112
100
  },
113
- });
114
- }
115
- if (validatedArgs.subscription) {
116
- filters.push({
117
- term: {
118
- [subscriptionField]: validatedArgs.subscription,
101
+ unique_patients: {
102
+ cardinality: { field: patientField },
119
103
  },
120
- });
121
- }
122
- let calendarInterval;
123
- switch (validatedArgs.interval) {
124
- case 'daily':
125
- calendarInterval = 'day';
104
+ },
105
+ },
106
+ };
107
+ if (groupBy !== 'none') {
108
+ let groupFieldName;
109
+ switch (groupBy) {
110
+ case 'subscription':
111
+ groupFieldName = subscriptionField;
126
112
  break;
127
- case 'weekly':
128
- calendarInterval = 'week';
113
+ case 'account':
114
+ groupFieldName = accountField;
129
115
  break;
130
- case 'monthly':
131
- calendarInterval = 'month';
116
+ case 'group':
117
+ groupFieldName = groupField;
132
118
  break;
133
119
  default:
134
- calendarInterval = 'day';
120
+ groupFieldName = subscriptionField;
135
121
  }
136
- const aggs = {
137
- trends_over_time: {
138
- date_histogram: {
139
- field: timeField,
140
- calendar_interval: calendarInterval,
141
- min_doc_count: 0,
142
- },
143
- aggs: {
144
- unique_accounts: {
145
- cardinality: { field: accountField },
146
- },
147
- unique_providers: {
148
- cardinality: { field: providerField },
149
- },
150
- unique_patients: {
151
- cardinality: { field: patientField },
152
- },
153
- },
122
+ aggs.by_group = {
123
+ terms: {
124
+ field: groupFieldName,
125
+ size: aggregation_limits_js_1.AGGREGATION_LIMITS.MEDIUM, // Safeguard: cap at 50 to prevent data limits
154
126
  },
155
- };
156
- if (groupBy !== 'none') {
157
- let groupFieldName;
158
- switch (groupBy) {
159
- case 'subscription':
160
- groupFieldName = subscriptionField;
161
- break;
162
- case 'account':
163
- groupFieldName = accountField;
164
- break;
165
- case 'group':
166
- groupFieldName = groupField;
167
- break;
168
- default:
169
- groupFieldName = subscriptionField;
170
- }
171
- aggs.by_group = {
172
- terms: {
173
- field: groupFieldName,
174
- size: aggregation_limits_js_1.AGGREGATION_LIMITS.MEDIUM, // Safeguard: cap at 50 to prevent data limits
175
- },
176
- aggs: {
177
- trends_over_time: {
178
- date_histogram: {
179
- field: timeField,
180
- calendar_interval: calendarInterval,
181
- min_doc_count: 0,
182
- },
183
- aggs: {
184
- unique_accounts: {
185
- cardinality: { field: accountField },
186
- },
187
- unique_providers: {
188
- cardinality: { field: providerField },
189
- },
190
- unique_patients: {
191
- cardinality: { field: patientField },
192
- },
127
+ aggs: {
128
+ trends_over_time: {
129
+ date_histogram: {
130
+ field: timeField,
131
+ calendar_interval: calendarInterval,
132
+ min_doc_count: 0,
133
+ extended_bounds: {
134
+ min: startDateIso,
135
+ max: endDateIso,
193
136
  },
194
137
  },
195
- },
196
- };
197
- }
198
- const query = {
199
- index,
200
- size: 0,
201
- filter_path: 'aggregations',
202
- body: {
203
- track_total_hits: false,
204
- query: {
205
- bool: {
206
- filter: filters,
138
+ aggs: {
139
+ unique_accounts: {
140
+ cardinality: { field: accountField },
141
+ },
142
+ unique_providers: {
143
+ cardinality: { field: providerField },
144
+ },
145
+ unique_patients: {
146
+ cardinality: { field: patientField },
147
+ },
207
148
  },
208
149
  },
209
- aggs,
210
150
  },
211
151
  };
212
- this.logger.debug('Executing query', { query: JSON.stringify(query, null, 2) });
213
- const response = await client.search(query);
214
- const responseAggs = response.aggregations;
215
- let trends = [];
216
- let totalVisits = 0;
217
- if (groupBy === 'none') {
218
- const buckets = responseAggs?.trends_over_time?.buckets || [];
219
- trends = buckets.map((bucket) => {
152
+ }
153
+ const query = {
154
+ index,
155
+ size: 0,
156
+ filter_path: 'aggregations',
157
+ body: {
158
+ track_total_hits: false,
159
+ query: {
160
+ bool: {
161
+ filter: filters,
162
+ },
163
+ },
164
+ aggs,
165
+ },
166
+ };
167
+ this.logger.debug('Executing query', { query: JSON.stringify(query, null, 2) });
168
+ const response = await client.search(query);
169
+ const responseAggs = response.aggregations;
170
+ let trends = [];
171
+ let totalVisits = 0;
172
+ if (groupBy === 'none') {
173
+ const buckets = responseAggs?.trends_over_time?.buckets || [];
174
+ trends = buckets.map((bucket) => {
175
+ const count = bucket.doc_count || 0;
176
+ totalVisits += count;
177
+ return {
178
+ date: bucket.key_as_string || new Date(bucket.key).toISOString(),
179
+ count,
180
+ unique_accounts: bucket.unique_accounts?.value || 0,
181
+ unique_providers: bucket.unique_providers?.value || 0,
182
+ unique_patients: bucket.unique_patients?.value || 0,
183
+ };
184
+ });
185
+ }
186
+ else {
187
+ const valueKey = `${groupBy}_value`;
188
+ const groupBuckets = responseAggs?.by_group?.buckets || [];
189
+ trends = groupBuckets.map((groupBucket) => {
190
+ const groupValue = groupBucket.key;
191
+ const trendBuckets = groupBucket.trends_over_time?.buckets || [];
192
+ const dataPoints = trendBuckets.map((bucket) => {
220
193
  const count = bucket.doc_count || 0;
221
194
  totalVisits += count;
222
195
  return {
@@ -227,62 +200,33 @@ class GetVisitTrendsTool {
227
200
  unique_patients: bucket.unique_patients?.value || 0,
228
201
  };
229
202
  });
230
- }
231
- else {
232
- const valueKey = `${groupBy}_value`;
233
- const groupBuckets = responseAggs?.by_group?.buckets || [];
234
- trends = groupBuckets.map((groupBucket) => {
235
- const groupValue = groupBucket.key;
236
- const trendBuckets = groupBucket.trends_over_time?.buckets || [];
237
- const dataPoints = trendBuckets.map((bucket) => {
238
- const count = bucket.doc_count || 0;
239
- totalVisits += count;
240
- return {
241
- date: bucket.key_as_string || new Date(bucket.key).toISOString(),
242
- count,
243
- unique_accounts: bucket.unique_accounts?.value || 0,
244
- unique_providers: bucket.unique_providers?.value || 0,
245
- unique_patients: bucket.unique_patients?.value || 0,
246
- };
247
- });
248
- return {
249
- [valueKey]: groupValue,
250
- data_points: dataPoints,
251
- };
252
- });
253
- }
254
- const averagePerPeriod = trends.length > 0
255
- ? (groupBy === 'none'
256
- ? Math.round((totalVisits / trends.length) * 100) / 100
257
- : Math.round((totalVisits / trends.length) * 100) / 100)
258
- : 0;
259
- this.logger.info('Successfully retrieved visit trends', {
260
- interval: validatedArgs.interval,
261
- totalVisits,
262
- dataPoints: trends.length,
203
+ return {
204
+ [valueKey]: groupValue,
205
+ data_points: dataPoints,
206
+ };
263
207
  });
264
- return {
265
- interval: validatedArgs.interval,
266
- period: `${startDate} to ${endDate}`,
267
- startDate,
268
- endDate,
269
- trends,
270
- total_visits: totalVisits,
271
- average_per_period: averagePerPeriod,
272
- };
273
208
  }
274
- catch (error) {
275
- if (error instanceof Error && error.name === 'ZodError') {
276
- throw new handlers_js_1.ValidationError('Invalid arguments for get_visit_trends', {
277
- details: error.message,
278
- });
279
- }
280
- if (error instanceof handlers_js_1.ValidationError) {
281
- throw error;
209
+ this.logger.info('Successfully retrieved visit trends', {
210
+ interval,
211
+ totalVisits,
212
+ dataPoints: trends.length,
213
+ });
214
+ return this.buildResponse(trends, {
215
+ description: `Visit trends (${interval}) from ${startDateIso} to ${endDateIso}${groupBy !== 'none' ? ` grouped by ${groupBy}` : ''}`,
216
+ arguments: args,
217
+ time: {
218
+ start: startDateIso,
219
+ end: endDateIso,
220
+ interval
221
+ },
222
+ visualization: {
223
+ type: 'line',
224
+ title: `Visit Trends (${interval}) (${startDateIso.split('T')[0]} to ${endDateIso.split('T')[0]})`,
225
+ description: `${startDateIso.split('T')[0]} to ${endDateIso.split('T')[0]}`,
226
+ xAxisLabel: 'Date',
227
+ yAxisLabel: 'Visits'
282
228
  }
283
- this.logger.error('Failed to get visit trends', {}, error);
284
- throw new handlers_js_1.ElasticsearchError('Failed to get visit trends from Elasticsearch', error, { args });
285
- }
229
+ });
286
230
  }
287
231
  }
288
232
  exports.GetVisitTrendsTool = GetVisitTrendsTool;
@@ -1 +1 @@
1
- {"version":3,"file":"get-visit-trends.js","sourceRoot":"","sources":["../../src/tools/get-visit-trends.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"get-visit-trends.js","sourceRoot":"","sources":["../../src/tools/get-visit-trends.ts"],"names":[],"mappings":"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"}
File without changes
File without changes
File without changes
File without changes