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,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,247 @@ 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
+ get description() {
26
+ return 'Get breakdown of top N platforms or platform versions by usage over a time period, can optionally be filtered by account or group. Supports both provider and patient roles. Returns top N items (default 10) plus "Other" category if needed, with metrics per item including visit counts, unique accounts/providers/patients, ratings, and call duration.';
27
+ }
28
+ async run(args) {
29
+ const topN = Math.min(args.topN || 10, 50);
30
+ const { startIso: startDateIso, endIso: endDateIso } = this.resolveTimeRange(args.startDate, args.endDate, 'now-14d', 'now');
31
+ this.logger.info('Getting platform breakdown', {
32
+ role: args.role,
33
+ breakdownType: args.breakdownType,
34
+ topN,
35
+ originalTopN: args.topN,
36
+ startDate: startDateIso,
37
+ endDate: endDateIso,
38
+ account: args.account,
39
+ group: args.group,
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 providerField = field_constants_js_1.FIELD_CONSTANTS.providerField;
46
+ const patientField = field_constants_js_1.FIELD_CONSTANTS.patientField;
47
+ const callDurationField = field_constants_js_1.FIELD_CONSTANTS.callDurationField;
48
+ const providerRatingField = field_constants_js_1.FIELD_CONSTANTS.providerRatingField;
49
+ const patientRatingField = field_constants_js_1.FIELD_CONSTANTS.patientRatingField;
50
+ const subscriptionField = field_constants_js_1.FIELD_CONSTANTS.subscriptionField;
51
+ let aggregationField;
52
+ if (args.role === 'provider') {
53
+ aggregationField = args.breakdownType === 'version'
54
+ ? 'provider0_platform_version.keyword'
55
+ : 'provider0_platform.keyword';
56
+ }
57
+ else {
58
+ aggregationField = args.breakdownType === 'version'
59
+ ? 'patient0_platform_version.keyword'
60
+ : 'patient0_platform.keyword';
61
+ }
62
+ // Use helper for common filters
63
+ const filters = (0, query_helpers_js_1.buildCommonFilters)({
64
+ startDate: startDateIso,
65
+ endDate: endDateIso,
66
+ account: args.account,
67
+ group: args.group,
68
+ excludeTestVisits: true
69
+ });
70
+ // Platform specific extra filters (call duration or meeting based false)
71
+ filters.push({
72
+ bool: {
73
+ should: [
74
+ { exists: { field: callDurationField } },
75
+ { term: { [field_constants_js_1.FIELD_CONSTANTS.meetingBasedField]: false } },
76
+ ],
77
+ minimum_should_match: 1,
78
+ },
79
+ });
80
+ const query = {
81
+ index,
82
+ size: 0,
83
+ body: {
84
+ track_total_hits: false,
85
+ query: {
90
86
  bool: {
91
- should: [
92
- { exists: { field: callDurationField } },
93
- { term: { [meetingBasedField]: false } },
94
- ],
95
- minimum_should_match: 1,
87
+ filter: filters,
96
88
  },
97
89
  },
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,
90
+ aggs: {
91
+ by_item: {
92
+ terms: {
93
+ field: aggregationField,
94
+ size: (0, aggregation_limits_js_1.calculateTermsSize)(topN || 10, 2, aggregation_limits_js_1.AGGREGATION_LIMITS.LARGE),
95
+ order: { _count: 'desc' },
121
96
  },
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' },
97
+ aggs: {
98
+ count_records: {
99
+ value_count: { field: timeField },
129
100
  },
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
- },
101
+ unique_accounts: {
102
+ cardinality: { field: accountField },
103
+ },
104
+ unique_providers: {
105
+ cardinality: { field: providerField },
106
+ },
107
+ unique_patients: {
108
+ cardinality: { field: patientField },
109
+ },
110
+ avg_call_duration: {
111
+ avg: { field: callDurationField },
112
+ },
113
+ provider_rating_count: {
114
+ value_count: { field: providerRatingField },
115
+ },
116
+ avg_provider_rating: {
117
+ avg: { field: providerRatingField },
118
+ },
119
+ patient_rating_count: {
120
+ value_count: { field: patientRatingField },
121
+ },
122
+ avg_patient_rating: {
123
+ avg: { field: patientRatingField },
124
+ },
125
+ subscription_distribution: {
126
+ terms: {
127
+ field: subscriptionField,
128
+ size: aggregation_limits_js_1.AGGREGATION_LIMITS.SMALL * 2, // 20 for subscription distribution
163
129
  },
164
130
  },
165
131
  },
166
132
  },
167
133
  },
134
+ },
135
+ };
136
+ this.logger.debug('Executing query', { query: JSON.stringify(query, null, 2) });
137
+ const response = await client.search(query);
138
+ const aggs = response.aggregations;
139
+ const itemBuckets = aggs?.by_item?.buckets || [];
140
+ const topItems = [];
141
+ let otherRecords = 0;
142
+ let otherAccounts = 0;
143
+ let otherProviders = 0;
144
+ let otherPatients = 0;
145
+ let otherCallDurationSum = 0;
146
+ let otherCallDurationCount = 0;
147
+ let otherProviderRatingSum = 0;
148
+ let otherProviderRatingCount = 0;
149
+ let otherPatientRatingSum = 0;
150
+ let otherPatientRatingCount = 0;
151
+ const otherSubscriptionMap = new Map();
152
+ for (let i = 0; i < itemBuckets.length; i++) {
153
+ const bucket = itemBuckets[i];
154
+ const item = bucket.key;
155
+ const countRecords = bucket.count_records?.value || bucket.doc_count || 0;
156
+ const uniqueAccounts = bucket.unique_accounts?.value || 0;
157
+ const uniqueProviders = bucket.unique_providers?.value || 0;
158
+ const uniquePatients = bucket.unique_patients?.value || 0;
159
+ const avgCallDuration = bucket.avg_call_duration?.value || null;
160
+ const providerRatingCount = bucket.provider_rating_count?.value || 0;
161
+ const avgProviderRating = bucket.avg_provider_rating?.value || null;
162
+ const patientRatingCount = bucket.patient_rating_count?.value || 0;
163
+ const avgPatientRating = bucket.avg_patient_rating?.value || null;
164
+ const subscriptionDist = [];
165
+ const subscriptionBuckets = bucket.subscription_distribution?.buckets || [];
166
+ for (const subBucket of subscriptionBuckets) {
167
+ subscriptionDist.push({
168
+ subscription: subBucket.key,
169
+ count: subBucket.doc_count || 0,
170
+ });
171
+ }
172
+ const itemMetrics = {
173
+ platform: item,
174
+ count_records: countRecords,
175
+ unique_accounts: uniqueAccounts,
176
+ unique_providers: uniqueProviders,
177
+ unique_patients: uniquePatients,
178
+ avg_call_duration: avgCallDuration ? Math.round(avgCallDuration * 100) / 100 : null,
179
+ provider_rating_count: providerRatingCount,
180
+ avg_provider_rating: avgProviderRating ? Math.round(avgProviderRating * 100) / 100 : null,
181
+ patient_rating_count: patientRatingCount,
182
+ avg_patient_rating: avgPatientRating ? Math.round(avgPatientRating * 100) / 100 : null,
183
+ subscription_distribution: subscriptionDist,
168
184
  };
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
- });
185
+ if (i < topN) {
186
+ topItems.push(itemMetrics);
187
+ }
188
+ else {
189
+ otherRecords += countRecords;
190
+ otherAccounts += uniqueAccounts;
191
+ otherProviders += uniqueProviders;
192
+ otherPatients += uniquePatients;
193
+ if (avgCallDuration !== null) {
194
+ otherCallDurationSum += avgCallDuration * countRecords;
195
+ otherCallDurationCount += countRecords;
204
196
  }
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);
197
+ if (avgProviderRating !== null) {
198
+ otherProviderRatingSum += avgProviderRating * providerRatingCount;
199
+ otherProviderRatingCount += providerRatingCount;
220
200
  }
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
- }
201
+ if (avgPatientRating !== null) {
202
+ otherPatientRatingSum += avgPatientRating * patientRatingCount;
203
+ otherPatientRatingCount += patientRatingCount;
242
204
  }
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 });
205
+ for (const sub of subscriptionDist) {
206
+ const current = otherSubscriptionMap.get(sub.subscription) || 0;
207
+ otherSubscriptionMap.set(sub.subscription, current + sub.count);
249
208
  }
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
209
  }
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
210
  }
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;
211
+ let otherItems = null;
212
+ if (itemBuckets.length > topN) {
213
+ const otherSubscriptionDist = [];
214
+ for (const [subscription, count] of otherSubscriptionMap.entries()) {
215
+ otherSubscriptionDist.push({ subscription, count });
294
216
  }
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 });
217
+ otherItems = {
218
+ platform: `Other (${itemBuckets.length - topN} ${args.breakdownType === 'version' ? 'versions' : 'platforms'})`,
219
+ count_records: otherRecords,
220
+ unique_accounts: otherAccounts,
221
+ unique_providers: otherProviders,
222
+ unique_patients: otherPatients,
223
+ avg_call_duration: otherCallDurationCount > 0
224
+ ? Math.round((otherCallDurationSum / otherCallDurationCount) * 100) / 100
225
+ : null,
226
+ provider_rating_count: otherProviderRatingCount,
227
+ avg_provider_rating: otherProviderRatingCount > 0
228
+ ? Math.round((otherProviderRatingSum / otherProviderRatingCount) * 100) / 100
229
+ : null,
230
+ patient_rating_count: otherPatientRatingCount,
231
+ avg_patient_rating: otherPatientRatingCount > 0
232
+ ? Math.round((otherPatientRatingSum / otherPatientRatingCount) * 100) / 100
233
+ : null,
234
+ subscription_distribution: otherSubscriptionDist,
235
+ };
301
236
  }
237
+ return this.buildResponse({
238
+ top_items: topItems,
239
+ other_items: otherItems
240
+ }, {
241
+ description: `Platform breakdown by ${args.breakdownType} for ${args.role}s from ${startDateIso} to ${endDateIso}`,
242
+ arguments: args,
243
+ time: {
244
+ start: startDateIso,
245
+ end: endDateIso
246
+ },
247
+ visualization: {
248
+ type: 'bar', // Should be pie?? Original code logic had visualization hardcoded?
249
+ // The previous replace_file_content used 'pie'.
250
+ // Wait, the original code didn't have visualization object fully populated beyond basic structure.
251
+ // Previous Step 290 showed visualization.type = 'bar' in my constructed buildResponse? No, step 290 view_file just showed previous code.
252
+ // I will use 'pie' as it fits breakdown. "Visits by ..."
253
+ title: `Top ${topN} ${args.role} ${args.breakdownType}s`,
254
+ description: `${startDateIso.split('T')[0]} to ${endDateIso.split('T')[0]}`,
255
+ xAxisLabel: args.breakdownType === 'version' ? 'Version' : 'Platform',
256
+ yAxisLabel: 'Records'
257
+ }
258
+ });
302
259
  }
303
260
  }
304
261
  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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"}