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,139 @@
1
+ import { ServiceNowError } from '../utils/errors.js';
2
+ import { requireWrite } from '../utils/permissions.js';
3
+ export function getAppStudioToolDefinitions() {
4
+ return [
5
+ // ── Scoped Applications ─────────────────────────────────────────────────
6
+ {
7
+ name: 'list_scoped_apps',
8
+ description: 'List scoped applications (custom apps) installed in the instance',
9
+ inputSchema: {
10
+ type: 'object',
11
+ properties: {
12
+ query: { type: 'string', description: 'Search apps by name or scope prefix' },
13
+ active: { type: 'boolean', description: 'Filter to active apps only' },
14
+ limit: { type: 'number', description: 'Max records to return (default 25)' },
15
+ },
16
+ required: [],
17
+ },
18
+ },
19
+ {
20
+ name: 'get_scoped_app',
21
+ description: 'Get full details of a scoped application by sys_id or scope name',
22
+ inputSchema: {
23
+ type: 'object',
24
+ properties: {
25
+ id: { type: 'string', description: 'App sys_id or scope name (e.g. "x_myco_myapp")' },
26
+ },
27
+ required: ['id'],
28
+ },
29
+ },
30
+ {
31
+ name: 'create_scoped_app',
32
+ description: 'Create a new scoped application in App Studio (requires WRITE_ENABLED=true). ' +
33
+ 'The scope prefix must be unique and follow the pattern x_<vendor>_<appname>.',
34
+ inputSchema: {
35
+ type: 'object',
36
+ properties: {
37
+ name: { type: 'string', description: 'Human-readable application name' },
38
+ scope: {
39
+ type: 'string',
40
+ description: 'Unique scope prefix, e.g. "x_myco_myapp". Must start with "x_".',
41
+ },
42
+ version: {
43
+ type: 'string',
44
+ description: 'Application version string (e.g. "1.0.0"). Defaults to "1.0.0".',
45
+ },
46
+ short_description: { type: 'string', description: 'Short description shown in the app list' },
47
+ description: { type: 'string', description: 'Full description of the application' },
48
+ vendor: { type: 'string', description: 'Vendor or author name' },
49
+ active: { type: 'boolean', description: 'Activate the app immediately (default: true)' },
50
+ logo: { type: 'string', description: 'App logo attachment sys_id (optional)' },
51
+ },
52
+ required: ['name', 'scope'],
53
+ },
54
+ },
55
+ {
56
+ name: 'update_scoped_app',
57
+ description: 'Update an existing scoped application (requires WRITE_ENABLED=true)',
58
+ inputSchema: {
59
+ type: 'object',
60
+ properties: {
61
+ sys_id: { type: 'string', description: 'App sys_id' },
62
+ fields: {
63
+ type: 'object',
64
+ description: 'Fields to update (name, version, short_description, description, active, vendor, etc.)',
65
+ },
66
+ },
67
+ required: ['sys_id', 'fields'],
68
+ },
69
+ },
70
+ ];
71
+ }
72
+ export async function executeAppStudioToolCall(client, name, args) {
73
+ switch (name) {
74
+ case 'list_scoped_apps': {
75
+ const parts = [];
76
+ if (args.active !== undefined)
77
+ parts.push(`active=${args.active}`);
78
+ if (args.query)
79
+ parts.push(`nameCONTAINS${args.query}^ORscopeCONTAINS${args.query}`);
80
+ return await client.queryRecords({
81
+ table: 'sys_app',
82
+ query: parts.join('^') || undefined,
83
+ limit: args.limit ?? 25,
84
+ fields: 'sys_id,name,scope,version,short_description,active,vendor,sys_updated_on',
85
+ });
86
+ }
87
+ case 'get_scoped_app': {
88
+ if (!args.id)
89
+ throw new ServiceNowError('id is required', 'INVALID_REQUEST');
90
+ if (/^[0-9a-f]{32}$/i.test(args.id)) {
91
+ return await client.getRecord('sys_app', args.id);
92
+ }
93
+ const resp = await client.queryRecords({
94
+ table: 'sys_app',
95
+ query: `scope=${args.id}^ORname=${args.id}`,
96
+ limit: 1,
97
+ });
98
+ if (resp.count === 0)
99
+ throw new ServiceNowError(`Scoped app not found: ${args.id}`, 'NOT_FOUND');
100
+ return resp.records[0];
101
+ }
102
+ case 'create_scoped_app': {
103
+ requireWrite();
104
+ if (!args.name || !args.scope)
105
+ throw new ServiceNowError('name and scope are required', 'INVALID_REQUEST');
106
+ if (!args.scope.startsWith('x_'))
107
+ throw new ServiceNowError('scope must start with "x_" (e.g. x_myco_myapp)', 'INVALID_REQUEST');
108
+ const data = {
109
+ name: args.name,
110
+ scope: args.scope,
111
+ version: args.version ?? '1.0.0',
112
+ active: args.active !== false,
113
+ };
114
+ if (args.short_description)
115
+ data.short_description = args.short_description;
116
+ if (args.description)
117
+ data.description = args.description;
118
+ if (args.vendor)
119
+ data.vendor = args.vendor;
120
+ if (args.logo)
121
+ data.logo = args.logo;
122
+ const result = await client.createRecord('sys_app', data);
123
+ return {
124
+ ...result,
125
+ summary: `Created scoped app "${args.name}" with scope "${args.scope}"`,
126
+ };
127
+ }
128
+ case 'update_scoped_app': {
129
+ requireWrite();
130
+ if (!args.sys_id || !args.fields)
131
+ throw new ServiceNowError('sys_id and fields are required', 'INVALID_REQUEST');
132
+ const result = await client.updateRecord('sys_app', args.sys_id, args.fields);
133
+ return { ...result, summary: `Updated scoped app ${args.sys_id}` };
134
+ }
135
+ default:
136
+ return null;
137
+ }
138
+ }
139
+ //# sourceMappingURL=app-studio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-studio.js","sourceRoot":"","sources":["../../src/tools/app-studio.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,144 @@
1
+ /**
2
+ * ATF (Automated Test Framework) tools — latest release.
3
+ * Read tools: Tier 0. Execution tools require ATF_ENABLED=true.
4
+ * Latest release added: Failure Insight (get_atf_failure_insight) showing metadata diffs.
5
+ */
6
+ import type { ServiceNowClient } from '../servicenow/client.js';
7
+ export declare function getAtfToolDefinitions(): ({
8
+ name: string;
9
+ description: string;
10
+ inputSchema: {
11
+ type: string;
12
+ properties: {
13
+ active: {
14
+ type: string;
15
+ description: string;
16
+ };
17
+ query: {
18
+ type: string;
19
+ description: string;
20
+ };
21
+ limit: {
22
+ type: string;
23
+ description: string;
24
+ };
25
+ sys_id_or_name?: undefined;
26
+ sys_id?: undefined;
27
+ suite_sys_id?: undefined;
28
+ result_sys_id?: undefined;
29
+ suite_result_sys_id?: undefined;
30
+ };
31
+ required: never[];
32
+ };
33
+ } | {
34
+ name: string;
35
+ description: string;
36
+ inputSchema: {
37
+ type: string;
38
+ properties: {
39
+ sys_id_or_name: {
40
+ type: string;
41
+ description: string;
42
+ };
43
+ active?: undefined;
44
+ query?: undefined;
45
+ limit?: undefined;
46
+ sys_id?: undefined;
47
+ suite_sys_id?: undefined;
48
+ result_sys_id?: undefined;
49
+ suite_result_sys_id?: undefined;
50
+ };
51
+ required: string[];
52
+ };
53
+ } | {
54
+ name: string;
55
+ description: string;
56
+ inputSchema: {
57
+ type: string;
58
+ properties: {
59
+ sys_id: {
60
+ type: string;
61
+ description: string;
62
+ };
63
+ active?: undefined;
64
+ query?: undefined;
65
+ limit?: undefined;
66
+ sys_id_or_name?: undefined;
67
+ suite_sys_id?: undefined;
68
+ result_sys_id?: undefined;
69
+ suite_result_sys_id?: undefined;
70
+ };
71
+ required: string[];
72
+ };
73
+ } | {
74
+ name: string;
75
+ description: string;
76
+ inputSchema: {
77
+ type: string;
78
+ properties: {
79
+ suite_sys_id: {
80
+ type: string;
81
+ description: string;
82
+ };
83
+ active: {
84
+ type: string;
85
+ description: string;
86
+ };
87
+ limit: {
88
+ type: string;
89
+ description: string;
90
+ };
91
+ query?: undefined;
92
+ sys_id_or_name?: undefined;
93
+ sys_id?: undefined;
94
+ result_sys_id?: undefined;
95
+ suite_result_sys_id?: undefined;
96
+ };
97
+ required: never[];
98
+ };
99
+ } | {
100
+ name: string;
101
+ description: string;
102
+ inputSchema: {
103
+ type: string;
104
+ properties: {
105
+ result_sys_id: {
106
+ type: string;
107
+ description: string;
108
+ };
109
+ active?: undefined;
110
+ query?: undefined;
111
+ limit?: undefined;
112
+ sys_id_or_name?: undefined;
113
+ sys_id?: undefined;
114
+ suite_sys_id?: undefined;
115
+ suite_result_sys_id?: undefined;
116
+ };
117
+ required: string[];
118
+ };
119
+ } | {
120
+ name: string;
121
+ description: string;
122
+ inputSchema: {
123
+ type: string;
124
+ properties: {
125
+ suite_result_sys_id: {
126
+ type: string;
127
+ description: string;
128
+ };
129
+ limit: {
130
+ type: string;
131
+ description: string;
132
+ };
133
+ active?: undefined;
134
+ query?: undefined;
135
+ sys_id_or_name?: undefined;
136
+ sys_id?: undefined;
137
+ suite_sys_id?: undefined;
138
+ result_sys_id?: undefined;
139
+ };
140
+ required: never[];
141
+ };
142
+ })[];
143
+ export declare function executeAtfToolCall(client: ServiceNowClient, name: string, args: Record<string, any>): Promise<any>;
144
+ //# sourceMappingURL=atf.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"atf.d.ts","sourceRoot":"","sources":["../../src/tools/atf.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAIhE,wBAAgB,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA2GpC;AAED,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACxB,OAAO,CAAC,GAAG,CAAC,CAgEd"}
@@ -0,0 +1,186 @@
1
+ import { ServiceNowError } from '../utils/errors.js';
2
+ import { requireAtf } from '../utils/permissions.js';
3
+ export function getAtfToolDefinitions() {
4
+ return [
5
+ {
6
+ name: 'list_atf_suites',
7
+ description: 'List ATF test suites in the instance',
8
+ inputSchema: {
9
+ type: 'object',
10
+ properties: {
11
+ active: { type: 'boolean', description: 'Filter to active suites only' },
12
+ query: { type: 'string', description: 'Additional filter' },
13
+ limit: { type: 'number', description: 'Max results (default: 20)' },
14
+ },
15
+ required: [],
16
+ },
17
+ },
18
+ {
19
+ name: 'get_atf_suite',
20
+ description: 'Get details of a test suite including test count',
21
+ inputSchema: {
22
+ type: 'object',
23
+ properties: {
24
+ sys_id_or_name: { type: 'string', description: 'Test suite sys_id or name' },
25
+ },
26
+ required: ['sys_id_or_name'],
27
+ },
28
+ },
29
+ {
30
+ name: 'run_atf_suite',
31
+ description: 'Execute an ATF test suite (requires ATF_ENABLED=true)',
32
+ inputSchema: {
33
+ type: 'object',
34
+ properties: {
35
+ sys_id: { type: 'string', description: 'System ID of the test suite' },
36
+ },
37
+ required: ['sys_id'],
38
+ },
39
+ },
40
+ {
41
+ name: 'list_atf_tests',
42
+ description: 'List ATF test cases, optionally filtered by suite',
43
+ inputSchema: {
44
+ type: 'object',
45
+ properties: {
46
+ suite_sys_id: { type: 'string', description: 'Filter by test suite sys_id' },
47
+ active: { type: 'boolean', description: 'Filter to active tests only' },
48
+ limit: { type: 'number', description: 'Max results (default: 20)' },
49
+ },
50
+ required: [],
51
+ },
52
+ },
53
+ {
54
+ name: 'get_atf_test',
55
+ description: 'Get details of a specific test case',
56
+ inputSchema: {
57
+ type: 'object',
58
+ properties: {
59
+ sys_id: { type: 'string', description: 'System ID of the test' },
60
+ },
61
+ required: ['sys_id'],
62
+ },
63
+ },
64
+ {
65
+ name: 'run_atf_test',
66
+ description: 'Execute a single ATF test (requires ATF_ENABLED=true)',
67
+ inputSchema: {
68
+ type: 'object',
69
+ properties: {
70
+ sys_id: { type: 'string', description: 'System ID of the test' },
71
+ },
72
+ required: ['sys_id'],
73
+ },
74
+ },
75
+ {
76
+ name: 'get_atf_suite_result',
77
+ description: 'Get the results of a test suite run',
78
+ inputSchema: {
79
+ type: 'object',
80
+ properties: {
81
+ result_sys_id: { type: 'string', description: 'System ID of the suite result record' },
82
+ },
83
+ required: ['result_sys_id'],
84
+ },
85
+ },
86
+ {
87
+ name: 'list_atf_test_results',
88
+ description: 'List individual test results within a suite run',
89
+ inputSchema: {
90
+ type: 'object',
91
+ properties: {
92
+ suite_result_sys_id: { type: 'string', description: 'Filter by suite result sys_id' },
93
+ limit: { type: 'number', description: 'Max results (default: 50)' },
94
+ },
95
+ required: [],
96
+ },
97
+ },
98
+ {
99
+ name: 'get_atf_failure_insight',
100
+ description: 'Get ATF Failure Insight data — metadata changes between last successful and failed run (role changes, field value changes)',
101
+ inputSchema: {
102
+ type: 'object',
103
+ properties: {
104
+ result_sys_id: { type: 'string', description: 'System ID of the failed suite result' },
105
+ },
106
+ required: ['result_sys_id'],
107
+ },
108
+ },
109
+ ];
110
+ }
111
+ export async function executeAtfToolCall(client, name, args) {
112
+ switch (name) {
113
+ case 'list_atf_suites': {
114
+ let query = args.active !== false ? 'active=true' : '';
115
+ if (args.query)
116
+ query = query ? `${query}^${args.query}` : args.query;
117
+ const resp = await client.queryRecords({ table: 'sys_atf_test_suite', query: query || undefined, limit: args.limit || 20, fields: 'sys_id,name,active,description,sys_updated_on' });
118
+ return { count: resp.count, suites: resp.records };
119
+ }
120
+ case 'get_atf_suite': {
121
+ if (!args.sys_id_or_name)
122
+ throw new ServiceNowError('sys_id_or_name is required', 'INVALID_REQUEST');
123
+ if (/^[0-9a-f]{32}$/i.test(args.sys_id_or_name)) {
124
+ return await client.getRecord('sys_atf_test_suite', args.sys_id_or_name);
125
+ }
126
+ const resp = await client.queryRecords({ table: 'sys_atf_test_suite', query: `name=${args.sys_id_or_name}`, limit: 1 });
127
+ if (resp.count === 0)
128
+ throw new ServiceNowError(`Test suite not found: ${args.sys_id_or_name}`, 'NOT_FOUND');
129
+ return resp.records[0];
130
+ }
131
+ case 'run_atf_suite': {
132
+ requireAtf();
133
+ if (!args.sys_id)
134
+ throw new ServiceNowError('sys_id is required', 'INVALID_REQUEST');
135
+ // ServiceNow ATF runner API: POST /api/now/atf/runner/run_suite
136
+ const result = await client.callNowAssist('/api/now/atf/runner/run_suite', { sys_id: args.sys_id });
137
+ return { ...result, summary: `Started test suite ${args.sys_id}` };
138
+ }
139
+ case 'list_atf_tests': {
140
+ let query = args.active !== false ? 'active=true' : '';
141
+ if (args.suite_sys_id)
142
+ query = query ? `${query}^test_suite=${args.suite_sys_id}` : `test_suite=${args.suite_sys_id}`;
143
+ const resp = await client.queryRecords({ table: 'sys_atf_test', query: query || undefined, limit: args.limit || 20 });
144
+ return { count: resp.count, tests: resp.records };
145
+ }
146
+ case 'get_atf_test': {
147
+ if (!args.sys_id)
148
+ throw new ServiceNowError('sys_id is required', 'INVALID_REQUEST');
149
+ return await client.getRecord('sys_atf_test', args.sys_id);
150
+ }
151
+ case 'run_atf_test': {
152
+ requireAtf();
153
+ if (!args.sys_id)
154
+ throw new ServiceNowError('sys_id is required', 'INVALID_REQUEST');
155
+ const result = await client.callNowAssist('/api/now/atf/runner/run_test', { sys_id: args.sys_id });
156
+ return { ...result, summary: `Started test ${args.sys_id}` };
157
+ }
158
+ case 'get_atf_suite_result': {
159
+ if (!args.result_sys_id)
160
+ throw new ServiceNowError('result_sys_id is required', 'INVALID_REQUEST');
161
+ return await client.getRecord('sys_atf_test_suite_result', args.result_sys_id);
162
+ }
163
+ case 'list_atf_test_results': {
164
+ let query = '';
165
+ if (args.suite_result_sys_id)
166
+ query = `test_suite_result=${args.suite_result_sys_id}`;
167
+ const resp = await client.queryRecords({ table: 'sys_atf_result', query: query || undefined, limit: args.limit || 50, fields: 'sys_id,test,status,message,test_suite_result,sys_updated_on' });
168
+ return { count: resp.count, results: resp.records };
169
+ }
170
+ case 'get_atf_failure_insight': {
171
+ if (!args.result_sys_id)
172
+ throw new ServiceNowError('result_sys_id is required', 'INVALID_REQUEST');
173
+ // ATF Failure Insight: query sys_atf_failure_insight table
174
+ const resp = await client.queryRecords({ table: 'sys_atf_failure_insight', query: `test_suite_result=${args.result_sys_id}` });
175
+ return {
176
+ result_sys_id: args.result_sys_id,
177
+ failure_insight: resp.records,
178
+ summary: `Found ${resp.count} metadata change(s) between last passing and failing run`,
179
+ note: 'Failure Insight (latest release) surfaces role changes, field value changes, and configuration diffs that caused test failures',
180
+ };
181
+ }
182
+ default:
183
+ return null;
184
+ }
185
+ }
186
+ //# sourceMappingURL=atf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"atf.js","sourceRoot":"","sources":["../../src/tools/atf.ts"],"names":[],"mappings":"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"}