@cloudcart/dev-mcp 0.1.2 → 0.1.4
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.
- package/data/admin.json +5076 -2767
- package/dist/app-resources.d.ts +31 -0
- package/dist/app-resources.d.ts.map +1 -0
- package/dist/app-resources.js +177 -0
- package/dist/app-resources.js.map +1 -0
- package/dist/index.js +0 -0
- package/dist/prompts/admin.d.ts +1 -1
- package/dist/prompts/admin.d.ts.map +1 -1
- package/dist/prompts/admin.js +91 -0
- package/dist/prompts/admin.js.map +1 -1
- package/dist/tools/introspect-schema.d.ts.map +1 -1
- package/dist/tools/introspect-schema.js +142 -65
- package/dist/tools/introspect-schema.js.map +1 -1
- package/dist/tools/validate-graphql.d.ts.map +1 -1
- package/dist/tools/validate-graphql.js +154 -1
- package/dist/tools/validate-graphql.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { loadSchema } from "../schema/loader.js";
|
|
2
|
+
import { matchAppResourceGroup } from "../app-resources.js";
|
|
2
3
|
function resolveTypeRef(typeRef) {
|
|
3
4
|
if (typeRef.kind === "NON_NULL") {
|
|
4
5
|
return `${resolveTypeRef(typeRef.ofType)}!`;
|
|
@@ -8,9 +9,8 @@ function resolveTypeRef(typeRef) {
|
|
|
8
9
|
}
|
|
9
10
|
return typeRef.name ?? "Unknown";
|
|
10
11
|
}
|
|
11
|
-
function
|
|
12
|
-
|
|
13
|
-
let signature = field.name;
|
|
12
|
+
function signatureFor(field) {
|
|
13
|
+
let sig = field.name;
|
|
14
14
|
if (field.args && field.args.length > 0) {
|
|
15
15
|
const argStr = field.args
|
|
16
16
|
.map((a) => {
|
|
@@ -20,70 +20,106 @@ function formatField(field) {
|
|
|
20
20
|
return s;
|
|
21
21
|
})
|
|
22
22
|
.join(", ");
|
|
23
|
-
|
|
23
|
+
sig += `(${argStr})`;
|
|
24
24
|
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
25
|
+
sig += `: ${resolveTypeRef(field.type)}`;
|
|
26
|
+
return sig;
|
|
27
|
+
}
|
|
28
|
+
/** Compact one-line field: `name: Type # description` (or just signature if no desc). */
|
|
29
|
+
function formatField(field) {
|
|
30
|
+
const sig = signatureFor(field);
|
|
31
|
+
return field.description ? `${sig} # ${field.description}` : sig;
|
|
32
|
+
}
|
|
33
|
+
const MAX_FIELDS_PER_TYPE = 20;
|
|
34
|
+
/** Root types known to have been consolidated into grouped sub-types. */
|
|
35
|
+
const GROUPED_PARENT_HINTS = {
|
|
36
|
+
Product: "pricing/seo/flags/inventory/parameters/timestamps",
|
|
37
|
+
Order: "buyer/amounts/statuses/documents/notes/flags/timestamps",
|
|
38
|
+
Customer: "contact/verification/marketingPrefs/status/defaults/timestamps",
|
|
39
|
+
CartSettings: "registration/limits/defaults/checkoutFields/maps/orders/abandoned/legal",
|
|
40
|
+
};
|
|
41
|
+
/** True if a type looks like a Relay connection that exposes the flat `nodes` + `totalCount` alternative. */
|
|
42
|
+
function hasFlatNodesShape(type) {
|
|
43
|
+
if (!type.name.endsWith("Connection"))
|
|
44
|
+
return false;
|
|
45
|
+
const fieldNames = new Set((type.fields ?? []).map((f) => f.name));
|
|
46
|
+
return fieldNames.has("nodes") && fieldNames.has("totalCount");
|
|
47
|
+
}
|
|
48
|
+
/** Collect contextual hints specific to this type (nodes preference, grouped sub-types). */
|
|
49
|
+
function hintsForType(type) {
|
|
50
|
+
const hints = [];
|
|
51
|
+
if (hasFlatNodesShape(type)) {
|
|
52
|
+
hints.push("> TIP: prefer `{ nodes { ... } totalCount }` unless you need cursor pagination (~2× smaller payload).");
|
|
29
53
|
}
|
|
30
|
-
|
|
54
|
+
const grouped = GROUPED_PARENT_HINTS[type.name];
|
|
55
|
+
if (grouped) {
|
|
56
|
+
hints.push(`> TIP: ${type.name} fields live in grouped sub-types — ${grouped}.`);
|
|
57
|
+
}
|
|
58
|
+
return hints;
|
|
59
|
+
}
|
|
60
|
+
/** One-line type summary: `KIND Name # Description`. No field body. */
|
|
61
|
+
function formatTypeSummary(type) {
|
|
62
|
+
return type.description ? `${type.kind} ${type.name} # ${type.description}` : `${type.kind} ${type.name}`;
|
|
31
63
|
}
|
|
32
64
|
function formatType(type) {
|
|
33
|
-
const lines = [];
|
|
34
|
-
// Header with kind and name
|
|
35
|
-
let header = `${type.kind} ${type.name}`;
|
|
36
|
-
lines.push(header);
|
|
37
|
-
if (type.description) {
|
|
38
|
-
lines.push(` Description: ${type.description}`);
|
|
39
|
-
}
|
|
40
|
-
// Show implements (interfaces)
|
|
65
|
+
const lines = [formatTypeSummary(type)];
|
|
41
66
|
if (type.interfaces && type.interfaces.length > 0) {
|
|
42
67
|
const ifaceNames = type.interfaces.map((i) => i.name ?? resolveTypeRef(i)).filter(Boolean);
|
|
43
|
-
if (ifaceNames.length > 0)
|
|
44
|
-
lines.push(`
|
|
45
|
-
}
|
|
68
|
+
if (ifaceNames.length > 0)
|
|
69
|
+
lines.push(` implements ${ifaceNames.join(", ")}`);
|
|
46
70
|
}
|
|
47
71
|
if (type.fields && type.fields.length > 0) {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
for (const f of type.fields.slice(0, 20)) {
|
|
52
|
-
lines.push(` ${formatField(f)}`);
|
|
53
|
-
lines.push("");
|
|
72
|
+
const shown = type.fields.slice(0, MAX_FIELDS_PER_TYPE);
|
|
73
|
+
for (const f of shown) {
|
|
74
|
+
lines.push(` ${formatField(f)}`);
|
|
54
75
|
}
|
|
55
|
-
if (type.fields.length >
|
|
56
|
-
|
|
76
|
+
if (type.fields.length > MAX_FIELDS_PER_TYPE) {
|
|
77
|
+
// Expose the remaining field names + types (no descriptions) — critical
|
|
78
|
+
// fields like `Order.productsCount` must stay discoverable rather than
|
|
79
|
+
// being hidden behind a "... +N more fields" truncation.
|
|
80
|
+
const rest = type.fields.slice(MAX_FIELDS_PER_TYPE);
|
|
81
|
+
const sigs = rest.map((f) => signatureFor(f));
|
|
82
|
+
lines.push(` # +${rest.length} more: ${sigs.join(", ")}`);
|
|
57
83
|
}
|
|
58
84
|
}
|
|
59
85
|
if (type.inputFields && type.inputFields.length > 0) {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
lines.push(` ${f.name}: ${resolveTypeRef(f.type)}`);
|
|
65
|
-
if (f.description) {
|
|
66
|
-
lines.push(` # ${f.description}`);
|
|
67
|
-
}
|
|
68
|
-
lines.push("");
|
|
86
|
+
const shown = type.inputFields.slice(0, MAX_FIELDS_PER_TYPE);
|
|
87
|
+
for (const f of shown) {
|
|
88
|
+
const sig = `${f.name}: ${resolveTypeRef(f.type)}`;
|
|
89
|
+
lines.push(` ${f.description ? `${sig} # ${f.description}` : sig}`);
|
|
69
90
|
}
|
|
70
|
-
if (type.inputFields.length >
|
|
71
|
-
|
|
91
|
+
if (type.inputFields.length > MAX_FIELDS_PER_TYPE) {
|
|
92
|
+
const rest = type.inputFields.slice(MAX_FIELDS_PER_TYPE);
|
|
93
|
+
const sigs = rest.map((f) => `${f.name}: ${resolveTypeRef(f.type)}`);
|
|
94
|
+
lines.push(` # +${rest.length} more: ${sigs.join(", ")}`);
|
|
72
95
|
}
|
|
73
96
|
}
|
|
74
97
|
if (type.enumValues && type.enumValues.length > 0) {
|
|
75
|
-
lines.push("");
|
|
76
98
|
for (const v of type.enumValues) {
|
|
77
|
-
lines.push(` ${v.name}${v.description ? `
|
|
99
|
+
lines.push(` ${v.name}${v.description ? ` # ${v.description}` : ""}`);
|
|
78
100
|
}
|
|
79
101
|
}
|
|
80
102
|
return lines.join("\n");
|
|
81
103
|
}
|
|
82
104
|
const RESULTS_LIMIT = 10;
|
|
105
|
+
function formatAppNotice(group) {
|
|
106
|
+
return `> ⚠️ ${group.label} (Application-Provided) — ${group.notice}`;
|
|
107
|
+
}
|
|
83
108
|
export function introspectSchema(input) {
|
|
84
109
|
const api = input.api ?? "admin";
|
|
85
110
|
const filters = input.filter ?? ["all"];
|
|
86
111
|
const includeAll = filters.includes("all");
|
|
112
|
+
// Reject empty/whitespace-only queries — returning a random top-10 slice
|
|
113
|
+
// (1 500+ tokens) helps nobody. Nudge the caller to provide a term.
|
|
114
|
+
const rawQuery = input.query?.trim() ?? "";
|
|
115
|
+
if (rawQuery === "") {
|
|
116
|
+
return {
|
|
117
|
+
content: [{
|
|
118
|
+
type: "text",
|
|
119
|
+
text: `Provide a search term (e.g. "product", "createOrder", "discount"). Empty queries are rejected to avoid flooding your context with arbitrary results.`,
|
|
120
|
+
}],
|
|
121
|
+
};
|
|
122
|
+
}
|
|
87
123
|
let schema;
|
|
88
124
|
try {
|
|
89
125
|
schema = loadSchema(api);
|
|
@@ -93,47 +129,88 @@ export function introspectSchema(input) {
|
|
|
93
129
|
content: [{ type: "text", text: `Failed to load schema for "${api}": ${e.message}` }],
|
|
94
130
|
};
|
|
95
131
|
}
|
|
96
|
-
// Normalize query:
|
|
97
|
-
|
|
132
|
+
// Normalize query: lowercase, strip whitespace, drop trailing 's' so
|
|
133
|
+
// "categories" and "category" both match CategoryConnection / Category.
|
|
134
|
+
let normalized = rawQuery.toLowerCase().replace(/\s+/g, "");
|
|
98
135
|
if (normalized.endsWith("s") && normalized.length > 1) {
|
|
99
136
|
normalized = normalized.slice(0, -1);
|
|
100
137
|
}
|
|
101
138
|
const sections = [];
|
|
139
|
+
// Dedup app notices across the whole response — a grouped speedy hit in
|
|
140
|
+
// Types + Queries + Mutations should only emit one banner.
|
|
141
|
+
const shownAppNotices = new Set();
|
|
142
|
+
let anyTruncated = false;
|
|
143
|
+
const renderAppPrefix = (name) => {
|
|
144
|
+
const appGroup = matchAppResourceGroup(name);
|
|
145
|
+
if (!appGroup || shownAppNotices.has(appGroup.group))
|
|
146
|
+
return "";
|
|
147
|
+
shownAppNotices.add(appGroup.group);
|
|
148
|
+
return formatAppNotice(appGroup) + "\n";
|
|
149
|
+
};
|
|
102
150
|
if (includeAll || filters.includes("types")) {
|
|
103
|
-
const
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
151
|
+
const all = schema.types.filter((t) => t.name.toLowerCase().includes(normalized));
|
|
152
|
+
const matched = all.sort((a, b) => a.name.length - b.name.length).slice(0, RESULTS_LIMIT);
|
|
153
|
+
if (all.length > RESULTS_LIMIT)
|
|
154
|
+
anyTruncated = true;
|
|
107
155
|
if (matched.length > 0) {
|
|
108
|
-
|
|
109
|
-
|
|
156
|
+
// When multiple types match, only expand the top hit with full fields.
|
|
157
|
+
// The rest are 1-line summaries — the agent can follow up with a
|
|
158
|
+
// specific introspect(query: "ExactName") if they need details.
|
|
159
|
+
// Exact-name hits always get full detail regardless of result count.
|
|
160
|
+
const lines = ["## Types"];
|
|
161
|
+
const emittedHints = [];
|
|
162
|
+
matched.forEach((t, i) => {
|
|
163
|
+
const exactHit = t.name.toLowerCase() === normalized || t.name.toLowerCase() === rawQuery.toLowerCase();
|
|
164
|
+
const expand = i === 0 || exactHit || matched.length === 1;
|
|
165
|
+
const body = expand ? formatType(t) : formatTypeSummary(t);
|
|
166
|
+
lines.push(renderAppPrefix(t.name) + body);
|
|
167
|
+
if (expand)
|
|
168
|
+
emittedHints.push(...hintsForType(t));
|
|
169
|
+
});
|
|
170
|
+
// Per-type hints (nodes/totalCount, grouped sub-types) — dedup.
|
|
171
|
+
const uniqueHints = Array.from(new Set(emittedHints));
|
|
172
|
+
uniqueHints.forEach((h) => lines.push(h));
|
|
173
|
+
if (matched.length > 1 && !matched.every((t, i) => i === 0 || t.name.toLowerCase() === rawQuery.toLowerCase())) {
|
|
174
|
+
lines.push(`> Only the top match is expanded. For full fields on others, re-run with the exact type name.`);
|
|
175
|
+
}
|
|
176
|
+
sections.push(lines.join("\n\n"));
|
|
110
177
|
}
|
|
111
178
|
}
|
|
112
179
|
if (includeAll || filters.includes("queries")) {
|
|
113
|
-
const
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
180
|
+
const all = schema.queries.filter((q) => q.name.toLowerCase().includes(normalized));
|
|
181
|
+
const matched = all.sort((a, b) => a.name.length - b.name.length).slice(0, RESULTS_LIMIT);
|
|
182
|
+
if (all.length > RESULTS_LIMIT)
|
|
183
|
+
anyTruncated = true;
|
|
117
184
|
if (matched.length > 0) {
|
|
118
|
-
sections.push(`##
|
|
119
|
-
matched.map((f) => formatField(f)).join("\n
|
|
185
|
+
sections.push(`## Queries\n` +
|
|
186
|
+
matched.map((f) => renderAppPrefix(f.name) + formatField(f)).join("\n"));
|
|
120
187
|
}
|
|
121
188
|
}
|
|
122
189
|
if (includeAll || filters.includes("mutations")) {
|
|
123
|
-
const
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
190
|
+
const all = schema.mutations.filter((m) => m.name.toLowerCase().includes(normalized));
|
|
191
|
+
const matched = all.sort((a, b) => a.name.length - b.name.length).slice(0, RESULTS_LIMIT);
|
|
192
|
+
if (all.length > RESULTS_LIMIT)
|
|
193
|
+
anyTruncated = true;
|
|
127
194
|
if (matched.length > 0) {
|
|
128
|
-
sections.push(`##
|
|
129
|
-
matched.map((f) => formatField(f)).join("\n
|
|
195
|
+
sections.push(`## Mutations\n` +
|
|
196
|
+
matched.map((f) => renderAppPrefix(f.name) + formatField(f)).join("\n") +
|
|
197
|
+
`\n> TIP: mutation inputs are snake_case — use url_handle, first_name, price_from, etc. (outputs are camelCase).`);
|
|
130
198
|
}
|
|
131
199
|
}
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
200
|
+
if (sections.length === 0) {
|
|
201
|
+
return {
|
|
202
|
+
content: [{
|
|
203
|
+
type: "text",
|
|
204
|
+
text: `No results for "${input.query}" in the ${api} API. Try a broader term or a different word stem.`,
|
|
205
|
+
}],
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
const header = anyTruncated
|
|
209
|
+
? `> Some sections hit the ${RESULTS_LIMIT}-item cap; refine your term for more specific results.\n\n`
|
|
210
|
+
: "";
|
|
211
|
+
const footer = `\n\n> NEXT: pass your drafted query to validate_graphql_codeblocks before executing — it catches typos, wrong types, and deprecated fields.`;
|
|
135
212
|
return {
|
|
136
|
-
content: [{ type: "text", text }],
|
|
213
|
+
content: [{ type: "text", text: header + sections.join("\n\n") + footer }],
|
|
137
214
|
};
|
|
138
215
|
}
|
|
139
216
|
//# sourceMappingURL=introspect-schema.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"introspect-schema.js","sourceRoot":"","sources":["../../src/tools/introspect-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"introspect-schema.js","sourceRoot":"","sources":["../../src/tools/introspect-schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate-graphql.d.ts","sourceRoot":"","sources":["../../src/tools/validate-graphql.ts"],"names":[],"mappings":"AAcA,UAAU,SAAS;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;CACxB;
|
|
1
|
+
{"version":3,"file":"validate-graphql.d.ts","sourceRoot":"","sources":["../../src/tools/validate-graphql.ts"],"names":[],"mappings":"AAcA,UAAU,SAAS;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;CACxB;AA6MD,wBAAgB,eAAe,CAAC,KAAK,EAAE,aAAa;;;;;EA+FnD"}
|
|
@@ -4,6 +4,154 @@ import { loadSchema } from "../schema/loader.js";
|
|
|
4
4
|
function formatGraphQLError(error) {
|
|
5
5
|
return error.message;
|
|
6
6
|
}
|
|
7
|
+
/**
|
|
8
|
+
* Fields that existed at a root type before the Phase 3 consolidation
|
|
9
|
+
* and now live under a grouped sub-type. Keyed by "Parent.oldField".
|
|
10
|
+
*/
|
|
11
|
+
const MOVED_FIELDS = {
|
|
12
|
+
"Order.quantity": "amounts.quantity",
|
|
13
|
+
"Order.priceTotal": "amounts.total",
|
|
14
|
+
"Order.priceSubtotal": "amounts.subtotal",
|
|
15
|
+
"Order.priceProductsSubtotal": "amounts.productsSubtotal",
|
|
16
|
+
"Order.vatIncluded": "amounts.vatIncluded",
|
|
17
|
+
"Order.weight": "amounts.weight",
|
|
18
|
+
"Order.customerEmail": "buyer.email",
|
|
19
|
+
"Order.customerFirstName": "buyer.firstName",
|
|
20
|
+
"Order.customerLastName": "buyer.lastName",
|
|
21
|
+
"Order.customerId": "buyer.customerId",
|
|
22
|
+
"Order.status": "statuses.status",
|
|
23
|
+
"Order.statusFulfillment": "statuses.fulfillment",
|
|
24
|
+
"Order.noteCustomer": "notes.customer",
|
|
25
|
+
"Order.noteAdministrator": "notes.administrator",
|
|
26
|
+
"Order.invoiceNumber": "documents.invoiceNumber",
|
|
27
|
+
"Order.invoiceDate": "documents.invoiceDate",
|
|
28
|
+
"Order.dateAdded": "timestamps.added",
|
|
29
|
+
"Order.dateArchived": "timestamps.archived",
|
|
30
|
+
"Product.priceFrom": "pricing.from",
|
|
31
|
+
"Product.priceTo": "pricing.to",
|
|
32
|
+
"Product.priceType": "pricing.type",
|
|
33
|
+
"Product.seoTitle": "seo.title",
|
|
34
|
+
"Product.seoDescription": "seo.description",
|
|
35
|
+
"Product.active": "flags.active",
|
|
36
|
+
"Product.digital": "flags.digital",
|
|
37
|
+
"Product.hidden": "flags.hidden",
|
|
38
|
+
"Product.draft": "flags.draft",
|
|
39
|
+
"Product.featured": "flags.featured",
|
|
40
|
+
"Product.sale": "flags.sale",
|
|
41
|
+
"Product.new": "flags.new",
|
|
42
|
+
"Product.tracking": "inventory.tracking",
|
|
43
|
+
"Product.threshold": "inventory.threshold",
|
|
44
|
+
"Product.variantsCount": "inventory.variantsCount",
|
|
45
|
+
"Product.dateAdded": "timestamps.added",
|
|
46
|
+
"Product.dateModified": "timestamps.modified",
|
|
47
|
+
"Product.publishDate": "timestamps.publishAt",
|
|
48
|
+
"Customer.firstName": "contact.firstName",
|
|
49
|
+
"Customer.lastName": "contact.lastName",
|
|
50
|
+
"Customer.phone": "contact.phone",
|
|
51
|
+
"Customer.active": "status.active",
|
|
52
|
+
"Customer.banned": "status.banned",
|
|
53
|
+
"Customer.marketing": "marketingPrefs.marketing",
|
|
54
|
+
"Customer.newsletter": "marketingPrefs.newsletter",
|
|
55
|
+
"Customer.emailConfirmed": "verification.emailConfirmed",
|
|
56
|
+
"Customer.dateAdded": "timestamps.added",
|
|
57
|
+
};
|
|
58
|
+
/** Common ORM-style field names AI agents reach for that don't exist on CloudCart types. */
|
|
59
|
+
const COMMON_ALIASES = {
|
|
60
|
+
"Order.items": "products",
|
|
61
|
+
"Order.lineItems": "products",
|
|
62
|
+
"Order.orderProducts": "products",
|
|
63
|
+
"Cart.items": "products",
|
|
64
|
+
"Cart.lineItems": "products",
|
|
65
|
+
};
|
|
66
|
+
/**
|
|
67
|
+
* Produce a short remediation hint for a validation error message, so the
|
|
68
|
+
* agent can fix the query without a second introspect round-trip.
|
|
69
|
+
*
|
|
70
|
+
* Each hint is <= 1 line. Returns null if the message is not one we
|
|
71
|
+
* recognise — we stay silent instead of handwaving.
|
|
72
|
+
*/
|
|
73
|
+
function hintForErrorMessage(msg) {
|
|
74
|
+
// Moved-field check (Phase 3 consolidation): was at root, now in sub-type.
|
|
75
|
+
const unknownField = msg.match(/Cannot query field "([A-Za-z_][A-Za-z0-9_]*)" on type "([A-Z][A-Za-z_]+)"/);
|
|
76
|
+
if (unknownField) {
|
|
77
|
+
const [, field, parent] = unknownField;
|
|
78
|
+
const moved = MOVED_FIELDS[`${parent}.${field}`];
|
|
79
|
+
if (moved) {
|
|
80
|
+
return `\`${parent}.${field}\` was consolidated into a sub-type — use \`${parent} { ${moved.split(".")[0]} { ${moved.split(".")[1]} } }\`.`;
|
|
81
|
+
}
|
|
82
|
+
const alias = COMMON_ALIASES[`${parent}.${field}`];
|
|
83
|
+
if (alias) {
|
|
84
|
+
return `\`${parent}\` uses \`${alias}\` for this relation, not \`${field}\`. Example: \`{ ${parent.toLowerCase()} { ${alias} { id } } }\`.`;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
// "Cannot query field "snake_case" on type "X"."
|
|
88
|
+
const unknownSnake = msg.match(/Cannot query field "([a-z][a-z0-9_]*_[a-z0-9_]+)" on type "([A-Za-z_]+)"/);
|
|
89
|
+
if (unknownSnake) {
|
|
90
|
+
const snake = unknownSnake[1];
|
|
91
|
+
const camel = snake.replace(/_([a-z0-9])/g, (_, c) => c.toUpperCase());
|
|
92
|
+
const parent = unknownSnake[2];
|
|
93
|
+
const grouped = {
|
|
94
|
+
Product: "pricing { from to }, seo { title description }, flags { active digital }, inventory { ... }",
|
|
95
|
+
Order: "buyer { email firstName }, amounts { total subtotal }, statuses { status }, notes { customer administrator }",
|
|
96
|
+
Customer: "contact { firstName lastName phone }, status { active banned }, marketingPrefs { marketing newsletter }",
|
|
97
|
+
};
|
|
98
|
+
const groupHint = grouped[parent] ? ` Or check grouped sub-types on ${parent}: ${grouped[parent]}.` : "";
|
|
99
|
+
return `Output fields are camelCase — try \`${camel}\`.${groupHint}`;
|
|
100
|
+
}
|
|
101
|
+
// "Cannot query field "title" on type "Product". Did you mean ...?"
|
|
102
|
+
if (/Cannot query field "title" on type "Product"/.test(msg)) {
|
|
103
|
+
return `Product uses \`name\`, not \`title\`. The \`title\` field does not exist on Product.`;
|
|
104
|
+
}
|
|
105
|
+
// "Cannot query field "nodes" on type "ProductConnection". Did you mean "edges"?"
|
|
106
|
+
const autoConn = msg.match(/Cannot query field "(nodes|totalCount)" on type "([A-Za-z]+Connection)"/);
|
|
107
|
+
if (autoConn) {
|
|
108
|
+
return `${autoConn[2]} is auto-generated by @paginate — only \`edges { node cursor }\` + \`pageInfo\` are available. Use the cursor form on this connection.`;
|
|
109
|
+
}
|
|
110
|
+
// "Field \"X\" of required type \"Y!\" was not provided."
|
|
111
|
+
const missingInput = msg.match(/Field "([a-zA-Z_]+)\.([a-zA-Z_]+)" of required type/);
|
|
112
|
+
if (missingInput) {
|
|
113
|
+
return `Input field \`${missingInput[2]}\` is required on \`${missingInput[1]}\`. Check with introspect_graphql_schema for the full input shape.`;
|
|
114
|
+
}
|
|
115
|
+
// "Unknown argument "camelCase" on field "X" of type "Y"."
|
|
116
|
+
const argCamel = msg.match(/Unknown argument "([a-z]+[A-Z][a-zA-Z]*)" on field/);
|
|
117
|
+
if (argCamel) {
|
|
118
|
+
const camel = argCamel[1];
|
|
119
|
+
const snake = camel.replace(/[A-Z]/g, (c) => "_" + c.toLowerCase());
|
|
120
|
+
return `Arguments are snake_case on this API — try \`${snake}\`.`;
|
|
121
|
+
}
|
|
122
|
+
// Missing / unknown argument on known list queries — nudge towards the
|
|
123
|
+
// pre-built filter args the agent is almost certainly looking for.
|
|
124
|
+
const argHints = {
|
|
125
|
+
"orders.products_count": "orders has a server-side `products_count: NumericFilter` arg for \"orders with N products\". No need to fetch all and count client-side.",
|
|
126
|
+
"orders.quantity": "orders has a `quantity: NumericFilter` arg for total-item filtering.",
|
|
127
|
+
"customers.orders_count": "customers has a server-side `orders_count: NumericFilter` arg for \"customers with >= N completed orders\".",
|
|
128
|
+
"customers.total_spent": "customers has a `total_spent: NumericFilter` arg (store-currency cents).",
|
|
129
|
+
"customers.segment": "customers has a `segment: ID` arg — pass a segment id created via createSegment.",
|
|
130
|
+
"products.stock": "products has a `stock: NumericFilter` arg matching any variant's quantity. Use it instead of scanning variants client-side.",
|
|
131
|
+
"products.has_image": "products has a `has_image: Boolean` arg — use it instead of null-checking featuredImage in a loop.",
|
|
132
|
+
"products.hidden": "products has a `hidden: YesNo` arg.",
|
|
133
|
+
"products.tracking": "products has a `tracking: YesNo` arg.",
|
|
134
|
+
"products.date_modified": "products has a `date_modified: DateFilter` arg.",
|
|
135
|
+
"products.date_added": "products has a `date_added: DateFilter` arg.",
|
|
136
|
+
};
|
|
137
|
+
const unknownArg = msg.match(/Unknown argument "([a-z_]+)" on field "(?:Query\.)?([a-z]+)"/);
|
|
138
|
+
if (unknownArg) {
|
|
139
|
+
const [, arg, field] = unknownArg;
|
|
140
|
+
const key = `${field}.${arg}`;
|
|
141
|
+
if (argHints[key])
|
|
142
|
+
return argHints[key];
|
|
143
|
+
}
|
|
144
|
+
return null;
|
|
145
|
+
}
|
|
146
|
+
function remediationHintsFor(errors) {
|
|
147
|
+
const hints = new Set();
|
|
148
|
+
for (const err of errors) {
|
|
149
|
+
const hint = hintForErrorMessage(err);
|
|
150
|
+
if (hint)
|
|
151
|
+
hints.add(hint);
|
|
152
|
+
}
|
|
153
|
+
return Array.from(hints);
|
|
154
|
+
}
|
|
7
155
|
function detectOperationType(document) {
|
|
8
156
|
for (const def of document.definitions) {
|
|
9
157
|
if (def.kind === Kind.OPERATION_DEFINITION) {
|
|
@@ -103,7 +251,12 @@ export function validateGraphql(input) {
|
|
|
103
251
|
}
|
|
104
252
|
else {
|
|
105
253
|
lines.push(`**Status:** ❌ FAILED`);
|
|
106
|
-
lines.push(`**Details:** GraphQL validation errors: ${r.errors.join("; ")}
|
|
254
|
+
lines.push(`**Details:** GraphQL validation errors: ${r.errors.join("; ")}`);
|
|
255
|
+
const hints = remediationHintsFor(r.errors);
|
|
256
|
+
for (const h of hints) {
|
|
257
|
+
lines.push(`> HINT: ${h}`);
|
|
258
|
+
}
|
|
259
|
+
lines.push("");
|
|
107
260
|
}
|
|
108
261
|
}
|
|
109
262
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate-graphql.js","sourceRoot":"","sources":["../../src/tools/validate-graphql.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"validate-graphql.js","sourceRoot":"","sources":["../../src/tools/validate-graphql.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EACL,KAAK,EACL,QAAQ,EACR,IAAI,EACJ,QAAQ,EACR,KAAK,EACL,iBAAiB,GAIlB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAyBjD,SAAS,kBAAkB,CAAC,KAAmB;IAC7C,OAAO,KAAK,CAAC,OAAO,CAAC;AACvB,CAAC;AAED;;;GAGG;AACH,MAAM,YAAY,GAA2B;IAC3C,gBAAgB,EAAE,kBAAkB;IACpC,kBAAkB,EAAE,eAAe;IACnC,qBAAqB,EAAE,kBAAkB;IACzC,6BAA6B,EAAE,0BAA0B;IACzD,mBAAmB,EAAE,qBAAqB;IAC1C,cAAc,EAAE,gBAAgB;IAChC,qBAAqB,EAAE,aAAa;IACpC,yBAAyB,EAAE,iBAAiB;IAC5C,wBAAwB,EAAE,gBAAgB;IAC1C,kBAAkB,EAAE,kBAAkB;IACtC,cAAc,EAAE,iBAAiB;IACjC,yBAAyB,EAAE,sBAAsB;IACjD,oBAAoB,EAAE,gBAAgB;IACtC,yBAAyB,EAAE,qBAAqB;IAChD,qBAAqB,EAAE,yBAAyB;IAChD,mBAAmB,EAAE,uBAAuB;IAC5C,iBAAiB,EAAE,kBAAkB;IACrC,oBAAoB,EAAE,qBAAqB;IAC3C,mBAAmB,EAAE,cAAc;IACnC,iBAAiB,EAAE,YAAY;IAC/B,mBAAmB,EAAE,cAAc;IACnC,kBAAkB,EAAE,WAAW;IAC/B,wBAAwB,EAAE,iBAAiB;IAC3C,gBAAgB,EAAE,cAAc;IAChC,iBAAiB,EAAE,eAAe;IAClC,gBAAgB,EAAE,cAAc;IAChC,eAAe,EAAE,aAAa;IAC9B,kBAAkB,EAAE,gBAAgB;IACpC,cAAc,EAAE,YAAY;IAC5B,aAAa,EAAE,WAAW;IAC1B,kBAAkB,EAAE,oBAAoB;IACxC,mBAAmB,EAAE,qBAAqB;IAC1C,uBAAuB,EAAE,yBAAyB;IAClD,mBAAmB,EAAE,kBAAkB;IACvC,sBAAsB,EAAE,qBAAqB;IAC7C,qBAAqB,EAAE,sBAAsB;IAC7C,oBAAoB,EAAE,mBAAmB;IACzC,mBAAmB,EAAE,kBAAkB;IACvC,gBAAgB,EAAE,eAAe;IACjC,iBAAiB,EAAE,eAAe;IAClC,iBAAiB,EAAE,eAAe;IAClC,oBAAoB,EAAE,0BAA0B;IAChD,qBAAqB,EAAE,2BAA2B;IAClD,yBAAyB,EAAE,6BAA6B;IACxD,oBAAoB,EAAE,kBAAkB;CACzC,CAAC;AAEF,4FAA4F;AAC5F,MAAM,cAAc,GAA2B;IAC7C,aAAa,EAAE,UAAU;IACzB,iBAAiB,EAAE,UAAU;IAC7B,qBAAqB,EAAE,UAAU;IACjC,YAAY,EAAE,UAAU;IACxB,gBAAgB,EAAE,UAAU;CAC7B,CAAC;AAEF;;;;;;GAMG;AACH,SAAS,mBAAmB,CAAC,GAAW;IACtC,2EAA2E;IAC3E,MAAM,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC,2EAA2E,CAAC,CAAC;IAC5G,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,YAAY,CAAC;QACvC,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,MAAM,IAAI,KAAK,EAAE,CAAC,CAAC;QACjD,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,KAAK,MAAM,IAAI,KAAK,+CAA+C,MAAM,MAAM,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9I,CAAC;QACD,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,MAAM,IAAI,KAAK,EAAE,CAAC,CAAC;QACnD,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,KAAK,MAAM,aAAa,KAAK,+BAA+B,KAAK,oBAAoB,MAAM,CAAC,WAAW,EAAE,MAAM,KAAK,gBAAgB,CAAC;QAC9I,CAAC;IACH,CAAC;IACD,iDAAiD;IACjD,MAAM,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC,0EAA0E,CAAC,CAAC;IAC3G,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QAC9B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QACvE,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,OAAO,GAA2B;YACtC,OAAO,EAAE,6FAA6F;YACtG,KAAK,EAAE,8GAA8G;YACrH,QAAQ,EAAE,yGAAyG;SACpH,CAAC;QACF,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,kCAAkC,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACzG,OAAO,uCAAuC,KAAK,MAAM,SAAS,EAAE,CAAC;IACvE,CAAC;IACD,oEAAoE;IACpE,IAAI,8CAA8C,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7D,OAAO,sFAAsF,CAAC;IAChG,CAAC;IACD,kFAAkF;IAClF,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,yEAAyE,CAAC,CAAC;IACtG,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,wIAAwI,CAAC;IAChK,CAAC;IACD,0DAA0D;IAC1D,MAAM,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACtF,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,iBAAiB,YAAY,CAAC,CAAC,CAAC,uBAAuB,YAAY,CAAC,CAAC,CAAC,oEAAoE,CAAC;IACpJ,CAAC;IACD,2DAA2D;IAC3D,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACjF,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC1B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QACpE,OAAO,gDAAgD,KAAK,KAAK,CAAC;IACpE,CAAC;IACD,uEAAuE;IACvE,mEAAmE;IACnE,MAAM,QAAQ,GAA2B;QACvC,uBAAuB,EAAE,0IAA0I;QACnK,iBAAiB,EAAE,sEAAsE;QACzF,wBAAwB,EAAE,6GAA6G;QACvI,uBAAuB,EAAE,0EAA0E;QACnG,mBAAmB,EAAE,kFAAkF;QACvG,gBAAgB,EAAE,6HAA6H;QAC/I,oBAAoB,EAAE,oGAAoG;QAC1H,iBAAiB,EAAE,qCAAqC;QACxD,mBAAmB,EAAE,uCAAuC;QAC5D,wBAAwB,EAAE,iDAAiD;QAC3E,qBAAqB,EAAE,8CAA8C;KACtE,CAAC;IACF,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,8DAA8D,CAAC,CAAC;IAC7F,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,UAAU,CAAC;QAClC,MAAM,GAAG,GAAG,GAAG,KAAK,IAAI,GAAG,EAAE,CAAC;QAC9B,IAAI,QAAQ,CAAC,GAAG,CAAC;YAAE,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAgB;IAC3C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;QACtC,IAAI,IAAI;YAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC3B,CAAC;AAED,SAAS,mBAAmB,CAAC,QAAsB;IACjD,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;QACvC,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC3C,OAAO,GAAG,CAAC,SAAS,CAAC,CAAC,sCAAsC;QAC9D,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAqB,EAAE,QAAsB;IACzE,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IAEtC,KAAK,CACH,QAAQ,EACR,iBAAiB,CAAC,QAAQ,EAAE;QAC1B,KAAK;YACH,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;YACxC,IAAI,QAAQ,IAAI,QAAQ,CAAC,iBAAiB,EAAE,CAAC;gBAC3C,QAAQ,CAAC,IAAI,CACX,aAAa,QAAQ,CAAC,aAAa,EAAE,EAAE,IAAI,IAAI,QAAQ,CAAC,IAAI,mBAAmB,QAAQ,CAAC,iBAAiB,EAAE,CAC5G,CAAC;YACJ,CAAC;QACH,CAAC;QACD,SAAS,CAAC,IAAI;YACZ,MAAM,SAAS,GAAG,QAAQ,CAAC,YAAY,EAAE,CAAC;YAC1C,IAAI,SAAS,IAAI,SAAS,CAAC,iBAAiB,IAAI,IAAI,EAAE,CAAC;gBACrD,QAAQ,CAAC,IAAI,CACX,kBAAkB,IAAI,CAAC,KAAK,mBAAmB,SAAS,CAAC,iBAAiB,IAAI,EAAE,EAAE,CACnF,CAAC;YACJ,CAAC;QACH,CAAC;KACF,CAAC,CACH,CAAC;IAEF,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAoB;IAClD,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,OAAO,CAAC;IAEjC,IAAI,MAAM,CAAC;IACX,IAAI,CAAC;QACH,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,8BAA8B,GAAG,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;SAC/F,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAuB,EAAE,CAAC;IAEvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACjD,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,YAAY,UAAU,EAAE,EAAE,CAAC;QAClE,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC;QACrC,MAAM,MAAM,GAAqB;YAC/B,UAAU;YACV,QAAQ;YACR,MAAM,EAAE,QAAQ;YAChB,aAAa,EAAE,OAAO;SACvB,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACtC,MAAM,CAAC,aAAa,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;YAErD,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAEjD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxB,wCAAwC;gBACxC,MAAM,mBAAmB,GAAG,oBAAoB,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;gBAE1E,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACnC,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC;oBACzB,MAAM,CAAC,QAAQ,GAAG,mBAAmB,CAAC;gBACxC,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC;gBAC5B,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC;gBACzB,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;YACjD,CAAC;QACH,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAChB,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAC9B,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvB,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC;IAC7D,MAAM,aAAa,GAAG,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IAErD,MAAM,KAAK,GAAa;QACtB,yBAAyB;QACzB,uBAAuB,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,aAAa,EAAE;QAC9D,0BAA0B,OAAO,CAAC,MAAM,IAAI;QAC5C,uBAAuB;KACxB,CAAC;IAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACrB,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACtC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;QAC/C,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC1C,KAAK,CAAC,IAAI,CAAC,uFAAuF,CAAC,CAAC;QAEpG,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC3B,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;YACpC,KAAK,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC,aAAa,oBAAoB,CAAC,CAAC;QACjG,CAAC;aAAM,IAAI,CAAC,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACjC,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;YACpC,MAAM,WAAW,GAAG,CAAC,CAAC,QAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACnE,KAAK,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC,aAAa,oBAAoB,WAAW,IAAI,CAAC,CAAC;QAChH,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC,MAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC9E,MAAM,KAAK,GAAG,mBAAmB,CAAC,CAAC,CAAC,MAAO,CAAC,CAAC;YAC7C,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;gBACtB,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YAC7B,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;aACvB;SACF;KACF,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cloudcart/dev-mcp",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"description": "MCP server for CloudCart GraphQL APIs
|
|
3
|
+
"version": "0.1.4",
|
|
4
|
+
"description": "MCP server for CloudCart GraphQL APIs \u2014 helps AI assistants write correct queries and mutations",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"bin": {
|