nowaikit 3.0.0 → 4.0.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.
Files changed (235) hide show
  1. package/LICENSE +10 -10
  2. package/README.md +8 -6
  3. package/desktop/renderer/dist/assets/index-D46KUWoj.js +49 -0
  4. package/desktop/renderer/dist/index.html +5 -5
  5. package/desktop/serve.cjs +134 -10
  6. package/dist/a2a/agent-card.d.ts +8 -0
  7. package/dist/a2a/agent-card.d.ts.map +1 -0
  8. package/dist/a2a/agent-card.js +82 -0
  9. package/dist/a2a/agent-card.js.map +1 -0
  10. package/dist/a2a/index.d.ts +13 -0
  11. package/dist/a2a/index.d.ts.map +1 -0
  12. package/dist/a2a/index.js +74 -0
  13. package/dist/a2a/index.js.map +1 -0
  14. package/dist/a2a/task-manager.d.ts +20 -0
  15. package/dist/a2a/task-manager.d.ts.map +1 -0
  16. package/dist/a2a/task-manager.js +148 -0
  17. package/dist/a2a/task-manager.js.map +1 -0
  18. package/dist/a2a/types.d.ts +73 -0
  19. package/dist/a2a/types.d.ts.map +1 -0
  20. package/dist/a2a/types.js +6 -0
  21. package/dist/a2a/types.js.map +1 -0
  22. package/dist/api/index.d.ts +16 -0
  23. package/dist/api/index.d.ts.map +1 -0
  24. package/dist/api/index.js +106 -0
  25. package/dist/api/index.js.map +1 -0
  26. package/dist/cli/config-store.d.ts +31 -0
  27. package/dist/cli/config-store.d.ts.map +1 -1
  28. package/dist/cli/config-store.js +44 -1
  29. package/dist/cli/config-store.js.map +1 -1
  30. package/dist/cli/index.js +115 -9
  31. package/dist/cli/index.js.map +1 -1
  32. package/dist/cli/setup.d.ts.map +1 -1
  33. package/dist/cli/setup.js +669 -49
  34. package/dist/cli/setup.js.map +1 -1
  35. package/dist/cli/shortcuts.d.ts +2 -0
  36. package/dist/cli/shortcuts.d.ts.map +1 -0
  37. package/dist/cli/shortcuts.js +122 -0
  38. package/dist/cli/shortcuts.js.map +1 -0
  39. package/dist/dashboard/index.d.ts +7 -0
  40. package/dist/dashboard/index.d.ts.map +1 -0
  41. package/dist/dashboard/index.js +111 -0
  42. package/dist/dashboard/index.js.map +1 -0
  43. package/dist/direct/llm-client.d.ts +1 -1
  44. package/dist/direct/llm-client.d.ts.map +1 -1
  45. package/dist/direct/llm-client.js +9 -4
  46. package/dist/direct/llm-client.js.map +1 -1
  47. package/dist/prompts/capabilities/build-app.d.ts.map +1 -1
  48. package/dist/prompts/capabilities/build-app.js +2 -0
  49. package/dist/prompts/capabilities/build-app.js.map +1 -1
  50. package/dist/prompts/capabilities/build-atf-suite.d.ts +4 -0
  51. package/dist/prompts/capabilities/build-atf-suite.d.ts.map +1 -0
  52. package/dist/prompts/capabilities/build-atf-suite.js +143 -0
  53. package/dist/prompts/capabilities/build-atf-suite.js.map +1 -0
  54. package/dist/prompts/capabilities/build-business-rule.d.ts.map +1 -1
  55. package/dist/prompts/capabilities/build-business-rule.js +2 -0
  56. package/dist/prompts/capabilities/build-business-rule.js.map +1 -1
  57. package/dist/prompts/capabilities/build-catalog.d.ts.map +1 -1
  58. package/dist/prompts/capabilities/build-catalog.js +2 -0
  59. package/dist/prompts/capabilities/build-catalog.js.map +1 -1
  60. package/dist/prompts/capabilities/build-client-script.d.ts.map +1 -1
  61. package/dist/prompts/capabilities/build-client-script.js +2 -0
  62. package/dist/prompts/capabilities/build-client-script.js.map +1 -1
  63. package/dist/prompts/capabilities/build-flow.d.ts.map +1 -1
  64. package/dist/prompts/capabilities/build-flow.js +2 -0
  65. package/dist/prompts/capabilities/build-flow.js.map +1 -1
  66. package/dist/prompts/capabilities/build-portal.d.ts.map +1 -1
  67. package/dist/prompts/capabilities/build-portal.js +2 -0
  68. package/dist/prompts/capabilities/build-portal.js.map +1 -1
  69. package/dist/prompts/capabilities/build-rest-api.d.ts.map +1 -1
  70. package/dist/prompts/capabilities/build-rest-api.js +2 -0
  71. package/dist/prompts/capabilities/build-rest-api.js.map +1 -1
  72. package/dist/prompts/capabilities/build-test-plan.d.ts.map +1 -1
  73. package/dist/prompts/capabilities/build-test-plan.js +2 -0
  74. package/dist/prompts/capabilities/build-test-plan.js.map +1 -1
  75. package/dist/prompts/capabilities/build-uib.d.ts.map +1 -1
  76. package/dist/prompts/capabilities/build-uib.js +2 -0
  77. package/dist/prompts/capabilities/build-uib.js.map +1 -1
  78. package/dist/prompts/capabilities/docs-app.d.ts.map +1 -1
  79. package/dist/prompts/capabilities/docs-app.js +2 -0
  80. package/dist/prompts/capabilities/docs-app.js.map +1 -1
  81. package/dist/prompts/capabilities/docs-release.d.ts.map +1 -1
  82. package/dist/prompts/capabilities/docs-release.js +2 -0
  83. package/dist/prompts/capabilities/docs-release.js.map +1 -1
  84. package/dist/prompts/capabilities/docs-runbook.d.ts.map +1 -1
  85. package/dist/prompts/capabilities/docs-runbook.js +2 -0
  86. package/dist/prompts/capabilities/docs-runbook.js.map +1 -1
  87. package/dist/prompts/capabilities/docs-script.d.ts.map +1 -1
  88. package/dist/prompts/capabilities/docs-script.js +2 -0
  89. package/dist/prompts/capabilities/docs-script.js.map +1 -1
  90. package/dist/prompts/capabilities/ops-deploy.d.ts.map +1 -1
  91. package/dist/prompts/capabilities/ops-deploy.js +2 -0
  92. package/dist/prompts/capabilities/ops-deploy.js.map +1 -1
  93. package/dist/prompts/capabilities/ops-risk.d.ts.map +1 -1
  94. package/dist/prompts/capabilities/ops-risk.js +2 -0
  95. package/dist/prompts/capabilities/ops-risk.js.map +1 -1
  96. package/dist/prompts/capabilities/ops-triage.d.ts.map +1 -1
  97. package/dist/prompts/capabilities/ops-triage.js +2 -0
  98. package/dist/prompts/capabilities/ops-triage.js.map +1 -1
  99. package/dist/prompts/capabilities/review-acls.d.ts.map +1 -1
  100. package/dist/prompts/capabilities/review-acls.js +2 -0
  101. package/dist/prompts/capabilities/review-acls.js.map +1 -1
  102. package/dist/prompts/capabilities/review-code.d.ts.map +1 -1
  103. package/dist/prompts/capabilities/review-code.js +2 -0
  104. package/dist/prompts/capabilities/review-code.js.map +1 -1
  105. package/dist/prompts/capabilities/review-flows.d.ts.map +1 -1
  106. package/dist/prompts/capabilities/review-flows.js +2 -0
  107. package/dist/prompts/capabilities/review-flows.js.map +1 -1
  108. package/dist/prompts/capabilities/review-scripts.d.ts.map +1 -1
  109. package/dist/prompts/capabilities/review-scripts.js +2 -0
  110. package/dist/prompts/capabilities/review-scripts.js.map +1 -1
  111. package/dist/prompts/capabilities/scan-automation.d.ts.map +1 -1
  112. package/dist/prompts/capabilities/scan-automation.js +2 -0
  113. package/dist/prompts/capabilities/scan-automation.js.map +1 -1
  114. package/dist/prompts/capabilities/scan-cmdb.d.ts.map +1 -1
  115. package/dist/prompts/capabilities/scan-cmdb.js +2 -0
  116. package/dist/prompts/capabilities/scan-cmdb.js.map +1 -1
  117. package/dist/prompts/capabilities/scan-debt.d.ts.map +1 -1
  118. package/dist/prompts/capabilities/scan-debt.js +2 -0
  119. package/dist/prompts/capabilities/scan-debt.js.map +1 -1
  120. package/dist/prompts/capabilities/scan-health.d.ts.map +1 -1
  121. package/dist/prompts/capabilities/scan-health.js +2 -0
  122. package/dist/prompts/capabilities/scan-health.js.map +1 -1
  123. package/dist/prompts/capabilities/scan-security.d.ts.map +1 -1
  124. package/dist/prompts/capabilities/scan-security.js +2 -0
  125. package/dist/prompts/capabilities/scan-security.js.map +1 -1
  126. package/dist/prompts/capabilities/scan-upgrade.d.ts.map +1 -1
  127. package/dist/prompts/capabilities/scan-upgrade.js +2 -0
  128. package/dist/prompts/capabilities/scan-upgrade.js.map +1 -1
  129. package/dist/prompts/index.d.ts.map +1 -1
  130. package/dist/prompts/index.js +47 -8
  131. package/dist/prompts/index.js.map +1 -1
  132. package/dist/reports/brand.d.ts +79 -0
  133. package/dist/reports/brand.d.ts.map +1 -0
  134. package/dist/reports/brand.js +204 -0
  135. package/dist/reports/brand.js.map +1 -0
  136. package/dist/reports/charts.d.ts +11 -0
  137. package/dist/reports/charts.d.ts.map +1 -0
  138. package/dist/reports/charts.js +91 -0
  139. package/dist/reports/charts.js.map +1 -0
  140. package/dist/reports/index.d.ts +13 -0
  141. package/dist/reports/index.d.ts.map +1 -0
  142. package/dist/reports/index.js +65 -0
  143. package/dist/reports/index.js.map +1 -0
  144. package/dist/reports/parser.d.ts +13 -0
  145. package/dist/reports/parser.d.ts.map +1 -0
  146. package/dist/reports/parser.js +202 -0
  147. package/dist/reports/parser.js.map +1 -0
  148. package/dist/reports/pdf-generator.d.ts +8 -0
  149. package/dist/reports/pdf-generator.d.ts.map +1 -0
  150. package/dist/reports/pdf-generator.js +244 -0
  151. package/dist/reports/pdf-generator.js.map +1 -0
  152. package/dist/reports/pptx-generator.d.ts +8 -0
  153. package/dist/reports/pptx-generator.d.ts.map +1 -0
  154. package/dist/reports/pptx-generator.js +273 -0
  155. package/dist/reports/pptx-generator.js.map +1 -0
  156. package/dist/reports/types.d.ts +60 -0
  157. package/dist/reports/types.d.ts.map +1 -0
  158. package/dist/reports/types.js +7 -0
  159. package/dist/reports/types.js.map +1 -0
  160. package/dist/resources/index.d.ts.map +1 -1
  161. package/dist/resources/index.js +10 -0
  162. package/dist/resources/index.js.map +1 -1
  163. package/dist/resources/query-syntax.d.ts +6 -0
  164. package/dist/resources/query-syntax.d.ts.map +1 -0
  165. package/dist/resources/query-syntax.js +113 -0
  166. package/dist/resources/query-syntax.js.map +1 -0
  167. package/dist/sdk/index.d.ts +51 -0
  168. package/dist/sdk/index.d.ts.map +1 -0
  169. package/dist/sdk/index.js +55 -0
  170. package/dist/sdk/index.js.map +1 -0
  171. package/dist/server.d.ts +2 -1
  172. package/dist/server.d.ts.map +1 -1
  173. package/dist/server.js +103 -92
  174. package/dist/server.js.map +1 -1
  175. package/dist/servicenow/client.js +1 -1
  176. package/dist/servicenow/client.js.map +1 -1
  177. package/dist/tools/ai-agents.d.ts +145 -0
  178. package/dist/tools/ai-agents.d.ts.map +1 -0
  179. package/dist/tools/ai-agents.js +185 -0
  180. package/dist/tools/ai-agents.js.map +1 -0
  181. package/dist/tools/cmdb-reconciliation.d.ts +112 -0
  182. package/dist/tools/cmdb-reconciliation.d.ts.map +1 -0
  183. package/dist/tools/cmdb-reconciliation.js +267 -0
  184. package/dist/tools/cmdb-reconciliation.js.map +1 -0
  185. package/dist/tools/discovery.d.ts +34 -0
  186. package/dist/tools/discovery.d.ts.map +1 -0
  187. package/dist/tools/discovery.js +168 -0
  188. package/dist/tools/discovery.js.map +1 -0
  189. package/dist/tools/fluent.d.ts +105 -11
  190. package/dist/tools/fluent.d.ts.map +1 -1
  191. package/dist/tools/fluent.js +118 -1
  192. package/dist/tools/fluent.js.map +1 -1
  193. package/dist/tools/index.d.ts +840 -0
  194. package/dist/tools/index.d.ts.map +1 -1
  195. package/dist/tools/index.js +44 -6
  196. package/dist/tools/index.js.map +1 -1
  197. package/dist/tools/ml.d.ts +104 -0
  198. package/dist/tools/ml.d.ts.map +1 -1
  199. package/dist/tools/ml.js +139 -0
  200. package/dist/tools/ml.js.map +1 -1
  201. package/dist/tools/now-assist-skills.d.ts +129 -0
  202. package/dist/tools/now-assist-skills.d.ts.map +1 -0
  203. package/dist/tools/now-assist-skills.js +128 -0
  204. package/dist/tools/now-assist-skills.js.map +1 -0
  205. package/dist/tools/orchestration.d.ts +132 -0
  206. package/dist/tools/orchestration.d.ts.map +1 -0
  207. package/dist/tools/orchestration.js +320 -0
  208. package/dist/tools/orchestration.js.map +1 -0
  209. package/dist/tools/reporting.d.ts +127 -1
  210. package/dist/tools/reporting.d.ts.map +1 -1
  211. package/dist/tools/reporting.js +64 -0
  212. package/dist/tools/reporting.js.map +1 -1
  213. package/dist/tools/schema-cache.d.ts +44 -0
  214. package/dist/tools/schema-cache.d.ts.map +1 -0
  215. package/dist/tools/schema-cache.js +127 -0
  216. package/dist/tools/schema-cache.js.map +1 -0
  217. package/dist/tools-manifest.json +1250 -25
  218. package/dist/transport/auth-middleware.d.ts +16 -0
  219. package/dist/transport/auth-middleware.d.ts.map +1 -0
  220. package/dist/transport/auth-middleware.js +31 -0
  221. package/dist/transport/auth-middleware.js.map +1 -0
  222. package/dist/transport/http-server.d.ts +44 -0
  223. package/dist/transport/http-server.d.ts.map +1 -0
  224. package/dist/transport/http-server.js +172 -0
  225. package/dist/transport/http-server.js.map +1 -0
  226. package/dist/transport/index.d.ts +19 -0
  227. package/dist/transport/index.d.ts.map +1 -0
  228. package/dist/transport/index.js +105 -0
  229. package/dist/transport/index.js.map +1 -0
  230. package/dist/utils/permissions.d.ts +2 -0
  231. package/dist/utils/permissions.d.ts.map +1 -1
  232. package/dist/utils/permissions.js +8 -0
  233. package/dist/utils/permissions.js.map +1 -1
  234. package/package.json +27 -4
  235. package/desktop/renderer/dist/assets/index-B-6BYnh8.js +0 -49
@@ -0,0 +1,185 @@
1
+ import { ServiceNowError } from '../utils/errors.js';
2
+ import { requireNowAssist, requireWrite } from '../utils/permissions.js';
3
+ export function getAiAgentsToolDefinitions() {
4
+ return [
5
+ {
6
+ name: 'create_ai_agent',
7
+ description: 'Create an AI agent definition with optional auto-generated ACLs (requires NOW_ASSIST_ENABLED + WRITE_ENABLED)',
8
+ inputSchema: {
9
+ type: 'object',
10
+ properties: {
11
+ name: { type: 'string', description: 'Agent name' },
12
+ description: { type: 'string', description: 'Agent description' },
13
+ capabilities: { type: 'array', items: { type: 'string' }, description: 'List of capability identifiers the agent supports' },
14
+ auto_generate_acls: { type: 'boolean', description: 'Automatically create ACL records for the agent (default true)' },
15
+ },
16
+ required: ['name', 'description', 'capabilities'],
17
+ },
18
+ },
19
+ {
20
+ name: 'list_ai_agents',
21
+ description: 'List AI agent definitions',
22
+ inputSchema: {
23
+ type: 'object',
24
+ properties: {
25
+ active: { type: 'boolean', description: 'Filter by active status' },
26
+ limit: { type: 'number', description: 'Max records to return (default 25)' },
27
+ },
28
+ required: [],
29
+ },
30
+ },
31
+ {
32
+ name: 'get_ai_agent',
33
+ description: 'Get an AI agent definition and its related ACLs',
34
+ inputSchema: {
35
+ type: 'object',
36
+ properties: {
37
+ sys_id: { type: 'string', description: 'System ID of the AI agent' },
38
+ },
39
+ required: ['sys_id'],
40
+ },
41
+ },
42
+ {
43
+ name: 'create_agentic_workflow',
44
+ description: 'Create an agentic workflow linked to an AI agent (requires NOW_ASSIST_ENABLED + WRITE_ENABLED)',
45
+ inputSchema: {
46
+ type: 'object',
47
+ properties: {
48
+ name: { type: 'string', description: 'Workflow name' },
49
+ description: { type: 'string', description: 'Workflow description' },
50
+ agent_sys_id: { type: 'string', description: 'System ID of the parent AI agent' },
51
+ steps: {
52
+ type: 'array',
53
+ description: 'Ordered list of workflow steps',
54
+ items: {
55
+ type: 'object',
56
+ properties: {
57
+ name: { type: 'string', description: 'Step name' },
58
+ action: { type: 'string', description: 'Action identifier' },
59
+ inputs: { type: 'object', description: 'Step input parameters' },
60
+ condition: { type: 'string', description: 'Optional condition expression' },
61
+ },
62
+ required: ['name', 'action'],
63
+ },
64
+ },
65
+ trigger_conditions: { type: 'string', description: 'Optional trigger condition expression' },
66
+ },
67
+ required: ['name', 'description', 'agent_sys_id', 'steps'],
68
+ },
69
+ },
70
+ ];
71
+ }
72
+ const AI_AGENT_TOOL_NAMES = new Set([
73
+ 'create_ai_agent', 'list_ai_agents', 'get_ai_agent', 'create_agentic_workflow',
74
+ ]);
75
+ export async function executeAiAgentsToolCall(client, name, args) {
76
+ if (!AI_AGENT_TOOL_NAMES.has(name))
77
+ return null;
78
+ switch (name) {
79
+ case 'create_ai_agent': {
80
+ requireNowAssist();
81
+ requireWrite();
82
+ if (!args.name)
83
+ throw new ServiceNowError('name is required', 'INVALID_REQUEST');
84
+ if (!args.description)
85
+ throw new ServiceNowError('description is required', 'INVALID_REQUEST');
86
+ if (!args.capabilities || !Array.isArray(args.capabilities)) {
87
+ throw new ServiceNowError('capabilities must be an array of strings', 'INVALID_REQUEST');
88
+ }
89
+ const agentData = {
90
+ name: args.name,
91
+ description: args.description,
92
+ capabilities: args.capabilities.join(','),
93
+ active: true,
94
+ };
95
+ const agentRecord = await client.createRecord('sys_ai_agent', agentData);
96
+ const agentSysId = String(agentRecord.sys_id);
97
+ const autoAcls = args.auto_generate_acls !== false;
98
+ const createdAcls = [];
99
+ if (autoAcls) {
100
+ // Create read ACL for the agent
101
+ const readAcl = await client.createRecord('sys_security_acl', {
102
+ name: `${args.name} - Read`,
103
+ type: 'record',
104
+ operation: 'read',
105
+ admin_overrides: true,
106
+ active: true,
107
+ description: `Auto-generated read ACL for AI agent: ${args.name}`,
108
+ condition: `sys_ai_agent=${agentSysId}`,
109
+ });
110
+ createdAcls.push(readAcl);
111
+ // Create write ACL for the agent
112
+ const writeAcl = await client.createRecord('sys_security_acl', {
113
+ name: `${args.name} - Write`,
114
+ type: 'record',
115
+ operation: 'write',
116
+ admin_overrides: true,
117
+ active: true,
118
+ description: `Auto-generated write ACL for AI agent: ${args.name}`,
119
+ condition: `sys_ai_agent=${agentSysId}`,
120
+ });
121
+ createdAcls.push(writeAcl);
122
+ }
123
+ return {
124
+ message: 'AI agent created',
125
+ agent: agentRecord,
126
+ acls_created: createdAcls.length,
127
+ acls: createdAcls,
128
+ };
129
+ }
130
+ case 'list_ai_agents': {
131
+ const parts = [];
132
+ if (args.active !== undefined)
133
+ parts.push(`active=${args.active}`);
134
+ const query = parts.length > 0 ? parts.join('^') : undefined;
135
+ const resp = await client.queryRecords({
136
+ table: 'sys_ai_agent',
137
+ query,
138
+ limit: args.limit || 25,
139
+ fields: 'sys_id,name,description,capabilities,active,sys_updated_on',
140
+ });
141
+ return { count: resp.count, agents: resp.records };
142
+ }
143
+ case 'get_ai_agent': {
144
+ if (!args.sys_id)
145
+ throw new ServiceNowError('sys_id is required', 'INVALID_REQUEST');
146
+ const agent = await client.getRecord('sys_ai_agent', args.sys_id);
147
+ const agentSysId = String(agent.sys_id);
148
+ // Fetch related ACLs
149
+ const aclResp = await client.queryRecords({
150
+ table: 'sys_security_acl',
151
+ query: `conditionLIKEsys_ai_agent=${agentSysId}`,
152
+ limit: 20,
153
+ fields: 'sys_id,name,type,operation,active,description',
154
+ });
155
+ return { agent, acls: aclResp.records, acl_count: aclResp.count };
156
+ }
157
+ case 'create_agentic_workflow': {
158
+ requireNowAssist();
159
+ requireWrite();
160
+ if (!args.name)
161
+ throw new ServiceNowError('name is required', 'INVALID_REQUEST');
162
+ if (!args.description)
163
+ throw new ServiceNowError('description is required', 'INVALID_REQUEST');
164
+ if (!args.agent_sys_id)
165
+ throw new ServiceNowError('agent_sys_id is required', 'INVALID_REQUEST');
166
+ if (!args.steps || !Array.isArray(args.steps)) {
167
+ throw new ServiceNowError('steps must be an array', 'INVALID_REQUEST');
168
+ }
169
+ const workflowData = {
170
+ name: args.name,
171
+ description: args.description,
172
+ agent: args.agent_sys_id,
173
+ steps: JSON.stringify(args.steps),
174
+ active: true,
175
+ };
176
+ if (args.trigger_conditions)
177
+ workflowData.trigger_conditions = args.trigger_conditions;
178
+ const record = await client.createRecord('sys_ai_agentic_workflow', workflowData);
179
+ return { message: 'Agentic workflow created', workflow: record };
180
+ }
181
+ default:
182
+ return null;
183
+ }
184
+ }
185
+ //# sourceMappingURL=ai-agents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-agents.js","sourceRoot":"","sources":["../../src/tools/ai-agents.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,112 @@
1
+ /**
2
+ * CMDB Reconciliation tools — find duplicates, orphans, stale CIs, and reconcile.
3
+ * Read tools: Tier 0. Reconcile action: Tier 2 (CMDB_WRITE_ENABLED=true).
4
+ */
5
+ import type { ServiceNowClient } from '../servicenow/client.js';
6
+ export declare function getCmdbReconciliationToolDefinitions(): ({
7
+ name: string;
8
+ description: string;
9
+ inputSchema: {
10
+ type: string;
11
+ properties: {
12
+ ci_class: {
13
+ type: string;
14
+ description: string;
15
+ };
16
+ match_fields: {
17
+ type: string;
18
+ items: {
19
+ type: string;
20
+ };
21
+ description: string;
22
+ };
23
+ limit: {
24
+ type: string;
25
+ description: string;
26
+ };
27
+ days_threshold?: undefined;
28
+ action?: undefined;
29
+ targets?: undefined;
30
+ dry_run?: undefined;
31
+ };
32
+ required: never[];
33
+ };
34
+ } | {
35
+ name: string;
36
+ description: string;
37
+ inputSchema: {
38
+ type: string;
39
+ properties: {
40
+ ci_class: {
41
+ type: string;
42
+ description: string;
43
+ };
44
+ limit: {
45
+ type: string;
46
+ description: string;
47
+ };
48
+ match_fields?: undefined;
49
+ days_threshold?: undefined;
50
+ action?: undefined;
51
+ targets?: undefined;
52
+ dry_run?: undefined;
53
+ };
54
+ required: never[];
55
+ };
56
+ } | {
57
+ name: string;
58
+ description: string;
59
+ inputSchema: {
60
+ type: string;
61
+ properties: {
62
+ ci_class: {
63
+ type: string;
64
+ description: string;
65
+ };
66
+ days_threshold: {
67
+ type: string;
68
+ description: string;
69
+ };
70
+ limit: {
71
+ type: string;
72
+ description: string;
73
+ };
74
+ match_fields?: undefined;
75
+ action?: undefined;
76
+ targets?: undefined;
77
+ dry_run?: undefined;
78
+ };
79
+ required: never[];
80
+ };
81
+ } | {
82
+ name: string;
83
+ description: string;
84
+ inputSchema: {
85
+ type: string;
86
+ properties: {
87
+ action: {
88
+ type: string;
89
+ enum: string[];
90
+ description: string;
91
+ };
92
+ targets: {
93
+ type: string;
94
+ items: {
95
+ type: string;
96
+ };
97
+ description: string;
98
+ };
99
+ dry_run: {
100
+ type: string;
101
+ description: string;
102
+ };
103
+ ci_class?: undefined;
104
+ match_fields?: undefined;
105
+ limit?: undefined;
106
+ days_threshold?: undefined;
107
+ };
108
+ required: string[];
109
+ };
110
+ })[];
111
+ export declare function executeCmdbReconciliationToolCall(client: ServiceNowClient, name: string, args: Record<string, any>): Promise<any>;
112
+ //# sourceMappingURL=cmdb-reconciliation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cmdb-reconciliation.d.ts","sourceRoot":"","sources":["../../src/tools/cmdb-reconciliation.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAIhE,wBAAgB,oCAAoC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAkEnD;AAMD,wBAAsB,iCAAiC,CACrD,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACxB,OAAO,CAAC,GAAG,CAAC,CAyNd"}
@@ -0,0 +1,267 @@
1
+ import { ServiceNowError } from '../utils/errors.js';
2
+ import { requireCmdbWrite } from '../utils/permissions.js';
3
+ export function getCmdbReconciliationToolDefinitions() {
4
+ return [
5
+ {
6
+ name: 'cmdb_find_duplicates',
7
+ description: 'Find duplicate CIs by matching on specified fields (in-memory grouping)',
8
+ inputSchema: {
9
+ type: 'object',
10
+ properties: {
11
+ ci_class: { type: 'string', description: 'CI class table (default cmdb_ci)' },
12
+ match_fields: {
13
+ type: 'array',
14
+ items: { type: 'string' },
15
+ description: 'Fields to match on for duplicate detection (default: name, serial_number, ip_address)',
16
+ },
17
+ limit: { type: 'number', description: 'Max CIs to scan (default 100)' },
18
+ },
19
+ required: [],
20
+ },
21
+ },
22
+ {
23
+ name: 'cmdb_find_orphans',
24
+ description: 'Find CIs with no relationships in cmdb_rel_ci',
25
+ inputSchema: {
26
+ type: 'object',
27
+ properties: {
28
+ ci_class: { type: 'string', description: 'CI class table (default cmdb_ci)' },
29
+ limit: { type: 'number', description: 'Max orphan CIs to return (default 50)' },
30
+ },
31
+ required: [],
32
+ },
33
+ },
34
+ {
35
+ name: 'cmdb_find_stale',
36
+ description: 'Find CIs not updated within a given number of days that are still operational',
37
+ inputSchema: {
38
+ type: 'object',
39
+ properties: {
40
+ ci_class: { type: 'string', description: 'CI class table (default cmdb_ci)' },
41
+ days_threshold: { type: 'number', description: 'Number of days since last update to consider stale (default 90)' },
42
+ limit: { type: 'number', description: 'Max stale CIs to return (default 50)' },
43
+ },
44
+ required: [],
45
+ },
46
+ },
47
+ {
48
+ name: 'cmdb_reconcile',
49
+ description: 'Act on duplicate, stale, or orphan CIs — merge, retire, or remove (requires CMDB_WRITE_ENABLED). Supports dry_run mode.',
50
+ inputSchema: {
51
+ type: 'object',
52
+ properties: {
53
+ action: {
54
+ type: 'string',
55
+ enum: ['merge_duplicates', 'retire_stale', 'remove_orphans'],
56
+ description: 'Reconciliation action to perform',
57
+ },
58
+ targets: {
59
+ type: 'array',
60
+ items: { type: 'string' },
61
+ description: 'Array of CI sys_ids to act on',
62
+ },
63
+ dry_run: { type: 'boolean', description: 'Preview changes without applying (default true)' },
64
+ },
65
+ required: ['action', 'targets'],
66
+ },
67
+ },
68
+ ];
69
+ }
70
+ const CMDB_RECON_TOOL_NAMES = new Set([
71
+ 'cmdb_find_duplicates', 'cmdb_find_orphans', 'cmdb_find_stale', 'cmdb_reconcile',
72
+ ]);
73
+ export async function executeCmdbReconciliationToolCall(client, name, args) {
74
+ if (!CMDB_RECON_TOOL_NAMES.has(name))
75
+ return null;
76
+ switch (name) {
77
+ case 'cmdb_find_duplicates': {
78
+ const ciClass = args.ci_class || 'cmdb_ci';
79
+ const matchFields = args.match_fields && Array.isArray(args.match_fields) && args.match_fields.length > 0
80
+ ? args.match_fields
81
+ : ['name', 'serial_number', 'ip_address'];
82
+ const limit = args.limit || 100;
83
+ const fields = ['sys_id', 'name', 'sys_class_name', ...matchFields].filter((v, i, a) => a.indexOf(v) === i);
84
+ const resp = await client.queryRecords({
85
+ table: ciClass,
86
+ query: 'active=true',
87
+ limit,
88
+ fields: fields.join(','),
89
+ });
90
+ // Group CIs by composite key of match fields
91
+ const groups = new Map();
92
+ for (const record of resp.records) {
93
+ const key = matchFields
94
+ .map((f) => String(record[f] ?? '').toLowerCase().trim())
95
+ .join('||');
96
+ // Skip records where all match fields are empty
97
+ const allEmpty = matchFields.every((f) => !record[f] || String(record[f]).trim() === '');
98
+ if (allEmpty)
99
+ continue;
100
+ if (!groups.has(key))
101
+ groups.set(key, []);
102
+ groups.get(key).push(record);
103
+ }
104
+ // Filter to groups with more than one CI (actual duplicates)
105
+ const duplicates = [];
106
+ for (const [key, records] of groups) {
107
+ if (records.length > 1) {
108
+ duplicates.push({ match_key: key, count: records.length, records });
109
+ }
110
+ }
111
+ return {
112
+ ci_class: ciClass,
113
+ match_fields: matchFields,
114
+ scanned: resp.records.length,
115
+ duplicate_groups: duplicates.length,
116
+ duplicates,
117
+ };
118
+ }
119
+ case 'cmdb_find_orphans': {
120
+ const ciClass = args.ci_class || 'cmdb_ci';
121
+ const limit = args.limit || 50;
122
+ const ciResp = await client.queryRecords({
123
+ table: ciClass,
124
+ query: 'active=true',
125
+ limit,
126
+ fields: 'sys_id,name,sys_class_name,operational_status',
127
+ });
128
+ const orphans = [];
129
+ for (const ci of ciResp.records) {
130
+ const sysId = String(ci.sys_id);
131
+ // Check for any relationship (as parent or child)
132
+ const relResp = await client.queryRecords({
133
+ table: 'cmdb_rel_ci',
134
+ query: `parent=${sysId}^ORchild=${sysId}`,
135
+ limit: 1,
136
+ fields: 'sys_id',
137
+ });
138
+ if (relResp.count === 0) {
139
+ orphans.push(ci);
140
+ }
141
+ }
142
+ return {
143
+ ci_class: ciClass,
144
+ scanned: ciResp.records.length,
145
+ orphan_count: orphans.length,
146
+ orphans,
147
+ };
148
+ }
149
+ case 'cmdb_find_stale': {
150
+ const ciClass = args.ci_class || 'cmdb_ci';
151
+ const daysThreshold = args.days_threshold || 90;
152
+ const limit = args.limit || 50;
153
+ const query = `sys_updated_on<javascript:gs.daysAgo(${daysThreshold})^operational_status=1^active=true`;
154
+ const resp = await client.queryRecords({
155
+ table: ciClass,
156
+ query,
157
+ limit,
158
+ fields: 'sys_id,name,sys_class_name,operational_status,sys_updated_on,discovery_source',
159
+ });
160
+ return {
161
+ ci_class: ciClass,
162
+ days_threshold: daysThreshold,
163
+ stale_count: resp.count,
164
+ stale_cis: resp.records,
165
+ };
166
+ }
167
+ case 'cmdb_reconcile': {
168
+ requireCmdbWrite();
169
+ if (!args.action)
170
+ throw new ServiceNowError('action is required', 'INVALID_REQUEST');
171
+ if (!args.targets || !Array.isArray(args.targets) || args.targets.length === 0) {
172
+ throw new ServiceNowError('targets must be a non-empty array of sys_ids', 'INVALID_REQUEST');
173
+ }
174
+ const validActions = ['merge_duplicates', 'retire_stale', 'remove_orphans'];
175
+ if (!validActions.includes(args.action)) {
176
+ throw new ServiceNowError(`Invalid action: "${args.action}". Must be one of: ${validActions.join(', ')}`, 'INVALID_REQUEST');
177
+ }
178
+ const dryRun = args.dry_run !== false;
179
+ const results = [];
180
+ switch (args.action) {
181
+ case 'merge_duplicates': {
182
+ // First target is the survivor; remaining are merged into it
183
+ const [survivorId, ...duplicateIds] = args.targets;
184
+ if (duplicateIds.length === 0) {
185
+ throw new ServiceNowError('merge_duplicates requires at least 2 targets (first is survivor)', 'INVALID_REQUEST');
186
+ }
187
+ if (dryRun) {
188
+ results.push({ sys_id: survivorId, action: 'keep', status: 'dry_run', detail: 'Would be kept as the survivor CI' });
189
+ for (const dupId of duplicateIds) {
190
+ results.push({ sys_id: dupId, action: 'retire', status: 'dry_run', detail: 'Would be retired and relationships moved to survivor' });
191
+ }
192
+ }
193
+ else {
194
+ results.push({ sys_id: survivorId, action: 'keep', status: 'completed', detail: 'Kept as survivor CI' });
195
+ for (const dupId of duplicateIds) {
196
+ // Move relationships from duplicate to survivor
197
+ const parentRels = await client.queryRecords({
198
+ table: 'cmdb_rel_ci',
199
+ query: `parent=${dupId}`,
200
+ limit: 200,
201
+ fields: 'sys_id,child,type',
202
+ });
203
+ for (const rel of parentRels.records) {
204
+ await client.updateRecord('cmdb_rel_ci', String(rel.sys_id), { parent: survivorId });
205
+ }
206
+ const childRels = await client.queryRecords({
207
+ table: 'cmdb_rel_ci',
208
+ query: `child=${dupId}`,
209
+ limit: 200,
210
+ fields: 'sys_id,parent,type',
211
+ });
212
+ for (const rel of childRels.records) {
213
+ await client.updateRecord('cmdb_rel_ci', String(rel.sys_id), { child: survivorId });
214
+ }
215
+ // Retire the duplicate
216
+ await client.updateRecord('cmdb_ci', dupId, {
217
+ operational_status: 6, // retired
218
+ install_status: 7, // retired
219
+ });
220
+ results.push({ sys_id: dupId, action: 'retire', status: 'completed', detail: `Retired; ${parentRels.count + childRels.count} relationships moved to survivor` });
221
+ }
222
+ }
223
+ break;
224
+ }
225
+ case 'retire_stale': {
226
+ for (const sysId of args.targets) {
227
+ if (dryRun) {
228
+ results.push({ sys_id: sysId, action: 'retire', status: 'dry_run', detail: 'Would set operational_status=6 (retired)' });
229
+ }
230
+ else {
231
+ await client.updateRecord('cmdb_ci', sysId, {
232
+ operational_status: 6,
233
+ install_status: 7,
234
+ });
235
+ results.push({ sys_id: sysId, action: 'retire', status: 'completed', detail: 'Set operational_status=6 (retired)' });
236
+ }
237
+ }
238
+ break;
239
+ }
240
+ case 'remove_orphans': {
241
+ for (const sysId of args.targets) {
242
+ if (dryRun) {
243
+ results.push({ sys_id: sysId, action: 'retire', status: 'dry_run', detail: 'Would retire orphan CI (operational_status=6)' });
244
+ }
245
+ else {
246
+ await client.updateRecord('cmdb_ci', sysId, {
247
+ operational_status: 6,
248
+ install_status: 7,
249
+ });
250
+ results.push({ sys_id: sysId, action: 'retire', status: 'completed', detail: 'Orphan CI retired (operational_status=6)' });
251
+ }
252
+ }
253
+ break;
254
+ }
255
+ }
256
+ return {
257
+ action: args.action,
258
+ dry_run: dryRun,
259
+ target_count: args.targets.length,
260
+ results,
261
+ };
262
+ }
263
+ default:
264
+ return null;
265
+ }
266
+ }
267
+ //# sourceMappingURL=cmdb-reconciliation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cmdb-reconciliation.js","sourceRoot":"","sources":["../../src/tools/cmdb-reconciliation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Dynamic Schema Discovery tool — reads table schema at runtime and generates
3
+ * ad-hoc CRUD tools for any ServiceNow table.
4
+ *
5
+ * Tools:
6
+ * discover_table — Discover a table's schema and register dynamic CRUD tools
7
+ */
8
+ import type { ServiceNowClient } from '../servicenow/client.js';
9
+ export declare function getDiscoveryToolDefinitions(): {
10
+ name: string;
11
+ description: string;
12
+ inputSchema: {
13
+ type: string;
14
+ properties: {
15
+ table: {
16
+ type: string;
17
+ description: string;
18
+ };
19
+ operations: {
20
+ type: string;
21
+ description: string;
22
+ items: {
23
+ type: string;
24
+ enum: string[];
25
+ };
26
+ };
27
+ };
28
+ required: string[];
29
+ };
30
+ }[];
31
+ export declare function executeDiscoveryToolCall(client: ServiceNowClient, name: string, args: Record<string, any>): Promise<any>;
32
+ /** Execute a dynamically discovered tool. */
33
+ export declare function executeDynamicToolCall(client: ServiceNowClient, name: string, args: Record<string, any>): Promise<any>;
34
+ //# sourceMappingURL=discovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../../src/tools/discovery.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAKhE,wBAAgB,2BAA2B;;;;;;;;;;;;;;;;;;;;;IAuB1C;AAED,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACxB,OAAO,CAAC,GAAG,CAAC,CA2Fd;AAED,6CAA6C;AAC7C,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACxB,OAAO,CAAC,GAAG,CAAC,CAwDd"}