nowaikit 2.5.1

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 (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.cjs +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,373 @@
1
+ import { ServiceNowError } from '../utils/errors.js';
2
+ import { requireWrite } from '../utils/permissions.js';
3
+ import { instanceManager } from '../servicenow/instances.js';
4
+ export function getCoreToolDefinitions() {
5
+ return [
6
+ {
7
+ name: 'query_records',
8
+ description: 'Query ServiceNow records with filtering, field selection, pagination, and sorting',
9
+ inputSchema: {
10
+ type: 'object',
11
+ properties: {
12
+ table: { type: 'string', description: 'Table name (e.g., "incident", "change_request")' },
13
+ query: { type: 'string', description: 'Encoded query string (e.g., "active=true^priority=1")' },
14
+ fields: { type: 'string', description: 'Comma-separated fields to return' },
15
+ limit: { type: 'number', description: 'Max records (default: 10, max: 1000)' },
16
+ orderBy: { type: 'string', description: 'Field to sort by. Prefix with "-" for descending' },
17
+ },
18
+ required: ['table'],
19
+ },
20
+ },
21
+ {
22
+ name: 'get_table_schema',
23
+ description: 'Get the structure and field information for a ServiceNow table',
24
+ inputSchema: {
25
+ type: 'object',
26
+ properties: {
27
+ table: { type: 'string', description: 'Table name to inspect' },
28
+ },
29
+ required: ['table'],
30
+ },
31
+ },
32
+ {
33
+ name: 'get_record',
34
+ description: 'Retrieve complete details of a specific record by sys_id',
35
+ inputSchema: {
36
+ type: 'object',
37
+ properties: {
38
+ table: { type: 'string', description: 'Table name' },
39
+ sys_id: { type: 'string', description: '32-character system ID' },
40
+ fields: { type: 'string', description: 'Optional comma-separated fields' },
41
+ },
42
+ required: ['table', 'sys_id'],
43
+ },
44
+ },
45
+ {
46
+ name: 'get_user',
47
+ description: 'Look up user details by email or username',
48
+ inputSchema: {
49
+ type: 'object',
50
+ properties: {
51
+ user_identifier: { type: 'string', description: 'Email address or username' },
52
+ },
53
+ required: ['user_identifier'],
54
+ },
55
+ },
56
+ {
57
+ name: 'get_group',
58
+ description: 'Find assignment group details by name or sys_id',
59
+ inputSchema: {
60
+ type: 'object',
61
+ properties: {
62
+ group_identifier: { type: 'string', description: 'Group name or sys_id' },
63
+ },
64
+ required: ['group_identifier'],
65
+ },
66
+ },
67
+ {
68
+ name: 'search_cmdb_ci',
69
+ description: 'Search for configuration items (CIs) in the CMDB',
70
+ inputSchema: {
71
+ type: 'object',
72
+ properties: {
73
+ query: { type: 'string', description: 'Encoded query (e.g., "sys_class_name=cmdb_ci_server")' },
74
+ limit: { type: 'number', description: 'Max CIs (default: 10, max: 100)' },
75
+ },
76
+ required: [],
77
+ },
78
+ },
79
+ {
80
+ name: 'get_cmdb_ci',
81
+ description: 'Get complete information about a specific configuration item',
82
+ inputSchema: {
83
+ type: 'object',
84
+ properties: {
85
+ ci_sys_id: { type: 'string', description: 'System ID of the CI' },
86
+ fields: { type: 'string', description: 'Optional comma-separated fields' },
87
+ },
88
+ required: ['ci_sys_id'],
89
+ },
90
+ },
91
+ {
92
+ name: 'list_relationships',
93
+ description: 'Show parent and child relationships for a CI',
94
+ inputSchema: {
95
+ type: 'object',
96
+ properties: {
97
+ ci_sys_id: { type: 'string', description: 'System ID of the CI' },
98
+ },
99
+ required: ['ci_sys_id'],
100
+ },
101
+ },
102
+ {
103
+ name: 'list_discovery_schedules',
104
+ description: 'List discovery schedules and their run status',
105
+ inputSchema: {
106
+ type: 'object',
107
+ properties: {
108
+ active_only: { type: 'boolean', description: 'Only show active schedules' },
109
+ },
110
+ required: [],
111
+ },
112
+ },
113
+ {
114
+ name: 'list_mid_servers',
115
+ description: 'List MID servers and verify they are healthy',
116
+ inputSchema: {
117
+ type: 'object',
118
+ properties: {
119
+ active_only: { type: 'boolean', description: 'Only show servers with status "Up"' },
120
+ },
121
+ required: [],
122
+ },
123
+ },
124
+ {
125
+ name: 'list_active_events',
126
+ description: 'Monitor critical infrastructure events',
127
+ inputSchema: {
128
+ type: 'object',
129
+ properties: {
130
+ query: { type: 'string', description: 'Filter events (e.g., "severity=1")' },
131
+ limit: { type: 'number', description: 'Max events (default: 10)' },
132
+ },
133
+ required: [],
134
+ },
135
+ },
136
+ {
137
+ name: 'cmdb_health_dashboard',
138
+ description: 'Get CMDB data quality metrics (completeness of server and network CI data)',
139
+ inputSchema: { type: 'object', properties: {}, required: [] },
140
+ },
141
+ {
142
+ name: 'service_mapping_summary',
143
+ description: 'View service dependencies and related CIs for impact analysis',
144
+ inputSchema: {
145
+ type: 'object',
146
+ properties: {
147
+ service_sys_id: { type: 'string', description: 'System ID of the business service' },
148
+ },
149
+ required: ['service_sys_id'],
150
+ },
151
+ },
152
+ {
153
+ name: 'natural_language_search',
154
+ description: 'Search ServiceNow using plain English (experimental)',
155
+ inputSchema: {
156
+ type: 'object',
157
+ properties: {
158
+ query: { type: 'string', description: 'Plain English query' },
159
+ limit: { type: 'number', description: 'Max results (default: 10)' },
160
+ },
161
+ required: ['query'],
162
+ },
163
+ },
164
+ {
165
+ name: 'natural_language_update',
166
+ description: 'Update a record using natural language (experimental, requires WRITE_ENABLED=true)',
167
+ inputSchema: {
168
+ type: 'object',
169
+ properties: {
170
+ instruction: { type: 'string', description: 'Natural language update instruction' },
171
+ table: { type: 'string', description: 'Table name' },
172
+ },
173
+ required: ['instruction', 'table'],
174
+ },
175
+ },
176
+ {
177
+ name: 'list_instances',
178
+ description: 'List all configured ServiceNow instances (multi-instance / multi-customer support)',
179
+ inputSchema: { type: 'object', properties: {}, required: [] },
180
+ },
181
+ {
182
+ name: 'switch_instance',
183
+ description: 'Switch the active ServiceNow instance for this session',
184
+ inputSchema: {
185
+ type: 'object',
186
+ properties: {
187
+ name: { type: 'string', description: 'Instance name as configured (e.g. "prod", "dev", "customer_a")' },
188
+ },
189
+ required: ['name'],
190
+ },
191
+ },
192
+ {
193
+ name: 'get_current_instance',
194
+ description: 'Get the currently active ServiceNow instance name and URL',
195
+ inputSchema: { type: 'object', properties: {}, required: [] },
196
+ },
197
+ {
198
+ name: 'create_ci_relationship',
199
+ description: '[Write] Create a relationship between two CMDB Configuration Items',
200
+ inputSchema: {
201
+ type: 'object',
202
+ properties: {
203
+ parent: { type: 'string', description: 'Parent CI sys_id' },
204
+ child: { type: 'string', description: 'Child CI sys_id' },
205
+ type: { type: 'string', description: 'Relationship type (e.g. "Runs on::Runs")' },
206
+ },
207
+ required: ['parent', 'child', 'type'],
208
+ },
209
+ },
210
+ {
211
+ name: 'cmdb_impact_analysis',
212
+ description: 'Analyze the downstream impact of a Configuration Item change or outage',
213
+ inputSchema: {
214
+ type: 'object',
215
+ properties: {
216
+ ci_sys_id: { type: 'string', description: 'CI sys_id to analyze' },
217
+ depth: { type: 'number', description: 'Relationship depth to traverse (default: 2)' },
218
+ },
219
+ required: ['ci_sys_id'],
220
+ },
221
+ },
222
+ {
223
+ name: 'run_discovery_scan',
224
+ description: '[Write] Trigger a ServiceNow Discovery scan for network/infrastructure',
225
+ inputSchema: {
226
+ type: 'object',
227
+ properties: {
228
+ schedule_id: { type: 'string', description: 'Discovery schedule sys_id to run' },
229
+ mid_server: { type: 'string', description: 'Optional MID server name' },
230
+ },
231
+ required: ['schedule_id'],
232
+ },
233
+ },
234
+ ];
235
+ }
236
+ export async function executeCoreToolCall(client, name, args) {
237
+ switch (name) {
238
+ case 'query_records': {
239
+ const params = args;
240
+ if (!params.table)
241
+ throw new ServiceNowError('Table name is required', 'INVALID_REQUEST');
242
+ const response = await client.queryRecords(params);
243
+ return { count: response.count, records: response.records, summary: `Found ${response.count} record(s) in "${params.table}"` };
244
+ }
245
+ case 'get_table_schema':
246
+ if (!args.table)
247
+ throw new ServiceNowError('Table name is required', 'INVALID_REQUEST');
248
+ return await client.getTableSchema(args.table);
249
+ case 'get_record': {
250
+ const p = args;
251
+ if (!p.table || !p.sys_id)
252
+ throw new ServiceNowError('table and sys_id are required', 'INVALID_REQUEST');
253
+ return await client.getRecord(p.table, p.sys_id, p.fields);
254
+ }
255
+ case 'get_user':
256
+ if (!args.user_identifier)
257
+ throw new ServiceNowError('user_identifier is required', 'INVALID_REQUEST');
258
+ return await client.getUser(args.user_identifier);
259
+ case 'get_group':
260
+ if (!args.group_identifier)
261
+ throw new ServiceNowError('group_identifier is required', 'INVALID_REQUEST');
262
+ return await client.getGroup(args.group_identifier);
263
+ case 'search_cmdb_ci':
264
+ return await client.searchCmdbCi(args.query, args.limit);
265
+ case 'get_cmdb_ci': {
266
+ const p = args;
267
+ if (!p.ci_sys_id)
268
+ throw new ServiceNowError('ci_sys_id is required', 'INVALID_REQUEST');
269
+ return await client.getCmdbCi(p.ci_sys_id, p.fields);
270
+ }
271
+ case 'list_relationships': {
272
+ const p = args;
273
+ if (!p.ci_sys_id)
274
+ throw new ServiceNowError('ci_sys_id is required', 'INVALID_REQUEST');
275
+ return await client.listRelationships(p.ci_sys_id);
276
+ }
277
+ case 'list_discovery_schedules':
278
+ return await client.listDiscoverySchedules(args.active_only);
279
+ case 'list_mid_servers':
280
+ return await client.listMidServers(args.active_only);
281
+ case 'list_active_events':
282
+ return await client.listActiveEvents(args.query, args.limit);
283
+ case 'cmdb_health_dashboard':
284
+ return await client.cmdbHealthDashboard();
285
+ case 'service_mapping_summary': {
286
+ const p = args;
287
+ if (!p.service_sys_id)
288
+ throw new ServiceNowError('service_sys_id is required', 'INVALID_REQUEST');
289
+ return await client.serviceMappingSummary(p.service_sys_id);
290
+ }
291
+ case 'natural_language_search':
292
+ return await client.naturalLanguageSearch(args.query, args.limit);
293
+ case 'natural_language_update':
294
+ requireWrite();
295
+ return await client.naturalLanguageUpdate(args.instruction, args.table);
296
+ case 'list_instances':
297
+ return {
298
+ current: instanceManager.getCurrentName(),
299
+ instances: instanceManager.listAll(),
300
+ total: instanceManager.listNames().length,
301
+ };
302
+ case 'switch_instance':
303
+ if (!args.name)
304
+ throw new ServiceNowError('name is required', 'INVALID_REQUEST');
305
+ instanceManager.switch(args.name);
306
+ return {
307
+ action: 'switched',
308
+ active_instance: instanceManager.getCurrentName(),
309
+ url: instanceManager.getCurrentUrl(),
310
+ };
311
+ case 'get_current_instance':
312
+ return {
313
+ name: instanceManager.getCurrentName(),
314
+ url: instanceManager.getCurrentUrl(),
315
+ all_instances: instanceManager.listNames(),
316
+ };
317
+ case 'create_ci_relationship': {
318
+ requireWrite();
319
+ if (!args.parent || !args.child || !args.type)
320
+ throw new ServiceNowError('parent, child, and type are required', 'INVALID_REQUEST');
321
+ const result = await client.createRecord('cmdb_rel_ci', {
322
+ parent: args.parent,
323
+ child: args.child,
324
+ type: args.type,
325
+ });
326
+ return { ...result, summary: `Created CI relationship: ${args.parent} -> ${args.child} (${args.type})` };
327
+ }
328
+ case 'cmdb_impact_analysis': {
329
+ if (!args.ci_sys_id)
330
+ throw new ServiceNowError('ci_sys_id is required', 'INVALID_REQUEST');
331
+ const maxDepth = args.depth || 2;
332
+ const visited = new Set();
333
+ const impactTree = [];
334
+ async function traverse(ciSysId, currentDepth) {
335
+ if (currentDepth > maxDepth || visited.has(ciSysId))
336
+ return [];
337
+ visited.add(ciSysId);
338
+ const resp = await client.queryRecords({
339
+ table: 'cmdb_rel_ci',
340
+ query: `parent=${ciSysId}`,
341
+ fields: 'sys_id,child,type,parent',
342
+ limit: 100,
343
+ });
344
+ const children = [];
345
+ for (const rel of resp.records) {
346
+ const childId = typeof rel.child === 'object' ? rel.child.value : rel.child;
347
+ const downstream = await traverse(childId, currentDepth + 1);
348
+ children.push({ relationship: rel, downstream });
349
+ }
350
+ return children;
351
+ }
352
+ const downstream = await traverse(args.ci_sys_id, 1);
353
+ impactTree.push({ ci_sys_id: args.ci_sys_id, depth: maxDepth, downstream });
354
+ return { impact_analysis: impactTree, total_impacted: visited.size - 1 };
355
+ }
356
+ case 'run_discovery_scan': {
357
+ requireWrite();
358
+ if (!args.schedule_id)
359
+ throw new ServiceNowError('schedule_id is required', 'INVALID_REQUEST');
360
+ const data = {
361
+ dsc_schedule: args.schedule_id,
362
+ state: 'active',
363
+ };
364
+ if (args.mid_server)
365
+ data.mid_server = args.mid_server;
366
+ const result = await client.createRecord('discovery_status', data);
367
+ return { ...result, summary: `Triggered discovery scan for schedule ${args.schedule_id}` };
368
+ }
369
+ default:
370
+ return null; // not handled here
371
+ }
372
+ }
373
+ //# sourceMappingURL=core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../../src/tools/core.ts"],"names":[],"mappings":"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"}