sbuilder-mcp 0.60.0 → 0.60.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 +13 -0
- package/CHANGELOG.vi.md +13 -0
- package/README.md +1 -1
- package/README.vi.md +1 -1
- package/dist/catalog/api.generated.js +80 -3
- package/dist/catalog/deadkeys.generated.js +2 -2
- package/dist/catalog/elements.generated.js +12 -4
- package/dist/catalog/shapes.generated.js +42 -4
- package/dist/tools/page.js +11 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,19 @@ 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.60.2] - 2026-09-16
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
- `sb_traits_for` and `sb_set` now list `navigate` as a legal `filterBehavior` value on the four option-list filter elements (`filter-checkbox`, `filter-radio`, `filter-color`, `filter-tag`), turning a filter into a link instead of a query update, scoped to those four because `select`'s own renderer only reads `event` and a `navigate` write to it would be accepted and silently do nothing.
|
|
13
|
+
- `sb_traits_for` and `sb_set` now list `auto` as a legal `filterValueMode` value on every filter element, a category filter that follows the page it is on.
|
|
14
|
+
- `sb_api_find` and `sb_api_call` now reach the editor assistant's conversation history: listing a site's stored conversations, reading one by id, and listing the models a provider will run for the site's key.
|
|
15
|
+
- The call sheet for the assistant's message endpoint now documents four more body fields: `conversationId` to continue an existing thread, `images` for picture URLs the model should look at, `clientTools` for browser-side functions the model may call, and `verifies` for whether the client answers the verify round trip.
|
|
16
|
+
|
|
17
|
+
## [0.60.1] - 2026-09-16
|
|
18
|
+
|
|
19
|
+
### Fixed
|
|
20
|
+
- `sb_page_list`'s `page_types` table now carries a `page_types_note` stating that the twelve types are the storefront's fixed routed addresses, not a checklist of the pages a site needs, since login, register, contact, about, policy pages and anything else a shop must say are ordinary `page` rows with no limit on how many.
|
|
21
|
+
|
|
9
22
|
## [0.60.0] - 2026-09-16
|
|
10
23
|
|
|
11
24
|
### Added
|
package/CHANGELOG.vi.md
CHANGED
|
@@ -6,6 +6,19 @@ 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.60.2] - 2026-09-16
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
- `sb_traits_for` và `sb_set` giờ liệt kê `navigate` là giá trị hợp lệ của `filterBehavior` trên bốn element bộ lọc dạng danh sách tùy chọn (`filter-checkbox`, `filter-radio`, `filter-color`, `filter-tag`) — biến một bộ lọc thành một liên kết thay vì cập nhật query — chỉ giới hạn ở bốn element đó vì renderer của `select` chỉ đọc `event`, nếu ghi `navigate` vào đó thì lệnh vẫn được chấp nhận nhưng không làm gì cả.
|
|
13
|
+
- `sb_traits_for` và `sb_set` giờ liệt kê `auto` là giá trị hợp lệ của `filterValueMode` trên mọi element bộ lọc, một bộ lọc danh mục đi theo đúng trang đang hiển thị.
|
|
14
|
+
- `sb_api_find` và `sb_api_call` giờ với tới được lịch sử hội thoại của trợ lý biên tập: liệt kê các hội thoại đã lưu của một site, đọc một hội thoại theo id, và liệt kê các model mà một nhà cung cấp sẽ chạy cho key của site đó.
|
|
15
|
+
- Bảng mô tả endpoint gửi tin nhắn của trợ lý giờ ghi thêm bốn trường body: `conversationId` để tiếp tục một luồng hội thoại đã có, `images` là các URL ảnh mà model cần xem, `clientTools` là các hàm phía trình duyệt mà model có thể gọi, và `verifies` cho biết client này có trả lời vòng xác minh (verify) hay không.
|
|
16
|
+
|
|
17
|
+
## [0.60.1] - 2026-09-16
|
|
18
|
+
|
|
19
|
+
### Fixed
|
|
20
|
+
- Bảng `page_types` của `sb_page_list` giờ kèm `page_types_note` nói rõ mười hai loại trang là các địa chỉ cố định mà storefront định tuyến tới, không phải danh sách các trang một site cần có, vì login, register, contact, about, các trang chính sách và bất cứ điều gì shop cần nói đều là các dòng `page` thông thường, không giới hạn số lượng.
|
|
21
|
+
|
|
9
22
|
## [0.60.0] - 2026-09-16
|
|
10
23
|
|
|
11
24
|
### 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, **530 API operations** (178 of the 237 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, **530 operation API** (178 trong 237 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": 530,
|
|
3
3
|
"definitions": 107,
|
|
4
|
-
"bodyCarrying":
|
|
5
|
-
"bodyUndescribed":
|
|
4
|
+
"bodyCarrying": 196,
|
|
5
|
+
"bodyUndescribed": 77,
|
|
6
6
|
"generatedFrom": "server/docs/swagger.json"
|
|
7
7
|
};
|
|
8
8
|
export const API_OPERATIONS = [
|
|
@@ -3321,6 +3321,55 @@ export const API_OPERATIONS = [
|
|
|
3321
3321
|
"bodyRef": null,
|
|
3322
3322
|
"credential": "siteScoped"
|
|
3323
3323
|
},
|
|
3324
|
+
{
|
|
3325
|
+
"id": "get:/api/sites/{siteId}/ai/conversations",
|
|
3326
|
+
"method": "GET",
|
|
3327
|
+
"path": "/api/sites/{siteId}/ai/conversations",
|
|
3328
|
+
"tags": [
|
|
3329
|
+
"sites"
|
|
3330
|
+
],
|
|
3331
|
+
"summary": "List the editor assistant's stored conversations",
|
|
3332
|
+
"params": [
|
|
3333
|
+
{
|
|
3334
|
+
"name": "siteId",
|
|
3335
|
+
"in": "path",
|
|
3336
|
+
"required": true,
|
|
3337
|
+
"type": "string",
|
|
3338
|
+
"description": "Site ID"
|
|
3339
|
+
}
|
|
3340
|
+
],
|
|
3341
|
+
"bodyDescribed": false,
|
|
3342
|
+
"bodyRef": null,
|
|
3343
|
+
"credential": "siteScoped"
|
|
3344
|
+
},
|
|
3345
|
+
{
|
|
3346
|
+
"id": "get:/api/sites/{siteId}/ai/conversations/{id}",
|
|
3347
|
+
"method": "GET",
|
|
3348
|
+
"path": "/api/sites/{siteId}/ai/conversations/{id}",
|
|
3349
|
+
"tags": [
|
|
3350
|
+
"sites"
|
|
3351
|
+
],
|
|
3352
|
+
"summary": "Read one stored conversation",
|
|
3353
|
+
"params": [
|
|
3354
|
+
{
|
|
3355
|
+
"name": "siteId",
|
|
3356
|
+
"in": "path",
|
|
3357
|
+
"required": true,
|
|
3358
|
+
"type": "string",
|
|
3359
|
+
"description": "Site ID"
|
|
3360
|
+
},
|
|
3361
|
+
{
|
|
3362
|
+
"name": "id",
|
|
3363
|
+
"in": "path",
|
|
3364
|
+
"required": true,
|
|
3365
|
+
"type": "string",
|
|
3366
|
+
"description": "Conversation ID"
|
|
3367
|
+
}
|
|
3368
|
+
],
|
|
3369
|
+
"bodyDescribed": false,
|
|
3370
|
+
"bodyRef": null,
|
|
3371
|
+
"credential": "siteScoped"
|
|
3372
|
+
},
|
|
3324
3373
|
{
|
|
3325
3374
|
"id": "post:/api/sites/{siteId}/ai/messages",
|
|
3326
3375
|
"method": "POST",
|
|
@@ -3356,6 +3405,34 @@ export const API_OPERATIONS = [
|
|
|
3356
3405
|
"bodyRef": null,
|
|
3357
3406
|
"credential": "siteScoped"
|
|
3358
3407
|
},
|
|
3408
|
+
{
|
|
3409
|
+
"id": "post:/api/sites/{siteId}/ai/models",
|
|
3410
|
+
"method": "POST",
|
|
3411
|
+
"path": "/api/sites/{siteId}/ai/models",
|
|
3412
|
+
"tags": [
|
|
3413
|
+
"sites"
|
|
3414
|
+
],
|
|
3415
|
+
"summary": "List the models a provider will run for this site's key",
|
|
3416
|
+
"params": [
|
|
3417
|
+
{
|
|
3418
|
+
"name": "siteId",
|
|
3419
|
+
"in": "path",
|
|
3420
|
+
"required": true,
|
|
3421
|
+
"type": "string",
|
|
3422
|
+
"description": "Site ID"
|
|
3423
|
+
},
|
|
3424
|
+
{
|
|
3425
|
+
"name": "query",
|
|
3426
|
+
"in": "body",
|
|
3427
|
+
"required": true,
|
|
3428
|
+
"type": "object",
|
|
3429
|
+
"description": "provider (required), apiKey and baseUrl (optional — the stored key is used when apiKey is omitted)"
|
|
3430
|
+
}
|
|
3431
|
+
],
|
|
3432
|
+
"bodyDescribed": false,
|
|
3433
|
+
"bodyRef": null,
|
|
3434
|
+
"credential": "siteScoped"
|
|
3435
|
+
},
|
|
3359
3436
|
{
|
|
3360
3437
|
"id": "get:/api/sites/{siteId}/ai/settings",
|
|
3361
3438
|
"method": "GET",
|
|
@@ -37466,6 +37466,7 @@ export const ELEMENT_VALUES = {
|
|
|
37466
37466
|
"writeKey": "filterValueMode",
|
|
37467
37467
|
"values": [
|
|
37468
37468
|
"all",
|
|
37469
|
+
"auto",
|
|
37469
37470
|
"manual"
|
|
37470
37471
|
],
|
|
37471
37472
|
"readBy": "FilterConfig.valueMode (editor/src/features/filters/types.ts)"
|
|
@@ -37494,7 +37495,8 @@ export const ELEMENT_VALUES = {
|
|
|
37494
37495
|
"writeKey": "filterBehavior",
|
|
37495
37496
|
"values": [
|
|
37496
37497
|
"event",
|
|
37497
|
-
"filter"
|
|
37498
|
+
"filter",
|
|
37499
|
+
"navigate"
|
|
37498
37500
|
],
|
|
37499
37501
|
"readBy": "FilterConfig.behavior (editor/src/features/filters/types.ts)"
|
|
37500
37502
|
}
|
|
@@ -37525,6 +37527,7 @@ export const ELEMENT_VALUES = {
|
|
|
37525
37527
|
"writeKey": "filterValueMode",
|
|
37526
37528
|
"values": [
|
|
37527
37529
|
"all",
|
|
37530
|
+
"auto",
|
|
37528
37531
|
"manual"
|
|
37529
37532
|
],
|
|
37530
37533
|
"readBy": "FilterConfig.valueMode (editor/src/features/filters/types.ts)"
|
|
@@ -37553,7 +37556,8 @@ export const ELEMENT_VALUES = {
|
|
|
37553
37556
|
"writeKey": "filterBehavior",
|
|
37554
37557
|
"values": [
|
|
37555
37558
|
"event",
|
|
37556
|
-
"filter"
|
|
37559
|
+
"filter",
|
|
37560
|
+
"navigate"
|
|
37557
37561
|
],
|
|
37558
37562
|
"readBy": "FilterConfig.behavior (editor/src/features/filters/types.ts)"
|
|
37559
37563
|
}
|
|
@@ -37584,6 +37588,7 @@ export const ELEMENT_VALUES = {
|
|
|
37584
37588
|
"writeKey": "filterValueMode",
|
|
37585
37589
|
"values": [
|
|
37586
37590
|
"all",
|
|
37591
|
+
"auto",
|
|
37587
37592
|
"manual"
|
|
37588
37593
|
],
|
|
37589
37594
|
"readBy": "FilterConfig.valueMode (editor/src/features/filters/types.ts)"
|
|
@@ -37612,7 +37617,8 @@ export const ELEMENT_VALUES = {
|
|
|
37612
37617
|
"writeKey": "filterBehavior",
|
|
37613
37618
|
"values": [
|
|
37614
37619
|
"event",
|
|
37615
|
-
"filter"
|
|
37620
|
+
"filter",
|
|
37621
|
+
"navigate"
|
|
37616
37622
|
],
|
|
37617
37623
|
"readBy": "FilterConfig.behavior (editor/src/features/filters/types.ts)"
|
|
37618
37624
|
}
|
|
@@ -37643,6 +37649,7 @@ export const ELEMENT_VALUES = {
|
|
|
37643
37649
|
"writeKey": "filterValueMode",
|
|
37644
37650
|
"values": [
|
|
37645
37651
|
"all",
|
|
37652
|
+
"auto",
|
|
37646
37653
|
"manual"
|
|
37647
37654
|
],
|
|
37648
37655
|
"readBy": "FilterConfig.valueMode (editor/src/features/filters/types.ts)"
|
|
@@ -37671,7 +37678,8 @@ export const ELEMENT_VALUES = {
|
|
|
37671
37678
|
"writeKey": "filterBehavior",
|
|
37672
37679
|
"values": [
|
|
37673
37680
|
"event",
|
|
37674
|
-
"filter"
|
|
37681
|
+
"filter",
|
|
37682
|
+
"navigate"
|
|
37675
37683
|
],
|
|
37676
37684
|
"readBy": "FilterConfig.behavior (editor/src/features/filters/types.ts)"
|
|
37677
37685
|
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
export const SHAPE_SOURCE = {
|
|
2
|
-
"writeOperations":
|
|
3
|
-
"shaped":
|
|
4
|
-
"fromHandlers":
|
|
2
|
+
"writeOperations": 237,
|
|
3
|
+
"shaped": 178,
|
|
4
|
+
"fromHandlers": 178,
|
|
5
5
|
"fromSwaggerOnly": 0,
|
|
6
6
|
"withReadOnly": 26,
|
|
7
|
-
"structsRead":
|
|
7
|
+
"structsRead": 1725
|
|
8
8
|
};
|
|
9
9
|
export const REQUEST_SHAPES = {
|
|
10
10
|
"post:/api/sites/{siteId}/api-keys": {
|
|
@@ -3009,10 +3009,30 @@ export const REQUEST_SHAPES = {
|
|
|
3009
3009
|
"type": "llm.Turn[]",
|
|
3010
3010
|
"note": "History is sent by the CLIENT, unlike the storefront chatbot's, which removed it as a security fix."
|
|
3011
3011
|
},
|
|
3012
|
+
{
|
|
3013
|
+
"name": "conversationId",
|
|
3014
|
+
"type": "string",
|
|
3015
|
+
"note": "ConversationID continues an existing thread."
|
|
3016
|
+
},
|
|
3012
3017
|
{
|
|
3013
3018
|
"name": "context",
|
|
3014
3019
|
"type": "editoragent.EditContext | null",
|
|
3015
3020
|
"note": "Context is the PAGE as the EDITOR described it — the outline of ROOT's children, and the selected element with its trait list, value types and current values, read off the live registries at send time. IT IS THE CAPABILITY LIST, not a hint."
|
|
3021
|
+
},
|
|
3022
|
+
{
|
|
3023
|
+
"name": "images",
|
|
3024
|
+
"type": "string[]",
|
|
3025
|
+
"note": "Images are urls of pictures the author attached for the model to LOOK AT."
|
|
3026
|
+
},
|
|
3027
|
+
{
|
|
3028
|
+
"name": "clientTools",
|
|
3029
|
+
"type": "editoragent.ClientTool[]",
|
|
3030
|
+
"note": "ClientTools are functions the browser offers the model, answered from the live document — see editoragent/clienttools."
|
|
3031
|
+
},
|
|
3032
|
+
{
|
|
3033
|
+
"name": "verifies",
|
|
3034
|
+
"type": "boolean",
|
|
3035
|
+
"note": "Verifies says this client answers the `verify` round trip."
|
|
3016
3036
|
}
|
|
3017
3037
|
],
|
|
3018
3038
|
"source": "go",
|
|
@@ -3040,6 +3060,24 @@ export const REQUEST_SHAPES = {
|
|
|
3040
3060
|
"source": "go",
|
|
3041
3061
|
"goType": "editoragent.SettingsInput"
|
|
3042
3062
|
},
|
|
3063
|
+
"post:/api/sites/{siteId}/ai/models": {
|
|
3064
|
+
"fields": [
|
|
3065
|
+
{
|
|
3066
|
+
"name": "provider",
|
|
3067
|
+
"type": "string"
|
|
3068
|
+
},
|
|
3069
|
+
{
|
|
3070
|
+
"name": "apiKey",
|
|
3071
|
+
"type": "string"
|
|
3072
|
+
},
|
|
3073
|
+
{
|
|
3074
|
+
"name": "baseUrl",
|
|
3075
|
+
"type": "string"
|
|
3076
|
+
}
|
|
3077
|
+
],
|
|
3078
|
+
"source": "go",
|
|
3079
|
+
"goType": "(inline)"
|
|
3080
|
+
},
|
|
3043
3081
|
"post:/api/sites/{siteId}/fonts": {
|
|
3044
3082
|
"fields": [
|
|
3045
3083
|
{
|
package/dist/tools/page.js
CHANGED
|
@@ -1193,6 +1193,17 @@ export function registerPageTools(server, ctx) {
|
|
|
1193
1193
|
t.routePattern ??
|
|
1194
1194
|
(t.servedRole ? `served as the site's ${t.servedRole}` : 'an address you choose'),
|
|
1195
1195
|
])),
|
|
1196
|
+
// NOT A LIST OF THE PAGES A SITE NEEDS, and this line is here because
|
|
1197
|
+
// the table above reads like one. A type is a fixed ADDRESS the
|
|
1198
|
+
// storefront routes by; most of a real website has no type at all —
|
|
1199
|
+
// login, register, contact, about, the policies, and whatever else this
|
|
1200
|
+
// particular shop sells or must say — and every one of those is an
|
|
1201
|
+
// ordinary `page`. Twelve is the number of routed types, never the
|
|
1202
|
+
// number of pages.
|
|
1203
|
+
page_types_note: 'Types are the storefront\'s fixed addresses, not an inventory of a site. Everything ' +
|
|
1204
|
+
'else — login, register, contact, about, policies, and anything this shop needs — is ' +
|
|
1205
|
+
'type "page" with an address you choose, and there is no limit to how many. ' +
|
|
1206
|
+
'usually_also below lists the ones most sites have; it is a floor, not a ceiling.',
|
|
1196
1207
|
...(missing.length
|
|
1197
1208
|
? {
|
|
1198
1209
|
usually_also: Object.fromEntries(missing.map((m) => [m.key, m.why])),
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sbuilder-mcp",
|
|
3
|
-
"version": "0.60.
|
|
3
|
+
"version": "0.60.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",
|