@cloudcart/dev-mcp 0.1.4 → 0.2.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.
- package/data/embeddings.bin +0 -0
- package/data/embeddings.json +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -1
- package/dist/prompts/admin.d.ts +1 -1
- package/dist/prompts/admin.d.ts.map +1 -1
- package/dist/prompts/admin.js +70 -110
- package/dist/prompts/admin.js.map +1 -1
- package/dist/tools/introspect-schema.d.ts +2 -0
- package/dist/tools/introspect-schema.d.ts.map +1 -1
- package/dist/tools/introspect-schema.js +16 -3
- package/dist/tools/introspect-schema.js.map +1 -1
- package/dist/tools/learn-cloudcart-api.d.ts.map +1 -1
- package/dist/tools/learn-cloudcart-api.js +5 -0
- package/dist/tools/learn-cloudcart-api.js.map +1 -1
- package/dist/tools/semantic-search.d.ts +14 -0
- package/dist/tools/semantic-search.d.ts.map +1 -0
- package/dist/tools/semantic-search.js +312 -0
- package/dist/tools/semantic-search.js.map +1 -0
- package/dist/tools/validate-graphql.d.ts.map +1 -1
- package/dist/tools/validate-graphql.js +29 -2
- package/dist/tools/validate-graphql.js.map +1 -1
- package/package.json +5 -3
package/dist/index.js
CHANGED
|
@@ -5,6 +5,7 @@ import { z } from "zod";
|
|
|
5
5
|
import { learnCloudCartApi } from "./tools/learn-cloudcart-api.js";
|
|
6
6
|
import { introspectSchema } from "./tools/introspect-schema.js";
|
|
7
7
|
import { validateGraphql } from "./tools/validate-graphql.js";
|
|
8
|
+
import { semanticSearch } from "./tools/semantic-search.js";
|
|
8
9
|
const server = new McpServer({
|
|
9
10
|
name: "cloudcart-dev-mcp",
|
|
10
11
|
version: "0.1.0",
|
|
@@ -33,6 +34,11 @@ server.tool("introspect_graphql_schema", "Search the CloudCart GraphQL schema fo
|
|
|
33
34
|
.optional()
|
|
34
35
|
.default(["all"])
|
|
35
36
|
.describe("Filter results by category"),
|
|
37
|
+
mode: z
|
|
38
|
+
.enum(["full", "compact"])
|
|
39
|
+
.optional()
|
|
40
|
+
.default("full")
|
|
41
|
+
.describe("`full` (default) expands the top matching type with all its fields. `compact` returns just the type summary line + grouped sub-type hints — use when you already have the signature you need from semantic_search and only want a quick sanity-check or the grouped-sub-type roadmap. Typical saving on a fat type (Product, Order, Settings): ~1 500 tokens."),
|
|
36
42
|
conversationId: z.string().describe("🔗 REQUIRED: conversationId from learn_cloudcart_api tool. Call learn_cloudcart_api first if you don't have this."),
|
|
37
43
|
api: z.enum(["admin"]).optional().default("admin").describe("Which API schema to search"),
|
|
38
44
|
}, async (input) => introspectSchema(input));
|
|
@@ -51,6 +57,21 @@ It also returns an artifact ID and revision number for each code block. This is
|
|
|
51
57
|
api: z.enum(["admin"]).optional().default("admin").describe("Which API schema to validate against"),
|
|
52
58
|
conversationId: z.string().describe("🔗 REQUIRED: conversationId from learn_cloudcart_api tool. Call learn_cloudcart_api first if you don't have this."),
|
|
53
59
|
}, async (input) => validateGraphql(input));
|
|
60
|
+
server.tool("semantic_search", `Natural-language semantic search over the CloudCart GraphQL schema. Use this FIRST when you know WHAT you want to accomplish but don't know the exact type/field/query name.
|
|
61
|
+
|
|
62
|
+
💡 WHEN TO USE THIS vs introspect_graphql_schema:
|
|
63
|
+
- Use semantic_search for intent/goal queries: "customers who spent a lot", "discount rules for first-time buyers", "out of stock products", "refund an order", "send abandoned cart email".
|
|
64
|
+
- Use introspect_graphql_schema when you already know the exact name (e.g. "Product", "createOrder", "SegmentConditionInput").
|
|
65
|
+
|
|
66
|
+
Queries can be in any language (Bulgarian, English, etc.). Returns the top-K matching types, fields, operations, and input fields ranked by semantic similarity, with signatures and descriptions. Follow up with introspect_graphql_schema for full details on an exact name, then validate_graphql_codeblocks before executing.`, {
|
|
67
|
+
query: z.string().describe("Natural-language description of what you want to do or find. Can be in any language. Examples: 'filter customers by total spent', 'bulk update product prices', 'create a segment for returning buyers'."),
|
|
68
|
+
limit: z.number().int().min(1).max(20).optional().default(8).describe("How many top matches to return (1–20, default 8)."),
|
|
69
|
+
kinds: z
|
|
70
|
+
.array(z.enum(["type", "field", "operation", "op-arg", "input-field"]))
|
|
71
|
+
.optional()
|
|
72
|
+
.describe("Restrict results to specific chunk kinds. `op-arg` matches filter arguments on list queries. Omit to search across everything."),
|
|
73
|
+
conversationId: z.string().describe("🔗 REQUIRED: conversationId from learn_cloudcart_api tool. Call learn_cloudcart_api first if you don't have this."),
|
|
74
|
+
}, async (input) => semanticSearch(input));
|
|
54
75
|
async function main() {
|
|
55
76
|
const transport = new StdioServerTransport();
|
|
56
77
|
await server.connect(transport);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/prompts/admin.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const ADMIN_API_PROMPT = "You
|
|
1
|
+
export declare const ADMIN_API_PROMPT = "You help CloudCart developers write correct GraphQL queries and mutations for the Admin API. Be concise, surface concrete operations, and ALWAYS validate before returning code.\n\n## Tools (in order of use)\n\n1. `semantic_search` \u2014 natural-language schema discovery in any language (English, Bulgarian, \u2026). Use FIRST for almost every task. It's the cheapest entry point and usually gives you everything you need to compose the query.\n2. `introspect_graphql_schema` \u2014 exact-name lookup once you have an identifier. Supports `mode: \"compact\"` to skip the full field listing (~45% smaller output on fat types) \u2014 use compact when semantic_search already handed you the signature and you only need a sanity check or the grouped-sub-type roadmap.\n3. `validate_graphql_codeblocks` \u2014 MANDATORY before returning any GraphQL to the user. Catches typos, wrong types, deprecated fields. If it reports errors, fix and re-validate.\n\n## Workflow\n\n user intent \u2192 semantic_search \u2192 [introspect if needed] \u2192 compose \u2192 validate \u2192 return\n\nSemantic first. Don't guess field names. Don't call `introspect` by reflex \u2014 check whether the semantic result already has the signature you need.\n\n## Using semantic_search well\n\n- **Keep queries short and verb-forward.** \"refund an order\" beats \"how can I refund an order that was paid with a credit card\". Long phrases dilute the intent signal.\n- **Reformulate when top-3 is noisy.** Swap the wording: \"create segment\" works better than \"create a marketing segment of returning buyers\".\n- **Read the `kind` tag on each result:**\n - `operation` \u2192 a top-level query or mutation. Compose this directly.\n - `op-arg` \u2192 an argument on a list query (usually a filter). Pass it in the operation's parentheses.\n - `type` \u2192 a GraphQL type. Introspect only if you need the field list.\n - `field` \u2192 a field on a type. Select it in the response.\n - `input-field` \u2192 a field inside an Input object. Include it in the input payload.\n- **Each hit carries a full signature + description.** When that's enough, go straight to `validate` \u2014 skipping introspect saves ~1 500 tokens per call.\n- **No good hit?** Shorten the query, or drop to `introspect_graphql_schema` with the exact name you suspect.\n\n## Critical rules (missing any of these breaks the query)\n\n1. **Output fields are camelCase.** `urlHandle`, `priceFrom`, `dateAdded`, `firstName`. Writing `url_handle` in a SELECTION fails.\n2. **Input fields and mutation/query arguments stay snake_case.** `CreateProductInput.url_handle`, `deleteSmartCollections(ids:)`, `productVariants(product_id:)`, `orders(date_added: ...)`. Do NOT camelCase these.\n3. **Scalars.** `DateTime` is `Y-m-d H:i:s` (NOT ISO 8601). `Date` is `Y-m-d`. `YesNo` is an enum (`yes`/`no`), NOT a Boolean.\n4. **Big root types are split into grouped sub-objects.** Flat fields like `Product.price_from` or `Order.customer_email` DO NOT EXIST. Examples: `Product.pricing`, `Product.seo`, `Product.flags`, `Product.inventory`, `Product.timestamps`; `Order.buyer`, `Order.amounts`, `Order.statuses`, `Order.flags`, `Order.timestamps`; `Customer.contact`, `Customer.marketingPrefs`, `Customer.status`. Introspect the root type for the full group list.\n5. **Connections expose both `nodes` and `edges`.** Prefer the flat form \u2014 half the payload:\n ```graphql\n categories(first: 10) { nodes { id name } totalCount }\n ```\n Use `edges { node cursor } pageInfo` only when you need cursor pagination. Auto-`@paginate` connections (e.g. `ProductConnection`) only expose `edges`/`pageInfo`.\n\n## Keep responses small\n\nSelect 3\u20135 fields per type. Don't request nested sub-types unless the user asked for that data. Empty requests (e.g. `introspect_graphql_schema` with no term) are rejected to protect your context budget.\n\n## Application-provided resources\n\nMany CloudCart features \u2014 shipping providers, payment gateways, ERP/POS, product feeds, chat widgets, marketing channels \u2014 ship as **Apps** from the marketplace, not core. Before invoking a vendor-specific mutation:\n\n1. Verify the app exists: `application(key: \"\u2026\")` or `applications(filter: { group: \"payment\", is_installed: true })`.\n2. All three flags must be true: `isInstalled`, `isActive`, `isConfigured`.\n3. Never assume an app exists or hardcode vendor names.\n\n`introspect_graphql_schema` auto-prepends a `\u26A0\uFE0F (Application-Provided)` notice for recognised vendor patterns. For discovery recipes run `semantic_search(\"check if app is installed\")`.\n\n## Filters vs segments\n\n- **Filter** = ad-hoc narrowing of a list query. Use for one-off counts/exports. Discover filter args via `semantic_search(\"filter orders by \u2026\")`. Typical shapes: `NumericFilter { operator: gt|gte|lt|lte|eq, value }`, `DateFilter { operator, value }`, `StringFilter { operator: is|is_not|in, value }`, simple `ID` / `Boolean` / `YesNo`.\n- **Segment** = persisted marketing collection for reuse in campaigns. To build one: call `segmentConditions` FIRST to discover the condition tree, pass each condition's full `key` (e.g. `marketing.segments.conditions.order`) \u2014 NOT the short `id` \u2014 into `SegmentConditionInput`, then `createSegment(input: { type: regular, conditions: [...] })`. After creation, filter members with `customers(segment: <id>)`.\n\n## End-to-end example\n\nUser: \"How many VIP customers do we have?\"\n\n1. `semantic_search(\"customers with high lifetime spend\")` \u2192 surfaces `customers(total_spent: NumericFilter)`.\n2. `introspect_graphql_schema(\"customers\")` \u2192 confirms signature + `CustomerConnection.totalCount`.\n3. Compose:\n ```graphql\n { customers(total_spent: { operator: gt, value: 50000 }) { totalCount } }\n ```\n4. `validate_graphql_codeblocks` \u2192 passes.\n5. Return with a one-line note that the value is in store-currency cents.\n\nAlways return GraphQL wrapped in triple-backtick `graphql` blocks.";
|
|
2
2
|
//# sourceMappingURL=admin.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../../src/prompts/admin.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,
|
|
1
|
+
{"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../../src/prompts/admin.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,g5LAuEwC,CAAC"}
|
package/dist/prompts/admin.js
CHANGED
|
@@ -1,113 +1,73 @@
|
|
|
1
|
-
export const ADMIN_API_PROMPT = `You
|
|
2
|
-
|
|
3
|
-
You should find all operations that can help the developer achieve their goal, provide valid GraphQL operations along with helpful explanations.
|
|
4
|
-
When returning a GraphQL operation always wrap it in triple backticks and use the graphql file type.
|
|
5
|
-
THIS IS IMPORTANT: GraphQL operations you generate should ALWAYS be validated with the \`validate_graphql_codeblocks\` MCP tool. This tool will parse the operation with the GQL schema and give you feedback of errors if any were detected. If errors are detected from this validation tool, make the necessary changes and then call this tool again.
|
|
1
|
+
export const ADMIN_API_PROMPT = `You help CloudCart developers write correct GraphQL queries and mutations for the Admin API. Be concise, surface concrete operations, and ALWAYS validate before returning code.
|
|
6
2
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
First think about what the developer is trying to do
|
|
10
|
-
Then use introspect_graphql_schema to find relevant types, queries, and mutations
|
|
11
|
-
For queries think about which fields you need to fetch and for mutations think about which arguments you need to pass as input
|
|
12
|
-
Then think about which fields to select from the return type. In general, don't select more than 5 fields
|
|
13
|
-
If there are nested objects think about which fields you need to fetch for those objects
|
|
14
|
-
|
|
15
|
-
IMPORTANT — APPLICATION-PROVIDED RESOURCES:
|
|
16
|
-
Many CloudCart features are provided by Applications from the CloudCart marketplace, not by the core platform.
|
|
17
|
-
CloudCart has 19 application groups with 250+ apps. The main groups are:
|
|
18
|
-
|
|
19
|
-
- **Shipping** (group: "shipping", 24 apps) — Speedy, Econt, ACS Courier, DHL, DHL Express, Sameday, FanCourier, Cargus, DPD, GLS, BoxNow, Sendcloud, Glovo, Speedex, etc.
|
|
20
|
-
- **Payment** (group: "payment", 46 apps) — Stripe, PayPal, Mollie, Borica, MyPOS, ePay, CloudCart Pay, Klarna, Adyen, DSK, Fibank, Raiffeisen, Monri, etc.
|
|
21
|
-
- **ERP / POS** (group: "global") — Barsy, Rkeeper, Facturis, SmartBill, Oblio, Lexoffice, Xentral, Sevdesk, etc.
|
|
22
|
-
- **Import** (group: "import", 17 apps) — CSV Import, XML Import, Shopify, WooCommerce, Magento, Google Sheets, JSON Import, etc.
|
|
23
|
-
- **Feed** (group: "feed", 19 apps) — Google Shopping Feed, Facebook Feed, Skroutz, Glami, eMAG, Criteo, Pazaruvaj, etc.
|
|
24
|
-
- **Google** (group: "global") — Google Shopping, Google Sheets, Google Analytics, Google Tags, Google Workspace.
|
|
25
|
-
- **OLX** (group: "other") — OLX marketplace integration with product sync, category mapping, and advert management.
|
|
26
|
-
- **Fulfillment** (group: "global") — Frisbo fulfillment with warehouse and order management.
|
|
27
|
-
- **Marketing** (group: "marketing") — Campaigns (email, SMS marketing automation).
|
|
28
|
-
- **Mailchimp** (group: "global") — Mailchimp email marketing integration.
|
|
29
|
-
- **SEO** (group: "seo") — SEO Spinner for automated meta title/description generation.
|
|
30
|
-
- **Chat** (group: "chat") — Live Chat widget.
|
|
31
|
-
- **Social Login** (group: "connect") — Facebook Connect, Google Connect.
|
|
32
|
-
- **Reviews** (group: "comment") — Facebook Comments, Yotpo.
|
|
33
|
-
- **Mail** (group: "mail") — Custom SMTP configuration.
|
|
34
|
-
- **Search** (group: "search") — Algolia search integration.
|
|
35
|
-
- **Product Description** (group: "product_description") — Flix Facts, Load Bee for rich product content.
|
|
36
|
-
- **Other** (group: "other") — Advanced Search, Listing Engine, Up/Cross-sell, etc.
|
|
37
|
-
|
|
38
|
-
When a developer asks about any application-provided feature, ALWAYS inform them that:
|
|
39
|
-
1. These features require an Application to be installed, active, and configured on their site.
|
|
40
|
-
2. Most operations require a \`key\` parameter — this is the application key (e.g., "speedy", "econt", "barsy", "stripe").
|
|
41
|
-
3. They can check app status with \`application(key: "...")\` or list available apps with \`applications(filter: { group: "shipping" })\`.
|
|
42
|
-
4. The introspect_graphql_schema tool will flag application-provided resources automatically with a notice.
|
|
43
|
-
|
|
44
|
-
USAGE TIPS for introspect_graphql_schema:
|
|
45
|
-
- Search by resource name: "product", "order", "customer", "discount"
|
|
46
|
-
- Search by action: "create", "update", "delete"
|
|
47
|
-
- If no results, try shorter/broader terms
|
|
48
|
-
- The search matches on type/query/mutation names (substring match)
|
|
49
|
-
- Results for application-provided resources will include a notice with setup requirements
|
|
50
|
-
|
|
51
|
-
SCHEMA CONVENTIONS (current as of 2026-04-21):
|
|
52
|
-
|
|
53
|
-
1. **Output fields are camelCase** — \`urlHandle\`, \`seoTitle\`, \`priceFrom\`, \`dateAdded\`, \`firstName\`, \`customerEmail\`, etc. If you write \`url_handle\` on an OUTPUT selection, the query fails.
|
|
54
|
-
|
|
55
|
-
2. **Input fields and query/mutation arguments stay snake_case** — \`CreateProductInput.url_handle\`, \`CreateCustomerInput.first_name\`, \`deleteSmartCollections(ids:)\`, \`productVariants(product_id:)\`. Do NOT camelCase these in mutations.
|
|
56
|
-
|
|
57
|
-
3. **Connection types expose TWO shapes** — most \`XxxConnection\` types have both the Relay cursor form and a flat alternative:
|
|
58
|
-
\`\`\`graphql
|
|
59
|
-
# Preferred for most queries (half the payload, no cursor wrapper):
|
|
60
|
-
categories(first: 10) { nodes { id name } totalCount }
|
|
61
|
-
|
|
62
|
-
# Use only when you need cursor pagination:
|
|
63
|
-
categories(first: 10) { edges { node { id name } cursor } pageInfo { hasNextPage endCursor } totalCount }
|
|
64
|
-
\`\`\`
|
|
65
|
-
NOTE: auto-generated connections from \`@paginate(type: CONNECTION)\` (e.g. \`ProductConnection\`) only expose \`edges\`/\`pageInfo\` — use the cursor form there.
|
|
66
|
-
|
|
67
|
-
4. **Grouped sub-types** — the big root types are split into purpose-scoped sub-objects. Flat fields like \`Product.price_from\` or \`Order.customer_email\` DO NOT EXIST anymore. Use:
|
|
68
|
-
- \`Product\`: \`pricing { from to type }\`, \`seo { title description }\`, \`flags { active digital hidden draft featured sale new shipping continueSelling }\`, \`inventory { tracking threshold variantsCount defaultVariantId }\`, \`parameters { p1 p1Id ... }\`, \`timestamps { added modified publishAt activeTo }\`
|
|
69
|
-
- \`Order\`: \`buyer { email firstName lastName }\`, \`amounts { subtotal total vatIncluded }\`, \`statuses { status fulfillment }\`, \`documents { invoiceNumber ... }\`, \`notes { customer administrator }\`, \`flags { manual abandoned notifyCustomer emailSent allowRecalculate }\`, \`timestamps { added archived locking shippingDate ... }\`
|
|
70
|
-
- \`Customer\`: \`contact { firstName lastName phone }\`, \`verification { emailConfirmed }\`, \`marketingPrefs { marketing newsletter }\`, \`status { active isActivated banned }\`, \`defaults { shippingAddressId billingAddressId }\`, \`timestamps { added updatedAt }\`
|
|
71
|
-
- \`CartSettings\`: \`registration\`, \`limits\`, \`defaults\`, \`checkoutFields\`, \`maps\`, \`orders\`, \`abandoned\`, \`legal\` (see introspect_graphql_schema for sub-type fields)
|
|
72
|
-
|
|
73
|
-
5. **Scalars** — \`DateTime\` is \`Y-m-d H:i:s\` (not ISO 8601). \`Date\` is \`Y-m-d\`. \`YesNo\` is an enum (\`yes\`/\`no\`), not a native Boolean.
|
|
74
|
-
|
|
75
|
-
6. **Error payloads** are lean — validation errors return just \`message\`, \`path\`, \`locations\`. No PHP stack traces by default.
|
|
76
|
-
|
|
77
|
-
7. **Pre-built filter args on list queries — use them instead of fetching everything and filtering client-side.** Before you loop over orders / products / customers, introspect the list query and check its args. Concrete filter shapes you likely want:
|
|
78
|
-
|
|
79
|
-
\`\`\`graphql
|
|
80
|
-
# "How many orders have more than 1 product?"
|
|
81
|
-
orders(products_count: { operator: gt, value: 1 }) { pageInfo { total } }
|
|
82
|
-
|
|
83
|
-
# "Orders with > 5 items total"
|
|
84
|
-
orders(quantity: { operator: gt, value: 5 }) { pageInfo { total } }
|
|
85
|
-
|
|
86
|
-
# "Customers with >= 2 completed orders"
|
|
87
|
-
customers(orders_count: { operator: gte, value: 2 }) { pageInfo { total } edges { node { email } } }
|
|
88
|
-
|
|
89
|
-
# "VIP customers with lifetime spend > 500 (store-currency cents)"
|
|
90
|
-
customers(total_spent: { operator: gt, value: 50000 }) { pageInfo { total } }
|
|
91
|
-
|
|
92
|
-
# "Customers in a given segment"
|
|
93
|
-
customers(segment: 115) { edges { node { id email } } }
|
|
94
|
-
|
|
95
|
-
# "Products out of stock / low stock"
|
|
96
|
-
products(stock: { operator: lte, value: 0 }) { pageInfo { total } }
|
|
97
|
-
|
|
98
|
-
# "Products without images"
|
|
99
|
-
products(has_image: false) { pageInfo { total } }
|
|
100
|
-
|
|
101
|
-
# "Recently modified products"
|
|
102
|
-
products(date_modified: { operator: gte, value: "2026-04-01" }) { pageInfo { total } }
|
|
103
|
-
\`\`\`
|
|
104
|
-
|
|
105
|
-
NumericFilter operators: \`lt\`, \`lte\`, \`gt\`, \`gte\`, \`eq\` / \`is\`. DateFilter adds \`between\` with pipe-separated value \`"YYYY-MM-DD|YYYY-MM-DD"\`. StringFilter supports \`is\`, \`is_not\`, \`in\`.
|
|
3
|
+
## Tools (in order of use)
|
|
106
4
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
5
|
+
1. \`semantic_search\` — natural-language schema discovery in any language (English, Bulgarian, …). Use FIRST for almost every task. It's the cheapest entry point and usually gives you everything you need to compose the query.
|
|
6
|
+
2. \`introspect_graphql_schema\` — exact-name lookup once you have an identifier. Supports \`mode: "compact"\` to skip the full field listing (~45% smaller output on fat types) — use compact when semantic_search already handed you the signature and you only need a sanity check or the grouped-sub-type roadmap.
|
|
7
|
+
3. \`validate_graphql_codeblocks\` — MANDATORY before returning any GraphQL to the user. Catches typos, wrong types, deprecated fields. If it reports errors, fix and re-validate.
|
|
8
|
+
|
|
9
|
+
## Workflow
|
|
10
|
+
|
|
11
|
+
user intent → semantic_search → [introspect if needed] → compose → validate → return
|
|
12
|
+
|
|
13
|
+
Semantic first. Don't guess field names. Don't call \`introspect\` by reflex — check whether the semantic result already has the signature you need.
|
|
14
|
+
|
|
15
|
+
## Using semantic_search well
|
|
16
|
+
|
|
17
|
+
- **Keep queries short and verb-forward.** "refund an order" beats "how can I refund an order that was paid with a credit card". Long phrases dilute the intent signal.
|
|
18
|
+
- **Reformulate when top-3 is noisy.** Swap the wording: "create segment" works better than "create a marketing segment of returning buyers".
|
|
19
|
+
- **Read the \`kind\` tag on each result:**
|
|
20
|
+
- \`operation\` → a top-level query or mutation. Compose this directly.
|
|
21
|
+
- \`op-arg\` → an argument on a list query (usually a filter). Pass it in the operation's parentheses.
|
|
22
|
+
- \`type\` → a GraphQL type. Introspect only if you need the field list.
|
|
23
|
+
- \`field\` → a field on a type. Select it in the response.
|
|
24
|
+
- \`input-field\` → a field inside an Input object. Include it in the input payload.
|
|
25
|
+
- **Each hit carries a full signature + description.** When that's enough, go straight to \`validate\` — skipping introspect saves ~1 500 tokens per call.
|
|
26
|
+
- **No good hit?** Shorten the query, or drop to \`introspect_graphql_schema\` with the exact name you suspect.
|
|
27
|
+
|
|
28
|
+
## Critical rules (missing any of these breaks the query)
|
|
29
|
+
|
|
30
|
+
1. **Output fields are camelCase.** \`urlHandle\`, \`priceFrom\`, \`dateAdded\`, \`firstName\`. Writing \`url_handle\` in a SELECTION fails.
|
|
31
|
+
2. **Input fields and mutation/query arguments stay snake_case.** \`CreateProductInput.url_handle\`, \`deleteSmartCollections(ids:)\`, \`productVariants(product_id:)\`, \`orders(date_added: ...)\`. Do NOT camelCase these.
|
|
32
|
+
3. **Scalars.** \`DateTime\` is \`Y-m-d H:i:s\` (NOT ISO 8601). \`Date\` is \`Y-m-d\`. \`YesNo\` is an enum (\`yes\`/\`no\`), NOT a Boolean.
|
|
33
|
+
4. **Big root types are split into grouped sub-objects.** Flat fields like \`Product.price_from\` or \`Order.customer_email\` DO NOT EXIST. Examples: \`Product.pricing\`, \`Product.seo\`, \`Product.flags\`, \`Product.inventory\`, \`Product.timestamps\`; \`Order.buyer\`, \`Order.amounts\`, \`Order.statuses\`, \`Order.flags\`, \`Order.timestamps\`; \`Customer.contact\`, \`Customer.marketingPrefs\`, \`Customer.status\`. Introspect the root type for the full group list.
|
|
34
|
+
5. **Connections expose both \`nodes\` and \`edges\`.** Prefer the flat form — half the payload:
|
|
35
|
+
\`\`\`graphql
|
|
36
|
+
categories(first: 10) { nodes { id name } totalCount }
|
|
37
|
+
\`\`\`
|
|
38
|
+
Use \`edges { node cursor } pageInfo\` only when you need cursor pagination. Auto-\`@paginate\` connections (e.g. \`ProductConnection\`) only expose \`edges\`/\`pageInfo\`.
|
|
39
|
+
|
|
40
|
+
## Keep responses small
|
|
41
|
+
|
|
42
|
+
Select 3–5 fields per type. Don't request nested sub-types unless the user asked for that data. Empty requests (e.g. \`introspect_graphql_schema\` with no term) are rejected to protect your context budget.
|
|
43
|
+
|
|
44
|
+
## Application-provided resources
|
|
45
|
+
|
|
46
|
+
Many CloudCart features — shipping providers, payment gateways, ERP/POS, product feeds, chat widgets, marketing channels — ship as **Apps** from the marketplace, not core. Before invoking a vendor-specific mutation:
|
|
47
|
+
|
|
48
|
+
1. Verify the app exists: \`application(key: "…")\` or \`applications(filter: { group: "payment", is_installed: true })\`.
|
|
49
|
+
2. All three flags must be true: \`isInstalled\`, \`isActive\`, \`isConfigured\`.
|
|
50
|
+
3. Never assume an app exists or hardcode vendor names.
|
|
51
|
+
|
|
52
|
+
\`introspect_graphql_schema\` auto-prepends a \`⚠️ (Application-Provided)\` notice for recognised vendor patterns. For discovery recipes run \`semantic_search("check if app is installed")\`.
|
|
53
|
+
|
|
54
|
+
## Filters vs segments
|
|
55
|
+
|
|
56
|
+
- **Filter** = ad-hoc narrowing of a list query. Use for one-off counts/exports. Discover filter args via \`semantic_search("filter orders by …")\`. Typical shapes: \`NumericFilter { operator: gt|gte|lt|lte|eq, value }\`, \`DateFilter { operator, value }\`, \`StringFilter { operator: is|is_not|in, value }\`, simple \`ID\` / \`Boolean\` / \`YesNo\`.
|
|
57
|
+
- **Segment** = persisted marketing collection for reuse in campaigns. To build one: call \`segmentConditions\` FIRST to discover the condition tree, pass each condition's full \`key\` (e.g. \`marketing.segments.conditions.order\`) — NOT the short \`id\` — into \`SegmentConditionInput\`, then \`createSegment(input: { type: regular, conditions: [...] })\`. After creation, filter members with \`customers(segment: <id>)\`.
|
|
58
|
+
|
|
59
|
+
## End-to-end example
|
|
60
|
+
|
|
61
|
+
User: "How many VIP customers do we have?"
|
|
62
|
+
|
|
63
|
+
1. \`semantic_search("customers with high lifetime spend")\` → surfaces \`customers(total_spent: NumericFilter)\`.
|
|
64
|
+
2. \`introspect_graphql_schema("customers")\` → confirms signature + \`CustomerConnection.totalCount\`.
|
|
65
|
+
3. Compose:
|
|
66
|
+
\`\`\`graphql
|
|
67
|
+
{ customers(total_spent: { operator: gt, value: 50000 }) { totalCount } }
|
|
68
|
+
\`\`\`
|
|
69
|
+
4. \`validate_graphql_codeblocks\` → passes.
|
|
70
|
+
5. Return with a one-line note that the value is in store-currency cents.
|
|
71
|
+
|
|
72
|
+
Always return GraphQL wrapped in triple-backtick \`graphql\` blocks.`;
|
|
113
73
|
//# sourceMappingURL=admin.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin.js","sourceRoot":"","sources":["../../src/prompts/admin.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG
|
|
1
|
+
{"version":3,"file":"admin.js","sourceRoot":"","sources":["../../src/prompts/admin.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qEAuEqC,CAAC"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
type FilterKind = "all" | "types" | "queries" | "mutations";
|
|
2
|
+
type Mode = "full" | "compact";
|
|
2
3
|
export interface IntrospectInput {
|
|
3
4
|
query: string;
|
|
4
5
|
filter?: FilterKind[];
|
|
5
6
|
conversationId: string;
|
|
6
7
|
api?: string;
|
|
8
|
+
mode?: Mode;
|
|
7
9
|
}
|
|
8
10
|
export declare function introspectSchema(input: IntrospectInput): {
|
|
9
11
|
content: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"introspect-schema.d.ts","sourceRoot":"","sources":["../../src/tools/introspect-schema.ts"],"names":[],"mappings":"AAGA,KAAK,UAAU,GAAG,KAAK,GAAG,OAAO,GAAG,SAAS,GAAG,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"introspect-schema.d.ts","sourceRoot":"","sources":["../../src/tools/introspect-schema.ts"],"names":[],"mappings":"AAGA,KAAK,UAAU,GAAG,KAAK,GAAG,OAAO,GAAG,SAAS,GAAG,WAAW,CAAC;AAC5D,KAAK,IAAI,GAAG,MAAM,GAAG,SAAS,CAAC;AAE/B,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,IAAI,CAAC;CACb;AAuID,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,eAAe;;;;;EA4HtD"}
|
|
@@ -30,6 +30,12 @@ function formatField(field) {
|
|
|
30
30
|
const sig = signatureFor(field);
|
|
31
31
|
return field.description ? `${sig} # ${field.description}` : sig;
|
|
32
32
|
}
|
|
33
|
+
/** Ultra-compact: `name → ReturnType # description`, no args. For compact mode listings. */
|
|
34
|
+
function formatFieldCompact(field) {
|
|
35
|
+
const ret = resolveTypeRef(field.type);
|
|
36
|
+
const line = `${field.name} → ${ret}`;
|
|
37
|
+
return field.description ? `${line} # ${field.description}` : line;
|
|
38
|
+
}
|
|
33
39
|
const MAX_FIELDS_PER_TYPE = 20;
|
|
34
40
|
/** Root types known to have been consolidated into grouped sub-types. */
|
|
35
41
|
const GROUPED_PARENT_HINTS = {
|
|
@@ -109,6 +115,7 @@ export function introspectSchema(input) {
|
|
|
109
115
|
const api = input.api ?? "admin";
|
|
110
116
|
const filters = input.filter ?? ["all"];
|
|
111
117
|
const includeAll = filters.includes("all");
|
|
118
|
+
const mode = input.mode ?? "full";
|
|
112
119
|
// Reject empty/whitespace-only queries — returning a random top-10 slice
|
|
113
120
|
// (1 500+ tokens) helps nobody. Nudge the caller to provide a term.
|
|
114
121
|
const rawQuery = input.query?.trim() ?? "";
|
|
@@ -162,7 +169,11 @@ export function introspectSchema(input) {
|
|
|
162
169
|
matched.forEach((t, i) => {
|
|
163
170
|
const exactHit = t.name.toLowerCase() === normalized || t.name.toLowerCase() === rawQuery.toLowerCase();
|
|
164
171
|
const expand = i === 0 || exactHit || matched.length === 1;
|
|
165
|
-
|
|
172
|
+
// Compact mode suppresses full field listings — only the summary
|
|
173
|
+
// line (`KIND Name # description`) plus any grouped sub-type
|
|
174
|
+
// hint is emitted. Typical saving for a fat type like Product:
|
|
175
|
+
// ~1 500 tokens down to ~120.
|
|
176
|
+
const body = expand && mode === "full" ? formatType(t) : formatTypeSummary(t);
|
|
166
177
|
lines.push(renderAppPrefix(t.name) + body);
|
|
167
178
|
if (expand)
|
|
168
179
|
emittedHints.push(...hintsForType(t));
|
|
@@ -182,8 +193,9 @@ export function introspectSchema(input) {
|
|
|
182
193
|
if (all.length > RESULTS_LIMIT)
|
|
183
194
|
anyTruncated = true;
|
|
184
195
|
if (matched.length > 0) {
|
|
196
|
+
const fmt = mode === "compact" ? formatFieldCompact : formatField;
|
|
185
197
|
sections.push(`## Queries\n` +
|
|
186
|
-
matched.map((f) => renderAppPrefix(f.name) +
|
|
198
|
+
matched.map((f) => renderAppPrefix(f.name) + fmt(f)).join("\n"));
|
|
187
199
|
}
|
|
188
200
|
}
|
|
189
201
|
if (includeAll || filters.includes("mutations")) {
|
|
@@ -192,8 +204,9 @@ export function introspectSchema(input) {
|
|
|
192
204
|
if (all.length > RESULTS_LIMIT)
|
|
193
205
|
anyTruncated = true;
|
|
194
206
|
if (matched.length > 0) {
|
|
207
|
+
const fmt = mode === "compact" ? formatFieldCompact : formatField;
|
|
195
208
|
sections.push(`## Mutations\n` +
|
|
196
|
-
matched.map((f) => renderAppPrefix(f.name) +
|
|
209
|
+
matched.map((f) => renderAppPrefix(f.name) + fmt(f)).join("\n") +
|
|
197
210
|
`\n> TIP: mutation inputs are snake_case — use url_handle, first_name, price_from, etc. (outputs are camelCase).`);
|
|
198
211
|
}
|
|
199
212
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"introspect-schema.js","sourceRoot":"","sources":["../../src/tools/introspect-schema.ts"],"names":[],"mappings":"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"}
|
|
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":"learn-cloudcart-api.d.ts","sourceRoot":"","sources":["../../src/tools/learn-cloudcart-api.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"learn-cloudcart-api.d.ts","sourceRoot":"","sources":["../../src/tools/learn-cloudcart-api.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,aAAa;;;;;EAmCrD"}
|
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
import { randomUUID } from "node:crypto";
|
|
2
2
|
import { ADMIN_API_PROMPT } from "../prompts/admin.js";
|
|
3
|
+
import { prewarm as prewarmSemanticSearch } from "./semantic-search.js";
|
|
3
4
|
const PROMPTS = {
|
|
4
5
|
admin: ADMIN_API_PROMPT,
|
|
5
6
|
};
|
|
6
7
|
export function learnCloudCartApi(input) {
|
|
7
8
|
const api = input.api ?? "admin";
|
|
8
9
|
const conversationId = input.conversationId ?? randomUUID();
|
|
10
|
+
// Kick off embedding-model load in the background so the first
|
|
11
|
+
// semantic_search call (which usually comes a few seconds later) doesn't
|
|
12
|
+
// pay the 30+ second cold-start penalty. Best-effort, never throws.
|
|
13
|
+
prewarmSemanticSearch();
|
|
9
14
|
const prompt = PROMPTS[api];
|
|
10
15
|
if (!prompt) {
|
|
11
16
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"learn-cloudcart-api.js","sourceRoot":"","sources":["../../src/tools/learn-cloudcart-api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"learn-cloudcart-api.js","sourceRoot":"","sources":["../../src/tools/learn-cloudcart-api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAExE,MAAM,OAAO,GAA2B;IACtC,KAAK,EAAE,gBAAgB;CACxB,CAAC;AAQF,MAAM,UAAU,iBAAiB,CAAC,KAAoB;IACpD,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,OAAO,CAAC;IACjC,MAAM,cAAc,GAAG,KAAK,CAAC,cAAc,IAAI,UAAU,EAAE,CAAC;IAE5D,+DAA+D;IAC/D,yEAAyE;IACzE,oEAAoE;IACpE,qBAAqB,EAAE,CAAC;IAExB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC5B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,iBAAiB,GAAG,sBAAsB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;iBAClF;aACF;SACF,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,8CAA8C,cAAc;;;;EAIzE,MAAM,EAAE,CAAC;IAET,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI;aACL;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface SemanticSearchInput {
|
|
2
|
+
query: string;
|
|
3
|
+
conversationId: string;
|
|
4
|
+
limit?: number;
|
|
5
|
+
kinds?: Array<"type" | "field" | "operation" | "op-arg" | "input-field">;
|
|
6
|
+
}
|
|
7
|
+
export declare function prewarm(): void;
|
|
8
|
+
export declare function semanticSearch(input: SemanticSearchInput): Promise<{
|
|
9
|
+
content: {
|
|
10
|
+
type: "text";
|
|
11
|
+
text: string;
|
|
12
|
+
}[];
|
|
13
|
+
}>;
|
|
14
|
+
//# sourceMappingURL=semantic-search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"semantic-search.d.ts","sourceRoot":"","sources":["../../src/tools/semantic-search.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,OAAO,GAAG,WAAW,GAAG,QAAQ,GAAG,aAAa,CAAC,CAAC;CAC1E;AAiED,wBAAgB,OAAO,IAAI,IAAI,CAO9B;AAqJD,wBAAsB,cAAc,CAAC,KAAK,EAAE,mBAAmB;;;;;GA2E9D"}
|