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,425 @@
1
+ import { ServiceNowError } from '../utils/errors.js';
2
+ import { requireWrite } from '../utils/permissions.js';
3
+ export function getPortalToolDefinitions() {
4
+ return [
5
+ // ── Service Portal ──────────────────────────────────────────────────────
6
+ {
7
+ name: 'list_portals',
8
+ description: 'List all Service Portal configurations available in the instance',
9
+ inputSchema: {
10
+ type: 'object',
11
+ properties: {
12
+ query: { type: 'string', description: 'Search portals by title or url_suffix' },
13
+ limit: { type: 'number', description: 'Max records to return (default 25)' },
14
+ },
15
+ required: [],
16
+ },
17
+ },
18
+ {
19
+ name: 'create_portal',
20
+ description: 'Create a new Service Portal configuration (requires WRITE_ENABLED=true)',
21
+ inputSchema: {
22
+ type: 'object',
23
+ properties: {
24
+ title: { type: 'string', description: 'Human-readable portal title' },
25
+ url_suffix: {
26
+ type: 'string',
27
+ description: 'URL path segment for the portal (e.g. "myportal" → /myportal)',
28
+ },
29
+ default_homepage: {
30
+ type: 'string',
31
+ description: 'sys_id of the default homepage sp_page record',
32
+ },
33
+ theme: { type: 'string', description: 'sys_id of the sp_theme to apply' },
34
+ logo: { type: 'string', description: 'sys_id of the logo attachment record' },
35
+ description: { type: 'string', description: 'Short description of the portal' },
36
+ },
37
+ required: ['title', 'url_suffix'],
38
+ },
39
+ },
40
+ {
41
+ name: 'create_portal_page',
42
+ description: 'Create a new page inside a Service Portal (requires WRITE_ENABLED=true)',
43
+ inputSchema: {
44
+ type: 'object',
45
+ properties: {
46
+ title: { type: 'string', description: 'Page title' },
47
+ id: { type: 'string', description: 'Unique page ID used in the URL (e.g. "my-page")' },
48
+ portal_sys_id: { type: 'string', description: 'sys_id of the parent Service Portal' },
49
+ description: { type: 'string', description: 'Brief description of the page purpose' },
50
+ },
51
+ required: ['title', 'id', 'portal_sys_id'],
52
+ },
53
+ },
54
+ {
55
+ name: 'get_portal',
56
+ description: 'Get full configuration details of a Service Portal by sys_id or URL suffix',
57
+ inputSchema: {
58
+ type: 'object',
59
+ properties: {
60
+ id: { type: 'string', description: 'Portal sys_id or url_suffix (e.g. "sp", "itsm")' },
61
+ },
62
+ required: ['id'],
63
+ },
64
+ },
65
+ {
66
+ name: 'list_portal_pages',
67
+ description: 'List pages that belong to a Service Portal',
68
+ inputSchema: {
69
+ type: 'object',
70
+ properties: {
71
+ portal_sys_id: { type: 'string', description: 'sys_id of the parent portal' },
72
+ query: { type: 'string', description: 'Filter pages by title or id' },
73
+ limit: { type: 'number', description: 'Max records to return (default 50)' },
74
+ },
75
+ required: ['portal_sys_id'],
76
+ },
77
+ },
78
+ {
79
+ name: 'get_portal_page',
80
+ description: 'Get details of a specific Service Portal page including its layout',
81
+ inputSchema: {
82
+ type: 'object',
83
+ properties: {
84
+ sys_id: { type: 'string', description: 'Page sys_id' },
85
+ },
86
+ required: ['sys_id'],
87
+ },
88
+ },
89
+ // ── Widgets ──────────────────────────────────────────────────────────────
90
+ {
91
+ name: 'list_portal_widgets',
92
+ description: 'List Service Portal widgets with optional search by name or category',
93
+ inputSchema: {
94
+ type: 'object',
95
+ properties: {
96
+ query: { type: 'string', description: 'Search widgets by name or description' },
97
+ limit: { type: 'number', description: 'Max records to return (default 50)' },
98
+ },
99
+ required: [],
100
+ },
101
+ },
102
+ {
103
+ name: 'get_portal_widget',
104
+ description: 'Get full source code (HTML, CSS, client/server scripts) of a Service Portal widget',
105
+ inputSchema: {
106
+ type: 'object',
107
+ properties: {
108
+ id_or_sysid: { type: 'string', description: 'Widget sys_id or id field (e.g. "widget-cool-clock")' },
109
+ },
110
+ required: ['id_or_sysid'],
111
+ },
112
+ },
113
+ {
114
+ name: 'create_portal_widget',
115
+ description: 'Create a new Service Portal widget with template, CSS, and scripts (requires WRITE_ENABLED=true)',
116
+ inputSchema: {
117
+ type: 'object',
118
+ properties: {
119
+ name: { type: 'string', description: 'Human-readable widget name' },
120
+ id: { type: 'string', description: 'Unique widget ID/handle (e.g. "my-custom-widget")' },
121
+ template: { type: 'string', description: 'Angular HTML template' },
122
+ css: { type: 'string', description: 'SCSS/CSS styles' },
123
+ client_script: { type: 'string', description: 'Client-side controller JavaScript' },
124
+ server_script: { type: 'string', description: 'Server-side script (GlideRecord calls)' },
125
+ option_schema: { type: 'string', description: 'JSON array defining widget options' },
126
+ demo_data: { type: 'string', description: 'JSON object with demo data for preview' },
127
+ },
128
+ required: ['name', 'id'],
129
+ },
130
+ },
131
+ {
132
+ name: 'update_portal_widget',
133
+ description: 'Update an existing Service Portal widget\'s source code (requires WRITE_ENABLED=true)',
134
+ inputSchema: {
135
+ type: 'object',
136
+ properties: {
137
+ sys_id: { type: 'string', description: 'Widget sys_id' },
138
+ fields: {
139
+ type: 'object',
140
+ description: 'Fields to update: template, css, client_script, server_script, name, etc.',
141
+ },
142
+ },
143
+ required: ['sys_id', 'fields'],
144
+ },
145
+ },
146
+ {
147
+ name: 'list_widget_instances',
148
+ description: 'List instances of a specific widget placed on portal pages',
149
+ inputSchema: {
150
+ type: 'object',
151
+ properties: {
152
+ widget_sys_id: { type: 'string', description: 'Widget sys_id to find instances of' },
153
+ limit: { type: 'number', description: 'Max records to return (default 25)' },
154
+ },
155
+ required: ['widget_sys_id'],
156
+ },
157
+ },
158
+ // ── UI Builder (Next Experience) ────────────────────────────────────────
159
+ {
160
+ name: 'list_ux_apps',
161
+ description: 'List Next Experience (UI Builder) applications',
162
+ inputSchema: {
163
+ type: 'object',
164
+ properties: {
165
+ query: { type: 'string', description: 'Search apps by name' },
166
+ limit: { type: 'number', description: 'Max records to return (default 25)' },
167
+ },
168
+ required: [],
169
+ },
170
+ },
171
+ {
172
+ name: 'get_ux_app',
173
+ description: 'Get configuration details of a Next Experience application',
174
+ inputSchema: {
175
+ type: 'object',
176
+ properties: {
177
+ sys_id_or_name: { type: 'string', description: 'App sys_id or name' },
178
+ },
179
+ required: ['sys_id_or_name'],
180
+ },
181
+ },
182
+ {
183
+ name: 'list_ux_pages',
184
+ description: 'List pages within a Next Experience (UI Builder) application',
185
+ inputSchema: {
186
+ type: 'object',
187
+ properties: {
188
+ app_sys_id: { type: 'string', description: 'Parent UX app sys_id' },
189
+ query: { type: 'string', description: 'Filter pages by name' },
190
+ limit: { type: 'number', description: 'Max records to return (default 50)' },
191
+ },
192
+ required: ['app_sys_id'],
193
+ },
194
+ },
195
+ // ── Themes & Branding ───────────────────────────────────────────────────
196
+ {
197
+ name: 'list_portal_themes',
198
+ description: 'List Service Portal themes (color palettes, CSS variables)',
199
+ inputSchema: {
200
+ type: 'object',
201
+ properties: {
202
+ limit: { type: 'number', description: 'Max records to return (default 25)' },
203
+ },
204
+ required: [],
205
+ },
206
+ },
207
+ {
208
+ name: 'get_portal_theme',
209
+ description: 'Get full details of a Service Portal theme including CSS variables',
210
+ inputSchema: {
211
+ type: 'object',
212
+ properties: {
213
+ sys_id: { type: 'string', description: 'Theme sys_id' },
214
+ },
215
+ required: ['sys_id'],
216
+ },
217
+ },
218
+ ];
219
+ }
220
+ export async function executePortalToolCall(client, name, args) {
221
+ switch (name) {
222
+ // ── Service Portal ──────────────────────────────────────────────────────
223
+ case 'create_portal': {
224
+ requireWrite();
225
+ if (!args.title || !args.url_suffix)
226
+ throw new ServiceNowError('title and url_suffix are required', 'INVALID_REQUEST');
227
+ const data = {
228
+ title: args.title,
229
+ url_suffix: args.url_suffix,
230
+ };
231
+ if (args.default_homepage)
232
+ data.default_homepage = args.default_homepage;
233
+ if (args.theme)
234
+ data.theme = args.theme;
235
+ if (args.logo)
236
+ data.logo = args.logo;
237
+ if (args.description)
238
+ data.description = args.description;
239
+ const result = await client.createRecord('sp_portal', data);
240
+ return { ...result, summary: `Created portal "${args.title}" at /${args.url_suffix}` };
241
+ }
242
+ case 'create_portal_page': {
243
+ requireWrite();
244
+ if (!args.title || !args.id || !args.portal_sys_id)
245
+ throw new ServiceNowError('title, id, and portal_sys_id are required', 'INVALID_REQUEST');
246
+ const data = {
247
+ title: args.title,
248
+ id: args.id,
249
+ sp_portal: args.portal_sys_id,
250
+ };
251
+ if (args.description)
252
+ data.description = args.description;
253
+ const result = await client.createRecord('sp_page', data);
254
+ return { ...result, summary: `Created portal page "${args.title}" (id: ${args.id})` };
255
+ }
256
+ case 'list_portals': {
257
+ const parts = [];
258
+ if (args.query)
259
+ parts.push(`titleCONTAINS${args.query}^ORurl_suffixCONTAINS${args.query}`);
260
+ return await client.queryRecords({
261
+ table: 'sp_portal',
262
+ query: parts.join('^') || undefined,
263
+ limit: args.limit ?? 25,
264
+ fields: 'sys_id,title,url_suffix,default_homepage,theme,sys_updated_on',
265
+ });
266
+ }
267
+ case 'get_portal': {
268
+ if (!args.id)
269
+ throw new ServiceNowError('id is required', 'INVALID_REQUEST');
270
+ if (/^[0-9a-f]{32}$/i.test(args.id)) {
271
+ return await client.getRecord('sp_portal', args.id);
272
+ }
273
+ const resp = await client.queryRecords({
274
+ table: 'sp_portal',
275
+ query: `url_suffix=${args.id}^ORtitle=${args.id}`,
276
+ limit: 1,
277
+ });
278
+ if (resp.count === 0)
279
+ throw new ServiceNowError(`Portal not found: ${args.id}`, 'NOT_FOUND');
280
+ return resp.records[0];
281
+ }
282
+ case 'list_portal_pages': {
283
+ if (!args.portal_sys_id)
284
+ throw new ServiceNowError('portal_sys_id is required', 'INVALID_REQUEST');
285
+ const parts = [`sp_portal=${args.portal_sys_id}`];
286
+ if (args.query)
287
+ parts.push(`titleCONTAINS${args.query}^ORidCONTAINS${args.query}`);
288
+ return await client.queryRecords({
289
+ table: 'sp_page',
290
+ query: parts.join('^'),
291
+ limit: args.limit ?? 50,
292
+ fields: 'sys_id,title,id,sp_portal,sys_updated_on',
293
+ });
294
+ }
295
+ case 'get_portal_page': {
296
+ if (!args.sys_id)
297
+ throw new ServiceNowError('sys_id is required', 'INVALID_REQUEST');
298
+ return await client.getRecord('sp_page', args.sys_id);
299
+ }
300
+ // ── Widgets ──────────────────────────────────────────────────────────────
301
+ case 'list_portal_widgets': {
302
+ const parts = [];
303
+ if (args.query)
304
+ parts.push(`nameCONTAINS${args.query}^ORdescriptionCONTAINS${args.query}`);
305
+ return await client.queryRecords({
306
+ table: 'sp_widget',
307
+ query: parts.join('^') || undefined,
308
+ limit: args.limit ?? 50,
309
+ fields: 'sys_id,name,id,description,category,sys_updated_on',
310
+ });
311
+ }
312
+ case 'get_portal_widget': {
313
+ if (!args.id_or_sysid)
314
+ throw new ServiceNowError('id_or_sysid is required', 'INVALID_REQUEST');
315
+ if (/^[0-9a-f]{32}$/i.test(args.id_or_sysid)) {
316
+ return await client.getRecord('sp_widget', args.id_or_sysid);
317
+ }
318
+ const resp = await client.queryRecords({
319
+ table: 'sp_widget',
320
+ query: `id=${args.id_or_sysid}^ORname=${args.id_or_sysid}`,
321
+ limit: 1,
322
+ });
323
+ if (resp.count === 0)
324
+ throw new ServiceNowError(`Widget not found: ${args.id_or_sysid}`, 'NOT_FOUND');
325
+ return resp.records[0];
326
+ }
327
+ case 'create_portal_widget': {
328
+ requireWrite();
329
+ if (!args.name || !args.id)
330
+ throw new ServiceNowError('name and id are required', 'INVALID_REQUEST');
331
+ const data = {
332
+ name: args.name,
333
+ id: args.id,
334
+ template: args.template || '',
335
+ css: args.css || '',
336
+ client_script: args.client_script || '',
337
+ script: args.server_script || '',
338
+ };
339
+ if (args.option_schema)
340
+ data.option_schema = args.option_schema;
341
+ if (args.demo_data)
342
+ data.demo_data = args.demo_data;
343
+ const result = await client.createRecord('sp_widget', data);
344
+ return { ...result, summary: `Created widget "${args.name}" with id "${args.id}"` };
345
+ }
346
+ case 'update_portal_widget': {
347
+ requireWrite();
348
+ if (!args.sys_id || !args.fields)
349
+ throw new ServiceNowError('sys_id and fields are required', 'INVALID_REQUEST');
350
+ // Map friendly field name
351
+ if (args.fields.server_script !== undefined) {
352
+ args.fields.script = args.fields.server_script;
353
+ delete args.fields.server_script;
354
+ }
355
+ const result = await client.updateRecord('sp_widget', args.sys_id, args.fields);
356
+ return { ...result, summary: `Updated widget ${args.sys_id}` };
357
+ }
358
+ case 'list_widget_instances': {
359
+ if (!args.widget_sys_id)
360
+ throw new ServiceNowError('widget_sys_id is required', 'INVALID_REQUEST');
361
+ return await client.queryRecords({
362
+ table: 'sp_instance',
363
+ query: `sp_widget=${args.widget_sys_id}`,
364
+ limit: args.limit ?? 25,
365
+ fields: 'sys_id,sp_widget,sp_container,sp_page,sys_updated_on',
366
+ });
367
+ }
368
+ // ── UI Builder ──────────────────────────────────────────────────────────
369
+ case 'list_ux_apps': {
370
+ const parts = [];
371
+ if (args.query)
372
+ parts.push(`nameCONTAINS${args.query}`);
373
+ return await client.queryRecords({
374
+ table: 'sys_ux_app_config',
375
+ query: parts.join('^') || undefined,
376
+ limit: args.limit ?? 25,
377
+ fields: 'sys_id,name,sys_scope,sys_updated_on',
378
+ });
379
+ }
380
+ case 'get_ux_app': {
381
+ if (!args.sys_id_or_name)
382
+ throw new ServiceNowError('sys_id_or_name is required', 'INVALID_REQUEST');
383
+ if (/^[0-9a-f]{32}$/i.test(args.sys_id_or_name)) {
384
+ return await client.getRecord('sys_ux_app_config', args.sys_id_or_name);
385
+ }
386
+ const resp = await client.queryRecords({
387
+ table: 'sys_ux_app_config',
388
+ query: `name=${args.sys_id_or_name}`,
389
+ limit: 1,
390
+ });
391
+ if (resp.count === 0)
392
+ throw new ServiceNowError(`UX App not found: ${args.sys_id_or_name}`, 'NOT_FOUND');
393
+ return resp.records[0];
394
+ }
395
+ case 'list_ux_pages': {
396
+ if (!args.app_sys_id)
397
+ throw new ServiceNowError('app_sys_id is required', 'INVALID_REQUEST');
398
+ const parts = [`ux_app_config=${args.app_sys_id}`];
399
+ if (args.query)
400
+ parts.push(`nameCONTAINS${args.query}`);
401
+ return await client.queryRecords({
402
+ table: 'sys_ux_page',
403
+ query: parts.join('^'),
404
+ limit: args.limit ?? 50,
405
+ fields: 'sys_id,name,ux_app_config,sys_updated_on',
406
+ });
407
+ }
408
+ // ── Themes ──────────────────────────────────────────────────────────────
409
+ case 'list_portal_themes': {
410
+ return await client.queryRecords({
411
+ table: 'sp_theme',
412
+ limit: args.limit ?? 25,
413
+ fields: 'sys_id,name,css_variables,sys_updated_on',
414
+ });
415
+ }
416
+ case 'get_portal_theme': {
417
+ if (!args.sys_id)
418
+ throw new ServiceNowError('sys_id is required', 'INVALID_REQUEST');
419
+ return await client.getRecord('sp_theme', args.sys_id);
420
+ }
421
+ default:
422
+ return null;
423
+ }
424
+ }
425
+ //# sourceMappingURL=portal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portal.js","sourceRoot":"","sources":["../../src/tools/portal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Problem Management tools.
3
+ * Read tools: Tier 0. Write tools: Tier 1 (WRITE_ENABLED=true).
4
+ */
5
+ import type { ServiceNowClient } from '../servicenow/client.js';
6
+ export declare function getProblemToolDefinitions(): ({
7
+ name: string;
8
+ description: string;
9
+ inputSchema: {
10
+ type: string;
11
+ properties: {
12
+ short_description: {
13
+ type: string;
14
+ description: string;
15
+ };
16
+ description: {
17
+ type: string;
18
+ description: string;
19
+ };
20
+ assignment_group: {
21
+ type: string;
22
+ description: string;
23
+ };
24
+ priority: {
25
+ type: string;
26
+ description: string;
27
+ };
28
+ number_or_sysid?: undefined;
29
+ sys_id?: undefined;
30
+ fields?: undefined;
31
+ root_cause?: undefined;
32
+ resolution_notes?: undefined;
33
+ };
34
+ required: string[];
35
+ };
36
+ } | {
37
+ name: string;
38
+ description: string;
39
+ inputSchema: {
40
+ type: string;
41
+ properties: {
42
+ number_or_sysid: {
43
+ type: string;
44
+ description: string;
45
+ };
46
+ short_description?: undefined;
47
+ description?: undefined;
48
+ assignment_group?: undefined;
49
+ priority?: undefined;
50
+ sys_id?: undefined;
51
+ fields?: undefined;
52
+ root_cause?: undefined;
53
+ resolution_notes?: undefined;
54
+ };
55
+ required: string[];
56
+ };
57
+ } | {
58
+ name: string;
59
+ description: string;
60
+ inputSchema: {
61
+ type: string;
62
+ properties: {
63
+ sys_id: {
64
+ type: string;
65
+ description: string;
66
+ };
67
+ fields: {
68
+ type: string;
69
+ description: string;
70
+ };
71
+ short_description?: undefined;
72
+ description?: undefined;
73
+ assignment_group?: undefined;
74
+ priority?: undefined;
75
+ number_or_sysid?: undefined;
76
+ root_cause?: undefined;
77
+ resolution_notes?: undefined;
78
+ };
79
+ required: string[];
80
+ };
81
+ } | {
82
+ name: string;
83
+ description: string;
84
+ inputSchema: {
85
+ type: string;
86
+ properties: {
87
+ sys_id: {
88
+ type: string;
89
+ description: string;
90
+ };
91
+ root_cause: {
92
+ type: string;
93
+ description: string;
94
+ };
95
+ resolution_notes: {
96
+ type: string;
97
+ description: string;
98
+ };
99
+ short_description?: undefined;
100
+ description?: undefined;
101
+ assignment_group?: undefined;
102
+ priority?: undefined;
103
+ number_or_sysid?: undefined;
104
+ fields?: undefined;
105
+ };
106
+ required: string[];
107
+ };
108
+ })[];
109
+ export declare function executeProblemToolCall(client: ServiceNowClient, name: string, args: Record<string, any>): Promise<any>;
110
+ //# sourceMappingURL=problem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"problem.d.ts","sourceRoot":"","sources":["../../src/tools/problem.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAIhE,wBAAgB,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAqDxC;AAED,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACxB,OAAO,CAAC,GAAG,CAAC,CAsCd"}
@@ -0,0 +1,100 @@
1
+ import { ServiceNowError } from '../utils/errors.js';
2
+ import { requireWrite } from '../utils/permissions.js';
3
+ export function getProblemToolDefinitions() {
4
+ return [
5
+ {
6
+ name: 'create_problem',
7
+ description: 'Create a new problem record (requires WRITE_ENABLED=true)',
8
+ inputSchema: {
9
+ type: 'object',
10
+ properties: {
11
+ short_description: { type: 'string', description: 'Brief description of the problem' },
12
+ description: { type: 'string', description: 'Detailed description' },
13
+ assignment_group: { type: 'string', description: 'Assignment group name or sys_id' },
14
+ priority: { type: 'number', description: '1=Critical, 2=High, 3=Moderate, 4=Low' },
15
+ },
16
+ required: ['short_description'],
17
+ },
18
+ },
19
+ {
20
+ name: 'get_problem',
21
+ description: 'Get full details of a problem by number (PRB...) or sys_id',
22
+ inputSchema: {
23
+ type: 'object',
24
+ properties: {
25
+ number_or_sysid: { type: 'string', description: 'Problem number (PRB...) or sys_id' },
26
+ },
27
+ required: ['number_or_sysid'],
28
+ },
29
+ },
30
+ {
31
+ name: 'update_problem',
32
+ description: 'Update fields on an existing problem (requires WRITE_ENABLED=true)',
33
+ inputSchema: {
34
+ type: 'object',
35
+ properties: {
36
+ sys_id: { type: 'string', description: 'System ID of the problem' },
37
+ fields: { type: 'object', description: 'Key-value pairs to update' },
38
+ },
39
+ required: ['sys_id', 'fields'],
40
+ },
41
+ },
42
+ {
43
+ name: 'resolve_problem',
44
+ description: 'Resolve a problem with root cause and resolution notes (requires WRITE_ENABLED=true)',
45
+ inputSchema: {
46
+ type: 'object',
47
+ properties: {
48
+ sys_id: { type: 'string', description: 'System ID of the problem' },
49
+ root_cause: { type: 'string', description: 'Root cause of the problem' },
50
+ resolution_notes: { type: 'string', description: 'How the problem was resolved' },
51
+ },
52
+ required: ['sys_id', 'root_cause', 'resolution_notes'],
53
+ },
54
+ },
55
+ ];
56
+ }
57
+ export async function executeProblemToolCall(client, name, args) {
58
+ switch (name) {
59
+ case 'create_problem': {
60
+ requireWrite();
61
+ if (!args.short_description)
62
+ throw new ServiceNowError('short_description is required', 'INVALID_REQUEST');
63
+ const result = await client.createRecord('problem', args);
64
+ return { ...result, summary: `Created problem ${result.number || result.sys_id}` };
65
+ }
66
+ case 'get_problem': {
67
+ if (!args.number_or_sysid)
68
+ throw new ServiceNowError('number_or_sysid is required', 'INVALID_REQUEST');
69
+ if (/^[0-9a-f]{32}$/i.test(args.number_or_sysid)) {
70
+ return await client.getRecord('problem', args.number_or_sysid);
71
+ }
72
+ const resp = await client.queryRecords({ table: 'problem', query: `number=${args.number_or_sysid}^ORsys_id=${args.number_or_sysid}`, limit: 1 });
73
+ if (resp.count === 0)
74
+ throw new ServiceNowError(`Problem not found: ${args.number_or_sysid}`, 'NOT_FOUND');
75
+ return resp.records[0];
76
+ }
77
+ case 'update_problem': {
78
+ requireWrite();
79
+ if (!args.sys_id || !args.fields)
80
+ throw new ServiceNowError('sys_id and fields are required', 'INVALID_REQUEST');
81
+ const result = await client.updateRecord('problem', args.sys_id, args.fields);
82
+ return { ...result, summary: `Updated problem ${args.sys_id}` };
83
+ }
84
+ case 'resolve_problem': {
85
+ requireWrite();
86
+ if (!args.sys_id || !args.root_cause || !args.resolution_notes)
87
+ throw new ServiceNowError('sys_id, root_cause, and resolution_notes are required', 'INVALID_REQUEST');
88
+ const result = await client.updateRecord('problem', args.sys_id, {
89
+ state: '107',
90
+ cause_notes: args.root_cause,
91
+ fix_notes: args.resolution_notes,
92
+ resolved_at: new Date().toISOString(),
93
+ });
94
+ return { ...result, summary: `Resolved problem ${args.sys_id}` };
95
+ }
96
+ default:
97
+ return null;
98
+ }
99
+ }
100
+ //# sourceMappingURL=problem.js.map