@zlooks.cn/blog-server 1.0.3 → 1.0.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/dist/contracts/mcp.d.ts +3 -0
- package/dist/contracts/mcp.d.ts.map +1 -1
- package/dist/contracts/mcp.js +3 -0
- package/dist/contracts/mcp.js.map +1 -1
- package/dist/mcp/blog-prompts.d.ts +52 -0
- package/dist/mcp/blog-prompts.d.ts.map +1 -1
- package/dist/mcp/blog-prompts.js +8 -3
- package/dist/mcp/blog-prompts.js.map +1 -1
- package/dist/mcp/blog-provider.d.ts.map +1 -1
- package/dist/mcp/blog-provider.js +2 -0
- package/dist/mcp/blog-provider.js.map +1 -1
- package/dist/mcp/blog-resources.d.ts +13 -0
- package/dist/mcp/blog-resources.d.ts.map +1 -0
- package/dist/mcp/blog-resources.js +75 -0
- package/dist/mcp/blog-resources.js.map +1 -0
- package/dist/mcp/blog-theme-authoring-prompt.d.ts +2 -0
- package/dist/mcp/blog-theme-authoring-prompt.d.ts.map +1 -1
- package/dist/mcp/blog-theme-authoring-prompt.js +96 -61
- package/dist/mcp/blog-theme-authoring-prompt.js.map +1 -1
- package/package.json +2 -2
package/dist/contracts/mcp.d.ts
CHANGED
|
@@ -48,6 +48,9 @@ export declare const BLOG_MCP_TOOLS: Readonly<{
|
|
|
48
48
|
selectTheme: "select-theme";
|
|
49
49
|
readThemeStatus: "read-theme-status";
|
|
50
50
|
}>;
|
|
51
|
+
export declare const BLOG_MCP_RESOURCES: Readonly<{
|
|
52
|
+
themeAuthoringContract: "theme-authoring-contract";
|
|
53
|
+
}>;
|
|
51
54
|
export declare const BLOG_MCP_PROMPTS: Readonly<{
|
|
52
55
|
reviewAndPublishPost: "review-and-publish-post";
|
|
53
56
|
moderatePendingComments: "moderate-pending-comments";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/contracts/mcp.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,oBAAoB,SAAiB,CAAC;AACnD,eAAO,MAAM,mBAAmB,cAAc,CAAC;AAC/C,eAAO,MAAM,oBAAoB,eAAe,CAAC;AACjD,eAAO,MAAM,uBAAuB,kBAAkB,CAAC;AAEvD,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgBzB,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;EAiB3B,CAAC"}
|
|
1
|
+
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/contracts/mcp.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,oBAAoB,SAAiB,CAAC;AACnD,eAAO,MAAM,mBAAmB,cAAc,CAAC;AAC/C,eAAO,MAAM,oBAAoB,eAAe,CAAC;AACjD,eAAO,MAAM,uBAAuB,kBAAkB,CAAC;AAEvD,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgBzB,CAAC;AAEH,eAAO,MAAM,kBAAkB;;EAE7B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;EAiB3B,CAAC"}
|
package/dist/contracts/mcp.js
CHANGED
|
@@ -20,6 +20,9 @@ export const BLOG_MCP_TOOLS = Object.freeze({
|
|
|
20
20
|
listThemes: 'list-theme', readThemeSelection: 'read-theme-selection',
|
|
21
21
|
selectTheme: 'select-theme', readThemeStatus: 'read-theme-status',
|
|
22
22
|
});
|
|
23
|
+
export const BLOG_MCP_RESOURCES = Object.freeze({
|
|
24
|
+
themeAuthoringContract: 'theme-authoring-contract',
|
|
25
|
+
});
|
|
23
26
|
export const BLOG_MCP_PROMPTS = Object.freeze({
|
|
24
27
|
reviewAndPublishPost: 'review-and-publish-post',
|
|
25
28
|
moderatePendingComments: 'moderate-pending-comments',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/contracts/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,MAAM,CAAC,MAAM,oBAAoB,GAAG,cAAc,CAAC;AACnD,MAAM,CAAC,MAAM,mBAAmB,GAAG,WAAW,CAAC;AAC/C,MAAM,CAAC,MAAM,oBAAoB,GAAG,YAAY,CAAC;AACjD,MAAM,CAAC,MAAM,uBAAuB,GAAG,eAAe,CAAC;AAEvD,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC;IAC1C,cAAc,EAAE,eAAe,EAAE,YAAY,EAAE,eAAe;IAC9D,cAAc,EAAE,iBAAiB,EAAE,cAAc,EAAE,iBAAiB,EAAE,cAAc,EAAE,iBAAiB;IACvG,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY;IAClE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY;IAChD,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,mBAAmB,EAAE,WAAW,EAAE,aAAa,EAAE,QAAQ,EAAE,WAAW,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,UAAU,EAAE,aAAa;IAClL,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,cAAc;IAC9G,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa;IACxE,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,cAAc;IAC9G,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,EAAE,iBAAiB;IAC5F,aAAa,EAAE,gBAAgB,EAAE,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,gBAAgB;IAC/F,eAAe,EAAE,kBAAkB,EAAE,cAAc,EAAE,kBAAkB;IACvE,gBAAgB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,oBAAoB;IAC9E,gBAAgB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,oBAAoB;IACxH,UAAU,EAAE,YAAY,EAAE,kBAAkB,EAAE,sBAAsB;IACpE,WAAW,EAAE,cAAc,EAAE,eAAe,EAAE,mBAAmB;CAClE,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC;IAC5C,oBAAoB,EAAE,yBAAyB;IAC/C,uBAAuB,EAAE,2BAA2B;IACpD,eAAe,EAAE,mBAAmB;IACpC,eAAe,EAAE,mBAAmB;IACpC,wBAAwB,EAAE,6BAA6B;IACvD,sBAAsB,EAAE,2BAA2B;IACnD,oBAAoB,EAAE,yBAAyB;IAC/C,uBAAuB,EAAE,6BAA6B;IACtD,uBAAuB,EAAE,6BAA6B;IACtD,0BAA0B,EAAE,gCAAgC;IAC5D,0BAA0B,EAAE,gCAAgC;IAC5D,2BAA2B,EAAE,iCAAiC;IAC9D,sBAAsB,EAAE,4BAA4B;IACpD,0BAA0B,EAAE,gCAAgC;IAC5D,2BAA2B,EAAE,gCAAgC;IAC7D,2BAA2B,EAAE,gCAAgC;CAC9D,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/contracts/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,MAAM,CAAC,MAAM,oBAAoB,GAAG,cAAc,CAAC;AACnD,MAAM,CAAC,MAAM,mBAAmB,GAAG,WAAW,CAAC;AAC/C,MAAM,CAAC,MAAM,oBAAoB,GAAG,YAAY,CAAC;AACjD,MAAM,CAAC,MAAM,uBAAuB,GAAG,eAAe,CAAC;AAEvD,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC;IAC1C,cAAc,EAAE,eAAe,EAAE,YAAY,EAAE,eAAe;IAC9D,cAAc,EAAE,iBAAiB,EAAE,cAAc,EAAE,iBAAiB,EAAE,cAAc,EAAE,iBAAiB;IACvG,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY;IAClE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY;IAChD,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,mBAAmB,EAAE,WAAW,EAAE,aAAa,EAAE,QAAQ,EAAE,WAAW,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,UAAU,EAAE,aAAa;IAClL,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,cAAc;IAC9G,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa;IACxE,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,cAAc;IAC9G,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,EAAE,iBAAiB;IAC5F,aAAa,EAAE,gBAAgB,EAAE,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,gBAAgB;IAC/F,eAAe,EAAE,kBAAkB,EAAE,cAAc,EAAE,kBAAkB;IACvE,gBAAgB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,oBAAoB;IAC9E,gBAAgB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,oBAAoB;IACxH,UAAU,EAAE,YAAY,EAAE,kBAAkB,EAAE,sBAAsB;IACpE,WAAW,EAAE,cAAc,EAAE,eAAe,EAAE,mBAAmB;CAClE,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC;IAC9C,sBAAsB,EAAE,0BAA0B;CACnD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC;IAC5C,oBAAoB,EAAE,yBAAyB;IAC/C,uBAAuB,EAAE,2BAA2B;IACpD,eAAe,EAAE,mBAAmB;IACpC,eAAe,EAAE,mBAAmB;IACpC,wBAAwB,EAAE,6BAA6B;IACvD,sBAAsB,EAAE,2BAA2B;IACnD,oBAAoB,EAAE,yBAAyB;IAC/C,uBAAuB,EAAE,6BAA6B;IACtD,uBAAuB,EAAE,6BAA6B;IACtD,0BAA0B,EAAE,gCAAgC;IAC5D,0BAA0B,EAAE,gCAAgC;IAC5D,2BAA2B,EAAE,iCAAiC;IAC9D,sBAAsB,EAAE,4BAA4B;IACpD,0BAA0B,EAAE,gCAAgC;IAC5D,2BAA2B,EAAE,gCAAgC;IAC7D,2BAA2B,EAAE,gCAAgC;CAC9D,CAAC,CAAC"}
|
|
@@ -18,118 +18,170 @@ export declare function createBlogPrompts(): {
|
|
|
18
18
|
themeId: string;
|
|
19
19
|
displayName: string;
|
|
20
20
|
description: string;
|
|
21
|
+
targetDirectory?: string | undefined;
|
|
22
|
+
gatewayOrigin?: string | undefined;
|
|
21
23
|
}, {
|
|
22
24
|
themeId: string;
|
|
23
25
|
displayName: string;
|
|
24
26
|
description: string;
|
|
27
|
+
targetDirectory?: string | undefined;
|
|
28
|
+
gatewayOrigin?: string | undefined;
|
|
25
29
|
}>;
|
|
26
30
|
"create-blog-theme-structure": import("@hile/mcp").McpPromptDefinition<{
|
|
27
31
|
themeId: string;
|
|
28
32
|
displayName: string;
|
|
29
33
|
description: string;
|
|
34
|
+
targetDirectory?: string | undefined;
|
|
35
|
+
gatewayOrigin?: string | undefined;
|
|
30
36
|
}, {
|
|
31
37
|
themeId: string;
|
|
32
38
|
displayName: string;
|
|
33
39
|
description: string;
|
|
40
|
+
targetDirectory?: string | undefined;
|
|
41
|
+
gatewayOrigin?: string | undefined;
|
|
34
42
|
}>;
|
|
35
43
|
"create-blog-theme-runtime": import("@hile/mcp").McpPromptDefinition<{
|
|
36
44
|
themeId: string;
|
|
37
45
|
displayName: string;
|
|
38
46
|
description: string;
|
|
47
|
+
targetDirectory?: string | undefined;
|
|
48
|
+
gatewayOrigin?: string | undefined;
|
|
39
49
|
}, {
|
|
40
50
|
themeId: string;
|
|
41
51
|
displayName: string;
|
|
42
52
|
description: string;
|
|
53
|
+
targetDirectory?: string | undefined;
|
|
54
|
+
gatewayOrigin?: string | undefined;
|
|
43
55
|
}>;
|
|
44
56
|
"create-blog-theme-shell": import("@hile/mcp").McpPromptDefinition<{
|
|
45
57
|
themeId: string;
|
|
46
58
|
displayName: string;
|
|
47
59
|
description: string;
|
|
60
|
+
targetDirectory?: string | undefined;
|
|
61
|
+
gatewayOrigin?: string | undefined;
|
|
48
62
|
}, {
|
|
49
63
|
themeId: string;
|
|
50
64
|
displayName: string;
|
|
51
65
|
description: string;
|
|
66
|
+
targetDirectory?: string | undefined;
|
|
67
|
+
gatewayOrigin?: string | undefined;
|
|
52
68
|
}>;
|
|
53
69
|
"create-blog-theme-home-page": import("@hile/mcp").McpPromptDefinition<{
|
|
54
70
|
themeId: string;
|
|
55
71
|
displayName: string;
|
|
56
72
|
description: string;
|
|
73
|
+
targetDirectory?: string | undefined;
|
|
74
|
+
gatewayOrigin?: string | undefined;
|
|
57
75
|
}, {
|
|
58
76
|
themeId: string;
|
|
59
77
|
displayName: string;
|
|
60
78
|
description: string;
|
|
79
|
+
targetDirectory?: string | undefined;
|
|
80
|
+
gatewayOrigin?: string | undefined;
|
|
61
81
|
}>;
|
|
62
82
|
"create-blog-theme-post-page": import("@hile/mcp").McpPromptDefinition<{
|
|
63
83
|
themeId: string;
|
|
64
84
|
displayName: string;
|
|
65
85
|
description: string;
|
|
86
|
+
targetDirectory?: string | undefined;
|
|
87
|
+
gatewayOrigin?: string | undefined;
|
|
66
88
|
}, {
|
|
67
89
|
themeId: string;
|
|
68
90
|
displayName: string;
|
|
69
91
|
description: string;
|
|
92
|
+
targetDirectory?: string | undefined;
|
|
93
|
+
gatewayOrigin?: string | undefined;
|
|
70
94
|
}>;
|
|
71
95
|
"create-blog-theme-archive-page": import("@hile/mcp").McpPromptDefinition<{
|
|
72
96
|
themeId: string;
|
|
73
97
|
displayName: string;
|
|
74
98
|
description: string;
|
|
99
|
+
targetDirectory?: string | undefined;
|
|
100
|
+
gatewayOrigin?: string | undefined;
|
|
75
101
|
}, {
|
|
76
102
|
themeId: string;
|
|
77
103
|
displayName: string;
|
|
78
104
|
description: string;
|
|
105
|
+
targetDirectory?: string | undefined;
|
|
106
|
+
gatewayOrigin?: string | undefined;
|
|
79
107
|
}>;
|
|
80
108
|
"create-blog-theme-content-page": import("@hile/mcp").McpPromptDefinition<{
|
|
81
109
|
themeId: string;
|
|
82
110
|
displayName: string;
|
|
83
111
|
description: string;
|
|
112
|
+
targetDirectory?: string | undefined;
|
|
113
|
+
gatewayOrigin?: string | undefined;
|
|
84
114
|
}, {
|
|
85
115
|
themeId: string;
|
|
86
116
|
displayName: string;
|
|
87
117
|
description: string;
|
|
118
|
+
targetDirectory?: string | undefined;
|
|
119
|
+
gatewayOrigin?: string | undefined;
|
|
88
120
|
}>;
|
|
89
121
|
"create-blog-theme-category-page": import("@hile/mcp").McpPromptDefinition<{
|
|
90
122
|
themeId: string;
|
|
91
123
|
displayName: string;
|
|
92
124
|
description: string;
|
|
125
|
+
targetDirectory?: string | undefined;
|
|
126
|
+
gatewayOrigin?: string | undefined;
|
|
93
127
|
}, {
|
|
94
128
|
themeId: string;
|
|
95
129
|
displayName: string;
|
|
96
130
|
description: string;
|
|
131
|
+
targetDirectory?: string | undefined;
|
|
132
|
+
gatewayOrigin?: string | undefined;
|
|
97
133
|
}>;
|
|
98
134
|
"create-blog-theme-tag-page": import("@hile/mcp").McpPromptDefinition<{
|
|
99
135
|
themeId: string;
|
|
100
136
|
displayName: string;
|
|
101
137
|
description: string;
|
|
138
|
+
targetDirectory?: string | undefined;
|
|
139
|
+
gatewayOrigin?: string | undefined;
|
|
102
140
|
}, {
|
|
103
141
|
themeId: string;
|
|
104
142
|
displayName: string;
|
|
105
143
|
description: string;
|
|
144
|
+
targetDirectory?: string | undefined;
|
|
145
|
+
gatewayOrigin?: string | undefined;
|
|
106
146
|
}>;
|
|
107
147
|
"create-blog-theme-friends-page": import("@hile/mcp").McpPromptDefinition<{
|
|
108
148
|
themeId: string;
|
|
109
149
|
displayName: string;
|
|
110
150
|
description: string;
|
|
151
|
+
targetDirectory?: string | undefined;
|
|
152
|
+
gatewayOrigin?: string | undefined;
|
|
111
153
|
}, {
|
|
112
154
|
themeId: string;
|
|
113
155
|
displayName: string;
|
|
114
156
|
description: string;
|
|
157
|
+
targetDirectory?: string | undefined;
|
|
158
|
+
gatewayOrigin?: string | undefined;
|
|
115
159
|
}>;
|
|
116
160
|
"create-blog-theme-interactions": import("@hile/mcp").McpPromptDefinition<{
|
|
117
161
|
themeId: string;
|
|
118
162
|
displayName: string;
|
|
119
163
|
description: string;
|
|
164
|
+
targetDirectory?: string | undefined;
|
|
165
|
+
gatewayOrigin?: string | undefined;
|
|
120
166
|
}, {
|
|
121
167
|
themeId: string;
|
|
122
168
|
displayName: string;
|
|
123
169
|
description: string;
|
|
170
|
+
targetDirectory?: string | undefined;
|
|
171
|
+
gatewayOrigin?: string | undefined;
|
|
124
172
|
}>;
|
|
125
173
|
"create-blog-theme-verification": import("@hile/mcp").McpPromptDefinition<{
|
|
126
174
|
themeId: string;
|
|
127
175
|
displayName: string;
|
|
128
176
|
description: string;
|
|
177
|
+
targetDirectory?: string | undefined;
|
|
178
|
+
gatewayOrigin?: string | undefined;
|
|
129
179
|
}, {
|
|
130
180
|
themeId: string;
|
|
131
181
|
displayName: string;
|
|
132
182
|
description: string;
|
|
183
|
+
targetDirectory?: string | undefined;
|
|
184
|
+
gatewayOrigin?: string | undefined;
|
|
133
185
|
}>;
|
|
134
186
|
};
|
|
135
187
|
//# sourceMappingURL=blog-prompts.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blog-prompts.d.ts","sourceRoot":"","sources":["../../src/mcp/blog-prompts.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"blog-prompts.d.ts","sourceRoot":"","sources":["../../src/mcp/blog-prompts.ts"],"names":[],"mappings":"AA0CA,wBAAgB,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqChC"}
|
package/dist/mcp/blog-prompts.js
CHANGED
|
@@ -7,9 +7,14 @@ const postPromptInput = z.strictObject({ postId: z.uuid() });
|
|
|
7
7
|
const commentPromptInput = z.strictObject({ postId: z.uuid().optional() });
|
|
8
8
|
const themePromptInput = z.strictObject({ themeId: blogThemeIdSchema });
|
|
9
9
|
const themeAuthoringPromptInput = z.strictObject({
|
|
10
|
-
themeId: blogThemeIdSchema,
|
|
10
|
+
themeId: blogThemeIdSchema.refine((value) => value.length <= 50 && /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/.test(value), 'Theme authoring requires lowercase kebab-case with at most 50 characters'),
|
|
11
11
|
displayName: z.string().trim().min(1).max(100),
|
|
12
12
|
description: z.string().trim().min(1).max(500),
|
|
13
|
+
targetDirectory: z.string().trim().min(1).max(1_024).regex(/^[^\u0000-\u001f\u007f]+$/).optional(),
|
|
14
|
+
gatewayOrigin: z.url({ protocol: /^https?$/ }).max(2_048).refine((value) => {
|
|
15
|
+
const url = new URL(value);
|
|
16
|
+
return !url.username && !url.password && url.pathname === '/' && !url.search && !url.hash;
|
|
17
|
+
}, 'Gateway Origin must not contain credentials, a path, query, or fragment').optional(),
|
|
13
18
|
});
|
|
14
19
|
export function createBlogPrompts() {
|
|
15
20
|
return {
|
|
@@ -39,7 +44,7 @@ export function createBlogPrompts() {
|
|
|
39
44
|
}
|
|
40
45
|
function createBlogThemeAuthoringPrompts() {
|
|
41
46
|
return {
|
|
42
|
-
[BLOG_MCP_PROMPTS.createBlogTheme]: themeAuthoringPrompt(BLOG_MCP_PROMPTS.createBlogTheme, '创建博客主题', '串联全部主题开发阶段,从零创建并验证一个可运行主题。', '从零构建并验证一个博客主题', createBlogThemeMessage
|
|
47
|
+
[BLOG_MCP_PROMPTS.createBlogTheme]: themeAuthoringPrompt(BLOG_MCP_PROMPTS.createBlogTheme, '创建博客主题', '串联全部主题开发阶段,从零创建并验证一个可运行主题。', '从零构建并验证一个博客主题', createBlogThemeMessage),
|
|
43
48
|
[BLOG_MCP_PROMPTS.createBlogThemeStructure]: themeAuthoringPrompt(BLOG_MCP_PROMPTS.createBlogThemeStructure, '创建主题结构与配置', '创建主题包目录、构建配置、路由清单和包级开发说明。', '创建博客主题的文件结构与配置', createBlogThemeStructureMessage),
|
|
44
49
|
[BLOG_MCP_PROMPTS.createBlogThemeRuntime]: themeAuthoringPrompt(BLOG_MCP_PROMPTS.createBlogThemeRuntime, '创建主题服务端运行时', '创建主题定义和唯一 Hile boot,并复用公共 Blog 主题运行时。', '创建博客主题的服务端定义与运行时', createBlogThemeRuntimeMessage),
|
|
45
50
|
[BLOG_MCP_PROMPTS.createBlogThemeShell]: themeAuthoringPrompt(BLOG_MCP_PROMPTS.createBlogThemeShell, '创建主题公共壳层', '创建远程 UI Provider、导航、页头、页脚和主题样式。', '创建博客主题的公共页面壳层', createBlogThemeShellMessage),
|
|
@@ -51,7 +56,7 @@ function createBlogThemeAuthoringPrompts() {
|
|
|
51
56
|
[BLOG_MCP_PROMPTS.createBlogThemeTagPage]: themeAuthoringPrompt(BLOG_MCP_PROMPTS.createBlogThemeTagPage, '创建标签页', '使用统一标签 ViewModel 实现标签文章列表。', '创建博客主题标签页', createBlogThemeTagPageMessage),
|
|
52
57
|
[BLOG_MCP_PROMPTS.createBlogThemeFriendsPage]: themeAuthoringPrompt(BLOG_MCP_PROMPTS.createBlogThemeFriendsPage, '创建友情链接页', '使用统一友情链接 ViewModel 实现安全的站点目录。', '创建博客主题友情链接页', createBlogThemeFriendsPageMessage),
|
|
53
58
|
[BLOG_MCP_PROMPTS.createBlogThemeInteractions]: themeAuthoringPrompt(BLOG_MCP_PROMPTS.createBlogThemeInteractions, '创建主题浏览器交互', '通过统一 Client API 实现搜索、评论等用户触发交互。', '创建博客主题浏览器交互', createBlogThemeInteractionsMessage),
|
|
54
|
-
[BLOG_MCP_PROMPTS.createBlogThemeVerification]: themeAuthoringPrompt(BLOG_MCP_PROMPTS.createBlogThemeVerification, '验证博客主题', '闭环验证构建、RSC 产物、运行时发现、页面和交互。', '验证并修复博客主题', createBlogThemeVerificationMessage
|
|
59
|
+
[BLOG_MCP_PROMPTS.createBlogThemeVerification]: themeAuthoringPrompt(BLOG_MCP_PROMPTS.createBlogThemeVerification, '验证博客主题', '闭环验证构建、RSC 产物、运行时发现、页面和交互。', '验证并修复博客主题', createBlogThemeVerificationMessage),
|
|
55
60
|
};
|
|
56
61
|
}
|
|
57
62
|
function themeAuthoringPrompt(name, title, description, resultDescription, message, requiresWrite = false) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blog-prompts.js","sourceRoot":"","sources":["../../src/mcp/blog-prompts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAA6B,MAAM,WAAW,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,EACnB,cAAc,EACd,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,iCAAiC,EACjC,kCAAkC,EAClC,iCAAiC,EACjC,iCAAiC,EACjC,8BAA8B,EAC9B,kCAAkC,EAClC,sBAAsB,EACtB,8BAA8B,EAC9B,6BAA6B,EAC7B,2BAA2B,EAC3B,+BAA+B,EAC/B,6BAA6B,EAC7B,kCAAkC,GAEnC,MAAM,kCAAkC,CAAC;AAE1C,MAAM,eAAe,GAAG,CAAC,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAC7D,MAAM,kBAAkB,GAAG,CAAC,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AAC3E,MAAM,gBAAgB,GAAG,CAAC,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC,CAAC;AACxE,MAAM,yBAAyB,GAAG,CAAC,CAAC,YAAY,CAAC;IAC/C,OAAO,EAAE,iBAAiB;
|
|
1
|
+
{"version":3,"file":"blog-prompts.js","sourceRoot":"","sources":["../../src/mcp/blog-prompts.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blog-provider.d.ts","sourceRoot":"","sources":["../../src/mcp/blog-provider.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAQnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"blog-provider.d.ts","sourceRoot":"","sources":["../../src/mcp/blog-provider.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAQnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAInE,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,gBAAgB,6CAgBpF"}
|
|
@@ -8,6 +8,7 @@ import { createPageTools } from './page-tools.js';
|
|
|
8
8
|
import { createTagTools } from './tag-tools.js';
|
|
9
9
|
import { createThemeTools } from './theme-tools.js';
|
|
10
10
|
import { createBlogPrompts } from './blog-prompts.js';
|
|
11
|
+
import { createBlogResources } from './blog-resources.js';
|
|
11
12
|
export function createBlogMcpProvider(blog, themes) {
|
|
12
13
|
return defineMcpProvider({
|
|
13
14
|
id: BLOG_MCP_PROVIDER_ID,
|
|
@@ -21,6 +22,7 @@ export function createBlogMcpProvider(blog, themes) {
|
|
|
21
22
|
...createFriendLinkTools(blog),
|
|
22
23
|
...createThemeTools(themes),
|
|
23
24
|
},
|
|
25
|
+
resources: createBlogResources(),
|
|
24
26
|
prompts: createBlogPrompts(),
|
|
25
27
|
});
|
|
26
28
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blog-provider.js","sourceRoot":"","sources":["../../src/mcp/blog-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"blog-provider.js","sourceRoot":"","sources":["../../src/mcp/blog-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE1D,MAAM,UAAU,qBAAqB,CAAC,IAAqB,EAAE,MAAwB;IACnF,OAAO,iBAAiB,CAAC;QACvB,EAAE,EAAE,oBAAoB;QACxB,WAAW,EAAE,MAAM;QACnB,KAAK,EAAE;YACL,GAAG,mBAAmB,CAAC,IAAI,CAAC;YAC5B,GAAG,cAAc,CAAC,IAAI,CAAC;YACvB,GAAG,eAAe,CAAC,IAAI,CAAC;YACxB,GAAG,eAAe,CAAC,IAAI,CAAC;YACxB,GAAG,kBAAkB,CAAC,IAAI,CAAC;YAC3B,GAAG,qBAAqB,CAAC,IAAI,CAAC;YAC9B,GAAG,gBAAgB,CAAC,MAAM,CAAC;SAC5B;QACD,SAAS,EAAE,mBAAmB,EAAE;QAChC,OAAO,EAAE,iBAAiB,EAAE;KAC7B,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare const BLOG_THEME_AUTHORING_CONTRACT_URI = "hile://blog/theme-authoring-contract";
|
|
2
|
+
export declare function createBlogResources(): {
|
|
3
|
+
"theme-authoring-contract": import("@hile/mcp").McpResourceDefinition<{
|
|
4
|
+
kind: "static";
|
|
5
|
+
name: "theme-authoring-contract";
|
|
6
|
+
uri: string;
|
|
7
|
+
mimeType: string;
|
|
8
|
+
access: {
|
|
9
|
+
scopes: string[];
|
|
10
|
+
};
|
|
11
|
+
}>;
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=blog-resources.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blog-resources.d.ts","sourceRoot":"","sources":["../../src/mcp/blog-resources.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,iCAAiC,yCAAyC,CAAC;AAsDxF,wBAAgB,mBAAmB;;;;;;;YAOnB,MAAM;;;EAYrB"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { defineMcpResource } from '@hile/mcp';
|
|
2
|
+
import { BLOG_MCP_READ_SCOPE, BLOG_MCP_RESOURCES, } from '../contracts/mcp.js';
|
|
3
|
+
export const BLOG_THEME_AUTHORING_CONTRACT_URI = 'hile://blog/theme-authoring-contract';
|
|
4
|
+
const contract = Object.freeze({
|
|
5
|
+
schemaVersion: 2,
|
|
6
|
+
packageNamePattern: 'zlooks-theme-<themeId>-server',
|
|
7
|
+
officialScopeReserved: '@zlooks.cn/*',
|
|
8
|
+
cli: Object.freeze({
|
|
9
|
+
create: 'zlooks theme create',
|
|
10
|
+
verify: 'zlooks theme verify --json',
|
|
11
|
+
}),
|
|
12
|
+
runtime: Object.freeze({
|
|
13
|
+
start: 'pnpm run start',
|
|
14
|
+
artifact: 'verified-production',
|
|
15
|
+
development: 'matching-development-gateway-only',
|
|
16
|
+
}),
|
|
17
|
+
routes: Object.freeze([
|
|
18
|
+
'/',
|
|
19
|
+
'/posts/[slug]',
|
|
20
|
+
'/archives',
|
|
21
|
+
'/pages/[slug]',
|
|
22
|
+
'/categories/[slug]',
|
|
23
|
+
'/tags/[slug]',
|
|
24
|
+
'/friends',
|
|
25
|
+
]),
|
|
26
|
+
clientInteractions: Object.freeze([
|
|
27
|
+
'searchPosts',
|
|
28
|
+
'likePost',
|
|
29
|
+
'unlikePost',
|
|
30
|
+
'listComments',
|
|
31
|
+
'createComment',
|
|
32
|
+
]),
|
|
33
|
+
uiBoundaries: Object.freeze({
|
|
34
|
+
button: '@zlooks.cn/ui/button#ZlooksButton',
|
|
35
|
+
app: '@zlooks.cn/ui/app#useZlooksApp',
|
|
36
|
+
userAccess: '@zlooks.cn/ui/shell#ZlooksUserAccess',
|
|
37
|
+
themePreference: '@zlooks.cn/ui#useZlooksTheme',
|
|
38
|
+
navigation: '@zlooks.cn/ui/shell-provider#useZlooksNavigation',
|
|
39
|
+
sitePresentation: '@zlooks.cn/ui/site-config#useSitePresentation',
|
|
40
|
+
seo: '@zlooks.cn/ui/seo#ZlooksSeo',
|
|
41
|
+
}),
|
|
42
|
+
shellRequirements: Object.freeze(['user-access-states', 'confirmed-logout', 'light-dark-default', 'shared-navigation', 'site-legal']),
|
|
43
|
+
stages: Object.freeze([
|
|
44
|
+
'PRECHECK',
|
|
45
|
+
'SCAFFOLDED',
|
|
46
|
+
'DESIGNED',
|
|
47
|
+
'LOCAL_VERIFIED',
|
|
48
|
+
'RUNTIME_VERIFIED',
|
|
49
|
+
]),
|
|
50
|
+
optionalStages: Object.freeze(['FUNCTION_VERIFIED']),
|
|
51
|
+
completionStage: 'RUNTIME_VERIFIED',
|
|
52
|
+
guidanceOnly: 'When asked how to make a theme, explain the workflow and SDK boundaries without creating a project or running acceptance.',
|
|
53
|
+
completionRule: 'Actual theme creation completes after all required stages through RUNTIME_VERIFIED. The template is an editable starting point, not the final design. Authenticated content acceptance is optional and must not block authoring; unexecuted checks must not be reported as passed.',
|
|
54
|
+
});
|
|
55
|
+
export function createBlogResources() {
|
|
56
|
+
return {
|
|
57
|
+
[BLOG_MCP_RESOURCES.themeAuthoringContract]: defineMcpResource({
|
|
58
|
+
kind: 'static',
|
|
59
|
+
name: BLOG_MCP_RESOURCES.themeAuthoringContract,
|
|
60
|
+
uri: BLOG_THEME_AUTHORING_CONTRACT_URI,
|
|
61
|
+
mimeType: 'application/json',
|
|
62
|
+
access: { scopes: [BLOG_MCP_READ_SCOPE] },
|
|
63
|
+
}, (uri, context) => {
|
|
64
|
+
context.signal.throwIfAborted();
|
|
65
|
+
return {
|
|
66
|
+
contents: [{
|
|
67
|
+
uri: uri.toString(),
|
|
68
|
+
mimeType: 'application/json',
|
|
69
|
+
text: JSON.stringify(contract),
|
|
70
|
+
}],
|
|
71
|
+
};
|
|
72
|
+
}),
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=blog-resources.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blog-resources.js","sourceRoot":"","sources":["../../src/mcp/blog-resources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EACL,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,CAAC,MAAM,iCAAiC,GAAG,sCAAsC,CAAC;AAExF,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC;IAC7B,aAAa,EAAE,CAAC;IAChB,kBAAkB,EAAE,+BAA+B;IACnD,qBAAqB,EAAE,cAAc;IACrC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC;QACjB,MAAM,EAAE,qBAAqB;QAC7B,MAAM,EAAE,4BAA4B;KACrC,CAAC;IACF,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC;QACrB,KAAK,EAAE,gBAAgB;QACvB,QAAQ,EAAE,qBAAqB;QAC/B,WAAW,EAAE,mCAAmC;KACjD,CAAC;IACF,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;QACpB,GAAG;QACH,eAAe;QACf,WAAW;QACX,eAAe;QACf,oBAAoB;QACpB,cAAc;QACd,UAAU;KACX,CAAC;IACF,kBAAkB,EAAE,MAAM,CAAC,MAAM,CAAC;QAChC,aAAa;QACb,UAAU;QACV,YAAY;QACZ,cAAc;QACd,eAAe;KAChB,CAAC;IACF,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC;QAC1B,MAAM,EAAE,mCAAmC;QAC3C,GAAG,EAAE,gCAAgC;QACrC,UAAU,EAAE,sCAAsC;QAClD,eAAe,EAAE,8BAA8B;QAC/C,UAAU,EAAE,kDAAkD;QAC9D,gBAAgB,EAAE,+CAA+C;QACjE,GAAG,EAAE,6BAA6B;KACnC,CAAC;IACF,iBAAiB,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,oBAAoB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,YAAY,CAAC,CAAC;IACrI,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;QACpB,UAAU;QACV,YAAY;QACZ,UAAU;QACV,gBAAgB;QAChB,kBAAkB;KACnB,CAAC;IACF,cAAc,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC;IACpD,eAAe,EAAE,kBAAkB;IACnC,YAAY,EAAE,2HAA2H;IACzI,cAAc,EAAE,oRAAoR;CACrS,CAAC,CAAC;AAEH,MAAM,UAAU,mBAAmB;IACjC,OAAO;QACL,CAAC,kBAAkB,CAAC,sBAAsB,CAAC,EAAE,iBAAiB,CAAC;YAC7D,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,kBAAkB,CAAC,sBAAsB;YAC/C,GAAG,EAAE,iCAAiC;YACtC,QAAQ,EAAE,kBAAkB;YAC5B,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,mBAAmB,CAAC,EAAE;SAC1C,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE;YAClB,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;YAChC,OAAO;gBACL,QAAQ,EAAE,CAAC;wBACT,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE;wBACnB,QAAQ,EAAE,kBAAkB;wBAC5B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;qBAC/B,CAAC;aACH,CAAC;QACJ,CAAC,CAAC;KACH,CAAC;AACJ,CAAC"}
|
|
@@ -2,6 +2,8 @@ export interface BlogThemeAuthoringInput {
|
|
|
2
2
|
readonly themeId: string;
|
|
3
3
|
readonly displayName: string;
|
|
4
4
|
readonly description: string;
|
|
5
|
+
readonly targetDirectory?: string | undefined;
|
|
6
|
+
readonly gatewayOrigin?: string | undefined;
|
|
5
7
|
}
|
|
6
8
|
export declare function createBlogThemeMessage(input: BlogThemeAuthoringInput): string;
|
|
7
9
|
export declare function createBlogThemeStructureMessage(input: BlogThemeAuthoringInput): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blog-theme-authoring-prompt.d.ts","sourceRoot":"","sources":["../../src/mcp/blog-theme-authoring-prompt.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"blog-theme-authoring-prompt.d.ts","sourceRoot":"","sources":["../../src/mcp/blog-theme-authoring-prompt.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9C,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7C;AAwCD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,uBAAuB,GAAG,MAAM,CA2C7E;AAED,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,uBAAuB,GAAG,MAAM,CA8BtF;AAED,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,uBAAuB,GAAG,MAAM,CAmBpF;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,uBAAuB,GAAG,MAAM,CAclF;AAED,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,uBAAuB,GAAG,MAAM,CAGrF;AAED,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,uBAAuB,GAAG,MAAM,CAKrF;AAED,wBAAgB,iCAAiC,CAAC,KAAK,EAAE,uBAAuB,GAAG,MAAM,CAGxF;AAED,wBAAgB,iCAAiC,CAAC,KAAK,EAAE,uBAAuB,GAAG,MAAM,CAGxF;AAED,wBAAgB,kCAAkC,CAAC,KAAK,EAAE,uBAAuB,GAAG,MAAM,CAGzF;AAED,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,uBAAuB,GAAG,MAAM,CAGpF;AAED,wBAAgB,iCAAiC,CAAC,KAAK,EAAE,uBAAuB,GAAG,MAAM,CAGxF;AAgBD,wBAAgB,kCAAkC,CAAC,KAAK,EAAE,uBAAuB,GAAG,MAAM,CAYzF;AAED,wBAAgB,kCAAkC,CAAC,KAAK,EAAE,uBAAuB,GAAG,MAAM,CAezF"}
|
|
@@ -1,50 +1,84 @@
|
|
|
1
|
-
import { BLOG_MCP_PROMPTS, BLOG_MCP_PROVIDER_ID } from '../contracts/mcp.js';
|
|
1
|
+
import { BLOG_MCP_PROMPTS, BLOG_MCP_PROVIDER_ID, BLOG_MCP_TOOLS } from '../contracts/mcp.js';
|
|
2
2
|
function prompt(name) {
|
|
3
3
|
return `${BLOG_MCP_PROVIDER_ID}.${name}`;
|
|
4
4
|
}
|
|
5
5
|
function packageName(themeId) {
|
|
6
|
-
return `zlooks-
|
|
6
|
+
return `zlooks-theme-${themeId}-server`;
|
|
7
7
|
}
|
|
8
8
|
function packageRoot(themeId) {
|
|
9
|
-
return
|
|
9
|
+
return packageName(themeId);
|
|
10
10
|
}
|
|
11
|
-
function
|
|
12
|
-
return
|
|
11
|
+
function targetDirectory(input) {
|
|
12
|
+
return input.targetDirectory ?? packageRoot(input.themeId);
|
|
13
|
+
}
|
|
14
|
+
function shellArg(value) {
|
|
15
|
+
return `'${value.replaceAll("'", `'\"'\"'`)}'`;
|
|
13
16
|
}
|
|
17
|
+
function context(input) {
|
|
18
|
+
return `主题 ID:${input.themeId}\n显示名:${JSON.stringify(input.displayName)}\n描述:${JSON.stringify(input.description)}\n包:${packageName(input.themeId)}\n目录:${JSON.stringify(targetDirectory(input))}\nGateway Origin:${input.gatewayOrigin ? JSON.stringify(input.gatewayOrigin) : '未提供'}`;
|
|
19
|
+
}
|
|
20
|
+
const sharedUiRequirements = `共享 UI 必须完整接入:
|
|
21
|
+
- ZlooksUiProvider、ZlooksShellProvider 和 ZlooksSiteConfigProvider 在远程 Client Boundary 内使用 Host 初始数据;不能在 hydration 后补请求初始化。
|
|
22
|
+
- 从 @zlooks.cn/ui/shell 使用 ZlooksUserAccess,保留 anonymous 登录方式、authenticated 头像/账户菜单和 unavailable 禁用态。onNavigate 使用 useRscNavigation().push;onLogout 使用 useRequest 向组件提供的 href 发起同源 POST,成功后 refresh。退出确认和失败反馈由共享组件处理,不自行解析 Session、硬编码认证路由或伪造登录态。
|
|
23
|
+
- 从 @zlooks.cn/ui 使用 useZlooksTheme,通过 Ant Design Segmented 实现 light/dark/default(浅色/深色/自动)三态并调用 setMode。UI SDK 不导出视觉切换按钮;主题不要另外维护 localStorage 或全局主题状态,也不能通过固定 Provider theme 使切换失效。
|
|
24
|
+
- 从 @zlooks.cn/ui/shell-provider 使用 useZlooksNavigation/useZlooksPathname 渲染主导航,合并 Blog navigationPages、归档和友链,按 href 去重且只标记最具体的当前项;不要用固定 Blog 链接替代 Host 提供的其他功能入口。
|
|
25
|
+
- 从 useSitePresentation 读取站点标识和 legal.registrations/legal.copyright,使用真实备案链接及版权;无数据时不编造。保留 ZlooksSeo、@zlooks.cn/ui/button、@zlooks.cn/ui/request 和 @zlooks.cn/ui/app 的对应职责。
|
|
26
|
+
- 用本地组件测试覆盖用户态三种状态、登录跳转、账户菜单、退出确认/失败/成功刷新、三态切换及跨页同步、共享导航和备案版权,不能仅检查 Provider 存在。真实登录与内容写交互属于可选验收,不阻塞主题制作。`;
|
|
27
|
+
const runtimeStartupRequirements = '默认执行 pnpm run start,连接实际 Registry 并运行 LOCAL_VERIFIED 已验证的生产构建。只有用户明确使用配套开发模式 Gateway 时才允许 pnpm run dev;不能把开发模式 React Flight 发送给生产模式 Gateway,也不能根据 localhost 地址推断 Gateway 是开发模式。';
|
|
28
|
+
const runtimeEvidenceRequirements = '以工具实际返回字段判断:status 对未切换的新主题应为 available,已选中的主题应为 active;instanceCount >= 1,且 buildId 必须与 LOCAL_VERIFIED 已验证的本地产物一致。conflicted/unavailable 不通过,selected/activating 只能有界等待后复查,fallback 不能作为新主题通过的证据;不存在独立的 healthy 或 buildValid 字段。满足这些条件才记录 RUNTIME_VERIFIED,不需要为验收主动切换主题。';
|
|
29
|
+
const authoringCompletionRequirements = '目标是让 Agent 知道如何制作主题。用户仅询问制作方法时,只提供步骤与边界,不执行创建或验收。用户要求实际创建时,模板不是最终成品:它提供功能基础,Agent 应按用户要求调整视觉与布局,保留 SDK 接口和本地回归。完成 PRECHECK、SCAFFOLDED、DESIGNED、LOCAL_VERIFIED、RUNTIME_VERIFIED 后可报告“主题制作完成”。FUNCTION_VERIFIED 是可选的真实内容验收;缺少登录态、测试内容、写操作授权或浏览器验收条件不阻塞主题制作,不得因此要求创建账号或测试文章,也不得声称未执行的验收已通过。';
|
|
14
30
|
export function createBlogThemeMessage(input) {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
31
|
+
return `请根据用户请求指导或执行独立 Blog 主题制作。下面已经包含完整工作流,不要再获取其他 create-blog-theme-* Prompt。\n${context(input)}
|
|
32
|
+
|
|
33
|
+
${authoringCompletionRequirements}
|
|
34
|
+
|
|
35
|
+
硬性边界:
|
|
36
|
+
- 第三方包名和默认目录固定为 ${packageName(input.themeId)};@zlooks.cn/* 是官方保留 scope,用户主题不得使用。模板中 antd 使用与 UI SDK 匹配的精确版本,其余依赖使用 ^版本号并保留 pnpm-lock.yaml;不得引用 workspace:、file:、link:、主站绝对路径或 default 主题源码。
|
|
37
|
+
- 主题必须保留七条路由:/、/posts/[slug]、/archives、/pages/[slug]、/categories/[slug]、/tags/[slug]、/friends。
|
|
38
|
+
- 服务端初始数据只用 @zlooks.cn/blog-theme/rsc;Node/Hile boot 只用 @zlooks.cn/blog-theme/runtime;浏览器交互只在 'use client' 文件中用 @zlooks.cn/blog-theme/client 的 createBlogThemeClient。
|
|
39
|
+
- 必须完整保留 searchPosts、likePost、unlikePost、listComments、createComment;评论表单只向 authenticated 用户显示。Markdown 使用 react-markdown 等结构化渲染,禁用 raw HTML,严禁 dangerouslySetInnerHTML。
|
|
40
|
+
- 所有按钮从 @zlooks.cn/ui/button 导入 ZlooksButton;需要主题化 message/notification/modal 时从 @zlooks.cn/ui/app 使用 useZlooksApp。不得从 Ant Design 的 Button directive barrel 或 root barrel 重新导入这两个能力。
|
|
41
|
+
- 不创建 public HTTP、Next 或 MCP listener,不直连 Blog 数据库、Redis、Registry、Micro 或底层 @zlooks.cn/blog-client。
|
|
42
|
+
|
|
43
|
+
${sharedUiRequirements}
|
|
44
|
+
|
|
45
|
+
用户要求实际创建时按以下状态机执行;必需阶段必须有真实证据,失败就留在当前阶段修复:
|
|
46
|
+
|
|
47
|
+
PRECHECK
|
|
48
|
+
1. 确认目标路径不存在;若存在任何用户文件立即停止,绝不合并或覆盖。
|
|
49
|
+
2. 执行 zlooks theme --help,确认存在 create 和 verify。若本机 zlooks 太旧,使用当前 npm Registry 中最新正式版 @zlooks.cn/cli 的对应命令;无法取得支持该命令的正式版本时报告依赖阻塞,不得手写一个猜测项目冒充脚手架。
|
|
50
|
+
|
|
51
|
+
SCAFFOLDED
|
|
52
|
+
3. 使用结构化参数或以下已安全引用的命令执行:zlooks theme create ${input.themeId} ${shellArg(targetDirectory(input))} --display-name ${shellArg(input.displayName)} --description ${shellArg(input.description)}
|
|
53
|
+
4. 进入目录后确认 package.json.name=${packageName(input.themeId)}、private=false、唯一 bin、zlooks.kind=theme、React server condition、七条路由、唯一 boot、SEO、完整交互和安全 Markdown 已由官方脚手架生成。AGENTS.md 不是主题成立条件,不要求创建。
|
|
54
|
+
|
|
55
|
+
DESIGNED
|
|
56
|
+
5. 只修改生成项目中的 JSX、Ant Design 组合与 theme.css,使视觉明确体现 ${JSON.stringify(input.description)}。保留脚手架的 SDK 数据边界、全部路由、空状态、invalid/missing、SEO、Shell/Site Provider、响应式和键盘可访问性。不得删除或用静态占位替代真实功能。
|
|
57
|
+
6. 首页必须使用 posts、latestPosts、categories、tags、sidebarPages、archive、recentComments;文章页必须使用 post、engagement、connections、comments、viewerStatus、sidebar。其余页面使用各自 ViewModel,不能伪造数据或计数。
|
|
58
|
+
|
|
59
|
+
LOCAL_VERIFIED
|
|
60
|
+
7. 执行:zlooks theme verify . --json。该平台命令必须依次完成结构检查、pnpm install、test、typecheck、build、verify:rsc。只有 JSON 的 ok=true 且 stage=LOCAL_VERIFIED 才能继续;主题自己编写的测试不能替代该平台检查。
|
|
61
|
+
8. 确认平台结果中的 artifact.verified 与 package.packed 均通过:平台直接调用 Hile 校验唯一 immutable build,并实际 npm pack 检查完整 bin、boot 和构建文件。若目录属于 Git 仓库,另运行 git diff --check;无 Git 不应阻塞主题制作。
|
|
62
|
+
|
|
63
|
+
RUNTIME_VERIFIED
|
|
64
|
+
9. ${runtimeStartupRequirements}保留进程并等待 ready;启动失败、提前退出或只有 build 成功都不算可运行。
|
|
65
|
+
10. 调用 ${prompt(BLOG_MCP_TOOLS.listThemes)},随后调用 ${prompt(BLOG_MCP_TOOLS.readThemeStatus)} 检查 ${input.themeId}。${runtimeEvidenceRequirements}不要调用 select-theme;切换属于独立的 ${prompt(BLOG_MCP_PROMPTS.switchBlogTheme)} 工作流和用户确认。
|
|
66
|
+
|
|
67
|
+
FUNCTION_VERIFIED(可选)
|
|
68
|
+
11. 仅在用户要求真实内容验收时执行。在隔离测试环境或用户明确选中该主题后,通过真实 Gateway${input.gatewayOrigin ? ` ${input.gatewayOrigin}` : ''} 验证七条路由。动态路由从真实 list-post/list-page/list-category/list-tag 结果选择 slug;没有相应内容时记录该项未验证,不为制作主题补造内容。
|
|
69
|
+
12. 按用户要求的范围检查 raw SSR 样式、hydration、窄屏、键盘焦点、导航、SEO 和浏览器交互。登录后的点赞、取消点赞、评论提交和退出不属于默认制作验收;只有另获明确授权才执行写操作。仅对实际完成的验收记录通过,其余标明未执行或不适用。
|
|
70
|
+
13. 每次代码修复后从 zlooks theme verify . --json 重跑完整本地门禁,再重启并复验运行时。可选内容验收结果单独报告,不得把它变成制作完成的前置条件。
|
|
71
|
+
|
|
72
|
+
实际创建后的报告逐项列出五个必需阶段的状态、实际命令/调用与关键结果;必需阶段未通过才报告“制作未完成”和原因。另列 FUNCTION_VERIFIED 的实际覆盖或“未执行(可选)”,不要将制作完成误写成所有真实内容行为已经验证。`;
|
|
41
73
|
}
|
|
42
74
|
export function createBlogThemeStructureMessage(input) {
|
|
43
75
|
return `请直接创建主题的文件结构与构建配置。\n${context(input)}
|
|
44
76
|
|
|
77
|
+
必须先执行官方确定性脚手架:
|
|
78
|
+
zlooks theme create ${input.themeId} ${shellArg(targetDirectory(input))} --display-name ${shellArg(input.displayName)} --description ${shellArg(input.description)}
|
|
79
|
+
|
|
45
80
|
目标目录至少包含:
|
|
46
|
-
${
|
|
47
|
-
AGENTS.md
|
|
81
|
+
${targetDirectory(input)}/
|
|
48
82
|
package.json
|
|
49
83
|
hile-rsc.json
|
|
50
84
|
tsconfig.json
|
|
@@ -56,19 +90,17 @@ ${packageRoot(input.themeId)}/
|
|
|
56
90
|
src/plugin/blog-frame.tsx
|
|
57
91
|
src/plugin/theme.css
|
|
58
92
|
src/plugin/styles.d.ts
|
|
59
|
-
test/theme-
|
|
60
|
-
test/plugin/
|
|
93
|
+
test/theme-contract.test.ts
|
|
61
94
|
|
|
62
95
|
逐项执行:
|
|
63
|
-
1.
|
|
64
|
-
2.
|
|
65
|
-
3.
|
|
66
|
-
4. tsconfig.json
|
|
96
|
+
1. package.json 必须使用名称 ${packageName(input.themeId)}。@zlooks.cn/* 是官方保留 scope,第三方主题禁止使用;设置 private=false、type=module、Node >=24、files=["dist", ".hile-rsc"],唯一 bin 为 ${packageName(input.themeId)} -> dist/command/index.js。声明 zlooks.kind=theme、description、dependsOn=[]、nodeConditions=["react-server"];不得声明 zlooks.commands.db。
|
|
97
|
+
2. 保留脚手架的公开 SDK 和兼容 React/Hile tuple。模板中dependencies/devDependencies/peerDependencies 中 antd 使用与 UI SDK 匹配的精确版本,其余依赖使用 ^版本号(例如 ^1.0.0),不得出现 workspace:*、file: 或 link:,不得绕过主题 SDK 依赖底层 @zlooks.cn/blog-client。pnpm-lock.yaml 只能由 pnpm install 生成并须保留;版本范围不能替代实际安装版本的 typecheck、构建和 RSC 兼容性验证。
|
|
98
|
+
3. AGENTS.md 对第三方主题不是必需文件;用户需要项目说明时可以创建 README,但 validator 不得以缺少 AGENTS.md 判定失败。
|
|
99
|
+
4. tsconfig.json 以 noEmit 检查全部 src 源码、test/**/*.ts、test/**/*.tsx 和 vitest.config.ts,排除 node_modules、dist、.hile-rsc;tsconfig.runtime.json 只编译非 plugin 的 runtime TypeScript 到 dist,并排除 test。测试必须参与类型检查但不能进入生产编译或 tarball。它们必须自包含,不 extends 主站路径。不要新增自定义构建脚本。
|
|
67
100
|
5. hile-rsc.json 的 pluginId 固定为 blog,entry 为 src/plugin/page.tsx,styles 必须包含 npm 导出 @zlooks.cn/ui/antd.css,使 Hile 将共享 Ant Design 静态样式作为一份构建级 immutable artifact 提前交给 Host;并完整声明 /、/posts/[slug]、/archives、/pages/[slug]、/categories/[slug]、/tags/[slug]、/friends 七条路由及对应导出。metadata 写入本主题展示信息,但不要伪造额外业务能力。
|
|
68
|
-
6.
|
|
69
|
-
7. test/theme-boundary.test.ts 必须约束:包可发布且不是 private;唯一 bin、files 和 zlooks 部署元数据符合上述协议且没有数据库命令;services 目录只有 blog-theme.boot.ts;没有主题本地 runtime 实现;页面通过 @zlooks.cn/blog-theme/rsc 获取包含 seo 的 ViewModel,并通过 @zlooks.cn/ui/seo 输出标准 head 标签;Client 交互只通过 @zlooks.cn/blog-theme/client;Server Component 和 boot 不导入 /client,Client Boundary 不导入 /runtime、/rsc、@hile/* 或底层 @zlooks.cn/blog-client。
|
|
101
|
+
6. 保留 test/theme-contract.test.ts 的七条路由、唯一 boot、SDK 服务端/客户端边界和安全 Markdown 检查;保留 test/pages.test.tsx 的真实 SDK ViewModel 页面测试与 test/interactions.test.tsx 的交互测试,视觉调整时同步更新展示断言但不得删除功能断言。这些是本地回归,不替代 zlooks theme verify 的平台检查或 Gateway 功能验收。
|
|
70
102
|
|
|
71
|
-
|
|
103
|
+
脚手架本身已经完整可构建和运行,禁止把页面或交互降级成占位。完成后执行 zlooks theme verify ${shellArg(targetDirectory(input))} --json,必须取得 LOCAL_VERIFIED。`;
|
|
72
104
|
}
|
|
73
105
|
export function createBlogThemeRuntimeMessage(input) {
|
|
74
106
|
const displayName = JSON.stringify(input.displayName);
|
|
@@ -77,8 +109,8 @@ export function createBlogThemeRuntimeMessage(input) {
|
|
|
77
109
|
|
|
78
110
|
只创建或修改以下服务端文件:
|
|
79
111
|
- src/identity.ts:调用 defineBlogTheme({ id: '${input.themeId}', displayName: ${displayName}, description: ${description} });只有用户明确指定该主题为站点灾备默认时才设置 fallback=true。可在 query 中覆盖有真实展示需要的有界分页值。
|
|
80
|
-
- src/command/index.ts:使用 @zlooks.cn/service-command 的 runServiceCommand,packageRoot 指向包根,requiresReactServer=true;它只注册标准 start 命令,不增加数据库命令,构建后必须与 package.json 的唯一 bin 对应。
|
|
81
|
-
- src/services/blog-theme.boot.ts:这是 services 目录唯一文件和唯一环境边界。development 与 production start 都通过 Hile --env-file
|
|
112
|
+
- src/command/index.ts:使用 @zlooks.cn/service-command 的 runServiceCommand,packageRoot 通过 fileURLToPath 指向包根,requiresReactServer=true;它只注册标准 start 命令,不增加数据库命令,构建后必须与 package.json 的唯一 bin 对应。
|
|
113
|
+
- src/services/blog-theme.boot.ts:这是 services 目录唯一文件和唯一环境边界。development 与 production start 都通过 Hile --env-file 加载由 zlooks setup 维护的机器级 ~/.zlooks.cn/.env,不创建项目内 .env;使用 createBlogThemeBootService,传入 definition、通过 fileURLToPath 指向 ../../.hile-rsc 的 artifactBuildRoot、包含 REGISTRY_HOST/REGISTRY_PORT 的 registryBootstrap、由 NODE_ENV === 'development' 计算的 development,以及两种模式共用的可选 advertiseHost。为默认导出增加 @hile/core ServiceRegisterProps<unknown> 显式类型,避免独立安装的声明生成引用 pnpm 内部路径。
|
|
82
114
|
|
|
83
115
|
必须遵守:
|
|
84
116
|
- 从 @zlooks.cn/blog-theme 导入 defineBlogTheme;从 @zlooks.cn/blog-theme/runtime 导入 createBlogThemeBootService。
|
|
@@ -88,28 +120,30 @@ export function createBlogThemeRuntimeMessage(input) {
|
|
|
88
120
|
- 不在模块顶层调用 loadService;boot 默认导出 Hile service definition。
|
|
89
121
|
- 服务端 boot 不得导入 @zlooks.cn/blog-theme/client;浏览器交互也不得导入 @zlooks.cn/blog-theme/runtime。
|
|
90
122
|
|
|
91
|
-
|
|
123
|
+
完成后运行 pnpm run typecheck,并运行 pnpm exec vitest run test/theme-contract.test.ts,确认只有一个 boot 文件。需要真实运行时先通过 zlooks theme verify . --json,再按以下规则启动:${runtimeStartupRequirements}`;
|
|
92
124
|
}
|
|
93
125
|
export function createBlogThemeShellMessage(input) {
|
|
94
126
|
return `请直接实现 ${input.displayName} 的公共页面壳层,视觉必须体现“${input.description}”,不得复制 default 主题布局。\n${context(input)}
|
|
95
127
|
|
|
128
|
+
${sharedUiRequirements}
|
|
129
|
+
|
|
96
130
|
文件职责:
|
|
97
131
|
- src/plugin/blog-frame.tsx:作为远程 Client Boundary,以 'use client' 开头;在该独立 RSC build 内依次组合 ZlooksUiProvider、ZlooksShellProvider(initialContext)、ZlooksSiteConfigProvider(initialConfig),再渲染主题自己的 Header、main 和 Footer。Gateway React Context 不会跨 build,不能省略这些 Provider。
|
|
98
132
|
- src/plugin/theme.css:只放本主题布局、排版和响应式规则;优先使用 Ant Design 组件、props、布局 API 与语义 token,CSS 不得硬编码只适用于亮色模式的颜色。
|
|
99
133
|
- src/plugin/styles.d.ts:声明 *.css。
|
|
100
134
|
- 可拆分 header、footer、navigation 等纯主题文件,但不得把数据请求或生命周期放进去。
|
|
101
135
|
|
|
102
|
-
壳层输入只能来自 BlogThemeFrameModel:navigationPages、shell、site。site 是 Host 注入并由公共 SDK 验证的 site.presentation v2:identity 可提供 name、homeHref、logoUrl、faviconUrl、description,legal.registrations 是由 id、kind、number、可选 verificationUrl/iconUrl 组成的结构化备案数组,legal.copyright
|
|
136
|
+
壳层输入只能来自 BlogThemeFrameModel:navigationPages、shell、site。site 是 Host 注入并由公共 SDK 验证的 site.presentation v2:identity 可提供 name、homeHref、logoUrl、faviconUrl、description,legal.registrations 是由 id、kind、number、可选 verificationUrl/iconUrl 组成的结构化备案数组,legal.copyright 是可选版权文案。主题决定展示布局,但必须保留实际存在的站点标识、备案和版权,但不得查询 Global Config、编造备案信息、恢复旧的 registration/registrationHref 字段、代理 favicon 资源或持久化副本;site.profile 只属于 Gateway 首页,不是 BlogThemeFrameModel 输入。shell.origin 是 Host 校验并注入的公共 Origin,只用于公共 URL、canonical 和展示语义,不得替代服务发现或发起跨服务请求。账户展示使用共享 Shell 能力,不解析 Session;Blog 自有导航位于 /blog 下,共享导航保留 Host 给出的合法路径。每个独立编译的主题只能拥有一层 ZlooksUiProvider;从 @zlooks.cn/ui/app 使用 useZlooksApp 获取 message/notification/modal,不调用 Ant Design 静态反馈 API。
|
|
103
137
|
|
|
104
138
|
实现可访问的 landmark、键盘导航、焦点态、窄屏布局和 light/dark/default 三态可读性。完成后为 Provider 组合、导航与主题模式写组件测试并运行。`;
|
|
105
139
|
}
|
|
106
140
|
export function createBlogThemeHomePageMessage(input) {
|
|
107
141
|
return pageMessage(input, '/', 'data.home(props)', 'BlogHomePage', `
|
|
108
|
-
使用 model.frame、model.posts.items、model.posts.total、model.page、model.pageSize、model.categories、model.tags、model.sidebarPages
|
|
142
|
+
使用 model.frame、model.posts.items、model.posts.total、model.page、model.pageSize、model.latestPosts、model.categories、model.tags、model.sidebarPages、model.archive.months 和 model.recentComments。首页列表、最新文章、分类、标签、归档月份和最新评论必须来自这些真实值,不得制造文章、计数或分类。分页必须保留 /blog 路径和 page 查询参数。首页应有一个清晰的页面级 H1;文章卡标题从 H2 开始。为空结果提供真实空状态。`);
|
|
109
143
|
}
|
|
110
144
|
export function createBlogThemePostPageMessage(input) {
|
|
111
145
|
return pageMessage(input, '/posts/[slug]', 'data.post(props)', 'BlogPostPage', `
|
|
112
|
-
处理 model.kind=not-found 的 invalid/missing 状态;成功时使用 model.post、model.connections、model.comments、model.nextCommentCursor、model.viewerStatus。文章标题是页面唯一 H1,Markdown 正文只渲染 H2 及以下层级,不把标题再渲染一次。原始 HTML 保持禁用,外链使用 noopener noreferrer。若 Markdown 渲染库依赖客户端 React hooks,必须放入 'use client' 边界。
|
|
146
|
+
处理 model.kind=not-found 的 invalid/missing 状态;成功时使用 model.post、model.engagement、model.connections、model.comments、model.nextCommentCursor、model.viewerStatus 和 model.sidebar。文章标题是页面唯一 H1,Markdown 正文只渲染 H2 及以下层级,不把标题再渲染一次。原始 HTML 保持禁用,外链使用 noopener noreferrer。若 Markdown 渲染库依赖客户端 React hooks,必须放入 'use client' 边界。
|
|
113
147
|
|
|
114
148
|
上一篇/下一篇/相关文章和评论必须来自 ViewModel。评论框只对 authenticated 显示;anonymous 显示登录提示,unavailable 显示不可用提示。服务端授权仍由 Blog Server 负责,UI 状态不能替代权限检查。`);
|
|
115
149
|
}
|
|
@@ -136,7 +170,7 @@ export function createBlogThemeFriendsPageMessage(input) {
|
|
|
136
170
|
function pageMessage(input, route, loader, exportedPage, details) {
|
|
137
171
|
return `请直接实现 ${input.displayName} 的 ${route} 页面。\n${context(input)}
|
|
138
172
|
|
|
139
|
-
在 src/plugin/page.tsx 中复用模块级 createServiceBackedBlogThemeDataLoader({ definition }),通过 ${loader} 获取统一、已验证、与传输无关的 ViewModel,并导出 ${exportedPage}(props: BlogThemeRouteProps)。每个成功模型都必须通过 @zlooks.cn/ui/seo 渲染 <ZlooksSeo seo={model.seo} />;受控 missing/invalid 页面使用 data.notFound(props, resource) 取得公共 noindex SEO,不得自己猜 canonical
|
|
173
|
+
在 src/plugin/page.tsx 中复用模块级 createServiceBackedBlogThemeDataLoader({ definition }),通过 ${loader} 获取统一、已验证、与传输无关的 ViewModel,并导出 ${exportedPage}(props: BlogThemeRouteProps)。每个成功模型都必须通过 @zlooks.cn/ui/seo 渲染 <ZlooksSeo seo={model.seo} />;受控 missing/invalid 页面使用 data.notFound(props, resource) 取得公共 noindex SEO,不得自己猜 canonical。页面及其组件只允许从 @hile/rsc/client/navigation 使用 RscLink/useRscNavigation,不得导入其他 @hile/*、@zlooks.cn/blog-shared、loadService 或直接 Blog 客户端。${details}
|
|
140
174
|
|
|
141
175
|
视觉结构和组件拆分由主题自由决定,但优先使用 Ant Design;Server Component 不访问 Typography.Title、Select.Option 等 compound Client 属性,需要交互时拆 focused Client Boundary。为正常、空数据、not-found/非法参数和关键响应式结构补测试,然后运行该包测试与 typecheck。`;
|
|
142
176
|
}
|
|
@@ -144,8 +178,8 @@ export function createBlogThemeInteractionsMessage(input) {
|
|
|
144
178
|
return `请直接实现 ${input.displayName} 所需的浏览器交互,并保持初始数据仍由 RSC ViewModel 提供。\n${context(input)}
|
|
145
179
|
|
|
146
180
|
规则:
|
|
147
|
-
1.
|
|
148
|
-
2. 每个交互文件以 'use client' 开头并保持 focused boundary。Server Component、page.tsx 和 boot 不得导入 /client;Client Boundary 不得导入 @zlooks.cn/blog-theme/rsc、@zlooks.cn/blog-theme/runtime
|
|
181
|
+
1. 搜索、点赞/取消点赞、评论翻页/排序和评论提交等用户触发交互从 @zlooks.cn/blog-theme/client 导入 createBlogThemeClient,并完整调用 searchPosts、likePost、unlikePost、listComments、createComment;不得绕过主题 SDK 直接依赖底层 @zlooks.cn/blog-client,也不得直接导入 @zlooks.cn/browser-api 或 @zlooks.cn/blog-shared。
|
|
182
|
+
2. 每个交互文件以 'use client' 开头并保持 focused boundary。Server Component、page.tsx 和 boot 不得导入 /client;Client Boundary 不得导入 @zlooks.cn/blog-theme/rsc、@zlooks.cn/blog-theme/runtime 或除 @hile/rsc/client/navigation 之外的 @hile/*。使用 @zlooks.cn/ui/request 的 useRequest 处理统一 Browser envelope、AbortSignal 和主题化错误;额外反馈从 @zlooks.cn/ui/app 导入 useZlooksApp,不要从 antd root 导入 App。按钮固定从 @zlooks.cn/ui/button 导入 ZlooksButton,避开 Hile 不支持的 Button directive re-export。
|
|
149
183
|
3. 初始文章、页面、分类、标签、归档、友情链接与首屏评论禁止 hydration 后重新请求。
|
|
150
184
|
4. 评论提交必须同步拒绝重复提交、卸载时 abort、成功后只在编辑器仍等于提交快照时清空;未登录和用户状态不可用时不渲染可提交表单。
|
|
151
185
|
5. 搜索只使用真实 API 结果;输入、limit、游标和展示文本保持有界。任何 HTML/Markdown 预览禁用 raw HTML。
|
|
@@ -156,16 +190,17 @@ export function createBlogThemeInteractionsMessage(input) {
|
|
|
156
190
|
export function createBlogThemeVerificationMessage(input) {
|
|
157
191
|
return `请对 ${packageName(input.themeId)} 做最终闭环验证并直接修复发现的问题。\n${context(input)}
|
|
158
192
|
|
|
193
|
+
${authoringCompletionRequirements}
|
|
194
|
+
|
|
195
|
+
${sharedUiRequirements}
|
|
196
|
+
|
|
159
197
|
按顺序执行:
|
|
160
|
-
1.
|
|
161
|
-
2.
|
|
162
|
-
3.
|
|
163
|
-
4.
|
|
164
|
-
5.
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
8. 通过用户提供的 Gateway Origin 实际请求 /blog、/blog/posts/<真实-slug>、/blog/archives、一个内容页、分类、标签和 /blog/friends;检查 HTTP、原始 SSR 样式、hydration warning、浏览器控制台、交互、暗色/亮色和窄屏。逐页检查 head 中只有一个有效 title、description、robots、absolute canonical、Open Graph 和 Twitter 集合;文章页还要核对真实封面及 published/modified 时间,缺失页面必须 noindex。没有 Origin 或真实内容 slug 时报告缺失输入,不得伪造验证。
|
|
168
|
-
|
|
169
|
-
最终报告必须列出创建文件、主题自由设计点、复用的公共能力、所有真实命令结果、运行 URL、发现/激活状态和任何未完成项。不得用“应该可用”代替验证。`;
|
|
198
|
+
1. PRECHECK:确认当前根是独立主题项目且 package.json.name=${packageName(input.themeId)},不使用官方保留的 @zlooks.cn/* scope,不覆盖无关文件;依赖不得出现 workspace:*、file:、link: 或主站绝对路径。
|
|
199
|
+
2. LOCAL_VERIFIED:在项目根运行 zlooks theme verify . --json。它必须依次执行结构检查、pnpm install、test、typecheck、build、verify:rsc;只有 ok=true 且 stage=LOCAL_VERIFIED 才能继续。平台还必须直接校验真实 Hile 产物并执行 npm pack(artifact.verified 与 package.packed);仅当目录属于 Git 仓库时另运行 git diff --check。任何修复后都从平台验证重新开始。
|
|
200
|
+
3. RUNTIME_VERIFIED:${runtimeStartupRequirements}等待 ready,然后调用 ${prompt(BLOG_MCP_TOOLS.listThemes)} 与 ${prompt(BLOG_MCP_TOOLS.readThemeStatus)},检查 ${input.themeId}。${runtimeEvidenceRequirements}没有 Registry 或服务提前退出时只能报告未完成,不能把 build 当作运行证明。
|
|
201
|
+
4. FUNCTION_VERIFIED(可选):仅在用户要求真实内容验收时执行,并单独记录覆盖范围。在隔离环境或用户通过独立 ${prompt(BLOG_MCP_PROMPTS.switchBlogTheme)} 工作流明确选中主题后,用真实 Gateway 检查用户要求的路由、SSR 样式、hydration、窄屏、导航或搜索。默认不验证登录后的行为;点赞、评论、退出等写交互需要另行明确授权。缺少身份、内容或浏览器条件时记录未验证,不阻塞主题制作,也不伪造 FUNCTION_VERIFIED。
|
|
202
|
+
5. 发布不属于验证。没有用户明确授权、npm 凭据和权限时不得 npm publish;如获授权,测试版使用 -test.N 并执行 npm publish --tag test。Zlooks CLI 必须先解析并展示准确版本,再按 test 或 latest 通道安装经用户确认的版本;稳定版使用 latest。
|
|
203
|
+
|
|
204
|
+
最终报告逐项列出 PRECHECK、SCAFFOLDED、DESIGNED、LOCAL_VERIFIED、RUNTIME_VERIFIED 的证据;五个必需阶段通过即完成主题制作。FUNCTION_VERIFIED 单独列出实际覆盖或“未执行(可选)”;不得用“应该可用”代替已执行阶段的证据。`;
|
|
170
205
|
}
|
|
171
206
|
//# sourceMappingURL=blog-theme-authoring-prompt.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blog-theme-authoring-prompt.js","sourceRoot":"","sources":["../../src/mcp/blog-theme-authoring-prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"blog-theme-authoring-prompt.js","sourceRoot":"","sources":["../../src/mcp/blog-theme-authoring-prompt.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zlooks.cn/blog-server",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.4",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"engines": {
|
|
@@ -69,5 +69,5 @@
|
|
|
69
69
|
"typescript": "7.0.2",
|
|
70
70
|
"vitest": "4.1.11"
|
|
71
71
|
},
|
|
72
|
-
"gitHead": "
|
|
72
|
+
"gitHead": "d0c3ea8bfcf3040e8f3556f328fb96baac3b4935"
|
|
73
73
|
}
|