sbuilder-mcp 0.59.0 → 0.59.2
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/CHANGELOG.md +17 -0
- package/CHANGELOG.vi.md +17 -0
- package/README.md +1 -1
- package/README.vi.md +1 -1
- package/dist/catalog/api.generated.js +40 -4
- package/dist/catalog/deadkeys.generated.js +2 -2
- package/dist/catalog/elements.generated.js +57 -7
- package/dist/catalog/search.js +32 -1
- package/dist/catalog/shapes.generated.js +19 -4
- package/dist/catalog/storepages.generated.js +4 -4
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,23 @@ All notable changes to this project are documented in this file.
|
|
|
6
6
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
7
7
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
8
8
|
|
|
9
|
+
## [0.59.2] - 2026-09-15
|
|
10
|
+
|
|
11
|
+
### Fixed
|
|
12
|
+
- The call sheet for creating or replacing a product now states, at the moment a price is written, that `priceCents`, `compareAtCents`, `costCents`, and a shipping method's `feeCents` are minor units divided by 100 on the storefront, instead of only as the fix for a readiness gap that clears the moment a product exists.
|
|
13
|
+
- The call sheet now states that the variant picker renders from `product.attributes`, not from `variants[].options` alone, so a product with variants but no declared attributes no longer silently ships the element's seed options ("Color: Red / Green / Blue") on the published page.
|
|
14
|
+
|
|
15
|
+
## [0.59.1] - 2026-09-15
|
|
16
|
+
|
|
17
|
+
### Added
|
|
18
|
+
- `sb_api_find` and `sb_api_call` now reach `POST /api/sites/{siteId}/ai/messages`, the editor's own AI assistant for a product, with its request shape (`question` plus a `history` of prior turns).
|
|
19
|
+
- `sb_traits_for` now lists `articleSourceType` and `relationSlotKey` as controls on article-list repeaters, and both it and `sb_set` recognize `page_category` as a legal `articleSourceType` value and `page_collections` as a legal `collectionListType` value, so a single blog or collection template can render the category or collection the page itself names.
|
|
20
|
+
- `list-dataset`'s generated empty-state table now seeds a `review` source ("No reviews yet"), so a review list repeater gets a styled empty state instead of none.
|
|
21
|
+
|
|
22
|
+
### Changed
|
|
23
|
+
- `sb_page_create` and `sb_template_use` now seed new collection-list pages with `collectionListType: "page_collections"` instead of `all_collections`, so a collection template's sub-collection grid follows the page it is on rather than listing every collection on the site.
|
|
24
|
+
- The generated empty-state copy for collections, blog topics, and courses now reads "New … will show up here. Check back soon." instead of "… you create will show up here."
|
|
25
|
+
|
|
9
26
|
## [0.59.0] - 2026-09-15
|
|
10
27
|
|
|
11
28
|
### Added
|
package/CHANGELOG.vi.md
CHANGED
|
@@ -6,6 +6,23 @@ Mọi thay đổi đáng chú ý của dự án được ghi lại trong file n
|
|
|
6
6
|
Định dạng dựa trên [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
7
7
|
và dự án tuân theo [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
8
8
|
|
|
9
|
+
## [0.59.2] - 2026-09-15
|
|
10
|
+
|
|
11
|
+
### Fixed
|
|
12
|
+
- Call sheet để tạo hoặc thay thế sản phẩm giờ nêu rõ, ngay tại thời điểm giá được ghi, rằng `priceCents`, `compareAtCents`, `costCents` và `feeCents` của một shipping method đều là đơn vị nhỏ nhất, được chia cho 100 trên storefront, thay vì chỉ xuất hiện như hướng khắc phục cho một lỗi sẵn sàng vốn biến mất ngay khi có sản phẩm.
|
|
13
|
+
- Call sheet giờ nêu rõ bộ chọn variant hiển thị từ `product.attributes`, không phải chỉ từ `variants[].options`, nhờ đó một sản phẩm có variant nhưng chưa khai báo attributes sẽ không còn âm thầm hiển thị các tuỳ chọn gieo sẵn của phần tử ("Color: Red / Green / Blue") trên trang đã publish.
|
|
14
|
+
|
|
15
|
+
## [0.59.1] - 2026-09-15
|
|
16
|
+
|
|
17
|
+
### Added
|
|
18
|
+
- `sb_api_find` và `sb_api_call` giờ với tới được `POST /api/sites/{siteId}/ai/messages`, trợ lý AI của chính editor dành cho một sản phẩm, cùng hình dạng request của nó (`question` và một `history` gồm các lượt hỏi đáp trước đó).
|
|
19
|
+
- `sb_traits_for` giờ liệt kê `articleSourceType` và `relationSlotKey` là control trên các repeater danh sách bài viết, và cả nó lẫn `sb_set` đều nhận `page_category` là giá trị hợp lệ của `articleSourceType` và `page_collections` là giá trị hợp lệ của `collectionListType`, nhờ đó một template blog hoặc collection duy nhất có thể hiển thị đúng danh mục hoặc collection mà trang đó đại diện.
|
|
20
|
+
- Bảng trạng thái rỗng sinh sẵn của `list-dataset` giờ gieo thêm nguồn `review` ("No reviews yet"), nên một repeater danh sách đánh giá có trạng thái rỗng được thiết kế riêng thay vì không có gì.
|
|
21
|
+
|
|
22
|
+
### Changed
|
|
23
|
+
- `sb_page_create` và `sb_template_use` giờ gieo các trang danh sách collection mới với `collectionListType: "page_collections"` thay vì `all_collections`, nên lưới sub-collection của một template collection sẽ theo đúng trang nó đang nằm trên đó thay vì liệt kê mọi collection của site.
|
|
24
|
+
- Nội dung trạng thái rỗng sinh sẵn cho collection, chủ đề blog và khoá học giờ đọc là "New … will show up here. Check back soon." thay vì "… you create will show up here."
|
|
25
|
+
|
|
9
26
|
## [0.59.0] - 2026-09-15
|
|
10
27
|
|
|
11
28
|
### Added
|
package/README.md
CHANGED
|
@@ -112,7 +112,7 @@ in this client: one would put the very key the platform exists to hold back into
|
|
|
112
112
|
| `sb_store` | Run a store flow that must happen in a fixed order — the four writes that make a working checkout, or any of the platform's 17 form templates (login, register, forgot, contact, subscribe …) with its own field document |
|
|
113
113
|
| `sb_undo` | Put back what a PUT replaced. The SECOND answer for a page, not the only one: the platform has versions, history and restore (`sb_api_find` "page versions"), which outlive this process — reach for those first and use this for every other shaped PUT |
|
|
114
114
|
|
|
115
|
-
Twenty-eight tools, **
|
|
115
|
+
Twenty-eight tools, **525 API operations** (176 of the 235 writes carrying a body shape read
|
|
116
116
|
off the handler), 113 elements, 79 binding sources. `sb_api_find`
|
|
117
117
|
is an index rather than a tool per endpoint, so the tool list stays short while everything
|
|
118
118
|
the platform can do stays reachable — and operations added to the platform arrive with the
|
package/README.vi.md
CHANGED
|
@@ -109,7 +109,7 @@ nhét ngược lại vào mọi bản cài.
|
|
|
109
109
|
| `sb_store` | Chạy một luồng cửa hàng bắt buộc đúng thứ tự — bốn lệnh ghi tạo nên trang thanh toán, hoặc gieo bất kỳ template nào trong 17 form của nền tảng (login, register, forgot, contact, subscribe …) kèm field document của nó |
|
|
110
110
|
| `sb_undo` | Trả lại thứ mà một lệnh PUT đã ghi đè. Với TRANG thì đây là đường về thứ hai chứ không phải duy nhất: nền tảng có version, history và restore (`sb_api_find` "page versions"), và chúng sống lâu hơn tiến trình này — hãy dùng chúng trước, còn tool này cho mọi PUT có hình dạng khác |
|
|
111
111
|
|
|
112
|
-
Hai mươi tám tool, **
|
|
112
|
+
Hai mươi tám tool, **525 operation API** (176 trong 235 lệnh ghi có hình dạng body đọc thẳng
|
|
113
113
|
từ handler), 113 element, 79 nguồn binding. `sb_api_find` là
|
|
114
114
|
một chỉ mục chứ không phải mỗi endpoint một tool, nên danh sách tool vẫn ngắn trong khi mọi
|
|
115
115
|
thứ nền tảng làm được vẫn với tới — và operation mới thêm bên nền tảng sẽ tự có sau lần
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
export const SWAGGER_SOURCE = {
|
|
2
|
-
"operations":
|
|
2
|
+
"operations": 525,
|
|
3
3
|
"definitions": 107,
|
|
4
|
-
"bodyCarrying":
|
|
5
|
-
"bodyUndescribed":
|
|
4
|
+
"bodyCarrying": 193,
|
|
5
|
+
"bodyUndescribed": 74,
|
|
6
6
|
"generatedFrom": "server/docs/swagger.json"
|
|
7
7
|
};
|
|
8
8
|
export const API_OPERATIONS = [
|
|
@@ -3321,6 +3321,41 @@ export const API_OPERATIONS = [
|
|
|
3321
3321
|
"bodyRef": null,
|
|
3322
3322
|
"credential": "siteScoped"
|
|
3323
3323
|
},
|
|
3324
|
+
{
|
|
3325
|
+
"id": "post:/api/sites/{siteId}/ai/messages",
|
|
3326
|
+
"method": "POST",
|
|
3327
|
+
"path": "/api/sites/{siteId}/ai/messages",
|
|
3328
|
+
"tags": [
|
|
3329
|
+
"sites"
|
|
3330
|
+
],
|
|
3331
|
+
"summary": "Ask the editor's AI assistant a question about this product",
|
|
3332
|
+
"params": [
|
|
3333
|
+
{
|
|
3334
|
+
"name": "siteId",
|
|
3335
|
+
"in": "path",
|
|
3336
|
+
"required": true,
|
|
3337
|
+
"type": "string",
|
|
3338
|
+
"description": "Site ID"
|
|
3339
|
+
},
|
|
3340
|
+
{
|
|
3341
|
+
"name": "Accept",
|
|
3342
|
+
"in": "header",
|
|
3343
|
+
"required": false,
|
|
3344
|
+
"type": "string",
|
|
3345
|
+
"description": "text/event-stream to receive the answer as it is written; anything else returns one JSON body"
|
|
3346
|
+
},
|
|
3347
|
+
{
|
|
3348
|
+
"name": "message",
|
|
3349
|
+
"in": "body",
|
|
3350
|
+
"required": true,
|
|
3351
|
+
"type": "object",
|
|
3352
|
+
"description": "question (required) and history (prior turns: role user|assistant, text)"
|
|
3353
|
+
}
|
|
3354
|
+
],
|
|
3355
|
+
"bodyDescribed": false,
|
|
3356
|
+
"bodyRef": null,
|
|
3357
|
+
"credential": "siteScoped"
|
|
3358
|
+
},
|
|
3324
3359
|
{
|
|
3325
3360
|
"id": "get:/api/sites/{siteId}/api-keys",
|
|
3326
3361
|
"method": "GET",
|
|
@@ -18023,7 +18058,8 @@ export const API_DEFINITIONS = {
|
|
|
18023
18058
|
"description": "ZoneFees prices this method PER ZONE, keyed by zone id — the map behind\nFeeForZone. A zone with no entry falls back to FeeCents, so a merchant\nwho prices one method for one zone still has a working checkout for\nevery other combination.\n\nA MAP ON THE ROW rather than a method×zone table, and that is a\nconsidered exception to the normalise-everything rule: these fees are\nnever queried, sorted or aggregated on their own — every read wants them\nalongside the method they belong to — so a join table would buy a query\nnobody makes and cost one on every checkout.",
|
|
18024
18059
|
"type": "object",
|
|
18025
18060
|
"additionalProperties": {
|
|
18026
|
-
"type": "integer"
|
|
18061
|
+
"type": "integer",
|
|
18062
|
+
"format": "int64"
|
|
18027
18063
|
}
|
|
18028
18064
|
}
|
|
18029
18065
|
}
|
|
@@ -32181,7 +32181,7 @@ export const ELEMENTS = {
|
|
|
32181
32181
|
"collectionType": "all_products",
|
|
32182
32182
|
"collectionId": "all_products",
|
|
32183
32183
|
"articleCategoryId": "all_articles",
|
|
32184
|
-
"collectionListType": "
|
|
32184
|
+
"collectionListType": "page_collections",
|
|
32185
32185
|
"listNavIcon": "ArrowLeftSLine",
|
|
32186
32186
|
"listNavPosition": "inside",
|
|
32187
32187
|
"listNavIconSize": 16,
|
|
@@ -33178,7 +33178,9 @@ export const ELEMENTS = {
|
|
|
33178
33178
|
"label": "Article",
|
|
33179
33179
|
"controls": [
|
|
33180
33180
|
"article_category",
|
|
33181
|
-
"
|
|
33181
|
+
"articleSourceType",
|
|
33182
|
+
"articleCategoryId",
|
|
33183
|
+
"relationSlotKey"
|
|
33182
33184
|
]
|
|
33183
33185
|
},
|
|
33184
33186
|
{
|
|
@@ -33433,7 +33435,9 @@ export const ELEMENTS = {
|
|
|
33433
33435
|
"paginationItemActiveBorderStyle",
|
|
33434
33436
|
"paginationItemActiveBorderRadius",
|
|
33435
33437
|
"article_category",
|
|
33438
|
+
"articleSourceType",
|
|
33436
33439
|
"articleCategoryId",
|
|
33440
|
+
"relationSlotKey",
|
|
33437
33441
|
"list_loading_mode",
|
|
33438
33442
|
"list_load_more_label",
|
|
33439
33443
|
"list_pager_style",
|
|
@@ -33513,8 +33517,9 @@ export const ELEMENTS = {
|
|
|
33513
33517
|
"The dataset-block template — and every dataset node inside it — must carry the SAME config.datasetSource as this repeater. Each node reads its OWN key, so a collection list whose card omits it leaves that card on the product default: it binds product.url, no product context reaches a collection row, and the card publishes with no link, so clicking it does nothing",
|
|
33514
33518
|
"config.datasetSource picks the ENTITY: \"product\" for a product list, \"category\" for a collection list. It is what derives the node's binding target (product::product_list / category::collection_list)",
|
|
33515
33519
|
"Product lists: config.collectionType \"page_collection\" renders THE COLLECTION THE PAGE IS (the one /collections/{slug} named) so a single collection template serves every collection, \"all_products\" renders the whole catalog and narrows to the page collection on a collection template, \"collection\" renders the one named by config.collectionId, \"related\" renders the PAGE PRODUCT's neighbours — the products sharing one of its collections, minus itself",
|
|
33520
|
+
"Article lists: config.articleSourceType \"page_category\" renders THE BLOG CATEGORY THE PAGE IS (the one /blog-categories/{slug} named) so a single blog template serves every category — off a blog template it shows every article; \"category\" filters by config.articleCategoryId (the \"all_articles\" sentinel means no filter, and on a blog template it narrows to the page category anyway); \"slot\" renders a curated shelf, the rows filed by hand under config.relationSlotKey",
|
|
33516
33521
|
"Use \"related\" for a cross-sell shelf on a product page (\"Sản phẩm liên quan\" / \"You may also like\"). It reads no collectionId — its axis is whatever collections the page product is filed under — and it renders nothing on a page that names no product, so pair it with an emptyStateId if the section must never be blank",
|
|
33517
|
-
"Collection lists: config.collectionListType \"all_collections\" renders every collection; \"custom_collections\" renders specials.collectionIds, in that order",
|
|
33522
|
+
"Collection lists: config.collectionListType \"page_collections\" renders THE SUB-COLLECTIONS OF THE COLLECTION THE PAGE IS (the one /collections/{slug} named), so a single collection template draws every collection's browse grid — off a collection template it shows every collection instead; \"all_collections\" renders every collection; \"custom_collections\" renders specials.collectionIds, in that order",
|
|
33518
33523
|
"config.quantity caps how many records render; config.itemsPerRow is the row size (grid columns / slide page size) and style.gap is the space between cards — both are per-breakpoint",
|
|
33519
33524
|
"config.layout \"grid\" for a multi-row grid, \"slide\" for row-by-row carousel behaviour",
|
|
33520
33525
|
"Navigation and pagination only matter when layout is \"slide\". The arrows exist while config.listNavIcon names an icon (clearing it turns them off); the dots exist while paginationItemWidth and paginationItemHeight are both above 0",
|
|
@@ -36419,7 +36424,7 @@ export const SATELLITE_RULES = {
|
|
|
36419
36424
|
"textAlign": "center"
|
|
36420
36425
|
},
|
|
36421
36426
|
"specials": {
|
|
36422
|
-
"text": "
|
|
36427
|
+
"text": "New collections will show up here. Check back soon."
|
|
36423
36428
|
}
|
|
36424
36429
|
}
|
|
36425
36430
|
]
|
|
@@ -36505,7 +36510,7 @@ export const SATELLITE_RULES = {
|
|
|
36505
36510
|
"textAlign": "center"
|
|
36506
36511
|
},
|
|
36507
36512
|
"specials": {
|
|
36508
|
-
"text": "
|
|
36513
|
+
"text": "New topics will show up here. Check back soon."
|
|
36509
36514
|
}
|
|
36510
36515
|
}
|
|
36511
36516
|
]
|
|
@@ -36548,7 +36553,50 @@ export const SATELLITE_RULES = {
|
|
|
36548
36553
|
"textAlign": "center"
|
|
36549
36554
|
},
|
|
36550
36555
|
"specials": {
|
|
36551
|
-
"text": "
|
|
36556
|
+
"text": "New courses will show up here. Check back soon."
|
|
36557
|
+
}
|
|
36558
|
+
}
|
|
36559
|
+
]
|
|
36560
|
+
},
|
|
36561
|
+
"review": {
|
|
36562
|
+
"type": "list-empty",
|
|
36563
|
+
"children": [
|
|
36564
|
+
{
|
|
36565
|
+
"type": "icon",
|
|
36566
|
+
"style": {
|
|
36567
|
+
"color": "#d4d4d4"
|
|
36568
|
+
},
|
|
36569
|
+
"config": {
|
|
36570
|
+
"iconSize": 32
|
|
36571
|
+
},
|
|
36572
|
+
"specials": {
|
|
36573
|
+
"name": "ChatQuoteLine"
|
|
36574
|
+
}
|
|
36575
|
+
},
|
|
36576
|
+
{
|
|
36577
|
+
"type": "heading",
|
|
36578
|
+
"style": {
|
|
36579
|
+
"width": "auto",
|
|
36580
|
+
"fontSize": "20px",
|
|
36581
|
+
"fontWeight": "600",
|
|
36582
|
+
"color": "#171717",
|
|
36583
|
+
"textAlign": "center"
|
|
36584
|
+
},
|
|
36585
|
+
"specials": {
|
|
36586
|
+
"htmlTag": "h3",
|
|
36587
|
+
"text": "No reviews yet"
|
|
36588
|
+
}
|
|
36589
|
+
},
|
|
36590
|
+
{
|
|
36591
|
+
"type": "text",
|
|
36592
|
+
"style": {
|
|
36593
|
+
"width": "auto",
|
|
36594
|
+
"fontSize": "14px",
|
|
36595
|
+
"color": "#737373",
|
|
36596
|
+
"textAlign": "center"
|
|
36597
|
+
},
|
|
36598
|
+
"specials": {
|
|
36599
|
+
"text": "Reviews will show up here once customers leave them."
|
|
36552
36600
|
}
|
|
36553
36601
|
}
|
|
36554
36602
|
]
|
|
@@ -36836,6 +36884,7 @@ export const CONFIG_VALUES = {
|
|
|
36836
36884
|
"articleSourceType": {
|
|
36837
36885
|
"values": [
|
|
36838
36886
|
"category",
|
|
36887
|
+
"page_category",
|
|
36839
36888
|
"slot"
|
|
36840
36889
|
],
|
|
36841
36890
|
"fallback": "category",
|
|
@@ -36845,7 +36894,8 @@ export const CONFIG_VALUES = {
|
|
|
36845
36894
|
"collectionListType": {
|
|
36846
36895
|
"values": [
|
|
36847
36896
|
"all_collections",
|
|
36848
|
-
"custom_collections"
|
|
36897
|
+
"custom_collections",
|
|
36898
|
+
"page_collections"
|
|
36849
36899
|
],
|
|
36850
36900
|
"fallback": "all_collections",
|
|
36851
36901
|
"aliases": {},
|
package/dist/catalog/search.js
CHANGED
|
@@ -352,7 +352,7 @@ export function describeOperation(op) {
|
|
|
352
352
|
'/apps/blocks again for what it contributed.',
|
|
353
353
|
};
|
|
354
354
|
}
|
|
355
|
-
// FILLING A CATALOGUE WAS REACHABLE AND
|
|
355
|
+
// FILLING A CATALOGUE WAS REACHABLE AND FIVE FACTS ABOUT IT WERE NOT, each
|
|
356
356
|
// failing silently. Attached to the call sheet for the same reason the
|
|
357
357
|
// translation table is: this is where the agent is when it decides what to
|
|
358
358
|
// send, on both credential surfaces a product can be created or replaced on.
|
|
@@ -360,6 +360,37 @@ export function describeOperation(op) {
|
|
|
360
360
|
out.product_traps = {
|
|
361
361
|
price: 'Price lives on the VARIANT, not the product — variants[].priceCents. A product ' +
|
|
362
362
|
'posted with no variant renders a catalogue entry nobody can buy.',
|
|
363
|
+
// MINOR UNITS, SAID WHERE THE NUMBER IS BEING WRITTEN.
|
|
364
|
+
//
|
|
365
|
+
// The fact was already in the codebase — `readiness.ts` carries it twice —
|
|
366
|
+
// but only as the FIX on a store gap that fires when the catalogue is
|
|
367
|
+
// EMPTY or has no priced product. The moment an agent creates products the
|
|
368
|
+
// gap clears, so the sentence is on screen exactly while it cannot be
|
|
369
|
+
// acted on and gone the moment it could be.
|
|
370
|
+
//
|
|
371
|
+
// MEASURED: a whole storefront built with every price 100× low. Cherry at
|
|
372
|
+
// "8.500 ₫", a 3.2M gift basket at "32.000 ₫" — read back through the
|
|
373
|
+
// renderer, published, and only caught because the numbers looked absurd
|
|
374
|
+
// to a human. Nothing refused them: `priceCents` takes any integer, and a
|
|
375
|
+
// store whose every price is wrong by the same factor looks internally
|
|
376
|
+
// consistent.
|
|
377
|
+
units: 'priceCents is MINOR UNITS — the storefront divides by 100, so VND 280.000 is ' +
|
|
378
|
+
"28000000. Same for compareAtCents, costCents and a shipping method's feeCents. " +
|
|
379
|
+
'Nothing refuses a wrong one, and every price wrong by the same factor looks ' +
|
|
380
|
+
'deliberate. Write one, read the rendered price, then write the rest.',
|
|
381
|
+
// THE PICKER A PRODUCT GETS WHEN NOBODY DECLARED ITS OPTIONS.
|
|
382
|
+
//
|
|
383
|
+
// `variants[].options` alone is not enough: the buy box reads
|
|
384
|
+
// `attributes` for the control, and a product with variants but no
|
|
385
|
+
// attributes renders the ELEMENT'S SEED — "Color: Red / Green / Blue",
|
|
386
|
+
// "Size: S / M / L" — on a real product page, published.
|
|
387
|
+
//
|
|
388
|
+
// MEASURED on a fruit-gift store: every one of 19 products offered Color
|
|
389
|
+
// and Size until attributes were added.
|
|
390
|
+
attributes: 'The variant picker comes from product.attributes — [{ name, values[] }] — not ' +
|
|
391
|
+
"from variants[].options alone. Variants without attributes render the element's " +
|
|
392
|
+
'seed ("Color: Red / Green / Blue") on the published page. Declare attributes, and ' +
|
|
393
|
+
"match each variant's options keys to them.",
|
|
363
394
|
slug: 'A colliding slug is RENAMED, not refused, and the write still answers 200/201. ' +
|
|
364
395
|
'Re-running an import does not error — it DOUBLES the catalogue in silence.',
|
|
365
396
|
images: 'POST /api/media/{siteId}/from-url ingests a photo straight from its URL, one hop ' +
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
export const SHAPE_SOURCE = {
|
|
2
|
-
"writeOperations":
|
|
3
|
-
"shaped":
|
|
4
|
-
"fromHandlers":
|
|
2
|
+
"writeOperations": 235,
|
|
3
|
+
"shaped": 176,
|
|
4
|
+
"fromHandlers": 176,
|
|
5
5
|
"fromSwaggerOnly": 0,
|
|
6
6
|
"withReadOnly": 26,
|
|
7
|
-
"structsRead":
|
|
7
|
+
"structsRead": 1678
|
|
8
8
|
};
|
|
9
9
|
export const REQUEST_SHAPES = {
|
|
10
10
|
"post:/api/sites/{siteId}/api-keys": {
|
|
@@ -2998,6 +2998,21 @@ export const REQUEST_SHAPES = {
|
|
|
2998
2998
|
"updatedAt"
|
|
2999
2999
|
]
|
|
3000
3000
|
},
|
|
3001
|
+
"post:/api/sites/{siteId}/ai/messages": {
|
|
3002
|
+
"fields": [
|
|
3003
|
+
{
|
|
3004
|
+
"name": "question",
|
|
3005
|
+
"type": "string"
|
|
3006
|
+
},
|
|
3007
|
+
{
|
|
3008
|
+
"name": "history",
|
|
3009
|
+
"type": "llm.Turn[]",
|
|
3010
|
+
"note": "History is sent by the CLIENT, unlike the storefront chatbot's, which removed it as a security fix."
|
|
3011
|
+
}
|
|
3012
|
+
],
|
|
3013
|
+
"source": "go",
|
|
3014
|
+
"goType": "(inline)"
|
|
3015
|
+
},
|
|
3001
3016
|
"post:/api/sites/{siteId}/fonts": {
|
|
3002
3017
|
"fields": [
|
|
3003
3018
|
{
|
|
@@ -675,7 +675,7 @@ export const PAGE_LAYOUT_SEEDS = {
|
|
|
675
675
|
"collectionType": "all_products",
|
|
676
676
|
"collectionId": "all_products",
|
|
677
677
|
"articleCategoryId": "all_articles",
|
|
678
|
-
"collectionListType": "
|
|
678
|
+
"collectionListType": "page_collections",
|
|
679
679
|
"listNavIcon": "ArrowLeftSLine",
|
|
680
680
|
"listNavPosition": "inside",
|
|
681
681
|
"listNavIconSize": 16,
|
|
@@ -2411,7 +2411,7 @@ export const STORE_PAGE_SEEDS = {
|
|
|
2411
2411
|
"collectionType": "all_products",
|
|
2412
2412
|
"collectionId": "all_products",
|
|
2413
2413
|
"articleCategoryId": "all_articles",
|
|
2414
|
-
"collectionListType": "
|
|
2414
|
+
"collectionListType": "page_collections",
|
|
2415
2415
|
"listNavIcon": "ArrowLeftSLine",
|
|
2416
2416
|
"listNavPosition": "inside",
|
|
2417
2417
|
"listNavIconSize": 16,
|
|
@@ -3109,7 +3109,7 @@ export const STORE_PAGE_SEEDS = {
|
|
|
3109
3109
|
"collectionType": "all_products",
|
|
3110
3110
|
"collectionId": "all_products",
|
|
3111
3111
|
"articleCategoryId": "all_articles",
|
|
3112
|
-
"collectionListType": "
|
|
3112
|
+
"collectionListType": "page_collections",
|
|
3113
3113
|
"listNavIcon": "ArrowLeftSLine",
|
|
3114
3114
|
"listNavPosition": "inside",
|
|
3115
3115
|
"listNavIconSize": 16,
|
|
@@ -3813,7 +3813,7 @@ export const STORE_PAGE_SEEDS = {
|
|
|
3813
3813
|
"collectionType": "all_products",
|
|
3814
3814
|
"collectionId": "all_products",
|
|
3815
3815
|
"articleCategoryId": "all_articles",
|
|
3816
|
-
"collectionListType": "
|
|
3816
|
+
"collectionListType": "page_collections",
|
|
3817
3817
|
"listNavIcon": "ArrowLeftSLine",
|
|
3818
3818
|
"listNavPosition": "inside",
|
|
3819
3819
|
"listNavIconSize": 16,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sbuilder-mcp",
|
|
3
|
-
"version": "0.59.
|
|
3
|
+
"version": "0.59.2",
|
|
4
4
|
"description": "MCP server that designs and operates a Store Builder site — pages, data, theme and publish — through the platform's own API and live-edit protocol.",
|
|
5
5
|
"mcpName": "io.github.vuluu2k/sbuilder-mcp",
|
|
6
6
|
"type": "module",
|