sbuilder-mcp 0.71.0 → 0.72.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/CHANGELOG.md +5 -0
- package/CHANGELOG.vi.md +5 -0
- package/dist/domains/site/readiness.js +48 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,11 @@ 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.72.0] - 2026-09-28
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
- `sb_review` gains a `pageSeo` readiness gap: it lists published page, about, contact, policy, faq, and blog pages missing `settings.title` or `settings.description`, since the storefront falls back to the site name as `<title>` and drops the meta description entirely when either is unset, leaving every such page indistinguishable in a search result even though nothing on the canvas or in a screenshot shows it.
|
|
13
|
+
|
|
9
14
|
## [0.71.0] - 2026-09-28
|
|
10
15
|
|
|
11
16
|
### Added
|
package/CHANGELOG.vi.md
CHANGED
|
@@ -6,6 +6,11 @@ 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.72.0] - 2026-09-28
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
- `sb_review` có thêm gap readiness `pageSeo`: liệt kê các trang page, about, contact, policy, faq và blog đã publish nhưng thiếu `settings.title` hoặc `settings.description`, vì storefront sẽ dùng tên site làm `<title>` và bỏ hẳn meta description khi thiếu một trong hai — khiến các trang này không thể phân biệt trên kết quả tìm kiếm dù canvas hay screenshot đều không cho thấy điều đó.
|
|
13
|
+
|
|
9
14
|
## [0.71.0] - 2026-09-28
|
|
10
15
|
|
|
11
16
|
### Added
|
|
@@ -31,6 +31,15 @@ const COMMERCE_TYPES = [
|
|
|
31
31
|
'dataset-block',
|
|
32
32
|
'list-dataset',
|
|
33
33
|
];
|
|
34
|
+
/**
|
|
35
|
+
* The page types a search engine INDEXES under the page's own settings. Entity
|
|
36
|
+
* templates (product, category, post, course) get their <title> and
|
|
37
|
+
* description merged from the entity (storefront/entityroute.go
|
|
38
|
+
* mergeEntitySettings); error and maintain have no address; the fixed-path and
|
|
39
|
+
* auth types are chrome a crawler is not sent to. Mirrors page.SlugTypes minus
|
|
40
|
+
* the auth four, plus the blog listing.
|
|
41
|
+
*/
|
|
42
|
+
const INDEXED_PAGE_TYPES = new Set(['page', 'about', 'contact', 'policy', 'faq', 'blog']);
|
|
34
43
|
/** Does this node carry a purchase action (add to cart, buy now)? */
|
|
35
44
|
function boundProductAction(n) {
|
|
36
45
|
return (n.bindings ?? []).some((b) => b.id === PRODUCT_ACTION_BINDING_ID && !!b.target?.action);
|
|
@@ -163,6 +172,45 @@ export function readinessGaps(input) {
|
|
|
163
172
|
'footer and a link back to the home page.',
|
|
164
173
|
});
|
|
165
174
|
}
|
|
175
|
+
// EVERY PAGE ANSWERS WITH THE SAME <title>, AND NO DESCRIPTION.
|
|
176
|
+
//
|
|
177
|
+
// storefront.go pageSettings.head: a page whose settings carry no `title`
|
|
178
|
+
// serves the SITE NAME as its <title>, and no `description` means no meta
|
|
179
|
+
// description at all — so a site built through these tools, where nothing
|
|
180
|
+
// ever asks for either, publishes N pages that a search result cannot tell
|
|
181
|
+
// apart. Invisible on the canvas, invisible in a screenshot, and the one
|
|
182
|
+
// thing a search engine reads first.
|
|
183
|
+
//
|
|
184
|
+
// Only the types whose head IS the page's own settings (INDEXED_PAGE_TYPES),
|
|
185
|
+
// only published pages, and only when the list carried `settings` at all —
|
|
186
|
+
// an absent blob is "not read", not "empty".
|
|
187
|
+
if (pages) {
|
|
188
|
+
const bare = pages.filter((p) => {
|
|
189
|
+
if (p.status !== 'published' || !INDEXED_PAGE_TYPES.has(p.type))
|
|
190
|
+
return false;
|
|
191
|
+
const st = p.settings;
|
|
192
|
+
if (!st || typeof st !== 'object')
|
|
193
|
+
return false;
|
|
194
|
+
const has = (k) => typeof st[k] === 'string' && st[k].trim() !== '';
|
|
195
|
+
return !(has('title') && has('description'));
|
|
196
|
+
});
|
|
197
|
+
if (bare.length > 0) {
|
|
198
|
+
const named = bare.map((p) => p.name).filter((n) => !!n).slice(0, 3);
|
|
199
|
+
gaps.push({
|
|
200
|
+
id: 'pageSeo',
|
|
201
|
+
draft: false,
|
|
202
|
+
problem: `${bare.length} published page${bare.length === 1 ? '' : 's'}` +
|
|
203
|
+
(named.length ? ` (${named.join(', ')}${bare.length > named.length ? ', …' : ''})` : '') +
|
|
204
|
+
' carry no settings.title or settings.description. Each serves the SITE NAME as its ' +
|
|
205
|
+
'<title> and no meta description — a search result cannot tell them apart, and ' +
|
|
206
|
+
'nothing on the canvas or in a screenshot shows it.',
|
|
207
|
+
fix: 'PATCH /api/v1/pages/{id} with {settings: {...existing, title, description}} — ' +
|
|
208
|
+
'`settings` REPLACES the blob, so read the page and send it back whole. Title is ' +
|
|
209
|
+
'what the tab and the result show (under ~60 chars); description is the ' +
|
|
210
|
+
'two-line summary under it. ogImage takes a share picture.',
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
}
|
|
166
214
|
// ONE PAGE QUIETLY BECAME THE WHOLE ACCOUNT AREA.
|
|
167
215
|
//
|
|
168
216
|
// This server used to tell agents, in as many words, to put the login and the
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sbuilder-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.72.0",
|
|
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",
|