wgc 0.76.2 → 0.77.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 (55) hide show
  1. package/dist/package.json +7 -2
  2. package/dist/src/commands/index.js +4 -0
  3. package/dist/src/commands/index.js.map +1 -1
  4. package/dist/src/commands/mcp/index.d.ts +4 -0
  5. package/dist/src/commands/mcp/index.js +33 -0
  6. package/dist/src/commands/mcp/index.js.map +1 -0
  7. package/dist/src/commands/mcp/tools/__tests__/verify-router-config.test.d.ts +1 -0
  8. package/dist/src/commands/mcp/tools/__tests__/verify-router-config.test.js +134 -0
  9. package/dist/src/commands/mcp/tools/__tests__/verify-router-config.test.js.map +1 -0
  10. package/dist/src/commands/mcp/tools/dream-query-workflow.d.ts +13 -0
  11. package/dist/src/commands/mcp/tools/dream-query-workflow.js +38 -0
  12. package/dist/src/commands/mcp/tools/dream-query-workflow.js.map +1 -0
  13. package/dist/src/commands/mcp/tools/federated-graph-tools.d.ts +2 -0
  14. package/dist/src/commands/mcp/tools/federated-graph-tools.js +125 -0
  15. package/dist/src/commands/mcp/tools/federated-graph-tools.js.map +1 -0
  16. package/dist/src/commands/mcp/tools/get-subgraphs.d.ts +2 -0
  17. package/dist/src/commands/mcp/tools/get-subgraphs.js +96 -0
  18. package/dist/src/commands/mcp/tools/get-subgraphs.js.map +1 -0
  19. package/dist/src/commands/mcp/tools/index.d.ts +13 -0
  20. package/dist/src/commands/mcp/tools/index.js +14 -0
  21. package/dist/src/commands/mcp/tools/index.js.map +1 -0
  22. package/dist/src/commands/mcp/tools/introspect-subgraph.d.ts +52 -0
  23. package/dist/src/commands/mcp/tools/introspect-subgraph.js +51 -0
  24. package/dist/src/commands/mcp/tools/introspect-subgraph.js.map +1 -0
  25. package/dist/src/commands/mcp/tools/list-subgraphs.d.ts +2 -0
  26. package/dist/src/commands/mcp/tools/list-subgraphs.js +29 -0
  27. package/dist/src/commands/mcp/tools/list-subgraphs.js.map +1 -0
  28. package/dist/src/commands/mcp/tools/schema-change-proposal-workflow.d.ts +13 -0
  29. package/dist/src/commands/mcp/tools/schema-change-proposal-workflow.js +27 -0
  30. package/dist/src/commands/mcp/tools/schema-change-proposal-workflow.js.map +1 -0
  31. package/dist/src/commands/mcp/tools/search-docs.d.ts +2 -0
  32. package/dist/src/commands/mcp/tools/search-docs.js +45 -0
  33. package/dist/src/commands/mcp/tools/search-docs.js.map +1 -0
  34. package/dist/src/commands/mcp/tools/subgraph-verify-schema-changes.d.ts +2 -0
  35. package/dist/src/commands/mcp/tools/subgraph-verify-schema-changes.js +59 -0
  36. package/dist/src/commands/mcp/tools/subgraph-verify-schema-changes.js.map +1 -0
  37. package/dist/src/commands/mcp/tools/supergraph_changelog.d.ts +25 -0
  38. package/dist/src/commands/mcp/tools/supergraph_changelog.js +41 -0
  39. package/dist/src/commands/mcp/tools/supergraph_changelog.js.map +1 -0
  40. package/dist/src/commands/mcp/tools/types.d.ts +6 -0
  41. package/dist/src/commands/mcp/tools/types.js +2 -0
  42. package/dist/src/commands/mcp/tools/types.js.map +1 -0
  43. package/dist/src/commands/mcp/tools/verify-query-against-in-memory-schema.d.ts +13 -0
  44. package/dist/src/commands/mcp/tools/verify-query-against-in-memory-schema.js +60 -0
  45. package/dist/src/commands/mcp/tools/verify-query-against-in-memory-schema.js.map +1 -0
  46. package/dist/src/commands/mcp/tools/verify-query-against-remote-schema.d.ts +13 -0
  47. package/dist/src/commands/mcp/tools/verify-query-against-remote-schema.js +57 -0
  48. package/dist/src/commands/mcp/tools/verify-query-against-remote-schema.js.map +1 -0
  49. package/dist/src/commands/mcp/tools/verify-router-config.d.ts +11 -0
  50. package/dist/src/commands/mcp/tools/verify-router-config.js +119 -0
  51. package/dist/src/commands/mcp/tools/verify-router-config.js.map +1 -0
  52. package/dist/src/commands/subgraph/commands/check.js +1 -1
  53. package/dist/src/commands/subgraph/commands/check.js.map +1 -1
  54. package/dist/tsconfig.tsbuildinfo +1 -1
  55. package/package.json +10 -5
@@ -0,0 +1,119 @@
1
+ import Ajv2020 from 'ajv/dist/2020.js';
2
+ import { z } from 'zod';
3
+ import yaml from 'js-yaml';
4
+ import axios from 'axios';
5
+ let __validate;
6
+ const buildValidate = async () => {
7
+ if (__validate) {
8
+ return __validate;
9
+ }
10
+ const ajv = new Ajv2020({
11
+ allErrors: true,
12
+ strict: false, // Allow custom keywords
13
+ strictSchema: false,
14
+ logger: false,
15
+ });
16
+ const getSchema = await axios.get('https://raw.githubusercontent.com/wundergraph/cosmo/refs/heads/main/router/pkg/config/config.schema.json');
17
+ __validate = ajv.compile(getSchema.data);
18
+ return __validate;
19
+ };
20
+ export async function validateRouterConfig(config) {
21
+ let parsedConfig;
22
+ try {
23
+ // Try to parse as JSON
24
+ parsedConfig = JSON.parse(config);
25
+ }
26
+ catch {
27
+ try {
28
+ // If JSON parsing fails, try to parse as YAML
29
+ parsedConfig = yaml.load(config);
30
+ if (!parsedConfig || typeof parsedConfig !== 'object') {
31
+ return {
32
+ isValid: false,
33
+ errors: [
34
+ {
35
+ message: 'Invalid config format. Please provide valid JSON or YAML.',
36
+ },
37
+ ],
38
+ };
39
+ }
40
+ }
41
+ catch {
42
+ return {
43
+ isValid: false,
44
+ errors: [
45
+ {
46
+ message: 'Invalid config format. Please provide valid JSON or YAML.',
47
+ },
48
+ ],
49
+ };
50
+ }
51
+ }
52
+ // Check if parsedConfig is null or not an object
53
+ if (!parsedConfig || typeof parsedConfig !== 'object') {
54
+ return {
55
+ isValid: false,
56
+ errors: [
57
+ {
58
+ message: 'Invalid config format. Please provide valid JSON or YAML.',
59
+ },
60
+ ],
61
+ };
62
+ }
63
+ const validate = await buildValidate();
64
+ const valid = validate(parsedConfig);
65
+ if (!valid) {
66
+ console.log(validate.errors);
67
+ return {
68
+ isValid: false,
69
+ errors: validate.errors,
70
+ };
71
+ }
72
+ return {
73
+ isValid: true,
74
+ };
75
+ }
76
+ export const registerVerifyRouterConfigTool = ({ server }) => {
77
+ server.tool('cosmo-router-config-reference', 'Cosmo Router Configuration Reference helps you to understand how to configure the Router.', async () => {
78
+ const getSchema = await axios.get('https://raw.githubusercontent.com/wundergraph/cosmo/refs/heads/main/router/pkg/config/config.schema.json');
79
+ const text = `
80
+ # Cosmo Router Configuration Reference
81
+
82
+ ${JSON.stringify(getSchema.data, null, 2)}
83
+
84
+ If you need further information about the router config, you can use the "search_docs" tool to search the documentation for more information about the router config.
85
+ Ask specific questions mentioning the "router config" or "cosmo router config" keywords alongside your query.
86
+
87
+ If you're proposing a new configuration, you can use the "verify_router_config" tool to validate that the configuration is valid.`;
88
+ return {
89
+ content: [{ type: 'text', text }],
90
+ };
91
+ });
92
+ server.tool('verify_router_config', 'Verify Cosmo Router Configurations. The config can be provided as JSON or YAML. This tool helps you to validate that a proposed configuration is valid.', {
93
+ config: z.string().describe('The router config to verify. Can be provided as JSON or YAML.'),
94
+ }, async ({ config }) => {
95
+ try {
96
+ const result = await validateRouterConfig(config);
97
+ if (!result.isValid) {
98
+ const resultText = `The router config is invalid. Please fix the following errors:
99
+
100
+ ${JSON.stringify(result.errors, null, 2)}
101
+
102
+ You can use the "search_docs" tool to search the documentation for more information about the router config.
103
+ Ask specific questions mentioning the "router config" or "cosmo router config" keywords alongside your query.`;
104
+ return {
105
+ content: [{ type: 'text', text: resultText }],
106
+ };
107
+ }
108
+ return {
109
+ content: [{ type: 'text', text: 'The router config is valid.' }],
110
+ };
111
+ }
112
+ catch (error) {
113
+ return {
114
+ content: [{ type: 'text', text: `Error: ${error}` }],
115
+ };
116
+ }
117
+ });
118
+ };
119
+ //# sourceMappingURL=verify-router-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify-router-config.js","sourceRoot":"","sources":["../../../../../src/commands/mcp/tools/verify-router-config.ts"],"names":[],"mappings":"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"}
@@ -40,7 +40,7 @@ export default (opts) => {
40
40
  const resp = await opts.client.platform.checkSubgraphSchema({
41
41
  subgraphName: name,
42
42
  namespace: options.namespace,
43
- schema,
43
+ schema: new Uint8Array(schema),
44
44
  gitInfo,
45
45
  delete: options.delete,
46
46
  skipTrafficCheck: options.skipTrafficCheck,
@@ -1 +1 @@
1
- {"version":3,"file":"check.js","sourceRoot":"","sources":["../../../../../src/commands/subgraph/commands/check.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"check.js","sourceRoot":"","sources":["../../../../../src/commands/subgraph/commands/check.ts"],"names":[],"mappings":"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"}