opalserve 0.1.2 → 2.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 (223) hide show
  1. package/README.md +112 -116
  2. package/assets/logo.svg +54 -0
  3. package/dist/cli/commands/health.d.ts +4 -0
  4. package/dist/cli/commands/health.d.ts.map +1 -0
  5. package/dist/cli/commands/health.js +36 -0
  6. package/dist/cli/commands/health.js.map +1 -0
  7. package/dist/cli/commands/init.d.ts +2 -0
  8. package/dist/cli/commands/init.d.ts.map +1 -0
  9. package/dist/cli/commands/init.js +81 -0
  10. package/dist/cli/commands/init.js.map +1 -0
  11. package/dist/cli/commands/server.d.ts +10 -0
  12. package/dist/cli/commands/server.d.ts.map +1 -0
  13. package/dist/cli/commands/server.js +108 -0
  14. package/dist/cli/commands/server.js.map +1 -0
  15. package/dist/cli/commands/start.d.ts +6 -0
  16. package/dist/cli/commands/start.d.ts.map +1 -0
  17. package/dist/cli/commands/start.js +63 -0
  18. package/dist/cli/commands/start.js.map +1 -0
  19. package/dist/cli/commands/status.d.ts +2 -0
  20. package/dist/cli/commands/status.d.ts.map +1 -0
  21. package/dist/cli/commands/status.js +21 -0
  22. package/dist/cli/commands/status.js.map +1 -0
  23. package/dist/cli/commands/tools.d.ts +8 -0
  24. package/dist/cli/commands/tools.d.ts.map +1 -0
  25. package/dist/cli/commands/tools.js +28 -0
  26. package/dist/cli/commands/tools.js.map +1 -0
  27. package/dist/cli/index.d.ts +1 -1
  28. package/dist/cli/index.d.ts.map +1 -1
  29. package/dist/cli/index.js +82 -30
  30. package/dist/cli/index.js.map +1 -1
  31. package/dist/cli/ui/banner.d.ts +8 -0
  32. package/dist/cli/ui/banner.d.ts.map +1 -0
  33. package/dist/cli/ui/banner.js +54 -0
  34. package/dist/cli/ui/banner.js.map +1 -0
  35. package/dist/cli/ui/prompts.d.ts +11 -0
  36. package/dist/cli/ui/prompts.d.ts.map +1 -0
  37. package/dist/cli/ui/prompts.js +74 -0
  38. package/dist/cli/ui/prompts.js.map +1 -0
  39. package/dist/cli/ui/table.d.ts +5 -0
  40. package/dist/cli/ui/table.d.ts.map +1 -0
  41. package/dist/cli/ui/table.js +103 -0
  42. package/dist/cli/ui/table.js.map +1 -0
  43. package/dist/config/defaults.d.ts +5 -0
  44. package/dist/config/defaults.d.ts.map +1 -0
  45. package/dist/config/defaults.js +18 -0
  46. package/dist/config/defaults.js.map +1 -0
  47. package/dist/config/loader.d.ts +4 -0
  48. package/dist/config/loader.d.ts.map +1 -0
  49. package/dist/config/loader.js +57 -0
  50. package/dist/config/loader.js.map +1 -0
  51. package/dist/config/schema.d.ts +2 -0
  52. package/dist/config/schema.d.ts.map +1 -0
  53. package/dist/config/schema.js +2 -0
  54. package/dist/config/schema.js.map +1 -0
  55. package/dist/core/discovery.d.ts +17 -0
  56. package/dist/core/discovery.d.ts.map +1 -0
  57. package/dist/core/discovery.js +31 -0
  58. package/dist/core/discovery.js.map +1 -0
  59. package/dist/core/proxy.d.ts +14 -0
  60. package/dist/core/proxy.d.ts.map +1 -0
  61. package/dist/core/proxy.js +36 -0
  62. package/dist/core/proxy.js.map +1 -0
  63. package/dist/core/registry.d.ts +28 -31
  64. package/dist/core/registry.d.ts.map +1 -1
  65. package/dist/core/registry.js +90 -234
  66. package/dist/core/registry.js.map +1 -1
  67. package/dist/core/server-manager.d.ts +18 -0
  68. package/dist/core/server-manager.d.ts.map +1 -0
  69. package/dist/core/server-manager.js +120 -0
  70. package/dist/core/server-manager.js.map +1 -0
  71. package/dist/index.d.ts +11 -12
  72. package/dist/index.d.ts.map +1 -1
  73. package/dist/index.js +14 -9
  74. package/dist/index.js.map +1 -1
  75. package/dist/server/app.d.ts +8 -0
  76. package/dist/server/app.d.ts.map +1 -0
  77. package/dist/server/app.js +35 -0
  78. package/dist/server/app.js.map +1 -0
  79. package/dist/server/mcp-gateway.d.ts +12 -0
  80. package/dist/server/mcp-gateway.d.ts.map +1 -0
  81. package/dist/server/mcp-gateway.js +91 -0
  82. package/dist/server/mcp-gateway.js.map +1 -0
  83. package/dist/server/routes/health.d.ts +4 -0
  84. package/dist/server/routes/health.d.ts.map +1 -0
  85. package/dist/server/routes/health.js +22 -0
  86. package/dist/server/routes/health.js.map +1 -0
  87. package/dist/server/routes/servers.d.ts +4 -0
  88. package/dist/server/routes/servers.d.ts.map +1 -0
  89. package/dist/server/routes/servers.js +47 -0
  90. package/dist/server/routes/servers.js.map +1 -0
  91. package/dist/server/routes/tools.d.ts +4 -0
  92. package/dist/server/routes/tools.d.ts.map +1 -0
  93. package/dist/server/routes/tools.js +44 -0
  94. package/dist/server/routes/tools.js.map +1 -0
  95. package/dist/storage/database.d.ts +41 -0
  96. package/dist/storage/database.d.ts.map +1 -0
  97. package/dist/storage/database.js +195 -0
  98. package/dist/storage/database.js.map +1 -0
  99. package/dist/storage/repositories/server-repo.d.ts +2 -0
  100. package/dist/storage/repositories/server-repo.d.ts.map +1 -0
  101. package/dist/storage/repositories/server-repo.js +3 -0
  102. package/dist/storage/repositories/server-repo.js.map +1 -0
  103. package/dist/storage/repositories/tool-repo.d.ts +2 -0
  104. package/dist/storage/repositories/tool-repo.d.ts.map +1 -0
  105. package/dist/storage/repositories/tool-repo.js +3 -0
  106. package/dist/storage/repositories/tool-repo.js.map +1 -0
  107. package/dist/types/index.d.ts +384 -591
  108. package/dist/types/index.d.ts.map +1 -1
  109. package/dist/types/index.js +44 -69
  110. package/dist/types/index.js.map +1 -1
  111. package/dist/utils/logger.d.ts +7 -0
  112. package/dist/utils/logger.d.ts.map +1 -0
  113. package/dist/utils/logger.js +23 -0
  114. package/dist/utils/logger.js.map +1 -0
  115. package/package.json +65 -56
  116. package/.env.example +0 -19
  117. package/config/servers.example.yaml +0 -67
  118. package/config/servers.yaml +0 -2
  119. package/dist/cli/discover.d.ts +0 -3
  120. package/dist/cli/discover.d.ts.map +0 -1
  121. package/dist/cli/discover.js +0 -160
  122. package/dist/cli/discover.js.map +0 -1
  123. package/dist/connectors/base.d.ts +0 -49
  124. package/dist/connectors/base.d.ts.map +0 -1
  125. package/dist/connectors/base.js +0 -45
  126. package/dist/connectors/base.js.map +0 -1
  127. package/dist/connectors/custom.d.ts +0 -19
  128. package/dist/connectors/custom.d.ts.map +0 -1
  129. package/dist/connectors/custom.js +0 -129
  130. package/dist/connectors/custom.js.map +0 -1
  131. package/dist/connectors/github.d.ts +0 -18
  132. package/dist/connectors/github.d.ts.map +0 -1
  133. package/dist/connectors/github.js +0 -188
  134. package/dist/connectors/github.js.map +0 -1
  135. package/dist/connectors/google-drive.d.ts +0 -18
  136. package/dist/connectors/google-drive.d.ts.map +0 -1
  137. package/dist/connectors/google-drive.js +0 -209
  138. package/dist/connectors/google-drive.js.map +0 -1
  139. package/dist/connectors/index.d.ts +0 -11
  140. package/dist/connectors/index.d.ts.map +0 -1
  141. package/dist/connectors/index.js +0 -76
  142. package/dist/connectors/index.js.map +0 -1
  143. package/dist/connectors/postgres.d.ts +0 -18
  144. package/dist/connectors/postgres.d.ts.map +0 -1
  145. package/dist/connectors/postgres.js +0 -140
  146. package/dist/connectors/postgres.js.map +0 -1
  147. package/dist/connectors/slack.d.ts +0 -18
  148. package/dist/connectors/slack.d.ts.map +0 -1
  149. package/dist/connectors/slack.js +0 -181
  150. package/dist/connectors/slack.js.map +0 -1
  151. package/dist/core/auth.d.ts +0 -26
  152. package/dist/core/auth.d.ts.map +0 -1
  153. package/dist/core/auth.js +0 -81
  154. package/dist/core/auth.js.map +0 -1
  155. package/dist/core/tokenizer.d.ts +0 -16
  156. package/dist/core/tokenizer.d.ts.map +0 -1
  157. package/dist/core/tokenizer.js +0 -29
  158. package/dist/core/tokenizer.js.map +0 -1
  159. package/dist/governance/audit.d.ts +0 -27
  160. package/dist/governance/audit.d.ts.map +0 -1
  161. package/dist/governance/audit.js +0 -149
  162. package/dist/governance/audit.js.map +0 -1
  163. package/dist/governance/index.d.ts +0 -5
  164. package/dist/governance/index.d.ts.map +0 -1
  165. package/dist/governance/index.js +0 -5
  166. package/dist/governance/index.js.map +0 -1
  167. package/dist/governance/policy.d.ts +0 -20
  168. package/dist/governance/policy.d.ts.map +0 -1
  169. package/dist/governance/policy.js +0 -162
  170. package/dist/governance/policy.js.map +0 -1
  171. package/dist/governance/rate-limiter.d.ts +0 -20
  172. package/dist/governance/rate-limiter.d.ts.map +0 -1
  173. package/dist/governance/rate-limiter.js +0 -73
  174. package/dist/governance/rate-limiter.js.map +0 -1
  175. package/dist/governance/types.d.ts +0 -246
  176. package/dist/governance/types.d.ts.map +0 -1
  177. package/dist/governance/types.js +0 -72
  178. package/dist/governance/types.js.map +0 -1
  179. package/dist/identity/access-control.d.ts +0 -15
  180. package/dist/identity/access-control.d.ts.map +0 -1
  181. package/dist/identity/access-control.js +0 -81
  182. package/dist/identity/access-control.js.map +0 -1
  183. package/dist/identity/index.d.ts +0 -4
  184. package/dist/identity/index.d.ts.map +0 -1
  185. package/dist/identity/index.js +0 -4
  186. package/dist/identity/index.js.map +0 -1
  187. package/dist/identity/manager.d.ts +0 -29
  188. package/dist/identity/manager.d.ts.map +0 -1
  189. package/dist/identity/manager.js +0 -167
  190. package/dist/identity/manager.js.map +0 -1
  191. package/dist/identity/types.d.ts +0 -237
  192. package/dist/identity/types.d.ts.map +0 -1
  193. package/dist/identity/types.js +0 -80
  194. package/dist/identity/types.js.map +0 -1
  195. package/dist/registry/server.d.ts +0 -14
  196. package/dist/registry/server.d.ts.map +0 -1
  197. package/dist/registry/server.js +0 -177
  198. package/dist/registry/server.js.map +0 -1
  199. package/dist/utils/config.d.ts +0 -29
  200. package/dist/utils/config.d.ts.map +0 -1
  201. package/dist/utils/config.js +0 -47
  202. package/dist/utils/config.js.map +0 -1
  203. package/dist/utils/index.d.ts +0 -7
  204. package/dist/utils/index.d.ts.map +0 -1
  205. package/dist/utils/index.js +0 -44
  206. package/dist/utils/index.js.map +0 -1
  207. package/dist/workflow/engine.d.ts +0 -18
  208. package/dist/workflow/engine.d.ts.map +0 -1
  209. package/dist/workflow/engine.js +0 -155
  210. package/dist/workflow/engine.js.map +0 -1
  211. package/dist/workflow/index.d.ts +0 -4
  212. package/dist/workflow/index.d.ts.map +0 -1
  213. package/dist/workflow/index.js +0 -4
  214. package/dist/workflow/index.js.map +0 -1
  215. package/dist/workflow/templates.d.ts +0 -4
  216. package/dist/workflow/templates.d.ts.map +0 -1
  217. package/dist/workflow/templates.js +0 -218
  218. package/dist/workflow/templates.js.map +0 -1
  219. package/dist/workflow/types.d.ts +0 -255
  220. package/dist/workflow/types.d.ts.map +0 -1
  221. package/dist/workflow/types.js +0 -48
  222. package/dist/workflow/types.js.map +0 -1
  223. package/eslint.config.js +0 -25
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
@@ -1,76 +1,51 @@
1
1
  import { z } from 'zod';
2
- export const ToolSchema = z.object({
3
- id: z.string(),
4
- name: z.string(),
5
- description: z.string(),
6
- serverId: z.string(),
7
- serverName: z.string(),
8
- inputSchema: z.record(z.any()),
9
- outputSchema: z.record(z.any()).optional(),
10
- tags: z.array(z.string()).default([]),
11
- capabilities: z.array(z.string()).default([]),
12
- authRequirements: z.object({
13
- required: z.array(z.string()).default([]),
14
- optional: z.array(z.string()).default([]),
15
- }).default({}),
16
- rateLimits: z.object({
17
- requestsPerMinute: z.number().optional(),
18
- requestsPerHour: z.number().optional(),
19
- }).optional(),
20
- contextRequirements: z.object({
21
- minTokens: z.number().default(0),
22
- maxTokens: z.number().default(1000),
23
- }).default({}),
24
- metadata: z.record(z.any()).default({}),
25
- createdAt: z.string(),
26
- updatedAt: z.string(),
2
+ // --- MCP Server Configuration (what users configure) ---
3
+ export const StdioTransportSchema = z.object({
4
+ type: z.literal('stdio'),
5
+ command: z.string().min(1),
6
+ args: z.array(z.string()).default([]),
7
+ env: z.record(z.string()).optional(),
8
+ cwd: z.string().optional(),
9
+ });
10
+ export const SseTransportSchema = z.object({
11
+ type: z.literal('sse'),
12
+ url: z.string().url(),
13
+ headers: z.record(z.string()).optional(),
14
+ });
15
+ export const StreamableHttpTransportSchema = z.object({
16
+ type: z.literal('streamable-http'),
17
+ url: z.string().url(),
18
+ headers: z.record(z.string()).optional(),
27
19
  });
28
- export const ServerSchema = z.object({
29
- id: z.string(),
30
- name: z.string(),
31
- type: z.enum(['github', 'slack', 'postgres', 'google-drive', 'custom', 'http']),
32
- status: z.enum(['active', 'inactive', 'error', 'connecting']),
33
- endpoint: z.string().optional(),
34
- localCommand: z.string().optional(),
35
- description: z.string(),
36
- version: z.string().default('1.0.0'),
37
- capabilities: z.array(z.string()).default([]),
20
+ export const TransportConfigSchema = z.discriminatedUnion('type', [
21
+ StdioTransportSchema,
22
+ SseTransportSchema,
23
+ StreamableHttpTransportSchema,
24
+ ]);
25
+ export const McpServerConfigSchema = z.object({
26
+ name: z.string().min(1).regex(/^[a-z0-9-]+$/, 'Name must be lowercase alphanumeric with hyphens'),
27
+ transport: TransportConfigSchema,
28
+ enabled: z.boolean().default(true),
38
29
  tags: z.array(z.string()).default([]),
39
- health: z.object({
40
- status: z.enum(['healthy', 'degraded', 'unhealthy']),
41
- lastChecked: z.string(),
42
- responseTimeMs: z.number().optional(),
43
- errorCount: z.number().default(0),
44
- }).default({ status: 'healthy', lastChecked: new Date().toISOString() }),
45
- auth: z.object({
46
- type: z.enum(['none', 'api-key', 'oauth', 'jwt', 'basic']),
47
- configured: z.boolean().default(false),
48
- }).default({ type: 'none', configured: false }),
49
- metadata: z.record(z.any()).default({}),
50
- registeredAt: z.string(),
51
- lastSeen: z.string(),
30
+ autoConnect: z.boolean().default(true),
31
+ });
32
+ // --- Runtime Server State ---
33
+ export const ServerStatusSchema = z.enum(['connecting', 'connected', 'disconnected', 'error']);
34
+ // --- OpalServe Configuration ---
35
+ export const GatewayConfigSchema = z.object({
36
+ port: z.number().int().min(1).max(65535).default(3456),
37
+ host: z.string().default('127.0.0.1'),
38
+ });
39
+ export const StorageConfigSchema = z.object({
40
+ path: z.string().default(''), // empty = default ~/.opalserve/data.db
52
41
  });
53
- export const DiscoveryQuerySchema = z.object({
54
- query: z.string().optional(),
55
- capabilities: z.array(z.string()).optional(),
56
- tags: z.array(z.string()).optional(),
57
- limit: z.coerce.number().min(1).max(100).default(20),
58
- offset: z.coerce.number().min(0).default(0),
59
- contextBudget: z.coerce.number().min(1000).max(200000).default(128000),
60
- includeServers: z.coerce.boolean().default(true),
42
+ export const LoggingConfigSchema = z.object({
43
+ level: z.enum(['silent', 'error', 'warn', 'info', 'debug', 'trace']).default('info'),
61
44
  });
62
- export const DiscoveryResultSchema = z.object({
63
- tools: z.array(z.object({
64
- tool: ToolSchema,
65
- relevanceScore: z.number().min(0).max(1),
66
- matchReasons: z.array(z.string()).default([]),
67
- tokenEstimate: z.number(),
68
- })),
69
- servers: z.array(ServerSchema),
70
- totalMatches: z.number(),
71
- contextUsed: z.number(),
72
- contextBudget: z.number(),
73
- suggestions: z.array(z.string()).default([]),
74
- queryInterpretation: z.string(),
45
+ export const OpalServeConfigSchema = z.object({
46
+ servers: z.array(McpServerConfigSchema).default([]),
47
+ gateway: GatewayConfigSchema.default({}),
48
+ storage: StorageConfigSchema.default({}),
49
+ logging: LoggingConfigSchema.default({}),
75
50
  });
76
51
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import pino from 'pino';
2
+ declare let logger: pino.Logger;
3
+ export declare function setLogLevel(level: string): void;
4
+ export declare function createLogger(name: string): pino.Logger;
5
+ export declare function setSilent(): void;
6
+ export { logger };
7
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,QAAA,IAAI,MAAM,EAAE,IAAI,CAAC,MAUf,CAAC;AAEH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAE/C;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC,MAAM,CAEtD;AAED,wBAAgB,SAAS,IAAI,IAAI,CAEhC;AAED,OAAO,EAAE,MAAM,EAAE,CAAC"}
@@ -0,0 +1,23 @@
1
+ import pino from 'pino';
2
+ let logger = pino({
3
+ level: 'info',
4
+ transport: {
5
+ target: 'pino-pretty',
6
+ options: {
7
+ colorize: true,
8
+ ignore: 'pid,hostname',
9
+ translateTime: 'HH:MM:ss',
10
+ },
11
+ },
12
+ });
13
+ export function setLogLevel(level) {
14
+ logger.level = level;
15
+ }
16
+ export function createLogger(name) {
17
+ return logger.child({ name });
18
+ }
19
+ export function setSilent() {
20
+ logger = pino({ level: 'silent' });
21
+ }
22
+ export { logger };
23
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,IAAI,MAAM,GAAgB,IAAI,CAAC;IAC7B,KAAK,EAAE,MAAM;IACb,SAAS,EAAE;QACT,MAAM,EAAE,aAAa;QACrB,OAAO,EAAE;YACP,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE,cAAc;YACtB,aAAa,EAAE,UAAU;SAC1B;KACF;CACF,CAAC,CAAC;AAEH,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,MAAM,GAAG,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;AACrC,CAAC;AAED,OAAO,EAAE,MAAM,EAAE,CAAC"}
package/package.json CHANGED
@@ -1,80 +1,89 @@
1
1
  {
2
2
  "name": "opalserve",
3
- "version": "0.1.2",
4
- "description": "Enterprise-grade MCP (Model Context Protocol) tool registry and discovery hub with 5 pre-built connectors, JWT auth, workflow builder, RBAC, and governance.",
3
+ "version": "2.0.0",
4
+ "description": "Local MCP tool registry and discovery hub — aggregate, search, and proxy tools across multiple MCP servers",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.js",
11
+ "types": "./dist/index.d.ts"
12
+ }
13
+ },
8
14
  "bin": {
9
- "opalserve": "./dist/cli/index.js",
10
- "opalserve-discover": "./dist/cli/discover.js"
15
+ "opalserve": "./dist/cli/index.js"
16
+ },
17
+ "files": [
18
+ "dist",
19
+ "assets/logo.svg",
20
+ "LICENSE",
21
+ "README.md"
22
+ ],
23
+ "scripts": {
24
+ "build": "tsc",
25
+ "start": "node dist/cli/index.js",
26
+ "dev": "tsx watch src/cli/index.ts",
27
+ "typecheck": "tsc --noEmit",
28
+ "lint": "eslint src/",
29
+ "test": "vitest run",
30
+ "test:watch": "vitest",
31
+ "prepublishOnly": "pnpm build",
32
+ "docs:dev": "vitepress dev docs",
33
+ "docs:build": "vitepress build docs",
34
+ "docs:preview": "vitepress preview docs"
11
35
  },
12
36
  "keywords": [
13
- "model-context-protocol",
14
37
  "mcp",
15
- "mcp-server",
16
- "ai-agents",
17
- "llm-tools",
38
+ "model-context-protocol",
18
39
  "tool-registry",
19
- "tool-discovery",
20
- "enterprise-ai",
21
- "anthropic",
22
- "anthropic-claude",
23
- "claude-code",
24
- "cursor-ai",
25
- "rbac",
26
- "workflow-builder",
27
- "jwt-auth",
28
- "governance",
29
- "audit",
30
- "ai-tooling",
31
- "context-window"
40
+ "ai-tools",
41
+ "cli",
42
+ "discovery",
43
+ "aggregator",
44
+ "llm",
45
+ "claude",
46
+ "cursor"
32
47
  ],
33
- "author": "AdityaIdev <aiexpert@adityaai.dev> (https://github.com/adityaidev)",
48
+ "author": "AdityaIdev <aiexpert@adityaai.dev>",
34
49
  "license": "MIT",
50
+ "homepage": "https://adityaidev.github.io/opalserve",
35
51
  "repository": {
36
52
  "type": "git",
37
- "url": "git+https://github.com/adityaidev/opalserve.git"
53
+ "url": "https://github.com/adityaidev/opalserve.git"
38
54
  },
39
- "homepage": "https://github.com/adityaidev/opalserve#readme",
40
55
  "bugs": {
41
56
  "url": "https://github.com/adityaidev/opalserve/issues"
42
57
  },
58
+ "engines": {
59
+ "node": ">=20.0.0"
60
+ },
43
61
  "dependencies": {
44
- "@modelcontextprotocol/sdk": "^1.0.0",
45
- "zod": "^3.23.8",
46
- "yaml": "^2.6.1",
62
+ "@fastify/cors": "^11.0.0",
63
+ "@inquirer/prompts": "^8.4.1",
64
+ "@modelcontextprotocol/sdk": "^1.12.1",
65
+ "boxen": "^8.0.1",
47
66
  "chalk": "^5.4.1",
67
+ "cli-table3": "^0.6.5",
68
+ "commander": "^13.1.0",
69
+ "cosmiconfig": "^9.0.0",
70
+ "fastify": "^5.3.3",
71
+ "gradient-string": "^3.0.0",
72
+ "inquirer": "^12.6.0",
48
73
  "ora": "^8.2.0",
49
- "inquirer": "^13.4.0",
50
- "dotenv": "^16.4.7",
51
- "express": "^4.21.2",
52
- "cors": "^2.8.5",
53
- "helmet": "^8.0.0",
54
- "jsonwebtoken": "^9.0.2"
74
+ "pino": "^9.6.0",
75
+ "pino-pretty": "^13.0.0",
76
+ "zod": "^3.24.4"
55
77
  },
56
78
  "devDependencies": {
57
- "@types/express": "^5.0.0",
58
- "@types/cors": "^2.8.17",
59
- "@types/jsonwebtoken": "^9.0.7",
60
- "@types/node": "^22.10.5",
61
- "@types/inquirer": "^9.0.7",
62
- "typescript": "^5.7.3",
63
- "tsx": "^4.19.2",
64
- "eslint": "^9.18.0",
65
- "@typescript-eslint/eslint-plugin": "^8.20.0",
66
- "@typescript-eslint/parser": "^8.20.0"
67
- },
68
- "engines": {
69
- "node": ">=20.0.0"
70
- },
71
- "scripts": {
72
- "build": "tsc",
73
- "start": "node dist/cli/index.js",
74
- "dev": "tsx watch src/cli/index.ts",
75
- "discover": "node dist/cli/discover.js",
76
- "typecheck": "tsc --noEmit",
77
- "lint": "eslint src --ext .ts",
78
- "test": "echo \"Tests not configured\" && exit 0"
79
+ "@eslint/js": "^9.25.1",
80
+ "@types/gradient-string": "^1.1.6",
81
+ "@types/node": "^22.15.3",
82
+ "eslint": "^9.25.1",
83
+ "tsx": "^4.19.4",
84
+ "typescript": "^5.8.3",
85
+ "typescript-eslint": "^8.31.0",
86
+ "vitepress": "^1.6.3",
87
+ "vitest": "^3.1.2"
79
88
  }
80
- }
89
+ }
package/.env.example DELETED
@@ -1,19 +0,0 @@
1
- # MCP Registry Configuration
2
- PORT=3000
3
- HOST=localhost
4
- LOG_LEVEL=info
5
-
6
- # Security
7
- JWT_SECRET=your-secret-key-change-in-production
8
- API_KEY=your-api-key
9
-
10
- # Server Configurations
11
- GITHUB_TOKEN=your-github-token
12
- SLACK_BOT_TOKEN=xoxb-your-slack-token
13
- POSTGRES_URL=postgresql://localhost:5432/mcp
14
- GOOGLE_SERVICE_ACCOUNT=./config/google-service-account.json
15
-
16
- # Registry Settings
17
- MAX_TOOLS_PER_RESPONSE=50
18
- CONTEXT_TOKEN_BUDGET=128000
19
- ENABLE_AUTH=false
@@ -1,67 +0,0 @@
1
- # MCP Interoperability Layer - Server Configuration
2
- # This file defines the MCP servers to register with the registry
3
-
4
- servers:
5
- - id: github
6
- name: GitHub
7
- type: github
8
- enabled: true
9
- description: GitHub MCP server for repository, issue, and PR management
10
- auth:
11
- type: api-key
12
- envVar: GITHUB_TOKEN
13
- tags:
14
- - repository
15
- - github
16
- - code
17
-
18
- - id: slack
19
- name: Slack
20
- type: slack
21
- enabled: true
22
- description: Slack MCP server for messaging and channel management
23
- auth:
24
- type: api-key
25
- envVar: SLACK_BOT_TOKEN
26
- tags:
27
- - messaging
28
- - slack
29
- - notifications
30
-
31
- - id: postgres
32
- name: PostgreSQL
33
- type: postgres
34
- enabled: true
35
- description: PostgreSQL MCP server for database operations
36
- auth:
37
- type: none
38
- envVar: POSTGRES_URL
39
- tags:
40
- - database
41
- - postgres
42
- - sql
43
-
44
- - id: google-drive
45
- name: Google Drive
46
- type: google-drive
47
- enabled: true
48
- description: Google Drive MCP server for file management
49
- auth:
50
- type: oauth
51
- envVar: GOOGLE_SERVICE_ACCOUNT
52
- tags:
53
- - files
54
- - google
55
- - documents
56
-
57
- - id: custom
58
- name: Custom Tools
59
- type: custom
60
- enabled: true
61
- description: Custom HTTP and webhook tools
62
- auth:
63
- type: none
64
- tags:
65
- - custom
66
- - http
67
- - webhooks
@@ -1,2 +0,0 @@
1
- # Copy this file to config/servers.yaml and customize
2
- servers: []
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- export {};
3
- //# sourceMappingURL=discover.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../../src/cli/discover.ts"],"names":[],"mappings":""}
@@ -1,160 +0,0 @@
1
- #!/usr/bin/env node
2
- import chalk from 'chalk';
3
- import ora from 'ora';
4
- import inquirer from 'inquirer';
5
- const DEFAULT_REGISTRY_URL = 'http://localhost:3000';
6
- async function httpGet(url, timeout = 10000) {
7
- const controller = new AbortController();
8
- const timeoutId = setTimeout(() => controller.abort(), timeout);
9
- try {
10
- const response = await fetch(url, { signal: controller.signal });
11
- clearTimeout(timeoutId);
12
- if (!response.ok) {
13
- throw new Error(`HTTP ${response.status}: ${response.statusText}`);
14
- }
15
- return response.json();
16
- }
17
- catch (error) {
18
- clearTimeout(timeoutId);
19
- if (error instanceof Error) {
20
- if (error.name === 'AbortError') {
21
- throw new Error('Request timeout');
22
- }
23
- throw error;
24
- }
25
- throw error;
26
- }
27
- }
28
- async function discover(query, options) {
29
- const url = options.registryUrl || DEFAULT_REGISTRY_URL;
30
- const spinner = ora('Discovering available tools...').start();
31
- try {
32
- const params = new URLSearchParams();
33
- params.append('query', query);
34
- if (options.limit)
35
- params.append('limit', String(options.limit));
36
- const result = await httpGet(`${url}/api/v1/discover?${params}`);
37
- spinner.succeed();
38
- return result;
39
- }
40
- catch (error) {
41
- spinner.fail();
42
- if (error instanceof Error) {
43
- if (error.message.includes('ECONNREFUSED') || error.message.includes('fetch')) {
44
- console.error(chalk.red(`\nError: Cannot connect to OpalServe registry at ${url}`));
45
- console.log(chalk.yellow('\nMake sure the registry is running:'));
46
- console.log(chalk.cyan(' opalserve start\n'));
47
- }
48
- else {
49
- console.error(chalk.red(`\nError: ${error.message}`));
50
- }
51
- }
52
- throw error;
53
- }
54
- }
55
- function formatResults(result, json) {
56
- if (json) {
57
- console.log(JSON.stringify(result, null, 2));
58
- return;
59
- }
60
- console.log(chalk.bold('\nšŸ” Query Interpretation:'));
61
- console.log(` ${result.queryInterpretation}\n`);
62
- console.log(chalk.bold(`šŸ“Š Found ${result.totalMatches} matching tools`));
63
- console.log(chalk.gray(` Context used: ${result.contextUsed} / ${result.contextBudget} tokens\n`));
64
- if (result.tools.length === 0) {
65
- console.log(chalk.yellow('No tools matched your query. Try a different search term.'));
66
- return;
67
- }
68
- console.log(chalk.bold('\nšŸ› ļø Available Tools:\n'));
69
- for (const { tool, relevanceScore, matchReasons } of result.tools) {
70
- const scoreColor = relevanceScore > 0.7 ? 'green' : relevanceScore > 0.4 ? 'yellow' : 'gray';
71
- console.log(` ${chalk[scoreColor](`[${Math.round(relevanceScore * 100)}%]`)} ${chalk.cyan(tool.name)}`);
72
- console.log(` ${tool.description}`);
73
- console.log(` ${chalk.gray('Server:')} ${chalk.white(tool.serverName)}`);
74
- if (tool.tags.length > 0) {
75
- console.log(` ${chalk.gray('Tags:')} ${tool.tags.map(t => chalk.magenta(t)).join(', ')}`);
76
- }
77
- if (matchReasons.length > 0) {
78
- console.log(` ${chalk.gray('Matched:')} ${matchReasons.join(', ')}`);
79
- }
80
- console.log();
81
- }
82
- if (result.servers.length > 0) {
83
- console.log(chalk.bold('\nšŸ–„ļø Connected Servers:\n'));
84
- for (const server of result.servers) {
85
- const statusColor = server.health.status === 'healthy' ? 'green' : server.health.status === 'degraded' ? 'yellow' : 'red';
86
- console.log(` ${chalk[statusColor]('ā—')} ${chalk.white(server.name)} (${server.type})`);
87
- }
88
- console.log();
89
- }
90
- if (result.suggestions.length > 0) {
91
- console.log(chalk.bold('\nšŸ’” Suggestions:'));
92
- for (const suggestion of result.suggestions) {
93
- console.log(` • ${suggestion}`);
94
- }
95
- console.log();
96
- }
97
- }
98
- async function interactiveMode(registryUrl) {
99
- console.log(chalk.bold('\nšŸŽÆ OpalServe Discovery CLI - Interactive Mode\n'));
100
- console.log(chalk.gray('Type your query or "exit" to quit\n'));
101
- const { query } = await inquirer.prompt([
102
- {
103
- type: 'input',
104
- name: 'query',
105
- message: 'What would you like to do?',
106
- default: 'what can I do?',
107
- },
108
- ]);
109
- if (query.toLowerCase() === 'exit') {
110
- return;
111
- }
112
- const result = await discover(query, { registryUrl });
113
- formatResults(result, false);
114
- await interactiveMode(registryUrl);
115
- }
116
- async function main() {
117
- const args = process.argv.slice(2);
118
- if (args.includes('--help') || args.includes('-h')) {
119
- console.log(`
120
- ${chalk.bold('OpalServe Discovery CLI')}
121
-
122
- ${chalk.underline('Usage:')}
123
- opalserve-discover [query] [options]
124
-
125
- ${chalk.underline('Options:')}
126
- --url <url> Registry URL (default: http://localhost:3000)
127
- --limit <n> Maximum tools to return (default: 20)
128
- --json Output as JSON
129
- --interactive Interactive mode
130
- --help, -h Show this help
131
-
132
- ${chalk.underline('Examples:')}
133
- opalserve-discover "what can I do?"
134
- opalserve-discover "github repository" --limit 10
135
- opalserve-discover --json
136
- opalserve-discover --interactive
137
- `);
138
- return;
139
- }
140
- const interactive = args.includes('--interactive');
141
- const json = args.includes('--json');
142
- const urlArg = args.indexOf('--url');
143
- const registryUrl = urlArg !== -1 ? args[urlArg + 1] : DEFAULT_REGISTRY_URL;
144
- const limitArg = args.indexOf('--limit');
145
- const limit = limitArg !== -1 ? parseInt(args[limitArg + 1], 10) : 20;
146
- if (interactive) {
147
- await interactiveMode(registryUrl);
148
- return;
149
- }
150
- const query = args.filter(a => !a.startsWith('--')).join(' ') || 'what can I do?';
151
- try {
152
- const result = await discover(query, { registryUrl, limit, json });
153
- formatResults(result, json);
154
- }
155
- catch {
156
- process.exit(1);
157
- }
158
- }
159
- main().catch(console.error);
160
- //# sourceMappingURL=discover.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"discover.js","sourceRoot":"","sources":["../../src/cli/discover.ts"],"names":[],"mappings":";AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,QAAQ,MAAM,UAAU,CAAC;AAEhC,MAAM,oBAAoB,GAAG,uBAAuB,CAAC;AAsCrD,KAAK,UAAU,OAAO,CAAI,GAAW,EAAE,OAAO,GAAG,KAAK;IACpD,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC;IAEhE,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QACjE,YAAY,CAAC,SAAS,CAAC,CAAC;QAExB,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,QAAQ,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QACrE,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,EAAgB,CAAC;IACvC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,YAAY,CAAC,SAAS,CAAC,CAAC;QACxB,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAChC,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;YACrC,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,KAAa,EAAE,OAAiE;IACtG,MAAM,GAAG,GAAG,OAAO,CAAC,WAAW,IAAI,oBAAoB,CAAC;IACxD,MAAM,OAAO,GAAG,GAAG,CAAC,gCAAgC,CAAC,CAAC,KAAK,EAAE,CAAC;IAE9D,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC9B,IAAI,OAAO,CAAC,KAAK;YAAE,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QACjE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAkB,GAAG,GAAG,oBAAoB,MAAM,EAAE,CAAC,CAAC;QAClF,OAAO,CAAC,OAAO,EAAE,CAAC;QAClB,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC9E,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,oDAAoD,GAAG,EAAE,CAAC,CAAC,CAAC;gBACpF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,sCAAsC,CAAC,CAAC,CAAC;gBAClE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC;YAClD,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,MAAuB,EAAE,IAAa;IAC3D,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7C,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,mBAAmB,IAAI,CAAC,CAAC;IAElD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,YAAY,iBAAiB,CAAC,CAAC,CAAC;IAC1E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,MAAM,CAAC,WAAW,MAAM,MAAM,CAAC,aAAa,WAAW,CAAC,CAAC,CAAC;IAErG,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,2DAA2D,CAAC,CAAC,CAAC;QACvF,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;IAErD,KAAK,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,YAAY,EAAE,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAClE,MAAM,UAAU,GAAG,cAAc,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,GAAG,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;QAE7F,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACzG,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAE7E,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChG,CAAC;QAED,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3E,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,CAAC;QACvD,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACpC,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;YAC1H,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;QAC3F,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IAED,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAC7C,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,QAAQ,UAAU,EAAE,CAAC,CAAC;QACpC,CAAC;QACD,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,WAAmB;IAChD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC,CAAC;IAC7E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC,CAAC;IAE/D,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;QACtC;YACE,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,4BAA4B;YACrC,OAAO,EAAE,gBAAgB;SAC1B;KACF,CAAC,CAAC;IAEH,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,MAAM,EAAE,CAAC;QACnC,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;IACtD,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAE7B,MAAM,eAAe,CAAC,WAAW,CAAC,CAAC;AACrC,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEnC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC;EACd,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC;;EAErC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC;;;EAGzB,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC;;;;;;;EAO3B,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC;;;;;KAKzB,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACnD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAErC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC;IAE5E,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAEtE,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,eAAe,CAAC,WAAW,CAAC,CAAC;QACnC,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,gBAAgB,CAAC;IAElF,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACnE,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}