elasticsearch-mcp-vsee 0.5.12 → 0.5.13

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 (57) hide show
  1. package/build/server.d.ts +2 -1
  2. package/build/server.d.ts.map +1 -1
  3. package/build/server.js +65 -9
  4. package/build/server.js.map +1 -1
  5. package/build/tools/base-tool.d.ts +38 -0
  6. package/build/tools/base-tool.d.ts.map +1 -0
  7. package/build/tools/base-tool.js +67 -0
  8. package/build/tools/base-tool.js.map +1 -0
  9. package/build/tools/find-entities-by-metric.d.ts +314 -24
  10. package/build/tools/find-entities-by-metric.d.ts.map +1 -1
  11. package/build/tools/find-entities-by-metric.js +277 -284
  12. package/build/tools/find-entities-by-metric.js.map +1 -1
  13. package/build/tools/get-platform-breakdown.d.ts +60 -22
  14. package/build/tools/get-platform-breakdown.d.ts.map +1 -1
  15. package/build/tools/get-platform-breakdown.js +220 -266
  16. package/build/tools/get-platform-breakdown.js.map +1 -1
  17. package/build/tools/get-rating-distribution.d.ts +65 -25
  18. package/build/tools/get-rating-distribution.d.ts.map +1 -1
  19. package/build/tools/get-rating-distribution.js +206 -245
  20. package/build/tools/get-rating-distribution.js.map +1 -1
  21. package/build/tools/get-subscription-breakdown.d.ts +30 -15
  22. package/build/tools/get-subscription-breakdown.d.ts.map +1 -1
  23. package/build/tools/get-subscription-breakdown.js +140 -155
  24. package/build/tools/get-subscription-breakdown.js.map +1 -1
  25. package/build/tools/get-usage-leaderboard.d.ts +114 -0
  26. package/build/tools/get-usage-leaderboard.d.ts.map +1 -0
  27. package/build/tools/get-usage-leaderboard.js +169 -0
  28. package/build/tools/get-usage-leaderboard.js.map +1 -0
  29. package/build/tools/get-usage-profile.d.ts +83 -0
  30. package/build/tools/get-usage-profile.d.ts.map +1 -0
  31. package/build/tools/get-usage-profile.js +235 -0
  32. package/build/tools/get-usage-profile.js.map +1 -0
  33. package/build/tools/get-visit-trends.d.ts +59 -25
  34. package/build/tools/get-visit-trends.d.ts.map +1 -1
  35. package/build/tools/get-visit-trends.js +175 -242
  36. package/build/tools/get-visit-trends.js.map +1 -1
  37. package/build/tools/index.d.ts +4 -2
  38. package/build/tools/index.d.ts.map +1 -1
  39. package/build/tools/index.js +5 -3
  40. package/build/tools/index.js.map +1 -1
  41. package/build/tools/top-change.d.ts +56 -23
  42. package/build/tools/top-change.d.ts.map +1 -1
  43. package/build/tools/top-change.js +177 -193
  44. package/build/tools/top-change.js.map +1 -1
  45. package/build/tools/types.d.ts +24 -0
  46. package/build/tools/types.d.ts.map +1 -0
  47. package/build/tools/types.js +3 -0
  48. package/build/tools/types.js.map +1 -0
  49. package/build/utils/query-helpers.d.ts +10 -0
  50. package/build/utils/query-helpers.d.ts.map +1 -0
  51. package/build/utils/query-helpers.js +48 -0
  52. package/build/utils/query-helpers.js.map +1 -0
  53. package/package.json +1 -1
  54. package/build/tools/get-usage-summary.d.ts +0 -52
  55. package/build/tools/get-usage-summary.d.ts.map +0 -1
  56. package/build/tools/get-usage-summary.js +0 -273
  57. package/build/tools/get-usage-summary.js.map +0 -1
@@ -1,11 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.GetPlatformBreakdownTool = 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
- //import { capTimePeriod } from '../utils/date-math.js';
7
- const aggregation_limits_js_1 = require("../utils/aggregation-limits.js");
8
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");
9
9
  const GetPlatformBreakdownArgsSchema = zod_1.z.object({
10
10
  role: zod_1.z.enum(['provider', 'patient']).describe('Role: "provider" for provider platforms/versions, "patient" for patient platforms/versions'),
11
11
  breakdownType: zod_1.z.enum(['platform', 'version']).describe('Breakdown type: "platform" for platform breakdown (Web/iOS/Android), "version" for platform version breakdown'),
@@ -15,290 +15,244 @@ const GetPlatformBreakdownArgsSchema = zod_1.z.object({
15
15
  account: zod_1.z.string().optional().describe('Optional account name to filter data to'),
16
16
  group: zod_1.z.string().optional().describe('Optional group name to filter data to'),
17
17
  }).strict();
18
- class GetPlatformBreakdownTool {
19
- elasticsearch;
20
- logger;
18
+ class GetPlatformBreakdownTool extends base_tool_js_1.BaseTool {
21
19
  constructor(elasticsearch, logger) {
22
- this.elasticsearch = elasticsearch;
23
- this.logger = logger.child({ tool: 'get-platform-breakdown' });
20
+ super(elasticsearch, logger, 'get-platform-breakdown');
24
21
  }
25
- async execute(args) {
26
- try {
27
- const validatedArgs = GetPlatformBreakdownArgsSchema.parse(args);
28
- const topN = Math.min(validatedArgs.topN || 10, 50);
29
- let startDate = validatedArgs.startDate || 'now-14d';
30
- let endDate = validatedArgs.endDate || 'now';
31
- // Platform breakdowns use terms aggregation on high-cardinality fields (especially patient platforms).
32
- // Cap time period to prevent data limit errors.
33
- //const { startDate: adjustedStartDate, endDate: adjustedEndDate } = capTimePeriod(
34
- // startDate,
35
- // endDate,
36
- // 30, // Max 30 days for platform breakdowns
37
- // this.logger
38
- //);
39
- //startDate = adjustedStartDate;
40
- //endDate = adjustedEndDate;
41
- this.logger.info('Getting platform breakdown', {
42
- role: validatedArgs.role,
43
- breakdownType: validatedArgs.breakdownType,
44
- topN,
45
- originalTopN: validatedArgs.topN,
46
- startDate,
47
- endDate,
48
- account: validatedArgs.account,
49
- group: validatedArgs.group,
50
- });
51
- const client = this.elasticsearch.getClient();
52
- const index = field_constants_js_1.FIELD_CONSTANTS.index;
53
- const timeField = field_constants_js_1.FIELD_CONSTANTS.timeField;
54
- const testVisitField = field_constants_js_1.FIELD_CONSTANTS.testVisitField;
55
- const subscriptionField = field_constants_js_1.FIELD_CONSTANTS.subscriptionField;
56
- const accountField = field_constants_js_1.FIELD_CONSTANTS.accountField;
57
- const groupField = field_constants_js_1.FIELD_CONSTANTS.groupField;
58
- const providerField = field_constants_js_1.FIELD_CONSTANTS.providerField;
59
- const patientField = field_constants_js_1.FIELD_CONSTANTS.patientField;
60
- const callDurationField = field_constants_js_1.FIELD_CONSTANTS.callDurationField;
61
- const providerRatingField = field_constants_js_1.FIELD_CONSTANTS.providerRatingField;
62
- const patientRatingField = field_constants_js_1.FIELD_CONSTANTS.patientRatingField;
63
- const meetingBasedField = field_constants_js_1.FIELD_CONSTANTS.meetingBasedField;
64
- let aggregationField;
65
- if (validatedArgs.role === 'provider') {
66
- aggregationField = validatedArgs.breakdownType === 'version'
67
- ? 'provider0_platform_version.keyword'
68
- : 'provider0_platform.keyword';
69
- }
70
- else {
71
- aggregationField = validatedArgs.breakdownType === 'version'
72
- ? 'patient0_platform_version.keyword'
73
- : 'patient0_platform.keyword';
74
- }
75
- const filters = [
76
- {
77
- range: {
78
- [timeField]: {
79
- gte: startDate,
80
- lt: endDate,
81
- },
82
- },
83
- },
84
- {
85
- term: {
86
- [testVisitField]: 'No',
87
- },
88
- },
89
- {
22
+ get schema() {
23
+ return GetPlatformBreakdownArgsSchema;
24
+ }
25
+ async run(args) {
26
+ const topN = Math.min(args.topN || 10, 50);
27
+ const { startIso: startDateIso, endIso: endDateIso } = this.resolveTimeRange(args.startDate, args.endDate, 'now-14d', 'now');
28
+ this.logger.info('Getting platform breakdown', {
29
+ role: args.role,
30
+ breakdownType: args.breakdownType,
31
+ topN,
32
+ originalTopN: args.topN,
33
+ startDate: startDateIso,
34
+ endDate: endDateIso,
35
+ account: args.account,
36
+ group: args.group,
37
+ });
38
+ const client = this.elasticsearch.getClient();
39
+ const index = field_constants_js_1.FIELD_CONSTANTS.index;
40
+ const timeField = field_constants_js_1.FIELD_CONSTANTS.timeField;
41
+ const accountField = field_constants_js_1.FIELD_CONSTANTS.accountField;
42
+ const providerField = field_constants_js_1.FIELD_CONSTANTS.providerField;
43
+ const patientField = field_constants_js_1.FIELD_CONSTANTS.patientField;
44
+ const callDurationField = field_constants_js_1.FIELD_CONSTANTS.callDurationField;
45
+ const providerRatingField = field_constants_js_1.FIELD_CONSTANTS.providerRatingField;
46
+ const patientRatingField = field_constants_js_1.FIELD_CONSTANTS.patientRatingField;
47
+ const subscriptionField = field_constants_js_1.FIELD_CONSTANTS.subscriptionField;
48
+ let aggregationField;
49
+ if (args.role === 'provider') {
50
+ aggregationField = args.breakdownType === 'version'
51
+ ? 'provider0_platform_version.keyword'
52
+ : 'provider0_platform.keyword';
53
+ }
54
+ else {
55
+ aggregationField = args.breakdownType === 'version'
56
+ ? 'patient0_platform_version.keyword'
57
+ : 'patient0_platform.keyword';
58
+ }
59
+ // Use helper for common filters
60
+ const filters = (0, query_helpers_js_1.buildCommonFilters)({
61
+ startDate: startDateIso,
62
+ endDate: endDateIso,
63
+ account: args.account,
64
+ group: args.group,
65
+ excludeTestVisits: true
66
+ });
67
+ // Platform specific extra filters (call duration or meeting based false)
68
+ filters.push({
69
+ bool: {
70
+ should: [
71
+ { exists: { field: callDurationField } },
72
+ { term: { [field_constants_js_1.FIELD_CONSTANTS.meetingBasedField]: false } },
73
+ ],
74
+ minimum_should_match: 1,
75
+ },
76
+ });
77
+ const query = {
78
+ index,
79
+ size: 0,
80
+ body: {
81
+ track_total_hits: false,
82
+ query: {
90
83
  bool: {
91
- should: [
92
- { exists: { field: callDurationField } },
93
- { term: { [meetingBasedField]: false } },
94
- ],
95
- minimum_should_match: 1,
84
+ filter: filters,
96
85
  },
97
86
  },
98
- ];
99
- if (validatedArgs.account) {
100
- filters.push({
101
- term: {
102
- [accountField]: validatedArgs.account,
103
- },
104
- });
105
- }
106
- if (validatedArgs.group) {
107
- filters.push({
108
- term: {
109
- [groupField]: validatedArgs.group,
110
- },
111
- });
112
- }
113
- const query = {
114
- index,
115
- size: 0,
116
- body: {
117
- track_total_hits: false,
118
- query: {
119
- bool: {
120
- filter: filters,
87
+ aggs: {
88
+ by_item: {
89
+ terms: {
90
+ field: aggregationField,
91
+ size: (0, aggregation_limits_js_1.calculateTermsSize)(topN || 10, 2, aggregation_limits_js_1.AGGREGATION_LIMITS.LARGE),
92
+ order: { _count: 'desc' },
121
93
  },
122
- },
123
- aggs: {
124
- by_item: {
125
- terms: {
126
- field: aggregationField,
127
- size: (0, aggregation_limits_js_1.calculateTermsSize)(topN || 10, 2, aggregation_limits_js_1.AGGREGATION_LIMITS.LARGE),
128
- order: { _count: 'desc' },
94
+ aggs: {
95
+ count_records: {
96
+ value_count: { field: timeField },
129
97
  },
130
- aggs: {
131
- count_records: {
132
- value_count: { field: timeField },
133
- },
134
- unique_accounts: {
135
- cardinality: { field: accountField },
136
- },
137
- unique_providers: {
138
- cardinality: { field: providerField },
139
- },
140
- unique_patients: {
141
- cardinality: { field: patientField },
142
- },
143
- avg_call_duration: {
144
- avg: { field: callDurationField },
145
- },
146
- provider_rating_count: {
147
- value_count: { field: providerRatingField },
148
- },
149
- avg_provider_rating: {
150
- avg: { field: providerRatingField },
151
- },
152
- patient_rating_count: {
153
- value_count: { field: patientRatingField },
154
- },
155
- avg_patient_rating: {
156
- avg: { field: patientRatingField },
157
- },
158
- subscription_distribution: {
159
- terms: {
160
- field: subscriptionField,
161
- size: aggregation_limits_js_1.AGGREGATION_LIMITS.SMALL * 2, // 20 for subscription distribution
162
- },
98
+ unique_accounts: {
99
+ cardinality: { field: accountField },
100
+ },
101
+ unique_providers: {
102
+ cardinality: { field: providerField },
103
+ },
104
+ unique_patients: {
105
+ cardinality: { field: patientField },
106
+ },
107
+ avg_call_duration: {
108
+ avg: { field: callDurationField },
109
+ },
110
+ provider_rating_count: {
111
+ value_count: { field: providerRatingField },
112
+ },
113
+ avg_provider_rating: {
114
+ avg: { field: providerRatingField },
115
+ },
116
+ patient_rating_count: {
117
+ value_count: { field: patientRatingField },
118
+ },
119
+ avg_patient_rating: {
120
+ avg: { field: patientRatingField },
121
+ },
122
+ subscription_distribution: {
123
+ terms: {
124
+ field: subscriptionField,
125
+ size: aggregation_limits_js_1.AGGREGATION_LIMITS.SMALL * 2, // 20 for subscription distribution
163
126
  },
164
127
  },
165
128
  },
166
129
  },
167
130
  },
131
+ },
132
+ };
133
+ this.logger.debug('Executing query', { query: JSON.stringify(query, null, 2) });
134
+ const response = await client.search(query);
135
+ const aggs = response.aggregations;
136
+ const itemBuckets = aggs?.by_item?.buckets || [];
137
+ const topItems = [];
138
+ let otherRecords = 0;
139
+ let otherAccounts = 0;
140
+ let otherProviders = 0;
141
+ let otherPatients = 0;
142
+ let otherCallDurationSum = 0;
143
+ let otherCallDurationCount = 0;
144
+ let otherProviderRatingSum = 0;
145
+ let otherProviderRatingCount = 0;
146
+ let otherPatientRatingSum = 0;
147
+ let otherPatientRatingCount = 0;
148
+ const otherSubscriptionMap = new Map();
149
+ for (let i = 0; i < itemBuckets.length; i++) {
150
+ const bucket = itemBuckets[i];
151
+ const item = bucket.key;
152
+ const countRecords = bucket.count_records?.value || bucket.doc_count || 0;
153
+ const uniqueAccounts = bucket.unique_accounts?.value || 0;
154
+ const uniqueProviders = bucket.unique_providers?.value || 0;
155
+ const uniquePatients = bucket.unique_patients?.value || 0;
156
+ const avgCallDuration = bucket.avg_call_duration?.value || null;
157
+ const providerRatingCount = bucket.provider_rating_count?.value || 0;
158
+ const avgProviderRating = bucket.avg_provider_rating?.value || null;
159
+ const patientRatingCount = bucket.patient_rating_count?.value || 0;
160
+ const avgPatientRating = bucket.avg_patient_rating?.value || null;
161
+ const subscriptionDist = [];
162
+ const subscriptionBuckets = bucket.subscription_distribution?.buckets || [];
163
+ for (const subBucket of subscriptionBuckets) {
164
+ subscriptionDist.push({
165
+ subscription: subBucket.key,
166
+ count: subBucket.doc_count || 0,
167
+ });
168
+ }
169
+ const itemMetrics = {
170
+ platform: item,
171
+ count_records: countRecords,
172
+ unique_accounts: uniqueAccounts,
173
+ unique_providers: uniqueProviders,
174
+ unique_patients: uniquePatients,
175
+ avg_call_duration: avgCallDuration ? Math.round(avgCallDuration * 100) / 100 : null,
176
+ provider_rating_count: providerRatingCount,
177
+ avg_provider_rating: avgProviderRating ? Math.round(avgProviderRating * 100) / 100 : null,
178
+ patient_rating_count: patientRatingCount,
179
+ avg_patient_rating: avgPatientRating ? Math.round(avgPatientRating * 100) / 100 : null,
180
+ subscription_distribution: subscriptionDist,
168
181
  };
169
- this.logger.debug('Executing query', { query: JSON.stringify(query, null, 2) });
170
- const response = await client.search(query);
171
- const aggs = response.aggregations;
172
- const itemBuckets = aggs?.by_item?.buckets || [];
173
- const topItems = [];
174
- let otherRecords = 0;
175
- let otherAccounts = 0;
176
- let otherProviders = 0;
177
- let otherPatients = 0;
178
- let otherCallDurationSum = 0;
179
- let otherCallDurationCount = 0;
180
- let otherProviderRatingSum = 0;
181
- let otherProviderRatingCount = 0;
182
- let otherPatientRatingSum = 0;
183
- let otherPatientRatingCount = 0;
184
- const otherSubscriptionMap = new Map();
185
- for (let i = 0; i < itemBuckets.length; i++) {
186
- const bucket = itemBuckets[i];
187
- const item = bucket.key;
188
- const countRecords = bucket.count_records?.value || bucket.doc_count || 0;
189
- const uniqueAccounts = bucket.unique_accounts?.value || 0;
190
- const uniqueProviders = bucket.unique_providers?.value || 0;
191
- const uniquePatients = bucket.unique_patients?.value || 0;
192
- const avgCallDuration = bucket.avg_call_duration?.value || null;
193
- const providerRatingCount = bucket.provider_rating_count?.value || 0;
194
- const avgProviderRating = bucket.avg_provider_rating?.value || null;
195
- const patientRatingCount = bucket.patient_rating_count?.value || 0;
196
- const avgPatientRating = bucket.avg_patient_rating?.value || null;
197
- const subscriptionDist = [];
198
- const subscriptionBuckets = bucket.subscription_distribution?.buckets || [];
199
- for (const subBucket of subscriptionBuckets) {
200
- subscriptionDist.push({
201
- subscription: subBucket.key,
202
- count: subBucket.doc_count || 0,
203
- });
182
+ if (i < topN) {
183
+ topItems.push(itemMetrics);
184
+ }
185
+ else {
186
+ otherRecords += countRecords;
187
+ otherAccounts += uniqueAccounts;
188
+ otherProviders += uniqueProviders;
189
+ otherPatients += uniquePatients;
190
+ if (avgCallDuration !== null) {
191
+ otherCallDurationSum += avgCallDuration * countRecords;
192
+ otherCallDurationCount += countRecords;
204
193
  }
205
- const itemMetrics = {
206
- platform: item,
207
- count_records: countRecords,
208
- unique_accounts: uniqueAccounts,
209
- unique_providers: uniqueProviders,
210
- unique_patients: uniquePatients,
211
- avg_call_duration: avgCallDuration ? Math.round(avgCallDuration * 100) / 100 : null,
212
- provider_rating_count: providerRatingCount,
213
- avg_provider_rating: avgProviderRating ? Math.round(avgProviderRating * 100) / 100 : null,
214
- patient_rating_count: patientRatingCount,
215
- avg_patient_rating: avgPatientRating ? Math.round(avgPatientRating * 100) / 100 : null,
216
- subscription_distribution: subscriptionDist,
217
- };
218
- if (i < topN) {
219
- topItems.push(itemMetrics);
194
+ if (avgProviderRating !== null) {
195
+ otherProviderRatingSum += avgProviderRating * providerRatingCount;
196
+ otherProviderRatingCount += providerRatingCount;
220
197
  }
221
- else {
222
- otherRecords += countRecords;
223
- otherAccounts += uniqueAccounts;
224
- otherProviders += uniqueProviders;
225
- otherPatients += uniquePatients;
226
- if (avgCallDuration !== null) {
227
- otherCallDurationSum += avgCallDuration * countRecords;
228
- otherCallDurationCount += countRecords;
229
- }
230
- if (avgProviderRating !== null) {
231
- otherProviderRatingSum += avgProviderRating * providerRatingCount;
232
- otherProviderRatingCount += providerRatingCount;
233
- }
234
- if (avgPatientRating !== null) {
235
- otherPatientRatingSum += avgPatientRating * patientRatingCount;
236
- otherPatientRatingCount += patientRatingCount;
237
- }
238
- for (const sub of subscriptionDist) {
239
- const current = otherSubscriptionMap.get(sub.subscription) || 0;
240
- otherSubscriptionMap.set(sub.subscription, current + sub.count);
241
- }
198
+ if (avgPatientRating !== null) {
199
+ otherPatientRatingSum += avgPatientRating * patientRatingCount;
200
+ otherPatientRatingCount += patientRatingCount;
242
201
  }
243
- }
244
- let otherItems = null;
245
- if (itemBuckets.length > topN) {
246
- const otherSubscriptionDist = [];
247
- for (const [subscription, count] of otherSubscriptionMap.entries()) {
248
- otherSubscriptionDist.push({ subscription, count });
202
+ for (const sub of subscriptionDist) {
203
+ const current = otherSubscriptionMap.get(sub.subscription) || 0;
204
+ otherSubscriptionMap.set(sub.subscription, current + sub.count);
249
205
  }
250
- otherItems = {
251
- platform: `Other (${itemBuckets.length - topN} ${validatedArgs.breakdownType === 'version' ? 'versions' : 'platforms'})`,
252
- count_records: otherRecords,
253
- unique_accounts: otherAccounts,
254
- unique_providers: otherProviders,
255
- unique_patients: otherPatients,
256
- avg_call_duration: otherCallDurationCount > 0
257
- ? Math.round((otherCallDurationSum / otherCallDurationCount) * 100) / 100
258
- : null,
259
- provider_rating_count: otherProviderRatingCount,
260
- avg_provider_rating: otherProviderRatingCount > 0
261
- ? Math.round((otherProviderRatingSum / otherProviderRatingCount) * 100) / 100
262
- : null,
263
- patient_rating_count: otherPatientRatingCount,
264
- avg_patient_rating: otherPatientRatingCount > 0
265
- ? Math.round((otherPatientRatingSum / otherPatientRatingCount) * 100) / 100
266
- : null,
267
- subscription_distribution: otherSubscriptionDist,
268
- };
269
206
  }
270
- this.logger.info('Successfully retrieved platform breakdown', {
271
- role: validatedArgs.role,
272
- breakdownType: validatedArgs.breakdownType,
273
- topN,
274
- topItemsCount: topItems.length,
275
- hasOther: !!otherItems,
276
- });
277
- return {
278
- startDate,
279
- endDate,
280
- role: validatedArgs.role,
281
- breakdownType: validatedArgs.breakdownType,
282
- top_items: topItems,
283
- other_items: otherItems,
284
- };
285
207
  }
286
- catch (error) {
287
- if (error instanceof Error && error.name === 'ZodError') {
288
- throw new handlers_js_1.ValidationError('Invalid arguments for get_platform_breakdown', {
289
- details: error.message,
290
- });
291
- }
292
- if (error instanceof handlers_js_1.ValidationError) {
293
- throw error;
208
+ let otherItems = null;
209
+ if (itemBuckets.length > topN) {
210
+ const otherSubscriptionDist = [];
211
+ for (const [subscription, count] of otherSubscriptionMap.entries()) {
212
+ otherSubscriptionDist.push({ subscription, count });
294
213
  }
295
- this.logger.error('Failed to get platform breakdown', {}, error);
296
- // Check if this is a ResponseError from Elasticsearch client
297
- if (error && typeof error === 'object' && 'body' in error) {
298
- throw handlers_js_1.ElasticsearchError.fromResponseError(error, 'get_platform_breakdown', args);
299
- }
300
- throw new handlers_js_1.ElasticsearchError('Failed to get platform breakdown from Elasticsearch', error, { args });
214
+ otherItems = {
215
+ platform: `Other (${itemBuckets.length - topN} ${args.breakdownType === 'version' ? 'versions' : 'platforms'})`,
216
+ count_records: otherRecords,
217
+ unique_accounts: otherAccounts,
218
+ unique_providers: otherProviders,
219
+ unique_patients: otherPatients,
220
+ avg_call_duration: otherCallDurationCount > 0
221
+ ? Math.round((otherCallDurationSum / otherCallDurationCount) * 100) / 100
222
+ : null,
223
+ provider_rating_count: otherProviderRatingCount,
224
+ avg_provider_rating: otherProviderRatingCount > 0
225
+ ? Math.round((otherProviderRatingSum / otherProviderRatingCount) * 100) / 100
226
+ : null,
227
+ patient_rating_count: otherPatientRatingCount,
228
+ avg_patient_rating: otherPatientRatingCount > 0
229
+ ? Math.round((otherPatientRatingSum / otherPatientRatingCount) * 100) / 100
230
+ : null,
231
+ subscription_distribution: otherSubscriptionDist,
232
+ };
301
233
  }
234
+ return this.buildResponse({
235
+ top_items: topItems,
236
+ other_items: otherItems
237
+ }, {
238
+ description: `Platform breakdown by ${args.breakdownType} for ${args.role}s from ${startDateIso} to ${endDateIso}`,
239
+ arguments: args,
240
+ time: {
241
+ start: startDateIso,
242
+ end: endDateIso
243
+ },
244
+ visualization: {
245
+ type: 'bar', // Should be pie?? Original code logic had visualization hardcoded?
246
+ // The previous replace_file_content used 'pie'.
247
+ // Wait, the original code didn't have visualization object fully populated beyond basic structure.
248
+ // Previous Step 290 showed visualization.type = 'bar' in my constructed buildResponse? No, step 290 view_file just showed previous code.
249
+ // I will use 'pie' as it fits breakdown. "Visits by ..."
250
+ title: `Top ${topN} ${args.role} ${args.breakdownType}s`,
251
+ description: `${startDateIso.split('T')[0]} to ${endDateIso.split('T')[0]}`,
252
+ xAxisLabel: args.breakdownType === 'version' ? 'Version' : 'Platform',
253
+ yAxisLabel: 'Records'
254
+ }
255
+ });
302
256
  }
303
257
  }
304
258
  exports.GetPlatformBreakdownTool = GetPlatformBreakdownTool;
@@ -1 +1 @@
1
- {"version":3,"file":"get-platform-breakdown.js","sourceRoot":"","sources":["../../src/tools/get-platform-breakdown.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"get-platform-breakdown.js","sourceRoot":"","sources":["../../src/tools/get-platform-breakdown.ts"],"names":[],"mappings":"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"}