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,382 @@
1
+ import { ServiceNowError } from '../utils/errors.js';
2
+ import { requireWrite } from '../utils/permissions.js';
3
+ export function getNotificationToolDefinitions() {
4
+ return [
5
+ // ── Email Notifications ──────────────────────────────────────────────────
6
+ {
7
+ name: 'list_notifications',
8
+ description: 'List email notification definitions (sysevent_email_action)',
9
+ inputSchema: {
10
+ type: 'object',
11
+ properties: {
12
+ query: { type: 'string', description: 'Search notifications by name' },
13
+ table: { type: 'string', description: 'Filter by target table (e.g. "incident")' },
14
+ event: { type: 'string', description: 'Filter by event trigger name' },
15
+ active: { type: 'boolean', description: 'Filter to active notifications only' },
16
+ limit: { type: 'number', description: 'Max records to return (default 25)' },
17
+ },
18
+ required: [],
19
+ },
20
+ },
21
+ {
22
+ name: 'get_notification',
23
+ description: 'Get full details of an email notification definition including template and conditions',
24
+ inputSchema: {
25
+ type: 'object',
26
+ properties: {
27
+ sys_id_or_name: { type: 'string', description: 'Notification sys_id or name' },
28
+ },
29
+ required: ['sys_id_or_name'],
30
+ },
31
+ },
32
+ {
33
+ name: 'create_notification',
34
+ description: 'Create a new email notification definition (requires WRITE_ENABLED=true)',
35
+ inputSchema: {
36
+ type: 'object',
37
+ properties: {
38
+ name: { type: 'string', description: 'Notification name' },
39
+ table: { type: 'string', description: 'Table that triggers this notification (e.g. "incident")' },
40
+ event: { type: 'string', description: 'Event name that fires this notification (e.g. "incident.commented")' },
41
+ subject: { type: 'string', description: 'Email subject line (supports ${field} variables)' },
42
+ message_html: { type: 'string', description: 'HTML body of the email notification' },
43
+ recipients: {
44
+ type: 'string',
45
+ description: 'Who receives the email (e.g. "assigned_to", "watch_list")',
46
+ },
47
+ active: { type: 'boolean', description: 'Whether to activate immediately (default true)' },
48
+ condition: { type: 'string', description: 'Additional filter condition script' },
49
+ },
50
+ required: ['name', 'table'],
51
+ },
52
+ },
53
+ {
54
+ name: 'update_notification',
55
+ description: 'Update an existing email notification (requires WRITE_ENABLED=true)',
56
+ inputSchema: {
57
+ type: 'object',
58
+ properties: {
59
+ sys_id: { type: 'string', description: 'Notification sys_id' },
60
+ fields: {
61
+ type: 'object',
62
+ description: 'Fields to update: name, subject, message_html, active, condition, etc.',
63
+ },
64
+ },
65
+ required: ['sys_id', 'fields'],
66
+ },
67
+ },
68
+ // ── Email Log ────────────────────────────────────────────────────────────
69
+ {
70
+ name: 'list_email_logs',
71
+ description: 'List outbound email log entries to track sent/failed emails',
72
+ inputSchema: {
73
+ type: 'object',
74
+ properties: {
75
+ state: { type: 'string', description: 'Filter by state: sent, failed, ready, sending, ignored' },
76
+ recipient: { type: 'string', description: 'Filter by recipient email address' },
77
+ subject: { type: 'string', description: 'Filter emails by subject (partial match)' },
78
+ limit: { type: 'number', description: 'Max records to return (default 25)' },
79
+ },
80
+ required: [],
81
+ },
82
+ },
83
+ {
84
+ name: 'get_email_log',
85
+ description: 'Get full details of an email log entry including body and headers',
86
+ inputSchema: {
87
+ type: 'object',
88
+ properties: {
89
+ sys_id: { type: 'string', description: 'Email log sys_id' },
90
+ },
91
+ required: ['sys_id'],
92
+ },
93
+ },
94
+ // ── Attachments ──────────────────────────────────────────────────────────
95
+ {
96
+ name: 'list_attachments',
97
+ description: 'List attachments associated with a specific record',
98
+ inputSchema: {
99
+ type: 'object',
100
+ properties: {
101
+ table: { type: 'string', description: 'Table name (e.g. "incident")' },
102
+ record_sys_id: { type: 'string', description: 'sys_id of the record whose attachments to list' },
103
+ limit: { type: 'number', description: 'Max records to return (default 25)' },
104
+ },
105
+ required: ['table', 'record_sys_id'],
106
+ },
107
+ },
108
+ {
109
+ name: 'get_attachment_metadata',
110
+ description: 'Get metadata (name, type, size) of a specific attachment by its sys_id',
111
+ inputSchema: {
112
+ type: 'object',
113
+ properties: {
114
+ attachment_sys_id: { type: 'string', description: 'Attachment sys_id' },
115
+ },
116
+ required: ['attachment_sys_id'],
117
+ },
118
+ },
119
+ {
120
+ name: 'delete_attachment',
121
+ description: 'Delete an attachment from a record (requires WRITE_ENABLED=true)',
122
+ inputSchema: {
123
+ type: 'object',
124
+ properties: {
125
+ attachment_sys_id: { type: 'string', description: 'sys_id of the attachment to delete' },
126
+ },
127
+ required: ['attachment_sys_id'],
128
+ },
129
+ },
130
+ {
131
+ name: 'upload_attachment',
132
+ description: 'Upload a base64-encoded attachment to a ServiceNow record (requires WRITE_ENABLED=true). ' +
133
+ 'Useful for adding files, screenshots, or documents to incidents, changes, etc.',
134
+ inputSchema: {
135
+ type: 'object',
136
+ properties: {
137
+ table: { type: 'string', description: 'Table name (e.g. "incident")' },
138
+ record_sys_id: { type: 'string', description: 'sys_id of the record to attach the file to' },
139
+ file_name: { type: 'string', description: 'File name including extension (e.g. "screenshot.png")' },
140
+ content_type: {
141
+ type: 'string',
142
+ description: 'MIME type (e.g. "image/png", "application/pdf", "text/plain", "application/json")',
143
+ },
144
+ content_base64: {
145
+ type: 'string',
146
+ description: 'Base64-encoded file content (use standard base64 encoding)',
147
+ },
148
+ },
149
+ required: ['table', 'record_sys_id', 'file_name', 'content_type', 'content_base64'],
150
+ },
151
+ },
152
+ // ── Notification Templates ────────────────────────────────────────────────
153
+ {
154
+ name: 'list_email_templates',
155
+ description: 'List email notification templates used by notifications',
156
+ inputSchema: {
157
+ type: 'object',
158
+ properties: {
159
+ query: { type: 'string', description: 'Search templates by name' },
160
+ limit: { type: 'number', description: 'Max records to return (default 25)' },
161
+ },
162
+ required: [],
163
+ },
164
+ },
165
+ // ── Subscriptions ────────────────────────────────────────────────────────
166
+ {
167
+ name: 'list_notification_subscriptions',
168
+ description: 'List user subscriptions to notifications (who has opted in/out)',
169
+ inputSchema: {
170
+ type: 'object',
171
+ properties: {
172
+ user_sys_id: { type: 'string', description: 'User sys_id to list their subscriptions' },
173
+ notification_sys_id: { type: 'string', description: 'Filter by specific notification' },
174
+ limit: { type: 'number', description: 'Max records to return (default 25)' },
175
+ },
176
+ required: [],
177
+ },
178
+ },
179
+ {
180
+ name: 'send_emergency_broadcast',
181
+ description: '[Write] Send emergency broadcast notification to users or groups',
182
+ inputSchema: {
183
+ type: 'object',
184
+ properties: {
185
+ subject: { type: 'string', description: 'Broadcast subject' },
186
+ body: { type: 'string', description: 'Message body' },
187
+ recipients: { type: 'string', description: 'Comma-separated user/group sys_ids' },
188
+ channels: { type: 'string', description: 'Delivery channels: email,sms,push' },
189
+ },
190
+ required: ['subject', 'body', 'recipients'],
191
+ },
192
+ },
193
+ {
194
+ name: 'schedule_notification',
195
+ description: '[Write] Schedule a notification for future delivery',
196
+ inputSchema: {
197
+ type: 'object',
198
+ properties: {
199
+ notification_id: { type: 'string', description: 'Notification rule sys_id' },
200
+ schedule: { type: 'string', description: 'Cron expression or ISO date' },
201
+ active: { type: 'boolean', description: 'Whether the notification is active' },
202
+ },
203
+ required: ['notification_id', 'schedule'],
204
+ },
205
+ },
206
+ ];
207
+ }
208
+ export async function executeNotificationToolCall(client, name, args) {
209
+ switch (name) {
210
+ // ── Email Notifications ──────────────────────────────────────────────────
211
+ case 'list_notifications': {
212
+ const parts = [];
213
+ if (args.active !== undefined)
214
+ parts.push(`active=${args.active}`);
215
+ if (args.table)
216
+ parts.push(`collection=${args.table}`);
217
+ if (args.event)
218
+ parts.push(`event_name=${args.event}`);
219
+ if (args.query)
220
+ parts.push(`nameCONTAINS${args.query}`);
221
+ return await client.queryRecords({
222
+ table: 'sysevent_email_action',
223
+ query: parts.join('^') || undefined,
224
+ limit: args.limit ?? 25,
225
+ fields: 'sys_id,name,collection,event_name,active,send_self,sys_updated_on',
226
+ });
227
+ }
228
+ case 'get_notification': {
229
+ if (!args.sys_id_or_name)
230
+ throw new ServiceNowError('sys_id_or_name is required', 'INVALID_REQUEST');
231
+ if (/^[0-9a-f]{32}$/i.test(args.sys_id_or_name)) {
232
+ return await client.getRecord('sysevent_email_action', args.sys_id_or_name);
233
+ }
234
+ const resp = await client.queryRecords({
235
+ table: 'sysevent_email_action',
236
+ query: `name=${args.sys_id_or_name}`,
237
+ limit: 1,
238
+ });
239
+ if (resp.count === 0)
240
+ throw new ServiceNowError(`Notification not found: ${args.sys_id_or_name}`, 'NOT_FOUND');
241
+ return resp.records[0];
242
+ }
243
+ case 'create_notification': {
244
+ requireWrite();
245
+ if (!args.name || !args.table)
246
+ throw new ServiceNowError('name and table are required', 'INVALID_REQUEST');
247
+ const data = {
248
+ name: args.name,
249
+ collection: args.table,
250
+ active: args.active !== false,
251
+ };
252
+ if (args.event)
253
+ data.event_name = args.event;
254
+ if (args.subject)
255
+ data.subject = args.subject;
256
+ if (args.message_html)
257
+ data.message_html = args.message_html;
258
+ if (args.recipients)
259
+ data.recipient_fields = args.recipients;
260
+ if (args.condition)
261
+ data.condition = args.condition;
262
+ const result = await client.createRecord('sysevent_email_action', data);
263
+ return { ...result, summary: `Created notification "${args.name}" for table "${args.table}"` };
264
+ }
265
+ case 'update_notification': {
266
+ requireWrite();
267
+ if (!args.sys_id || !args.fields)
268
+ throw new ServiceNowError('sys_id and fields are required', 'INVALID_REQUEST');
269
+ const result = await client.updateRecord('sysevent_email_action', args.sys_id, args.fields);
270
+ return { ...result, summary: `Updated notification ${args.sys_id}` };
271
+ }
272
+ // ── Email Log ────────────────────────────────────────────────────────────
273
+ case 'list_email_logs': {
274
+ const parts = [];
275
+ if (args.state)
276
+ parts.push(`state=${args.state}`);
277
+ if (args.recipient)
278
+ parts.push(`receiverCONTAINS${args.recipient}`);
279
+ if (args.subject)
280
+ parts.push(`subjectCONTAINS${args.subject}`);
281
+ return await client.queryRecords({
282
+ table: 'sys_email',
283
+ query: parts.join('^') || undefined,
284
+ limit: args.limit ?? 25,
285
+ orderBy: '-sys_created_on',
286
+ fields: 'sys_id,state,subject,receiver,sys_created_on,error_string',
287
+ });
288
+ }
289
+ case 'get_email_log': {
290
+ if (!args.sys_id)
291
+ throw new ServiceNowError('sys_id is required', 'INVALID_REQUEST');
292
+ return await client.getRecord('sys_email', args.sys_id);
293
+ }
294
+ // ── Attachments ──────────────────────────────────────────────────────────
295
+ case 'list_attachments': {
296
+ if (!args.table || !args.record_sys_id) {
297
+ throw new ServiceNowError('table and record_sys_id are required', 'INVALID_REQUEST');
298
+ }
299
+ return await client.queryRecords({
300
+ table: 'sys_attachment',
301
+ query: `table_name=${args.table}^table_sys_id=${args.record_sys_id}`,
302
+ limit: args.limit ?? 25,
303
+ fields: 'sys_id,file_name,content_type,size_bytes,table_name,table_sys_id,sys_created_on',
304
+ });
305
+ }
306
+ case 'get_attachment_metadata': {
307
+ if (!args.attachment_sys_id)
308
+ throw new ServiceNowError('attachment_sys_id is required', 'INVALID_REQUEST');
309
+ return await client.getRecord('sys_attachment', args.attachment_sys_id);
310
+ }
311
+ case 'delete_attachment': {
312
+ requireWrite();
313
+ if (!args.attachment_sys_id)
314
+ throw new ServiceNowError('attachment_sys_id is required', 'INVALID_REQUEST');
315
+ await client.deleteRecord('sys_attachment', args.attachment_sys_id);
316
+ return { success: true, summary: `Deleted attachment ${args.attachment_sys_id}` };
317
+ }
318
+ case 'upload_attachment': {
319
+ requireWrite();
320
+ if (!args.table || !args.record_sys_id || !args.file_name || !args.content_type || !args.content_base64) {
321
+ throw new ServiceNowError('table, record_sys_id, file_name, content_type, and content_base64 are required', 'INVALID_REQUEST');
322
+ }
323
+ const result = await client.uploadAttachment(args.table, args.record_sys_id, args.file_name, args.content_type, args.content_base64);
324
+ return {
325
+ ...result,
326
+ summary: `Uploaded attachment "${args.file_name}" to ${args.table}:${args.record_sys_id}`,
327
+ };
328
+ }
329
+ // ── Templates ────────────────────────────────────────────────────────────
330
+ case 'list_email_templates': {
331
+ const parts = [];
332
+ if (args.query)
333
+ parts.push(`nameCONTAINS${args.query}`);
334
+ return await client.queryRecords({
335
+ table: 'sysevent_email_template',
336
+ query: parts.join('^') || undefined,
337
+ limit: args.limit ?? 25,
338
+ fields: 'sys_id,name,message_html,subject,sys_updated_on',
339
+ });
340
+ }
341
+ // ── Subscriptions ────────────────────────────────────────────────────────
342
+ case 'list_notification_subscriptions': {
343
+ const parts = [];
344
+ if (args.user_sys_id)
345
+ parts.push(`user=${args.user_sys_id}`);
346
+ if (args.notification_sys_id)
347
+ parts.push(`notification=${args.notification_sys_id}`);
348
+ return await client.queryRecords({
349
+ table: 'sys_notif_subscription',
350
+ query: parts.join('^') || undefined,
351
+ limit: args.limit ?? 25,
352
+ fields: 'sys_id,user,notification,receive_emails,sys_updated_on',
353
+ });
354
+ }
355
+ case 'send_emergency_broadcast': {
356
+ requireWrite();
357
+ if (!args.subject || !args.body || !args.recipients)
358
+ throw new ServiceNowError('subject, body, and recipients are required', 'INVALID_REQUEST');
359
+ const result = await client.createRecord('sys_email', {
360
+ type: 'send-ready',
361
+ subject: args.subject,
362
+ body_text: args.body,
363
+ recipients: args.recipients,
364
+ importance: 'high',
365
+ });
366
+ return { ...result, summary: `Sent emergency broadcast: "${args.subject}" to ${args.recipients}` };
367
+ }
368
+ case 'schedule_notification': {
369
+ requireWrite();
370
+ if (!args.notification_id || !args.schedule)
371
+ throw new ServiceNowError('notification_id and schedule are required', 'INVALID_REQUEST');
372
+ const result = await client.updateRecord('sysevent_email_action', args.notification_id, {
373
+ schedule: args.schedule,
374
+ active: args.active !== false ? 'true' : 'false',
375
+ });
376
+ return { ...result, summary: `Scheduled notification ${args.notification_id} with schedule: ${args.schedule}` };
377
+ }
378
+ default:
379
+ return null;
380
+ }
381
+ }
382
+ //# sourceMappingURL=notification.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notification.js","sourceRoot":"","sources":["../../src/tools/notification.ts"],"names":[],"mappings":"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"}