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,16 @@
1
+ /**
2
+ * Bearer token authentication middleware for HTTP/SSE transport.
3
+ * Validates NOWAIKIT_API_KEY when set; skips auth in dev mode (no key configured).
4
+ */
5
+ import type { IncomingMessage, ServerResponse } from 'http';
6
+ export interface AuthRequest extends IncomingMessage {
7
+ authenticated?: boolean;
8
+ }
9
+ /**
10
+ * Express-compatible middleware that validates Bearer tokens.
11
+ * If NOWAIKIT_API_KEY is not set, all requests pass through (dev mode).
12
+ */
13
+ export declare function authMiddleware(req: AuthRequest, res: ServerResponse, next: () => void): void;
14
+ /** Check if auth is required (API key is configured). */
15
+ export declare function isAuthRequired(): boolean;
16
+ //# sourceMappingURL=auth-middleware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-middleware.d.ts","sourceRoot":"","sources":["../../src/transport/auth-middleware.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AAE5D,MAAM,WAAW,WAAY,SAAQ,eAAe;IAClD,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,IAAI,GAAG,IAAI,CAyB5F;AAED,yDAAyD;AACzD,wBAAgB,cAAc,IAAI,OAAO,CAExC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Express-compatible middleware that validates Bearer tokens.
3
+ * If NOWAIKIT_API_KEY is not set, all requests pass through (dev mode).
4
+ */
5
+ export function authMiddleware(req, res, next) {
6
+ const apiKey = process.env.NOWAIKIT_API_KEY;
7
+ // No API key configured — dev mode, skip auth
8
+ if (!apiKey) {
9
+ req.authenticated = true;
10
+ return next();
11
+ }
12
+ const authHeader = req.headers.authorization;
13
+ if (!authHeader || !authHeader.startsWith('Bearer ')) {
14
+ res.writeHead(401, { 'Content-Type': 'application/json' });
15
+ res.end(JSON.stringify({ error: 'Missing or invalid Authorization header. Use: Bearer <NOWAIKIT_API_KEY>' }));
16
+ return;
17
+ }
18
+ const token = authHeader.slice(7);
19
+ if (token !== apiKey) {
20
+ res.writeHead(403, { 'Content-Type': 'application/json' });
21
+ res.end(JSON.stringify({ error: 'Invalid API key' }));
22
+ return;
23
+ }
24
+ req.authenticated = true;
25
+ next();
26
+ }
27
+ /** Check if auth is required (API key is configured). */
28
+ export function isAuthRequired() {
29
+ return !!process.env.NOWAIKIT_API_KEY;
30
+ }
31
+ //# sourceMappingURL=auth-middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-middleware.js","sourceRoot":"","sources":["../../src/transport/auth-middleware.ts"],"names":[],"mappings":"AAUA;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,GAAgB,EAAE,GAAmB,EAAE,IAAgB;IACpF,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;IAE5C,8CAA8C;IAC9C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC;QACzB,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC;IAED,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC;IAC7C,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QACrD,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;QAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,yEAAyE,EAAE,CAAC,CAAC,CAAC;QAC9G,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAClC,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QACrB,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;QAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC;QACtD,OAAO;IACT,CAAC;IAED,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC;IACzB,IAAI,EAAE,CAAC;AACT,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,cAAc;IAC5B,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;AACxC,CAAC"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Shared HTTP server for SSE/Streamable HTTP transport, REST API, and dashboard.
3
+ * Used when TRANSPORT=sse or TRANSPORT=http.
4
+ */
5
+ import { type Server as HttpServer } from 'http';
6
+ import { type AuthRequest } from './auth-middleware.js';
7
+ export interface HttpServerOptions {
8
+ port: number;
9
+ host: string;
10
+ corsOrigin: string;
11
+ }
12
+ type Middleware = (req: AuthRequest, res: any, next: () => void) => void;
13
+ type RouteHandler = (req: AuthRequest, res: any) => void | Promise<void>;
14
+ /**
15
+ * Lightweight Express-like HTTP server without the Express dependency.
16
+ * Supports routing, CORS, auth middleware, and JSON body parsing.
17
+ */
18
+ export declare class NowAIKitHttpServer {
19
+ private options;
20
+ private routes;
21
+ private middlewares;
22
+ private server;
23
+ private corsOrigin;
24
+ constructor(options: HttpServerOptions);
25
+ /** Register a route. */
26
+ route(method: string, path: string, handler: RouteHandler, requiresAuth?: boolean): void;
27
+ /** Convenience methods. */
28
+ get(path: string, handler: RouteHandler, requiresAuth?: boolean): void;
29
+ post(path: string, handler: RouteHandler, requiresAuth?: boolean): void;
30
+ delete(path: string, handler: RouteHandler, requiresAuth?: boolean): void;
31
+ /** Add a global middleware. */
32
+ use(middleware: Middleware): void;
33
+ /** Get the underlying HTTP server (for SSE/WebSocket upgrades). */
34
+ getHttpServer(): HttpServer;
35
+ /** Start listening. */
36
+ start(): Promise<void>;
37
+ /** Stop the server. */
38
+ stop(): Promise<void>;
39
+ private handleRequest;
40
+ }
41
+ /** Create an HTTP server with defaults from env vars. */
42
+ export declare function createHttpServer(): NowAIKitHttpServer;
43
+ export {};
44
+ //# sourceMappingURL=http-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-server.d.ts","sourceRoot":"","sources":["../../src/transport/http-server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAgB,KAAK,MAAM,IAAI,UAAU,EAAE,MAAM,MAAM,CAAC;AAC/D,OAAO,EAAkB,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAGxE,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,KAAK,UAAU,GAAG,CAAC,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;AACzE,KAAK,YAAY,GAAG,CAAC,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AASzE;;;GAGG;AACH,qBAAa,kBAAkB;IAMjB,OAAO,CAAC,OAAO;IAL3B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,WAAW,CAAoB;IACvC,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,UAAU,CAAS;gBAEP,OAAO,EAAE,iBAAiB;IAI9C,wBAAwB;IACxB,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,YAAY,UAAO,GAAG,IAAI;IAIrF,2BAA2B;IAC3B,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,YAAY,UAAO,GAAG,IAAI;IACnE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,YAAY,UAAO,GAAG,IAAI;IACpE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,YAAY,UAAO,GAAG,IAAI;IAEtE,+BAA+B;IAC/B,GAAG,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IAIjC,mEAAmE;IACnE,aAAa,IAAI,UAAU;IAK3B,uBAAuB;IACjB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAkC5B,uBAAuB;IACjB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAUb,aAAa;CA2C5B;AAyCD,yDAAyD;AACzD,wBAAgB,gBAAgB,IAAI,kBAAkB,CAMrD"}
@@ -0,0 +1,172 @@
1
+ /**
2
+ * Shared HTTP server for SSE/Streamable HTTP transport, REST API, and dashboard.
3
+ * Used when TRANSPORT=sse or TRANSPORT=http.
4
+ */
5
+ import { createServer } from 'http';
6
+ import { authMiddleware } from './auth-middleware.js';
7
+ import { logger } from '../utils/logging.js';
8
+ /**
9
+ * Lightweight Express-like HTTP server without the Express dependency.
10
+ * Supports routing, CORS, auth middleware, and JSON body parsing.
11
+ */
12
+ export class NowAIKitHttpServer {
13
+ options;
14
+ routes = [];
15
+ middlewares = [];
16
+ server = null;
17
+ corsOrigin;
18
+ constructor(options) {
19
+ this.options = options;
20
+ this.corsOrigin = options.corsOrigin;
21
+ }
22
+ /** Register a route. */
23
+ route(method, path, handler, requiresAuth = true) {
24
+ this.routes.push({ method: method.toUpperCase(), path, handler, requiresAuth });
25
+ }
26
+ /** Convenience methods. */
27
+ get(path, handler, requiresAuth = true) { this.route('GET', path, handler, requiresAuth); }
28
+ post(path, handler, requiresAuth = true) { this.route('POST', path, handler, requiresAuth); }
29
+ delete(path, handler, requiresAuth = true) { this.route('DELETE', path, handler, requiresAuth); }
30
+ /** Add a global middleware. */
31
+ use(middleware) {
32
+ this.middlewares.push(middleware);
33
+ }
34
+ /** Get the underlying HTTP server (for SSE/WebSocket upgrades). */
35
+ getHttpServer() {
36
+ if (!this.server)
37
+ throw new Error('Server not started');
38
+ return this.server;
39
+ }
40
+ /** Start listening. */
41
+ async start() {
42
+ this.server = createServer(async (req, res) => {
43
+ // CORS headers
44
+ res.setHeader('Access-Control-Allow-Origin', this.corsOrigin);
45
+ res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
46
+ res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization');
47
+ res.setHeader('Access-Control-Max-Age', '86400');
48
+ // Handle preflight
49
+ if (req.method === 'OPTIONS') {
50
+ res.writeHead(204);
51
+ res.end();
52
+ return;
53
+ }
54
+ try {
55
+ await this.handleRequest(req, res);
56
+ }
57
+ catch (error) {
58
+ logger.error('HTTP request error', error);
59
+ if (!res.headersSent) {
60
+ res.writeHead(500, { 'Content-Type': 'application/json' });
61
+ res.end(JSON.stringify({ error: 'Internal server error' }));
62
+ }
63
+ }
64
+ });
65
+ return new Promise((resolve) => {
66
+ this.server.listen(this.options.port, this.options.host, () => {
67
+ logger.info(`HTTP server listening on ${this.options.host}:${this.options.port}`);
68
+ resolve();
69
+ });
70
+ });
71
+ }
72
+ /** Stop the server. */
73
+ async stop() {
74
+ return new Promise((resolve) => {
75
+ if (this.server) {
76
+ this.server.close(() => resolve());
77
+ }
78
+ else {
79
+ resolve();
80
+ }
81
+ });
82
+ }
83
+ async handleRequest(req, res) {
84
+ const url = new URL(req.url || '/', `http://${req.headers.host || 'localhost'}`);
85
+ const pathname = url.pathname;
86
+ const method = req.method?.toUpperCase() || 'GET';
87
+ // Find matching route
88
+ const route = this.routes.find(r => {
89
+ if (r.method !== method)
90
+ return false;
91
+ return matchPath(r.path, pathname);
92
+ });
93
+ if (!route) {
94
+ res.writeHead(404, { 'Content-Type': 'application/json' });
95
+ res.end(JSON.stringify({ error: 'Not found' }));
96
+ return;
97
+ }
98
+ // Auth check
99
+ if (route.requiresAuth) {
100
+ const authPassed = await new Promise((resolve) => {
101
+ authMiddleware(req, res, () => resolve(true));
102
+ // If authMiddleware ended the response, resolve false
103
+ if (res.writableEnded)
104
+ resolve(false);
105
+ });
106
+ if (!authPassed)
107
+ return;
108
+ }
109
+ // Parse JSON body for POST/PUT/PATCH
110
+ if (['POST', 'PUT', 'PATCH'].includes(method)) {
111
+ try {
112
+ req.body = await parseJsonBody(req);
113
+ }
114
+ catch {
115
+ req.body = {};
116
+ }
117
+ }
118
+ // Parse URL params
119
+ const params = extractParams(route.path, pathname);
120
+ req.params = params;
121
+ req.query = Object.fromEntries(url.searchParams);
122
+ await route.handler(req, res);
123
+ }
124
+ }
125
+ /** Parse JSON body from request stream. */
126
+ function parseJsonBody(req) {
127
+ return new Promise((resolve, reject) => {
128
+ const chunks = [];
129
+ req.on('data', (chunk) => chunks.push(chunk));
130
+ req.on('end', () => {
131
+ const body = Buffer.concat(chunks).toString();
132
+ if (!body)
133
+ return resolve({});
134
+ try {
135
+ resolve(JSON.parse(body));
136
+ }
137
+ catch {
138
+ reject(new Error('Invalid JSON body'));
139
+ }
140
+ });
141
+ req.on('error', reject);
142
+ });
143
+ }
144
+ /** Simple path matching with :param support. */
145
+ function matchPath(pattern, pathname) {
146
+ const patternParts = pattern.split('/');
147
+ const pathParts = pathname.split('/');
148
+ if (patternParts.length !== pathParts.length)
149
+ return false;
150
+ return patternParts.every((p, i) => p.startsWith(':') || p === pathParts[i]);
151
+ }
152
+ /** Extract named params from path. */
153
+ function extractParams(pattern, pathname) {
154
+ const params = {};
155
+ const patternParts = pattern.split('/');
156
+ const pathParts = pathname.split('/');
157
+ patternParts.forEach((p, i) => {
158
+ if (p.startsWith(':')) {
159
+ params[p.slice(1)] = pathParts[i];
160
+ }
161
+ });
162
+ return params;
163
+ }
164
+ /** Create an HTTP server with defaults from env vars. */
165
+ export function createHttpServer() {
166
+ return new NowAIKitHttpServer({
167
+ port: parseInt(process.env.PORT || '3000', 10),
168
+ host: process.env.HOST || '0.0.0.0',
169
+ corsOrigin: process.env.CORS_ORIGIN || '*',
170
+ });
171
+ }
172
+ //# sourceMappingURL=http-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-server.js","sourceRoot":"","sources":["../../src/transport/http-server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Transport factory — selects and configures the MCP transport based on TRANSPORT env var.
3
+ *
4
+ * Supported transports:
5
+ * stdio (default) — Standard I/O (child process pipes)
6
+ * sse — Server-Sent Events over HTTP
7
+ * http — Streamable HTTP (MCP 2025-03-26 spec)
8
+ */
9
+ import type { Server } from '@modelcontextprotocol/sdk/server/index.js';
10
+ import { type NowAIKitHttpServer } from './http-server.js';
11
+ export type TransportType = 'stdio' | 'sse' | 'http';
12
+ export declare function getTransportType(): TransportType;
13
+ /**
14
+ * Connect the MCP server to the selected transport.
15
+ * Returns the HTTP server instance if using SSE/HTTP transport (for mounting API routes).
16
+ */
17
+ export declare function connectTransport(server: Server, toolCount: number): Promise<NowAIKitHttpServer | null>;
18
+ export { NowAIKitHttpServer } from './http-server.js';
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/transport/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAGxE,OAAO,EAAoB,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAE7E,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;AAErD,wBAAgB,gBAAgB,IAAI,aAAa,CAIhD;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAqBpC;AAyFD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,105 @@
1
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
2
+ import { logger } from '../utils/logging.js';
3
+ import { createHttpServer } from './http-server.js';
4
+ export function getTransportType() {
5
+ const transport = (process.env.TRANSPORT || 'stdio').toLowerCase();
6
+ if (transport === 'sse' || transport === 'http')
7
+ return transport;
8
+ return 'stdio';
9
+ }
10
+ /**
11
+ * Connect the MCP server to the selected transport.
12
+ * Returns the HTTP server instance if using SSE/HTTP transport (for mounting API routes).
13
+ */
14
+ export async function connectTransport(server, toolCount) {
15
+ const transportType = getTransportType();
16
+ if (transportType === 'stdio') {
17
+ const transport = new StdioServerTransport();
18
+ await server.connect(transport);
19
+ logger.info(`NowAIKit server running on stdio [${toolCount} tools]`);
20
+ return null;
21
+ }
22
+ // HTTP-based transports (SSE or Streamable HTTP)
23
+ const httpServer = createHttpServer();
24
+ if (transportType === 'sse') {
25
+ await setupSseTransport(server, httpServer);
26
+ }
27
+ else {
28
+ await setupStreamableHttpTransport(server, httpServer);
29
+ }
30
+ logger.info(`NowAIKit server running on ${transportType} [${toolCount} tools]`);
31
+ return httpServer;
32
+ }
33
+ /**
34
+ * SSE Transport — GET /sse opens an SSE stream, POST /messages sends client messages.
35
+ */
36
+ async function setupSseTransport(server, httpServer) {
37
+ const { SSEServerTransport } = await import('@modelcontextprotocol/sdk/server/sse.js');
38
+ const sessions = new Map();
39
+ httpServer.get('/sse', async (req, res) => {
40
+ const transport = new SSEServerTransport('/messages', res);
41
+ const sessionId = transport.sessionId;
42
+ sessions.set(sessionId, transport);
43
+ req.on('close', () => {
44
+ sessions.delete(sessionId);
45
+ logger.info(`SSE session closed: ${sessionId}`);
46
+ });
47
+ await server.connect(transport);
48
+ logger.info(`SSE session connected: ${sessionId}`);
49
+ }, true);
50
+ httpServer.post('/messages', async (req, res) => {
51
+ const url = new URL(req.url || '/', `http://${req.headers.host || 'localhost'}`);
52
+ const sessionId = url.searchParams.get('sessionId');
53
+ if (!sessionId || !sessions.has(sessionId)) {
54
+ res.writeHead(400, { 'Content-Type': 'application/json' });
55
+ res.end(JSON.stringify({ error: 'Invalid or missing sessionId' }));
56
+ return;
57
+ }
58
+ const transport = sessions.get(sessionId);
59
+ await transport.handlePostMessage(req, res);
60
+ }, true);
61
+ // Health endpoint (no auth required)
62
+ addHealthRoute(httpServer);
63
+ await httpServer.start();
64
+ }
65
+ /**
66
+ * Streamable HTTP Transport — POST/GET/DELETE /mcp for all MCP communication.
67
+ */
68
+ async function setupStreamableHttpTransport(server, httpServer) {
69
+ const { StreamableHTTPServerTransport } = await import('@modelcontextprotocol/sdk/server/streamableHttp.js');
70
+ const { randomUUID } = await import('crypto');
71
+ const transport = new StreamableHTTPServerTransport({
72
+ sessionIdGenerator: () => randomUUID(),
73
+ });
74
+ // Mount transport on /mcp
75
+ httpServer.post('/mcp', async (req, res) => {
76
+ await transport.handleRequest(req, res);
77
+ }, true);
78
+ httpServer.get('/mcp', async (req, res) => {
79
+ await transport.handleRequest(req, res);
80
+ }, true);
81
+ httpServer.delete('/mcp', async (req, res) => {
82
+ await transport.handleRequest(req, res);
83
+ }, true);
84
+ addHealthRoute(httpServer);
85
+ await server.connect(transport);
86
+ await httpServer.start();
87
+ }
88
+ /** Shared health endpoint — no auth required. */
89
+ function addHealthRoute(httpServer) {
90
+ httpServer.get('/health', async (_req, res) => {
91
+ const { getTools } = await import('../tools/index.js');
92
+ const tools = getTools();
93
+ res.writeHead(200, { 'Content-Type': 'application/json' });
94
+ res.end(JSON.stringify({
95
+ status: 'ok',
96
+ name: 'nowaikit',
97
+ version: '4.0.0',
98
+ transport: getTransportType(),
99
+ tools_count: tools.length,
100
+ timestamp: new Date().toISOString(),
101
+ }));
102
+ }, false);
103
+ }
104
+ export { NowAIKitHttpServer } from './http-server.js';
105
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/transport/index.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,8 @@ export declare function requireCmdbWrite(): void;
13
13
  export declare function requireScripting(): void;
14
14
  export declare function requireNowAssist(): void;
15
15
  export declare function requireAtf(): void;
16
+ export declare function requireFluent(): void;
17
+ export declare function isFluentEnabled(): boolean;
16
18
  export declare function isWriteEnabled(): boolean;
17
19
  export declare function isCmdbWriteEnabled(): boolean;
18
20
  export declare function isScriptingEnabled(): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../../src/utils/permissions.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AAEH,wBAAgB,YAAY,IAAI,IAAI,CAOnC;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAQvC;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAQvC;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAOvC;AAED,wBAAgB,UAAU,IAAI,IAAI,CAOjC;AAED,wBAAgB,cAAc,IAAI,OAAO,CAExC;AAED,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AAED,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AAED,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AAED,wBAAgB,YAAY,IAAI,OAAO,CAEtC"}
1
+ {"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../../src/utils/permissions.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AAEH,wBAAgB,YAAY,IAAI,IAAI,CAOnC;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAQvC;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAQvC;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAOvC;AAED,wBAAgB,UAAU,IAAI,IAAI,CAOjC;AAED,wBAAgB,aAAa,IAAI,IAAI,CAOpC;AAED,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAED,wBAAgB,cAAc,IAAI,OAAO,CAExC;AAED,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AAED,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AAED,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AAED,wBAAgB,YAAY,IAAI,OAAO,CAEtC"}
@@ -36,6 +36,14 @@ export function requireAtf() {
36
36
  throw new ServiceNowError('ATF test execution is disabled. Set ATF_ENABLED=true to enable.', 'ATF_NOT_ENABLED');
37
37
  }
38
38
  }
39
+ export function requireFluent() {
40
+ if (process.env.FLUENT_ENABLED !== 'true') {
41
+ throw new ServiceNowError('Fluent/now-sdk operations are disabled. Set FLUENT_ENABLED=true to enable.', 'FLUENT_NOT_ENABLED');
42
+ }
43
+ }
44
+ export function isFluentEnabled() {
45
+ return process.env.FLUENT_ENABLED === 'true';
46
+ }
39
47
  export function isWriteEnabled() {
40
48
  return process.env.WRITE_ENABLED === 'true';
41
49
  }
@@ -1 +1 @@
1
- {"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../src/utils/permissions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C;;;;;;;;;GASG;AAEH,MAAM,UAAU,YAAY;IAC1B,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,MAAM,EAAE,CAAC;QACzC,MAAM,IAAI,eAAe,CACvB,kEAAkE,EAClE,mBAAmB,CACpB,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,YAAY,EAAE,CAAC;IACf,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,MAAM,EAAE,CAAC;QAC9C,MAAM,IAAI,eAAe,CACvB,mGAAmG,EACnG,wBAAwB,CACzB,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,YAAY,EAAE,CAAC;IACf,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,MAAM,EAAE,CAAC;QAC7C,MAAM,IAAI,eAAe,CACvB,iGAAiG,EACjG,uBAAuB,CACxB,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,MAAM,EAAE,CAAC;QAC9C,MAAM,IAAI,eAAe,CACvB,+EAA+E,EAC/E,wBAAwB,CACzB,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;QACvC,MAAM,IAAI,eAAe,CACvB,iEAAiE,EACjE,iBAAiB,CAClB,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,MAAM,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,MAAM,CAAC;AAC3F,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,MAAM,CAAC;AAC1F,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,MAAM,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,MAAM,CAAC;AAC5C,CAAC"}
1
+ {"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../src/utils/permissions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C;;;;;;;;;GASG;AAEH,MAAM,UAAU,YAAY;IAC1B,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,MAAM,EAAE,CAAC;QACzC,MAAM,IAAI,eAAe,CACvB,kEAAkE,EAClE,mBAAmB,CACpB,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,YAAY,EAAE,CAAC;IACf,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,MAAM,EAAE,CAAC;QAC9C,MAAM,IAAI,eAAe,CACvB,mGAAmG,EACnG,wBAAwB,CACzB,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,YAAY,EAAE,CAAC;IACf,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,MAAM,EAAE,CAAC;QAC7C,MAAM,IAAI,eAAe,CACvB,iGAAiG,EACjG,uBAAuB,CACxB,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,MAAM,EAAE,CAAC;QAC9C,MAAM,IAAI,eAAe,CACvB,+EAA+E,EAC/E,wBAAwB,CACzB,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;QACvC,MAAM,IAAI,eAAe,CACvB,iEAAiE,EACjE,iBAAiB,CAClB,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,MAAM,EAAE,CAAC;QAC1C,MAAM,IAAI,eAAe,CACvB,4EAA4E,EAC5E,oBAAoB,CACrB,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,MAAM,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,MAAM,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,MAAM,CAAC;AAC3F,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,MAAM,CAAC;AAC1F,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,MAAM,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,MAAM,CAAC;AAC5C,CAAC"}
package/package.json CHANGED
@@ -1,9 +1,28 @@
1
1
  {
2
2
  "name": "nowaikit",
3
3
  "mcpName": "io.github.aartiq/nowaikit",
4
- "version": "3.0.0",
4
+ "version": "4.0.0",
5
5
  "description": "The Most Comprehensive ServiceNow AI Toolkit — 400+ MCP tools + 26 AI capabilities (scan, review, build, ops, docs) + direct BYOK mode. Integrates with Claude, ChatGPT, Gemini, Cursor, GitHub Copilot and any LLM.",
6
6
  "main": "dist/server.js",
7
+ "types": "dist/server.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/server.d.ts",
11
+ "import": "./dist/server.js"
12
+ },
13
+ "./sdk": {
14
+ "types": "./dist/sdk/index.d.ts",
15
+ "import": "./dist/sdk/index.js"
16
+ },
17
+ "./client": {
18
+ "types": "./dist/servicenow/client.d.ts",
19
+ "import": "./dist/servicenow/client.js"
20
+ },
21
+ "./reports": {
22
+ "types": "./dist/reports/index.d.ts",
23
+ "import": "./dist/reports/index.js"
24
+ }
25
+ },
7
26
  "bin": {
8
27
  "nowaikit": "dist/cli/index.js"
9
28
  },
@@ -19,7 +38,7 @@
19
38
  "node": ">=20.0.0"
20
39
  },
21
40
  "scripts": {
22
- "build": "tsc",
41
+ "build": "tsc && node scripts/extract-tools.mjs",
23
42
  "dev": "tsx watch src/server.ts",
24
43
  "start": "node dist/server.js",
25
44
  "setup": "node dist/cli/index.js setup",
@@ -82,7 +101,9 @@
82
101
  "security-audit",
83
102
  "technical-debt",
84
103
  "direct-mode",
85
- "byok"
104
+ "byok",
105
+ "sdk",
106
+ "servicenow-sdk"
86
107
  ],
87
108
  "author": "aartiq",
88
109
  "homepage": "https://github.com/aartiq/nowaikit#readme",
@@ -93,7 +114,7 @@
93
114
  "bugs": {
94
115
  "url": "https://github.com/aartiq/nowaikit/issues"
95
116
  },
96
- "license": "MIT",
117
+ "license": "SEE LICENSE IN LICENSE",
97
118
  "overrides": {
98
119
  "minimatch": "^10.2.2"
99
120
  },
@@ -104,6 +125,8 @@
104
125
  "commander": "^14.0.3",
105
126
  "dotenv": "^16.4.5",
106
127
  "ora": "^9.3.0",
128
+ "pdfmake": "^0.3.7",
129
+ "pptxgenjs": "^4.0.1",
107
130
  "zod": "^3.22.4"
108
131
  },
109
132
  "devDependencies": {