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.
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,140 @@
1
+ /**
2
+ * Config writers — each writer knows how to inject nowaikit into a specific AI client.
3
+ */
4
+ import { readFileSync, writeFileSync, mkdirSync, existsSync } from 'fs';
5
+ import { dirname, join } from 'path';
6
+ import { fileURLToPath } from 'url';
7
+ import { execSync } from 'child_process';
8
+ /** Build the env block that goes into any JSON-based MCP config. */
9
+ function buildEnvBlock(instance) {
10
+ const env = {
11
+ SERVICENOW_INSTANCE_URL: instance.instanceUrl,
12
+ SERVICENOW_AUTH_METHOD: instance.authMethod,
13
+ WRITE_ENABLED: instance.writeEnabled ? 'true' : 'false',
14
+ MCP_TOOL_PACKAGE: instance.toolPackage || 'full',
15
+ };
16
+ if (instance.authMethod === 'basic') {
17
+ env['SERVICENOW_BASIC_USERNAME'] = instance.username || '';
18
+ env['SERVICENOW_BASIC_PASSWORD'] = instance.password || '';
19
+ }
20
+ else {
21
+ env['SERVICENOW_OAUTH_CLIENT_ID'] = instance.clientId || '';
22
+ env['SERVICENOW_OAUTH_CLIENT_SECRET'] = instance.clientSecret || '';
23
+ env['SERVICENOW_OAUTH_USERNAME'] = instance.username || '';
24
+ env['SERVICENOW_OAUTH_PASSWORD'] = instance.password || '';
25
+ }
26
+ if (instance.authMode && instance.authMode !== 'service-account') {
27
+ env['SERVICENOW_AUTH_MODE'] = instance.authMode;
28
+ }
29
+ if (instance.nowAssistEnabled) {
30
+ env['NOWASSIST_ENABLED'] = 'true';
31
+ }
32
+ if (instance.group) {
33
+ env['SN_INSTANCE_GROUP'] = instance.group;
34
+ }
35
+ if (instance.environment) {
36
+ env['SN_INSTANCE_ENVIRONMENT'] = instance.environment;
37
+ }
38
+ return env;
39
+ }
40
+ /** Absolute path to the compiled server entry point. */
41
+ function serverPath() {
42
+ // dist/server.js relative to project root (where package.json lives)
43
+ // Use fileURLToPath to handle Windows drive letters correctly (avoids /C:/... issue)
44
+ const pkgDir = fileURLToPath(new URL('../../../', import.meta.url)).replace(/[\\/]$/, '');
45
+ return join(pkgDir, 'dist', 'server.js');
46
+ }
47
+ /** Read + merge JSON config, creating it if needed. */
48
+ function mergeJsonConfig(path, key, entry) {
49
+ const dir = dirname(path);
50
+ if (!existsSync(dir))
51
+ mkdirSync(dir, { recursive: true });
52
+ let existing = {};
53
+ if (existsSync(path)) {
54
+ try {
55
+ existing = JSON.parse(readFileSync(path, 'utf8'));
56
+ }
57
+ catch {
58
+ existing = {};
59
+ }
60
+ }
61
+ if (!existing[key] || typeof existing[key] !== 'object') {
62
+ existing[key] = {};
63
+ }
64
+ existing[key]['nowaikit'] = entry;
65
+ writeFileSync(path, JSON.stringify(existing, null, 2), 'utf8');
66
+ }
67
+ /** Write to any client that uses `mcpServers` JSON key. */
68
+ function writeMcpServersJson(client, instance) {
69
+ const entry = {
70
+ command: 'node',
71
+ args: [serverPath()],
72
+ env: buildEnvBlock(instance),
73
+ };
74
+ try {
75
+ mergeJsonConfig(client.configPath, 'mcpServers', entry);
76
+ return { success: true, message: `Written to ${client.configPath}` };
77
+ }
78
+ catch (err) {
79
+ return { success: false, message: `Failed to write ${client.configPath}: ${err}` };
80
+ }
81
+ }
82
+ /** Write to VS Code (.vscode/mcp.json) which uses `servers` key + `type: stdio`. */
83
+ function writeVsCodeJson(client, instance) {
84
+ const entry = {
85
+ type: 'stdio',
86
+ command: 'node',
87
+ args: [serverPath()],
88
+ env: buildEnvBlock(instance),
89
+ };
90
+ try {
91
+ mergeJsonConfig(client.configPath, 'servers', entry);
92
+ return { success: true, message: `Written to ${client.configPath}` };
93
+ }
94
+ catch (err) {
95
+ return { success: false, message: `Failed to write ${client.configPath}: ${err}` };
96
+ }
97
+ }
98
+ /** Run `claude mcp add` for Claude Code. */
99
+ function writeClaudeCode(_client, instance) {
100
+ const env = buildEnvBlock(instance);
101
+ const envFlags = Object.entries(env)
102
+ .map(([k, v]) => `--env ${k}=${v}`)
103
+ .join(' ');
104
+ const cmd = `claude mcp add nowaikit node ${serverPath()} ${envFlags}`;
105
+ try {
106
+ execSync(cmd, { stdio: 'pipe' });
107
+ return { success: true, message: 'Added via `claude mcp add nowaikit`' };
108
+ }
109
+ catch (err) {
110
+ return { success: false, message: `claude mcp add failed: ${err}` };
111
+ }
112
+ }
113
+ /** Write a .env file. */
114
+ function writeDotEnv(client, instance) {
115
+ const env = buildEnvBlock(instance);
116
+ const lines = Object.entries(env).map(([k, v]) => `${k}=${v}`).join('\n');
117
+ try {
118
+ writeFileSync(client.configPath, lines + '\n', 'utf8');
119
+ return { success: true, message: `Written to ${client.configPath}` };
120
+ }
121
+ catch (err) {
122
+ return { success: false, message: `Failed to write .env: ${err}` };
123
+ }
124
+ }
125
+ /** Write to the appropriate config based on client type. */
126
+ export function writeClientConfig(client, instance) {
127
+ switch (client.writeMethod) {
128
+ case 'json-mcpServers':
129
+ return writeMcpServersJson(client, instance);
130
+ case 'json-servers':
131
+ return writeVsCodeJson(client, instance);
132
+ case 'command':
133
+ return writeClaudeCode(client, instance);
134
+ case 'env':
135
+ return writeDotEnv(client, instance);
136
+ default:
137
+ return { success: false, message: `Unknown write method: ${client.writeMethod}` };
138
+ }
139
+ }
140
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/writers/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ export interface McpPrompt {
2
+ name: string;
3
+ description: string;
4
+ arguments?: Array<{
5
+ name: string;
6
+ description: string;
7
+ required?: boolean;
8
+ }>;
9
+ }
10
+ export interface McpPromptMessage {
11
+ role: 'user' | 'assistant';
12
+ content: {
13
+ type: 'text';
14
+ text: string;
15
+ };
16
+ }
17
+ export interface GetPromptResult {
18
+ description: string;
19
+ messages: McpPromptMessage[];
20
+ }
21
+ /** All prompts merged (built-in + user-defined). */
22
+ export declare function getPrompts(): McpPrompt[];
23
+ /** Resolve a prompt by name, substituting any provided arguments into the template. */
24
+ export declare function resolvePrompt(name: string, args?: Record<string, string>): GetPromptResult | null;
25
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,KAAK,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CACzC;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,gBAAgB,EAAE,CAAC;CAC9B;AAED,oDAAoD;AACpD,wBAAgB,UAAU,IAAI,SAAS,EAAE,CAOxC;AAED,uFAAuF;AACvF,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,eAAe,GAAG,IAAI,CAuBjG"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * MCP Prompts registry — exposes built-in and user-defined slash commands.
3
+ */
4
+ import { itsmPrompts } from './itsm.js';
5
+ import { loadUserPrompts } from './user-prompts.js';
6
+ /** All prompts merged (built-in + user-defined). */
7
+ export function getPrompts() {
8
+ const userPrompts = loadUserPrompts();
9
+ return [...itsmPrompts, ...userPrompts].map(p => ({
10
+ name: p.name,
11
+ description: p.description,
12
+ arguments: p.arguments,
13
+ }));
14
+ }
15
+ /** Resolve a prompt by name, substituting any provided arguments into the template. */
16
+ export function resolvePrompt(name, args) {
17
+ const allPrompts = [...itsmPrompts, ...loadUserPrompts()];
18
+ const prompt = allPrompts.find(p => p.name === name);
19
+ if (!prompt)
20
+ return null;
21
+ let text = prompt.template;
22
+ // Substitute {argName} placeholders with provided values
23
+ if (args) {
24
+ for (const [key, value] of Object.entries(args)) {
25
+ text = text.replaceAll(`{${key}}`, value);
26
+ }
27
+ }
28
+ return {
29
+ description: prompt.description,
30
+ messages: [
31
+ {
32
+ role: 'user',
33
+ content: { type: 'text', text },
34
+ },
35
+ ],
36
+ };
37
+ }
38
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAsBpD,oDAAoD;AACpD,MAAM,UAAU,UAAU;IACxB,MAAM,WAAW,GAAG,eAAe,EAAE,CAAC;IACtC,OAAO,CAAC,GAAG,WAAW,EAAE,GAAG,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAChD,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,SAAS,EAAE,CAAC,CAAC,SAAS;KACvB,CAAC,CAAC,CAAC;AACN,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,IAA6B;IACvE,MAAM,UAAU,GAAG,CAAC,GAAG,WAAW,EAAE,GAAG,eAAe,EAAE,CAAC,CAAC;IAC1D,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACrD,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEzB,IAAI,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC;IAE3B,yDAAyD;IACzD,IAAI,IAAI,EAAE,CAAC;QACT,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAChD,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,GAAG,EAAE,KAAK,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,OAAO;QACL,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;aAChC;SACF;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Built-in ITSM slash commands (MCP Prompts).
3
+ *
4
+ * These appear as "/" commands in Claude Desktop, Cursor, and other
5
+ * MCP clients that support the Prompts capability.
6
+ */
7
+ export interface PromptDefinition {
8
+ name: string;
9
+ description: string;
10
+ /** Optional user-visible arguments the AI client will ask for */
11
+ arguments?: Array<{
12
+ name: string;
13
+ description: string;
14
+ required?: boolean;
15
+ }>;
16
+ /** Template to send as the user message */
17
+ template: string;
18
+ }
19
+ export declare const itsmPrompts: PromptDefinition[];
20
+ //# sourceMappingURL=itsm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"itsm.d.ts","sourceRoot":"","sources":["../../src/prompts/itsm.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,iEAAiE;IACjE,SAAS,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAC7E,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,WAAW,EAAE,gBAAgB,EA+GzC,CAAC"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Built-in ITSM slash commands (MCP Prompts).
3
+ *
4
+ * These appear as "/" commands in Claude Desktop, Cursor, and other
5
+ * MCP clients that support the Prompts capability.
6
+ */
7
+ export const itsmPrompts = [
8
+ {
9
+ name: 'morning-standup',
10
+ description: 'Daily standup briefing — P1/P2 incidents, SLA breaches, changes due today',
11
+ template: 'Give me a morning standup briefing:\n' +
12
+ '1. List all active P1 and P2 incidents — number, short description, assigned to, time open.\n' +
13
+ '2. List any incidents currently breaching or about to breach SLA.\n' +
14
+ '3. List change requests scheduled for today.\n' +
15
+ 'Format clearly with sections. Flag anything requiring immediate attention.',
16
+ },
17
+ {
18
+ name: 'my-tickets',
19
+ description: 'All open tasks, incidents, and requests assigned to me',
20
+ template: 'Show me everything currently assigned to me:\n' +
21
+ '- Open incidents\n' +
22
+ '- Open change requests\n' +
23
+ '- Open tasks\n' +
24
+ '- Pending catalog requests\n' +
25
+ 'Group by type. Include number, short description, priority, and time since opened.',
26
+ },
27
+ {
28
+ name: 'p1-alerts',
29
+ description: 'Active P1 incidents with time open and assignee',
30
+ template: 'List all active Priority 1 incidents. For each show:\n' +
31
+ '- Incident number and short description\n' +
32
+ '- Assigned to (person and group)\n' +
33
+ '- Time since opened\n' +
34
+ '- SLA status\n' +
35
+ '- Last work note\n' +
36
+ 'Sort by oldest first. Highlight any with no activity in the last 30 minutes.',
37
+ },
38
+ {
39
+ name: 'my-changes',
40
+ description: 'My pending change requests and their approval status',
41
+ template: 'Show my change requests:\n' +
42
+ '- Changes I submitted that are pending approval\n' +
43
+ '- Changes I need to approve\n' +
44
+ '- Scheduled changes for this week\n' +
45
+ 'Include change number, short description, scheduled date, and current state.',
46
+ },
47
+ {
48
+ name: 'knowledge-search',
49
+ description: 'Search the knowledge base',
50
+ arguments: [{ name: 'topic', description: 'What to search for', required: true }],
51
+ template: 'Search the ServiceNow knowledge base for "{topic}" and return the top 5 most relevant articles with their title, number, and a brief summary.',
52
+ },
53
+ {
54
+ name: 'create-incident',
55
+ description: 'Guided incident creation — asks for details then creates the record',
56
+ arguments: [
57
+ { name: 'description', description: 'Brief description of the issue', required: true },
58
+ { name: 'category', description: 'Category (e.g. Network, Hardware, Software)', required: false },
59
+ { name: 'urgency', description: '1=Critical, 2=High, 3=Medium, 4=Low', required: false },
60
+ ],
61
+ template: 'Create a new incident with:\n' +
62
+ '- Short description: {description}\n' +
63
+ '- Category: {category}\n' +
64
+ '- Urgency: {urgency}\n' +
65
+ 'Confirm the details before creating, then create the incident and return the number.',
66
+ },
67
+ {
68
+ name: 'sla-breaches',
69
+ description: 'Records currently breaching or about to breach SLA',
70
+ template: 'Show me all records currently breaching SLA or within 30 minutes of breach:\n' +
71
+ '- Incident number and short description\n' +
72
+ '- SLA name and time remaining\n' +
73
+ '- Current assignee\n' +
74
+ 'Sort by time remaining (most urgent first).',
75
+ },
76
+ {
77
+ name: 'ci-health',
78
+ description: 'CMDB health check for a named CI',
79
+ arguments: [{ name: 'ci_name', description: 'Name or sys_id of the Configuration Item', required: true }],
80
+ template: 'Give me a health check for the CI named "{ci_name}":\n' +
81
+ '- Current status and operational state\n' +
82
+ '- Open incidents linked to this CI\n' +
83
+ '- Recent changes involving this CI\n' +
84
+ '- Related CIs (upstream/downstream)',
85
+ },
86
+ {
87
+ name: 'run-atf',
88
+ description: 'Trigger an ATF test suite and report results',
89
+ arguments: [{ name: 'suite_name', description: 'Name or sys_id of the ATF suite', required: true }],
90
+ template: 'Run the ATF test suite "{suite_name}" and wait for completion. ' +
91
+ 'Report pass/fail for each test and summarise any failures with details.',
92
+ },
93
+ {
94
+ name: 'switch-instance',
95
+ description: 'Switch to a different ServiceNow instance for this session',
96
+ arguments: [{ name: 'instance', description: 'Instance name (e.g. prod, staging, dev)', required: true }],
97
+ template: 'Switch to the "{instance}" ServiceNow instance and confirm which instance is now active.',
98
+ },
99
+ {
100
+ name: 'deploy-updateset',
101
+ description: 'Preview and commit an update set',
102
+ arguments: [{ name: 'updateset_name', description: 'Name or sys_id of the update set', required: true }],
103
+ template: 'For update set "{updateset_name}":\n' +
104
+ '1. Show the contents (files changed, type of changes)\n' +
105
+ '2. Check for any conflicts or issues\n' +
106
+ '3. Ask for confirmation before committing\n' +
107
+ '4. If confirmed, commit the update set and report the result.',
108
+ },
109
+ ];
110
+ //# sourceMappingURL=itsm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"itsm.js","sourceRoot":"","sources":["../../src/prompts/itsm.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { PromptDefinition } from './itsm.js';
2
+ export declare function loadUserPrompts(): PromptDefinition[];
3
+ //# sourceMappingURL=user-prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-prompts.d.ts","sourceRoot":"","sources":["../../src/prompts/user-prompts.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAElD,wBAAgB,eAAe,IAAI,gBAAgB,EAAE,CAgBpD"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * User-defined custom slash commands loaded from nowaikit.commands.json
3
+ * in the current working directory.
4
+ *
5
+ * File format:
6
+ * [
7
+ * {
8
+ * "name": "my-p1-runbook",
9
+ * "description": "P1 runbook for my team",
10
+ * "template": "List all P1 incidents in the Network category..."
11
+ * }
12
+ * ]
13
+ */
14
+ import { existsSync, readFileSync } from 'fs';
15
+ import { join } from 'path';
16
+ export function loadUserPrompts() {
17
+ const commandsFile = join(process.cwd(), 'nowaikit.commands.json');
18
+ if (!existsSync(commandsFile))
19
+ return [];
20
+ try {
21
+ const raw = JSON.parse(readFileSync(commandsFile, 'utf8'));
22
+ if (!Array.isArray(raw))
23
+ return [];
24
+ return raw.filter((item) => {
25
+ if (typeof item !== 'object' || item === null)
26
+ return false;
27
+ const obj = item;
28
+ return typeof obj['name'] === 'string' && typeof obj['template'] === 'string';
29
+ });
30
+ }
31
+ catch {
32
+ return [];
33
+ }
34
+ }
35
+ //# sourceMappingURL=user-prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-prompts.js","sourceRoot":"","sources":["../../src/prompts/user-prompts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAG5B,MAAM,UAAU,eAAe;IAC7B,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,wBAAwB,CAAC,CAAC;IACnE,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;QAAE,OAAO,EAAE,CAAC;IAEzC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAY,CAAC;QACtE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;YAAE,OAAO,EAAE,CAAC;QAEnC,OAAQ,GAAiB,CAAC,MAAM,CAAC,CAAC,IAAI,EAA4B,EAAE;YAClE,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI;gBAAE,OAAO,KAAK,CAAC;YAC5D,MAAM,GAAG,GAAG,IAA+B,CAAC;YAC5C,OAAO,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,UAAU,CAAC,KAAK,QAAQ,CAAC;QAChF,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * MCP Resources — @ mentions that users can reference in conversation.
3
+ *
4
+ * Resources appear as @mention completions in clients that support them
5
+ * (Claude Desktop, Cursor, etc.). Each resource returns live ServiceNow data.
6
+ *
7
+ * Available mentions:
8
+ * @my-incidents — open incidents assigned to current user
9
+ * @open-changes — change requests pending approval
10
+ * @sla-breaches — records currently breaching SLA
11
+ * @instance:info — current active instance metadata
12
+ * @ci:<name> — CMDB CI by name
13
+ * @kb:<title> — Knowledge article by title
14
+ */
15
+ import type { ServiceNowClient } from '../servicenow/client.js';
16
+ export interface McpResource {
17
+ uri: string;
18
+ name: string;
19
+ description: string;
20
+ mimeType: string;
21
+ }
22
+ /** Static resource list exposed to AI clients. */
23
+ export declare function getResources(): McpResource[];
24
+ /** Read a resource URI and return live data from ServiceNow. */
25
+ export declare function readResource(client: ServiceNowClient, uri: string): Promise<unknown>;
26
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,kDAAkD;AAClD,wBAAgB,YAAY,IAAI,WAAW,EAAE,CAuC5C;AAED,gEAAgE;AAChE,wBAAsB,YAAY,CAAC,MAAM,EAAE,gBAAgB,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA6D1F"}
@@ -0,0 +1,99 @@
1
+ /** Static resource list exposed to AI clients. */
2
+ export function getResources() {
3
+ return [
4
+ {
5
+ uri: 'servicenow://my-incidents',
6
+ name: 'my-incidents',
7
+ description: 'Open incidents currently assigned to me',
8
+ mimeType: 'application/json',
9
+ },
10
+ {
11
+ uri: 'servicenow://open-changes',
12
+ name: 'open-changes',
13
+ description: 'Change requests pending approval or scheduled this week',
14
+ mimeType: 'application/json',
15
+ },
16
+ {
17
+ uri: 'servicenow://sla-breaches',
18
+ name: 'sla-breaches',
19
+ description: 'Records currently breaching or about to breach SLA',
20
+ mimeType: 'application/json',
21
+ },
22
+ {
23
+ uri: 'servicenow://instance:info',
24
+ name: 'instance:info',
25
+ description: 'Current active ServiceNow instance metadata',
26
+ mimeType: 'application/json',
27
+ },
28
+ {
29
+ uri: 'servicenow://ci:{name}',
30
+ name: 'ci:<name>',
31
+ description: 'CMDB Configuration Item by name (e.g. @ci:web-prod-01)',
32
+ mimeType: 'application/json',
33
+ },
34
+ {
35
+ uri: 'servicenow://kb:{title}',
36
+ name: 'kb:<title>',
37
+ description: 'Knowledge Base article by title (e.g. @kb:VPN-setup)',
38
+ mimeType: 'application/json',
39
+ },
40
+ ];
41
+ }
42
+ /** Read a resource URI and return live data from ServiceNow. */
43
+ export async function readResource(client, uri) {
44
+ if (uri === 'servicenow://my-incidents') {
45
+ return client.queryRecords({
46
+ table: 'incident',
47
+ query: 'active=true',
48
+ limit: 20,
49
+ fields: 'number,short_description,priority,state,assigned_to,sys_created_on,sys_updated_on',
50
+ });
51
+ }
52
+ if (uri === 'servicenow://open-changes') {
53
+ return client.queryRecords({
54
+ table: 'change_request',
55
+ query: 'state=assess^ORstate=authorize^ORstate=scheduled',
56
+ limit: 20,
57
+ fields: 'number,short_description,state,start_date,end_date,assigned_to,approval',
58
+ });
59
+ }
60
+ if (uri === 'servicenow://sla-breaches') {
61
+ return client.queryRecords({
62
+ table: 'task_sla',
63
+ query: 'has_breached=true^stage=in_progress',
64
+ limit: 20,
65
+ fields: 'task,sla,has_breached,breach_time,stage',
66
+ });
67
+ }
68
+ if (uri === 'servicenow://instance:info') {
69
+ const props = await client.queryRecords({
70
+ table: 'sys_properties',
71
+ query: 'nameLIKEglide.buildTag^ORnameINglide.version,instance.name',
72
+ limit: 5,
73
+ fields: 'name,value',
74
+ });
75
+ return { instance_properties: props };
76
+ }
77
+ const ciMatch = uri.match(/^servicenow:\/\/ci:(.+)$/);
78
+ if (ciMatch) {
79
+ const ciName = decodeURIComponent(ciMatch[1]);
80
+ return client.queryRecords({
81
+ table: 'cmdb_ci',
82
+ query: `nameLIKE${ciName}`,
83
+ limit: 5,
84
+ fields: 'name,sys_class_name,operational_status,install_status,ip_address,sys_id',
85
+ });
86
+ }
87
+ const kbMatch = uri.match(/^servicenow:\/\/kb:(.+)$/);
88
+ if (kbMatch) {
89
+ const kbTitle = decodeURIComponent(kbMatch[1]);
90
+ return client.queryRecords({
91
+ table: 'kb_knowledge',
92
+ query: `short_descriptionLIKE${kbTitle}^ORtextLIKE${kbTitle}`,
93
+ limit: 5,
94
+ fields: 'number,short_description,text,category,sys_id',
95
+ });
96
+ }
97
+ return { error: `Unknown resource URI: ${uri}` };
98
+ }
99
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":""}