nowaikit 2.5.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.

Potentially problematic release.


This version of nowaikit might be problematic. Click here for more details.

Files changed (209) hide show
  1. package/.env.example +96 -0
  2. package/LICENSE +21 -0
  3. package/README.md +1253 -0
  4. package/desktop/renderer/dist/apple-touch-icon.png +0 -0
  5. package/desktop/renderer/dist/assets/index-Bb0ncZQl.css +1 -0
  6. package/desktop/renderer/dist/assets/index-MlBBSUMZ.js +49 -0
  7. package/desktop/renderer/dist/favicon-32.png +0 -0
  8. package/desktop/renderer/dist/favicon.svg +18 -0
  9. package/desktop/renderer/dist/index.html +18 -0
  10. package/desktop/serve.js +449 -0
  11. package/dist/cli/auth.d.ts +14 -0
  12. package/dist/cli/auth.d.ts.map +1 -0
  13. package/dist/cli/auth.js +179 -0
  14. package/dist/cli/auth.js.map +1 -0
  15. package/dist/cli/config-store.d.ts +28 -0
  16. package/dist/cli/config-store.d.ts.map +1 -0
  17. package/dist/cli/config-store.js +64 -0
  18. package/dist/cli/config-store.js.map +1 -0
  19. package/dist/cli/detect-clients.d.ts +16 -0
  20. package/dist/cli/detect-clients.d.ts.map +1 -0
  21. package/dist/cli/detect-clients.js +151 -0
  22. package/dist/cli/detect-clients.js.map +1 -0
  23. package/dist/cli/index.d.ts +3 -0
  24. package/dist/cli/index.d.ts.map +1 -0
  25. package/dist/cli/index.js +193 -0
  26. package/dist/cli/index.js.map +1 -0
  27. package/dist/cli/setup.d.ts +4 -0
  28. package/dist/cli/setup.d.ts.map +1 -0
  29. package/dist/cli/setup.js +575 -0
  30. package/dist/cli/setup.js.map +1 -0
  31. package/dist/cli/writers/index.d.ts +9 -0
  32. package/dist/cli/writers/index.d.ts.map +1 -0
  33. package/dist/cli/writers/index.js +140 -0
  34. package/dist/cli/writers/index.js.map +1 -0
  35. package/dist/prompts/index.d.ts +25 -0
  36. package/dist/prompts/index.d.ts.map +1 -0
  37. package/dist/prompts/index.js +38 -0
  38. package/dist/prompts/index.js.map +1 -0
  39. package/dist/prompts/itsm.d.ts +20 -0
  40. package/dist/prompts/itsm.d.ts.map +1 -0
  41. package/dist/prompts/itsm.js +110 -0
  42. package/dist/prompts/itsm.js.map +1 -0
  43. package/dist/prompts/user-prompts.d.ts +3 -0
  44. package/dist/prompts/user-prompts.d.ts.map +1 -0
  45. package/dist/prompts/user-prompts.js +35 -0
  46. package/dist/prompts/user-prompts.js.map +1 -0
  47. package/dist/resources/index.d.ts +26 -0
  48. package/dist/resources/index.d.ts.map +1 -0
  49. package/dist/resources/index.js +99 -0
  50. package/dist/resources/index.js.map +1 -0
  51. package/dist/server.d.ts +3 -0
  52. package/dist/server.d.ts.map +1 -0
  53. package/dist/server.js +129 -0
  54. package/dist/server.js.map +1 -0
  55. package/dist/servicenow/client.d.ts +135 -0
  56. package/dist/servicenow/client.d.ts.map +1 -0
  57. package/dist/servicenow/client.js +803 -0
  58. package/dist/servicenow/client.js.map +1 -0
  59. package/dist/servicenow/instances.d.ts +28 -0
  60. package/dist/servicenow/instances.d.ts.map +1 -0
  61. package/dist/servicenow/instances.js +204 -0
  62. package/dist/servicenow/instances.js.map +1 -0
  63. package/dist/servicenow/types.d.ts +574 -0
  64. package/dist/servicenow/types.d.ts.map +1 -0
  65. package/dist/servicenow/types.js +3 -0
  66. package/dist/servicenow/types.js.map +1 -0
  67. package/dist/tools/agile.d.ts +225 -0
  68. package/dist/tools/agile.d.ts.map +1 -0
  69. package/dist/tools/agile.js +205 -0
  70. package/dist/tools/agile.js.map +1 -0
  71. package/dist/tools/app-studio.d.ts +139 -0
  72. package/dist/tools/app-studio.d.ts.map +1 -0
  73. package/dist/tools/app-studio.js +139 -0
  74. package/dist/tools/app-studio.js.map +1 -0
  75. package/dist/tools/atf.d.ts +144 -0
  76. package/dist/tools/atf.d.ts.map +1 -0
  77. package/dist/tools/atf.js +186 -0
  78. package/dist/tools/atf.js.map +1 -0
  79. package/dist/tools/catalog.d.ts +628 -0
  80. package/dist/tools/catalog.d.ts.map +1 -0
  81. package/dist/tools/catalog.js +397 -0
  82. package/dist/tools/catalog.js.map +1 -0
  83. package/dist/tools/change.d.ts +347 -0
  84. package/dist/tools/change.d.ts.map +1 -0
  85. package/dist/tools/change.js +213 -0
  86. package/dist/tools/change.js.map +1 -0
  87. package/dist/tools/core.d.ts +540 -0
  88. package/dist/tools/core.d.ts.map +1 -0
  89. package/dist/tools/core.js +373 -0
  90. package/dist/tools/core.js.map +1 -0
  91. package/dist/tools/csm.d.ts +401 -0
  92. package/dist/tools/csm.d.ts.map +1 -0
  93. package/dist/tools/csm.js +255 -0
  94. package/dist/tools/csm.js.map +1 -0
  95. package/dist/tools/deployment.d.ts +366 -0
  96. package/dist/tools/deployment.d.ts.map +1 -0
  97. package/dist/tools/deployment.js +181 -0
  98. package/dist/tools/deployment.js.map +1 -0
  99. package/dist/tools/devops.d.ts +236 -0
  100. package/dist/tools/devops.d.ts.map +1 -0
  101. package/dist/tools/devops.js +207 -0
  102. package/dist/tools/devops.js.map +1 -0
  103. package/dist/tools/flow.d.ts +496 -0
  104. package/dist/tools/flow.d.ts.map +1 -0
  105. package/dist/tools/flow.js +348 -0
  106. package/dist/tools/flow.js.map +1 -0
  107. package/dist/tools/hrsd.d.ts +789 -0
  108. package/dist/tools/hrsd.d.ts.map +1 -0
  109. package/dist/tools/hrsd.js +377 -0
  110. package/dist/tools/hrsd.js.map +1 -0
  111. package/dist/tools/incident.d.ts +256 -0
  112. package/dist/tools/incident.d.ts.map +1 -0
  113. package/dist/tools/incident.js +163 -0
  114. package/dist/tools/incident.js.map +1 -0
  115. package/dist/tools/index.d.ts +11514 -0
  116. package/dist/tools/index.d.ts.map +1 -0
  117. package/dist/tools/index.js +276 -0
  118. package/dist/tools/index.js.map +1 -0
  119. package/dist/tools/integration.d.ts +603 -0
  120. package/dist/tools/integration.d.ts.map +1 -0
  121. package/dist/tools/integration.js +510 -0
  122. package/dist/tools/integration.js.map +1 -0
  123. package/dist/tools/itam.d.ts +462 -0
  124. package/dist/tools/itam.d.ts.map +1 -0
  125. package/dist/tools/itam.js +306 -0
  126. package/dist/tools/itam.js.map +1 -0
  127. package/dist/tools/knowledge.d.ts +187 -0
  128. package/dist/tools/knowledge.d.ts.map +1 -0
  129. package/dist/tools/knowledge.js +161 -0
  130. package/dist/tools/knowledge.js.map +1 -0
  131. package/dist/tools/ml.d.ts +263 -0
  132. package/dist/tools/ml.d.ts.map +1 -0
  133. package/dist/tools/ml.js +251 -0
  134. package/dist/tools/ml.js.map +1 -0
  135. package/dist/tools/mobile.d.ts +352 -0
  136. package/dist/tools/mobile.d.ts.map +1 -0
  137. package/dist/tools/mobile.js +122 -0
  138. package/dist/tools/mobile.js.map +1 -0
  139. package/dist/tools/notification.d.ts +590 -0
  140. package/dist/tools/notification.d.ts.map +1 -0
  141. package/dist/tools/notification.js +382 -0
  142. package/dist/tools/notification.js.map +1 -0
  143. package/dist/tools/now-assist.d.ts +300 -0
  144. package/dist/tools/now-assist.d.ts.map +1 -0
  145. package/dist/tools/now-assist.js +227 -0
  146. package/dist/tools/now-assist.js.map +1 -0
  147. package/dist/tools/performance.d.ts +447 -0
  148. package/dist/tools/performance.d.ts.map +1 -0
  149. package/dist/tools/performance.js +473 -0
  150. package/dist/tools/performance.js.map +1 -0
  151. package/dist/tools/portal.d.ts +530 -0
  152. package/dist/tools/portal.d.ts.map +1 -0
  153. package/dist/tools/portal.js +425 -0
  154. package/dist/tools/portal.js.map +1 -0
  155. package/dist/tools/problem.d.ts +110 -0
  156. package/dist/tools/problem.d.ts.map +1 -0
  157. package/dist/tools/problem.js +100 -0
  158. package/dist/tools/problem.js.map +1 -0
  159. package/dist/tools/reporting.d.ts +825 -0
  160. package/dist/tools/reporting.d.ts.map +1 -0
  161. package/dist/tools/reporting.js +460 -0
  162. package/dist/tools/reporting.js.map +1 -0
  163. package/dist/tools/script.d.ts +714 -0
  164. package/dist/tools/script.d.ts.map +1 -0
  165. package/dist/tools/script.js +629 -0
  166. package/dist/tools/script.js.map +1 -0
  167. package/dist/tools/security.d.ts +794 -0
  168. package/dist/tools/security.d.ts.map +1 -0
  169. package/dist/tools/security.js +425 -0
  170. package/dist/tools/security.js.map +1 -0
  171. package/dist/tools/sys-properties.d.ts +315 -0
  172. package/dist/tools/sys-properties.d.ts.map +1 -0
  173. package/dist/tools/sys-properties.js +372 -0
  174. package/dist/tools/sys-properties.js.map +1 -0
  175. package/dist/tools/task.d.ts +82 -0
  176. package/dist/tools/task.d.ts.map +1 -0
  177. package/dist/tools/task.js +96 -0
  178. package/dist/tools/task.js.map +1 -0
  179. package/dist/tools/updateset.d.ts +159 -0
  180. package/dist/tools/updateset.d.ts.map +1 -0
  181. package/dist/tools/updateset.js +212 -0
  182. package/dist/tools/updateset.js.map +1 -0
  183. package/dist/tools/user.d.ts +206 -0
  184. package/dist/tools/user.d.ts.map +1 -0
  185. package/dist/tools/user.js +163 -0
  186. package/dist/tools/user.js.map +1 -0
  187. package/dist/tools/va.d.ts +217 -0
  188. package/dist/tools/va.d.ts.map +1 -0
  189. package/dist/tools/va.js +178 -0
  190. package/dist/tools/va.js.map +1 -0
  191. package/dist/tools/workspace.d.ts +565 -0
  192. package/dist/tools/workspace.d.ts.map +1 -0
  193. package/dist/tools/workspace.js +201 -0
  194. package/dist/tools/workspace.js.map +1 -0
  195. package/dist/tools-manifest.json +7852 -0
  196. package/dist/utils/errors.d.ts +6 -0
  197. package/dist/utils/errors.d.ts.map +1 -0
  198. package/dist/utils/errors.js +11 -0
  199. package/dist/utils/errors.js.map +1 -0
  200. package/dist/utils/logging.d.ts +7 -0
  201. package/dist/utils/logging.d.ts.map +1 -0
  202. package/dist/utils/logging.js +15 -0
  203. package/dist/utils/logging.js.map +1 -0
  204. package/dist/utils/permissions.d.ts +21 -0
  205. package/dist/utils/permissions.d.ts.map +1 -0
  206. package/dist/utils/permissions.js +54 -0
  207. package/dist/utils/permissions.js.map +1 -0
  208. package/instances.example.json +71 -0
  209. package/package.json +110 -0
@@ -0,0 +1,473 @@
1
+ import { ServiceNowError } from '../utils/errors.js';
2
+ import { requireWrite } from '../utils/permissions.js';
3
+ export function getPerformanceToolDefinitions() {
4
+ return [
5
+ // ── PA Indicators ────────────────────────────────────────────────────────
6
+ {
7
+ name: 'list_pa_indicators',
8
+ description: 'List Performance Analytics (PA) indicators (KPIs) available in the instance',
9
+ inputSchema: {
10
+ type: 'object',
11
+ properties: {
12
+ query: { type: 'string', description: 'Search indicators by name or description' },
13
+ category: { type: 'string', description: 'Filter by indicator category' },
14
+ active: { type: 'boolean', description: 'Filter to active indicators only (default true)' },
15
+ limit: { type: 'number', description: 'Max records to return (default 50)' },
16
+ },
17
+ required: [],
18
+ },
19
+ },
20
+ {
21
+ name: 'get_pa_indicator',
22
+ description: 'Get details of a specific Performance Analytics indicator including its formula',
23
+ inputSchema: {
24
+ type: 'object',
25
+ properties: {
26
+ sys_id_or_name: { type: 'string', description: 'Indicator sys_id or name' },
27
+ },
28
+ required: ['sys_id_or_name'],
29
+ },
30
+ },
31
+ {
32
+ name: 'get_pa_scorecard',
33
+ description: 'Get current scorecard data for a PA indicator — returns current value, target, trend direction',
34
+ inputSchema: {
35
+ type: 'object',
36
+ properties: {
37
+ indicator_sys_id: { type: 'string', description: 'PA indicator sys_id' },
38
+ breakdown_sys_id: {
39
+ type: 'string',
40
+ description: 'Optional breakdown (dimension) sys_id to segment data by group',
41
+ },
42
+ period: {
43
+ type: 'string',
44
+ description: 'Time period: last_7_days, last_30_days, last_quarter, last_year (default: last_30_days)',
45
+ },
46
+ include_scores: { type: 'boolean', description: 'Include individual score records (default false)' },
47
+ },
48
+ required: ['indicator_sys_id'],
49
+ },
50
+ },
51
+ {
52
+ name: 'get_pa_time_series',
53
+ description: 'Get historical time-series data for a PA indicator to identify trends',
54
+ inputSchema: {
55
+ type: 'object',
56
+ properties: {
57
+ indicator_sys_id: { type: 'string', description: 'PA indicator sys_id' },
58
+ start_date: {
59
+ type: 'string',
60
+ description: 'Start date in YYYY-MM-DD format (default: 30 days ago)',
61
+ },
62
+ end_date: { type: 'string', description: 'End date in YYYY-MM-DD format (default: today)' },
63
+ limit: { type: 'number', description: 'Max data points to return (default 100)' },
64
+ },
65
+ required: ['indicator_sys_id'],
66
+ },
67
+ },
68
+ {
69
+ name: 'list_pa_breakdowns',
70
+ description: 'List PA breakdowns (dimensions) available for segmenting indicator data',
71
+ inputSchema: {
72
+ type: 'object',
73
+ properties: {
74
+ query: { type: 'string', description: 'Search breakdowns by name' },
75
+ limit: { type: 'number', description: 'Max records to return (default 25)' },
76
+ },
77
+ required: [],
78
+ },
79
+ },
80
+ // ── Dashboards ───────────────────────────────────────────────────────────
81
+ {
82
+ name: 'list_pa_dashboards',
83
+ description: 'List Performance Analytics dashboards',
84
+ inputSchema: {
85
+ type: 'object',
86
+ properties: {
87
+ query: { type: 'string', description: 'Search dashboards by name' },
88
+ limit: { type: 'number', description: 'Max records to return (default 25)' },
89
+ },
90
+ required: [],
91
+ },
92
+ },
93
+ {
94
+ name: 'get_pa_dashboard',
95
+ description: 'Get details of a PA dashboard including its widgets/tabs',
96
+ inputSchema: {
97
+ type: 'object',
98
+ properties: {
99
+ sys_id_or_name: { type: 'string', description: 'Dashboard sys_id or name' },
100
+ },
101
+ required: ['sys_id_or_name'],
102
+ },
103
+ },
104
+ {
105
+ name: 'list_homepages',
106
+ description: 'List homepage dashboards (CMS content pages used as homepages)',
107
+ inputSchema: {
108
+ type: 'object',
109
+ properties: {
110
+ query: { type: 'string', description: 'Search by title' },
111
+ limit: { type: 'number', description: 'Max records to return (default 25)' },
112
+ },
113
+ required: [],
114
+ },
115
+ },
116
+ // ── PA Jobs ──────────────────────────────────────────────────────────────
117
+ {
118
+ name: 'list_pa_jobs',
119
+ description: 'List Performance Analytics data collection jobs and their schedules',
120
+ inputSchema: {
121
+ type: 'object',
122
+ properties: {
123
+ active: { type: 'boolean', description: 'Filter to active jobs only (default true)' },
124
+ query: { type: 'string', description: 'Search by name' },
125
+ limit: { type: 'number', description: 'Max records to return (default 25)' },
126
+ },
127
+ required: [],
128
+ },
129
+ },
130
+ {
131
+ name: 'get_pa_job',
132
+ description: 'Get details of a Performance Analytics collection job',
133
+ inputSchema: {
134
+ type: 'object',
135
+ properties: {
136
+ sys_id: { type: 'string', description: 'PA job sys_id' },
137
+ },
138
+ required: ['sys_id'],
139
+ },
140
+ },
141
+ // ── Dashboard Management ─────────────────────────────────────────────────
142
+ {
143
+ name: 'create_dashboard',
144
+ description: 'Create a new Performance Analytics dashboard (requires WRITE_ENABLED=true)',
145
+ inputSchema: {
146
+ type: 'object',
147
+ properties: {
148
+ name: { type: 'string', description: 'Dashboard name' },
149
+ description: { type: 'string', description: 'Brief description of the dashboard' },
150
+ roles: {
151
+ type: 'string',
152
+ description: 'Comma-separated roles that can view this dashboard (leave blank for all)',
153
+ },
154
+ active: { type: 'boolean', description: 'Activate the dashboard immediately (default: true)' },
155
+ },
156
+ required: ['name'],
157
+ },
158
+ },
159
+ {
160
+ name: 'update_dashboard',
161
+ description: 'Update an existing PA dashboard (requires WRITE_ENABLED=true)',
162
+ inputSchema: {
163
+ type: 'object',
164
+ properties: {
165
+ sys_id: { type: 'string', description: 'Dashboard sys_id' },
166
+ fields: {
167
+ type: 'object',
168
+ description: 'Fields to update (name, description, roles, active, etc.)',
169
+ },
170
+ },
171
+ required: ['sys_id', 'fields'],
172
+ },
173
+ },
174
+ // ── Data Quality ─────────────────────────────────────────────────────────
175
+ {
176
+ name: 'check_table_completeness',
177
+ description: 'Analyze data quality and field completeness for a ServiceNow table — ' +
178
+ 'returns percentage of non-empty values per field',
179
+ inputSchema: {
180
+ type: 'object',
181
+ properties: {
182
+ table: { type: 'string', description: 'Table name to analyze (e.g. "incident", "cmdb_ci_server")' },
183
+ fields: {
184
+ type: 'string',
185
+ description: 'Comma-separated field names to check (e.g. "assigned_to,priority,category")',
186
+ },
187
+ query: {
188
+ type: 'string',
189
+ description: 'Optional encoded query to scope the analysis (e.g. "active=true")',
190
+ },
191
+ sample_size: {
192
+ type: 'number',
193
+ description: 'Number of records to sample (default 100, max 500)',
194
+ },
195
+ },
196
+ required: ['table', 'fields'],
197
+ },
198
+ },
199
+ {
200
+ name: 'get_table_record_count',
201
+ description: 'Get total record count for a ServiceNow table with optional filters',
202
+ inputSchema: {
203
+ type: 'object',
204
+ properties: {
205
+ table: { type: 'string', description: 'Table name' },
206
+ query: { type: 'string', description: 'Optional encoded query to count a subset' },
207
+ },
208
+ required: ['table'],
209
+ },
210
+ },
211
+ {
212
+ name: 'compare_record_counts',
213
+ description: 'Compare record counts across multiple ServiceNow tables or time periods — useful for capacity planning',
214
+ inputSchema: {
215
+ type: 'object',
216
+ properties: {
217
+ tables: {
218
+ type: 'array',
219
+ items: { type: 'string' },
220
+ description: 'List of table names to compare (e.g. ["incident", "change_request", "problem"])',
221
+ },
222
+ query: { type: 'string', description: 'Optional query to apply to all tables' },
223
+ },
224
+ required: ['tables'],
225
+ },
226
+ },
227
+ ];
228
+ }
229
+ export async function executePerformanceToolCall(client, name, args) {
230
+ switch (name) {
231
+ // ── PA Indicators ────────────────────────────────────────────────────────
232
+ case 'list_pa_indicators': {
233
+ const parts = [];
234
+ if (args.active !== false)
235
+ parts.push('active=true');
236
+ if (args.category)
237
+ parts.push(`category=${args.category}`);
238
+ if (args.query)
239
+ parts.push(`nameCONTAINS${args.query}^ORdescriptionCONTAINS${args.query}`);
240
+ return await client.queryRecords({
241
+ table: 'pa_indicators',
242
+ query: parts.join('^') || '',
243
+ limit: args.limit ?? 50,
244
+ fields: 'sys_id,name,description,unit,direction,active,category,sys_updated_on',
245
+ });
246
+ }
247
+ case 'get_pa_indicator': {
248
+ if (!args.sys_id_or_name)
249
+ throw new ServiceNowError('sys_id_or_name is required', 'INVALID_REQUEST');
250
+ if (/^[0-9a-f]{32}$/i.test(args.sys_id_or_name)) {
251
+ return await client.getRecord('pa_indicators', args.sys_id_or_name);
252
+ }
253
+ const resp = await client.queryRecords({
254
+ table: 'pa_indicators',
255
+ query: `nameCONTAINS${args.sys_id_or_name}`,
256
+ limit: 1,
257
+ });
258
+ if (resp.count === 0)
259
+ throw new ServiceNowError(`PA indicator not found: ${args.sys_id_or_name}`, 'NOT_FOUND');
260
+ return resp.records[0];
261
+ }
262
+ case 'get_pa_scorecard': {
263
+ if (!args.indicator_sys_id)
264
+ throw new ServiceNowError('indicator_sys_id is required', 'INVALID_REQUEST');
265
+ // Query pa_scores for the indicator's latest data
266
+ const scoreParts = [`indicator=${args.indicator_sys_id}`];
267
+ if (args.breakdown_sys_id)
268
+ scoreParts.push(`breakdown_element=${args.breakdown_sys_id}`);
269
+ const scores = await client.queryRecords({
270
+ table: 'pa_scores',
271
+ query: scoreParts.join('^'),
272
+ limit: args.include_scores ? 50 : 5,
273
+ orderBy: '-sys_created_on',
274
+ fields: 'sys_id,indicator,value,date,breakdown_element,sys_created_on',
275
+ });
276
+ // Get indicator metadata
277
+ const indicator = await client.getRecord('pa_indicators', args.indicator_sys_id);
278
+ const latestScore = scores.records[0];
279
+ const prevScore = scores.records[1];
280
+ const trend = latestScore && prevScore
281
+ ? (parseFloat(String(latestScore.value)) > parseFloat(String(prevScore.value)) ? 'up' : 'down')
282
+ : 'stable';
283
+ return {
284
+ indicator: {
285
+ sys_id: indicator.sys_id,
286
+ name: indicator.name,
287
+ unit: indicator.unit,
288
+ direction: indicator.direction,
289
+ },
290
+ current_value: latestScore?.value ?? 'N/A',
291
+ previous_value: prevScore?.value ?? 'N/A',
292
+ trend,
293
+ last_collected: latestScore?.date ?? latestScore?.sys_created_on ?? 'unknown',
294
+ scores: args.include_scores ? scores.records : undefined,
295
+ };
296
+ }
297
+ case 'get_pa_time_series': {
298
+ if (!args.indicator_sys_id)
299
+ throw new ServiceNowError('indicator_sys_id is required', 'INVALID_REQUEST');
300
+ const parts = [`indicator=${args.indicator_sys_id}`];
301
+ if (args.start_date)
302
+ parts.push(`date>=${args.start_date}`);
303
+ if (args.end_date)
304
+ parts.push(`date<=${args.end_date}`);
305
+ return await client.queryRecords({
306
+ table: 'pa_scores',
307
+ query: parts.join('^'),
308
+ limit: args.limit ?? 100,
309
+ orderBy: 'date',
310
+ fields: 'sys_id,indicator,value,date,sys_created_on',
311
+ });
312
+ }
313
+ case 'list_pa_breakdowns': {
314
+ const parts = [];
315
+ if (args.query)
316
+ parts.push(`nameCONTAINS${args.query}`);
317
+ return await client.queryRecords({
318
+ table: 'pa_breakdowns',
319
+ query: parts.join('^') || undefined,
320
+ limit: args.limit ?? 25,
321
+ fields: 'sys_id,name,type,table,field,sys_updated_on',
322
+ });
323
+ }
324
+ // ── Dashboards ───────────────────────────────────────────────────────────
325
+ case 'list_pa_dashboards': {
326
+ const parts = [];
327
+ if (args.query)
328
+ parts.push(`nameCONTAINS${args.query}`);
329
+ return await client.queryRecords({
330
+ table: 'pa_dashboards',
331
+ query: parts.join('^') || undefined,
332
+ limit: args.limit ?? 25,
333
+ fields: 'sys_id,name,description,sys_updated_on',
334
+ });
335
+ }
336
+ case 'get_pa_dashboard': {
337
+ if (!args.sys_id_or_name)
338
+ throw new ServiceNowError('sys_id_or_name is required', 'INVALID_REQUEST');
339
+ if (/^[0-9a-f]{32}$/i.test(args.sys_id_or_name)) {
340
+ return await client.getRecord('pa_dashboards', args.sys_id_or_name);
341
+ }
342
+ const resp = await client.queryRecords({
343
+ table: 'pa_dashboards',
344
+ query: `nameCONTAINS${args.sys_id_or_name}`,
345
+ limit: 1,
346
+ });
347
+ if (resp.count === 0)
348
+ throw new ServiceNowError(`PA dashboard not found: ${args.sys_id_or_name}`, 'NOT_FOUND');
349
+ return resp.records[0];
350
+ }
351
+ case 'list_homepages': {
352
+ const parts = [];
353
+ if (args.query)
354
+ parts.push(`titleCONTAINS${args.query}`);
355
+ return await client.queryRecords({
356
+ table: 'sys_ui_hp',
357
+ query: parts.join('^') || undefined,
358
+ limit: args.limit ?? 25,
359
+ fields: 'sys_id,title,roles,sys_updated_on',
360
+ });
361
+ }
362
+ // ── PA Jobs ──────────────────────────────────────────────────────────────
363
+ case 'list_pa_jobs': {
364
+ const parts = [];
365
+ if (args.active !== false)
366
+ parts.push('active=true');
367
+ if (args.query)
368
+ parts.push(`nameCONTAINS${args.query}`);
369
+ return await client.queryRecords({
370
+ table: 'pa_job',
371
+ query: parts.join('^') || '',
372
+ limit: args.limit ?? 25,
373
+ fields: 'sys_id,name,active,schedule,sys_updated_on',
374
+ });
375
+ }
376
+ case 'get_pa_job': {
377
+ if (!args.sys_id)
378
+ throw new ServiceNowError('sys_id is required', 'INVALID_REQUEST');
379
+ return await client.getRecord('pa_job', args.sys_id);
380
+ }
381
+ // ── Data Quality ─────────────────────────────────────────────────────────
382
+ case 'check_table_completeness': {
383
+ if (!args.table || !args.fields)
384
+ throw new ServiceNowError('table and fields are required', 'INVALID_REQUEST');
385
+ const fieldList = args.fields.split(',').map((f) => f.trim()).filter(Boolean);
386
+ const sampleSize = Math.min(args.sample_size ?? 100, 500);
387
+ const resp = await client.queryRecords({
388
+ table: args.table,
389
+ query: args.query,
390
+ limit: sampleSize,
391
+ fields: fieldList.join(','),
392
+ });
393
+ const totalRecords = resp.count;
394
+ const completeness = {};
395
+ for (const field of fieldList) {
396
+ const nonEmpty = resp.records.filter((r) => {
397
+ const val = r[field];
398
+ return val !== null && val !== undefined && val !== '' && val !== '0' && val !== false;
399
+ }).length;
400
+ completeness[field] = {
401
+ non_empty: nonEmpty,
402
+ total: totalRecords,
403
+ completeness_pct: totalRecords > 0 ? ((nonEmpty / totalRecords) * 100).toFixed(1) + '%' : '0%',
404
+ };
405
+ }
406
+ return {
407
+ table: args.table,
408
+ sample_size: totalRecords,
409
+ query: args.query || 'all records',
410
+ field_completeness: completeness,
411
+ note: totalRecords < sampleSize
412
+ ? `Only ${totalRecords} records found (less than requested sample of ${sampleSize})`
413
+ : undefined,
414
+ };
415
+ }
416
+ case 'get_table_record_count': {
417
+ if (!args.table)
418
+ throw new ServiceNowError('table is required', 'INVALID_REQUEST');
419
+ // Use aggregate query for accurate count
420
+ try {
421
+ const resp = await client.runAggregateQuery(args.table, '', 'COUNT', args.query);
422
+ const count = resp?.stats?.count ?? resp?.count ?? 'unknown';
423
+ return { table: args.table, query: args.query || 'all records', record_count: count };
424
+ }
425
+ catch {
426
+ // Fallback: query with limit=1 to at least confirm table exists
427
+ const resp = await client.queryRecords({ table: args.table, query: args.query, limit: 1 });
428
+ return { table: args.table, query: args.query || 'all records', record_count: resp.count, note: 'Count may be approximate (aggregate API unavailable)' };
429
+ }
430
+ }
431
+ case 'create_dashboard': {
432
+ requireWrite();
433
+ if (!args.name)
434
+ throw new ServiceNowError('name is required', 'INVALID_REQUEST');
435
+ const data = {
436
+ name: args.name,
437
+ active: args.active !== false,
438
+ };
439
+ if (args.description)
440
+ data.description = args.description;
441
+ if (args.roles)
442
+ data.roles = args.roles;
443
+ const result = await client.createRecord('pa_dashboards', data);
444
+ return { ...result, summary: `Created dashboard "${args.name}"` };
445
+ }
446
+ case 'update_dashboard': {
447
+ requireWrite();
448
+ if (!args.sys_id || !args.fields)
449
+ throw new ServiceNowError('sys_id and fields are required', 'INVALID_REQUEST');
450
+ const result = await client.updateRecord('pa_dashboards', args.sys_id, args.fields);
451
+ return { ...result, summary: `Updated dashboard ${args.sys_id}` };
452
+ }
453
+ case 'compare_record_counts': {
454
+ if (!args.tables || !Array.isArray(args.tables) || args.tables.length === 0) {
455
+ throw new ServiceNowError('tables must be a non-empty array', 'INVALID_REQUEST');
456
+ }
457
+ const results = {};
458
+ for (const table of args.tables) {
459
+ try {
460
+ const resp = await client.queryRecords({ table, query: args.query, limit: 1 });
461
+ results[table] = { accessible: true, record_count: resp.count };
462
+ }
463
+ catch (err) {
464
+ results[table] = { accessible: false, error: err instanceof Error ? err.message : 'Unknown error' };
465
+ }
466
+ }
467
+ return { query: args.query || 'all records', table_counts: results };
468
+ }
469
+ default:
470
+ return null;
471
+ }
472
+ }
473
+ //# sourceMappingURL=performance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"performance.js","sourceRoot":"","sources":["../../src/tools/performance.ts"],"names":[],"mappings":"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"}