@zlooks.cn/blog-server 1.0.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.
Files changed (265) hide show
  1. package/dist/blog/blog-application.d.ts +153 -0
  2. package/dist/blog/blog-application.d.ts.map +1 -0
  3. package/dist/blog/blog-application.js +115 -0
  4. package/dist/blog/blog-application.js.map +1 -0
  5. package/dist/blog/comment-client-metadata.d.ts +19 -0
  6. package/dist/blog/comment-client-metadata.d.ts.map +1 -0
  7. package/dist/blog/comment-client-metadata.js +78 -0
  8. package/dist/blog/comment-client-metadata.js.map +1 -0
  9. package/dist/blog/errors.d.ts +12 -0
  10. package/dist/blog/errors.d.ts.map +1 -0
  11. package/dist/blog/errors.js +21 -0
  12. package/dist/blog/errors.js.map +1 -0
  13. package/dist/blog/micro-user-directory.d.ts +11 -0
  14. package/dist/blog/micro-user-directory.d.ts.map +1 -0
  15. package/dist/blog/micro-user-directory.js +18 -0
  16. package/dist/blog/micro-user-directory.js.map +1 -0
  17. package/dist/blog/post-content-audit.d.ts +34 -0
  18. package/dist/blog/post-content-audit.d.ts.map +1 -0
  19. package/dist/blog/post-content-audit.js +190 -0
  20. package/dist/blog/post-content-audit.js.map +1 -0
  21. package/dist/blog/post-view-cache.d.ts +15 -0
  22. package/dist/blog/post-view-cache.d.ts.map +1 -0
  23. package/dist/blog/post-view-cache.js +23 -0
  24. package/dist/blog/post-view-cache.js.map +1 -0
  25. package/dist/blog/public-blog-micro.d.ts +291 -0
  26. package/dist/blog/public-blog-micro.d.ts.map +1 -0
  27. package/dist/blog/public-blog-micro.js +71 -0
  28. package/dist/blog/public-blog-micro.js.map +1 -0
  29. package/dist/blog/public-blog-service.d.ts +104 -0
  30. package/dist/blog/public-blog-service.d.ts.map +1 -0
  31. package/dist/blog/public-blog-service.js +341 -0
  32. package/dist/blog/public-blog-service.js.map +1 -0
  33. package/dist/browser-api/dispatch-stream.d.ts +5 -0
  34. package/dist/browser-api/dispatch-stream.d.ts.map +1 -0
  35. package/dist/browser-api/dispatch-stream.js +4 -0
  36. package/dist/browser-api/dispatch-stream.js.map +1 -0
  37. package/dist/browser-api/dispatcher.d.ts +15 -0
  38. package/dist/browser-api/dispatcher.d.ts.map +1 -0
  39. package/dist/browser-api/dispatcher.js +145 -0
  40. package/dist/browser-api/dispatcher.js.map +1 -0
  41. package/dist/browser-api/provider-publisher.d.ts +24 -0
  42. package/dist/browser-api/provider-publisher.d.ts.map +1 -0
  43. package/dist/browser-api/provider-publisher.js +107 -0
  44. package/dist/browser-api/provider-publisher.js.map +1 -0
  45. package/dist/command/index.d.ts +3 -0
  46. package/dist/command/index.d.ts.map +1 -0
  47. package/dist/command/index.js +24 -0
  48. package/dist/command/index.js.map +1 -0
  49. package/dist/config/schema.d.ts +25 -0
  50. package/dist/config/schema.d.ts.map +1 -0
  51. package/dist/config/schema.js +19 -0
  52. package/dist/config/schema.js.map +1 -0
  53. package/dist/contracts/identity.d.ts +2 -0
  54. package/dist/contracts/identity.d.ts.map +1 -0
  55. package/dist/contracts/identity.js +2 -0
  56. package/dist/contracts/identity.js.map +1 -0
  57. package/dist/contracts/mcp.d.ts +69 -0
  58. package/dist/contracts/mcp.d.ts.map +1 -0
  59. package/dist/contracts/mcp.js +41 -0
  60. package/dist/contracts/mcp.js.map +1 -0
  61. package/dist/contracts/public-api.d.ts +3 -0
  62. package/dist/contracts/public-api.d.ts.map +1 -0
  63. package/dist/contracts/public-api.js +2 -0
  64. package/dist/contracts/public-api.js.map +1 -0
  65. package/dist/mcp/blog-prompts.d.ts +135 -0
  66. package/dist/mcp/blog-prompts.d.ts.map +1 -0
  67. package/dist/mcp/blog-prompts.js +107 -0
  68. package/dist/mcp/blog-prompts.js.map +1 -0
  69. package/dist/mcp/blog-provider.d.ts +4 -0
  70. package/dist/mcp/blog-provider.d.ts.map +1 -0
  71. package/dist/mcp/blog-provider.js +27 -0
  72. package/dist/mcp/blog-provider.js.map +1 -0
  73. package/dist/mcp/blog-theme-authoring-prompt.d.ts +19 -0
  74. package/dist/mcp/blog-theme-authoring-prompt.d.ts.map +1 -0
  75. package/dist/mcp/blog-theme-authoring-prompt.js +171 -0
  76. package/dist/mcp/blog-theme-authoring-prompt.js.map +1 -0
  77. package/dist/mcp/category-tools.d.ts +45 -0
  78. package/dist/mcp/category-tools.d.ts.map +1 -0
  79. package/dist/mcp/category-tools.js +14 -0
  80. package/dist/mcp/category-tools.js.map +1 -0
  81. package/dist/mcp/comment-tools.d.ts +44 -0
  82. package/dist/mcp/comment-tools.d.ts.map +1 -0
  83. package/dist/mcp/comment-tools.js +15 -0
  84. package/dist/mcp/comment-tools.js.map +1 -0
  85. package/dist/mcp/friend-link-tools.d.ts +63 -0
  86. package/dist/mcp/friend-link-tools.d.ts.map +1 -0
  87. package/dist/mcp/friend-link-tools.js +16 -0
  88. package/dist/mcp/friend-link-tools.js.map +1 -0
  89. package/dist/mcp/page-tools.d.ts +67 -0
  90. package/dist/mcp/page-tools.d.ts.map +1 -0
  91. package/dist/mcp/page-tools.js +36 -0
  92. package/dist/mcp/page-tools.js.map +1 -0
  93. package/dist/mcp/post-tools.d.ts +114 -0
  94. package/dist/mcp/post-tools.d.ts.map +1 -0
  95. package/dist/mcp/post-tools.js +122 -0
  96. package/dist/mcp/post-tools.js.map +1 -0
  97. package/dist/mcp/tag-tools.d.ts +37 -0
  98. package/dist/mcp/tag-tools.d.ts.map +1 -0
  99. package/dist/mcp/tag-tools.js +14 -0
  100. package/dist/mcp/tag-tools.js.map +1 -0
  101. package/dist/mcp/theme-tools.d.ts +16 -0
  102. package/dist/mcp/theme-tools.d.ts.map +1 -0
  103. package/dist/mcp/theme-tools.js +71 -0
  104. package/dist/mcp/theme-tools.js.map +1 -0
  105. package/dist/mcp/tool-descriptions.d.ts +5 -0
  106. package/dist/mcp/tool-descriptions.d.ts.map +1 -0
  107. package/dist/mcp/tool-descriptions.js +51 -0
  108. package/dist/mcp/tool-descriptions.js.map +1 -0
  109. package/dist/mcp/tool-support.d.ts +242 -0
  110. package/dist/mcp/tool-support.d.ts.map +1 -0
  111. package/dist/mcp/tool-support.js +127 -0
  112. package/dist/mcp/tool-support.js.map +1 -0
  113. package/dist/messages/browser/dispatch.msg.d.ts +3 -0
  114. package/dist/messages/browser/dispatch.msg.d.ts.map +1 -0
  115. package/dist/messages/browser/dispatch.msg.js +9 -0
  116. package/dist/messages/browser/dispatch.msg.js.map +1 -0
  117. package/dist/messages/public/categories/list.msg.d.ts +3 -0
  118. package/dist/messages/public/categories/list.msg.d.ts.map +1 -0
  119. package/dist/messages/public/categories/list.msg.js +8 -0
  120. package/dist/messages/public/categories/list.msg.js.map +1 -0
  121. package/dist/messages/public/comments/list.msg.d.ts +3 -0
  122. package/dist/messages/public/comments/list.msg.d.ts.map +1 -0
  123. package/dist/messages/public/comments/list.msg.js +8 -0
  124. package/dist/messages/public/comments/list.msg.js.map +1 -0
  125. package/dist/messages/public/comments/recent.msg.d.ts +3 -0
  126. package/dist/messages/public/comments/recent.msg.d.ts.map +1 -0
  127. package/dist/messages/public/comments/recent.msg.js +8 -0
  128. package/dist/messages/public/comments/recent.msg.js.map +1 -0
  129. package/dist/messages/public/friend-links/list.msg.d.ts +3 -0
  130. package/dist/messages/public/friend-links/list.msg.d.ts.map +1 -0
  131. package/dist/messages/public/friend-links/list.msg.js +8 -0
  132. package/dist/messages/public/friend-links/list.msg.js.map +1 -0
  133. package/dist/messages/public/pages/list.msg.d.ts +3 -0
  134. package/dist/messages/public/pages/list.msg.d.ts.map +1 -0
  135. package/dist/messages/public/pages/list.msg.js +8 -0
  136. package/dist/messages/public/pages/list.msg.js.map +1 -0
  137. package/dist/messages/public/pages/read.msg.d.ts +3 -0
  138. package/dist/messages/public/pages/read.msg.d.ts.map +1 -0
  139. package/dist/messages/public/pages/read.msg.js +8 -0
  140. package/dist/messages/public/pages/read.msg.js.map +1 -0
  141. package/dist/messages/public/posts/archive.msg.d.ts +3 -0
  142. package/dist/messages/public/posts/archive.msg.d.ts.map +1 -0
  143. package/dist/messages/public/posts/archive.msg.js +8 -0
  144. package/dist/messages/public/posts/archive.msg.js.map +1 -0
  145. package/dist/messages/public/posts/connections.msg.d.ts +3 -0
  146. package/dist/messages/public/posts/connections.msg.d.ts.map +1 -0
  147. package/dist/messages/public/posts/connections.msg.js +8 -0
  148. package/dist/messages/public/posts/connections.msg.js.map +1 -0
  149. package/dist/messages/public/posts/list.msg.d.ts +3 -0
  150. package/dist/messages/public/posts/list.msg.d.ts.map +1 -0
  151. package/dist/messages/public/posts/list.msg.js +8 -0
  152. package/dist/messages/public/posts/list.msg.js.map +1 -0
  153. package/dist/messages/public/posts/open.msg.d.ts +3 -0
  154. package/dist/messages/public/posts/open.msg.d.ts.map +1 -0
  155. package/dist/messages/public/posts/open.msg.js +8 -0
  156. package/dist/messages/public/posts/open.msg.js.map +1 -0
  157. package/dist/messages/public/posts/read.msg.d.ts +3 -0
  158. package/dist/messages/public/posts/read.msg.d.ts.map +1 -0
  159. package/dist/messages/public/posts/read.msg.js +8 -0
  160. package/dist/messages/public/posts/read.msg.js.map +1 -0
  161. package/dist/messages/public/tags/list.msg.d.ts +3 -0
  162. package/dist/messages/public/tags/list.msg.d.ts.map +1 -0
  163. package/dist/messages/public/tags/list.msg.js +8 -0
  164. package/dist/messages/public/tags/list.msg.js.map +1 -0
  165. package/dist/migrations/index.d.ts +3 -0
  166. package/dist/migrations/index.d.ts.map +1 -0
  167. package/dist/migrations/index.js +2 -0
  168. package/dist/migrations/index.js.map +1 -0
  169. package/dist/persistence/category-store.d.ts +23 -0
  170. package/dist/persistence/category-store.d.ts.map +1 -0
  171. package/dist/persistence/category-store.js +86 -0
  172. package/dist/persistence/category-store.js.map +1 -0
  173. package/dist/persistence/comment-store.d.ts +41 -0
  174. package/dist/persistence/comment-store.d.ts.map +1 -0
  175. package/dist/persistence/comment-store.js +146 -0
  176. package/dist/persistence/comment-store.js.map +1 -0
  177. package/dist/persistence/entities.d.ts +103 -0
  178. package/dist/persistence/entities.d.ts.map +1 -0
  179. package/dist/persistence/entities.js +188 -0
  180. package/dist/persistence/entities.js.map +1 -0
  181. package/dist/persistence/friend-link-store.d.ts +26 -0
  182. package/dist/persistence/friend-link-store.d.ts.map +1 -0
  183. package/dist/persistence/friend-link-store.js +80 -0
  184. package/dist/persistence/friend-link-store.js.map +1 -0
  185. package/dist/persistence/page-store.d.ts +35 -0
  186. package/dist/persistence/page-store.d.ts.map +1 -0
  187. package/dist/persistence/page-store.js +125 -0
  188. package/dist/persistence/page-store.js.map +1 -0
  189. package/dist/persistence/post-engagement-store.d.ts +23 -0
  190. package/dist/persistence/post-engagement-store.d.ts.map +1 -0
  191. package/dist/persistence/post-engagement-store.js +85 -0
  192. package/dist/persistence/post-engagement-store.js.map +1 -0
  193. package/dist/persistence/post-store.d.ts +87 -0
  194. package/dist/persistence/post-store.d.ts.map +1 -0
  195. package/dist/persistence/post-store.js +465 -0
  196. package/dist/persistence/post-store.js.map +1 -0
  197. package/dist/persistence/tag-store.d.ts +21 -0
  198. package/dist/persistence/tag-store.d.ts.map +1 -0
  199. package/dist/persistence/tag-store.js +82 -0
  200. package/dist/persistence/tag-store.js.map +1 -0
  201. package/dist/services/application.service.d.ts +4 -0
  202. package/dist/services/application.service.d.ts.map +1 -0
  203. package/dist/services/application.service.js +22 -0
  204. package/dist/services/application.service.js.map +1 -0
  205. package/dist/services/blog-runtime.service.d.ts +10 -0
  206. package/dist/services/blog-runtime.service.d.ts.map +1 -0
  207. package/dist/services/blog-runtime.service.js +32 -0
  208. package/dist/services/blog-runtime.service.js.map +1 -0
  209. package/dist/services/blog.boot.d.ts +6 -0
  210. package/dist/services/blog.boot.d.ts.map +1 -0
  211. package/dist/services/blog.boot.js +13 -0
  212. package/dist/services/blog.boot.js.map +1 -0
  213. package/dist/services/browser-api-provider.service.d.ts +4 -0
  214. package/dist/services/browser-api-provider.service.d.ts.map +1 -0
  215. package/dist/services/browser-api-provider.service.js +25 -0
  216. package/dist/services/browser-api-provider.service.js.map +1 -0
  217. package/dist/services/config.service.d.ts +3 -0
  218. package/dist/services/config.service.d.ts.map +1 -0
  219. package/dist/services/config.service.js +22 -0
  220. package/dist/services/config.service.js.map +1 -0
  221. package/dist/services/database.service.d.ts +3 -0
  222. package/dist/services/database.service.d.ts.map +1 -0
  223. package/dist/services/database.service.js +16 -0
  224. package/dist/services/database.service.js.map +1 -0
  225. package/dist/services/logger.service.d.ts +4 -0
  226. package/dist/services/logger.service.d.ts.map +1 -0
  227. package/dist/services/logger.service.js +8 -0
  228. package/dist/services/logger.service.js.map +1 -0
  229. package/dist/services/mcp-provider.service.d.ts +3 -0
  230. package/dist/services/mcp-provider.service.d.ts.map +1 -0
  231. package/dist/services/mcp-provider.service.js +17 -0
  232. package/dist/services/mcp-provider.service.js.map +1 -0
  233. package/dist/services/redis.service.d.ts +4 -0
  234. package/dist/services/redis.service.d.ts.map +1 -0
  235. package/dist/services/redis.service.js +18 -0
  236. package/dist/services/redis.service.js.map +1 -0
  237. package/dist/services/theme-control.service.d.ts +4 -0
  238. package/dist/services/theme-control.service.d.ts.map +1 -0
  239. package/dist/services/theme-control.service.js +53 -0
  240. package/dist/services/theme-control.service.js.map +1 -0
  241. package/dist/themes/theme-catalog.d.ts +40 -0
  242. package/dist/themes/theme-catalog.d.ts.map +1 -0
  243. package/dist/themes/theme-catalog.js +164 -0
  244. package/dist/themes/theme-catalog.js.map +1 -0
  245. package/dist/themes/theme-control.d.ts +16 -0
  246. package/dist/themes/theme-control.d.ts.map +1 -0
  247. package/dist/themes/theme-control.js +57 -0
  248. package/dist/themes/theme-control.js.map +1 -0
  249. package/dist/themes/theme-discovery-runtime.d.ts +41 -0
  250. package/dist/themes/theme-discovery-runtime.d.ts.map +1 -0
  251. package/dist/themes/theme-discovery-runtime.js +109 -0
  252. package/dist/themes/theme-discovery-runtime.js.map +1 -0
  253. package/dist/themes/theme-generation-store.d.ts +14 -0
  254. package/dist/themes/theme-generation-store.d.ts.map +1 -0
  255. package/dist/themes/theme-generation-store.js +49 -0
  256. package/dist/themes/theme-generation-store.js.map +1 -0
  257. package/dist/themes/theme-selection-publisher.d.ts +28 -0
  258. package/dist/themes/theme-selection-publisher.d.ts.map +1 -0
  259. package/dist/themes/theme-selection-publisher.js +92 -0
  260. package/dist/themes/theme-selection-publisher.js.map +1 -0
  261. package/dist/themes/theme-selection-store.d.ts +22 -0
  262. package/dist/themes/theme-selection-store.d.ts.map +1 -0
  263. package/dist/themes/theme-selection-store.js +84 -0
  264. package/dist/themes/theme-selection-store.js.map +1 -0
  265. package/package.json +74 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme-tools.d.ts","sourceRoot":"","sources":["../../src/mcp/theme-tools.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAgBnE,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,gBAAgB;;;;;;;;;;;;;EAyCzD"}
@@ -0,0 +1,71 @@
1
+ import { defineMcpTool } from '@hile/mcp';
2
+ import { blogThemeIdSchema, blogThemeSelectionRevisionSchema } from '@zlooks.cn/blog-shared';
3
+ import { z } from 'zod';
4
+ import { BLOG_MCP_READ_SCOPE, BLOG_MCP_TOOLS, BLOG_MCP_WRITE_SCOPE } from '../contracts/mcp.js';
5
+ import { blogToolDescription } from './tool-descriptions.js';
6
+ const themeId = blogThemeIdSchema;
7
+ const dateTime = z.iso.datetime({ offset: true });
8
+ const selection = z.strictObject({
9
+ themeId, revision: blogThemeSelectionRevisionSchema,
10
+ updatedAt: dateTime, updatedBy: z.string().min(1).max(256),
11
+ });
12
+ const theme = z.strictObject({
13
+ themeId, displayName: z.string().min(1).max(100), description: z.string().max(500).nullable(),
14
+ generation: z.number().int().nonnegative(), buildId: z.string(), instanceCount: z.number().int().nonnegative(),
15
+ status: z.enum(['available', 'conflicted', 'selected', 'activating', 'active', 'unavailable', 'fallback']),
16
+ });
17
+ const catalog = z.strictObject({ reconciledAt: dateTime, selection, themes: z.array(theme).max(100) });
18
+ export function createThemeTools(control) {
19
+ return {
20
+ [BLOG_MCP_TOOLS.listThemes]: defineMcpTool({
21
+ name: BLOG_MCP_TOOLS.listThemes, title: '列出可用博客主题', description: blogToolDescription(BLOG_MCP_TOOLS.listThemes), inputSchema: z.strictObject({}), outputSchema: catalog,
22
+ annotations: { readOnlyHint: true, idempotentHint: true, destructiveHint: false },
23
+ access: { scopes: [BLOG_MCP_READ_SCOPE] }, execution: { timeoutMs: 10_000, retry: 'idempotent-failover' },
24
+ }, async (_input, context) => {
25
+ context.signal.throwIfAborted();
26
+ const output = control.list();
27
+ context.signal.throwIfAborted();
28
+ return result(output);
29
+ }),
30
+ [BLOG_MCP_TOOLS.readThemeSelection]: defineMcpTool({
31
+ name: BLOG_MCP_TOOLS.readThemeSelection, title: '读取当前博客主题选择', description: blogToolDescription(BLOG_MCP_TOOLS.readThemeSelection), inputSchema: z.strictObject({}), outputSchema: selection,
32
+ annotations: { readOnlyHint: true, idempotentHint: true, destructiveHint: false },
33
+ access: { scopes: [BLOG_MCP_READ_SCOPE] }, execution: { timeoutMs: 10_000, retry: 'idempotent-failover' },
34
+ }, async (_input, context) => {
35
+ context.signal.throwIfAborted();
36
+ const output = control.readSelection();
37
+ context.signal.throwIfAborted();
38
+ return result(output);
39
+ }),
40
+ [BLOG_MCP_TOOLS.readThemeStatus]: defineMcpTool({
41
+ name: BLOG_MCP_TOOLS.readThemeStatus, title: '读取博客主题状态', description: blogToolDescription(BLOG_MCP_TOOLS.readThemeStatus), inputSchema: z.strictObject({ themeId: themeId.optional() }), outputSchema: theme,
42
+ annotations: { readOnlyHint: true, idempotentHint: true, destructiveHint: false },
43
+ access: { scopes: [BLOG_MCP_READ_SCOPE] }, execution: { timeoutMs: 10_000, retry: 'idempotent-failover' },
44
+ }, async ({ themeId: selectedThemeId }, context) => {
45
+ context.signal.throwIfAborted();
46
+ const output = control.readStatus(selectedThemeId);
47
+ context.signal.throwIfAborted();
48
+ return result(output);
49
+ }),
50
+ [BLOG_MCP_TOOLS.selectTheme]: defineMcpTool({
51
+ name: BLOG_MCP_TOOLS.selectTheme, title: '选择博客主题', description: blogToolDescription(BLOG_MCP_TOOLS.selectTheme), inputSchema: z.strictObject({ themeId }), outputSchema: catalog,
52
+ annotations: { readOnlyHint: false, idempotentHint: false, destructiveHint: false },
53
+ access: { scopes: [BLOG_MCP_WRITE_SCOPE] }, execution: { timeoutMs: 10_000, retry: 'never' },
54
+ }, async ({ themeId: selectedThemeId }, context) => {
55
+ context.signal.throwIfAborted();
56
+ return result(await control.select(selectedThemeId, actorFrom(context.principal), context.signal));
57
+ }),
58
+ };
59
+ }
60
+ function actorFrom(principal) {
61
+ if (!principal)
62
+ throw new Error('Verified MCP principal is required');
63
+ const actor = `mcp:${principal.clientId ?? principal.subject}`;
64
+ if (actor.length > 256)
65
+ throw new Error('MCP principal identity is too long');
66
+ return actor;
67
+ }
68
+ function result(structuredContent) {
69
+ return { content: [{ type: 'text', text: JSON.stringify(structuredContent) }], structuredContent };
70
+ }
71
+ //# sourceMappingURL=theme-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme-tools.js","sourceRoot":"","sources":["../../src/mcp/theme-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { BLOG_MCP_TOOLS } from '../contracts/mcp.js';
2
+ type BlogMcpToolName = typeof BLOG_MCP_TOOLS[keyof typeof BLOG_MCP_TOOLS];
3
+ export declare function blogToolDescription(name: BlogMcpToolName): string;
4
+ export {};
5
+ //# sourceMappingURL=tool-descriptions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-descriptions.d.ts","sourceRoot":"","sources":["../../src/mcp/tool-descriptions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,KAAK,eAAe,GAAG,OAAO,cAAc,CAAC,MAAM,OAAO,cAAc,CAAC,CAAC;AAuD1E,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,CAEjE"}
@@ -0,0 +1,51 @@
1
+ import { BLOG_MCP_TOOLS } from '../contracts/mcp.js';
2
+ const descriptions = {
3
+ [BLOG_MCP_TOOLS.listCategories]: '分页读取博客分类目录,按 sortOrder 与稳定 ID 排序,可通过 limit 和 cursor 继续翻页。返回每个分类的名称、slug、说明、排序值与时间戳,不修改任何数据。',
4
+ [BLOG_MCP_TOOLS.readCategory]: '按分类 UUID 读取一个博客分类的完整管理记录,包括名称、slug、说明、排序值和创建更新时间。该操作只读,适合在修改、删除或给文章选择分类前核对当前值。',
5
+ [BLOG_MCP_TOOLS.createCategory]: '创建一个新的博客分类,并写入名称、稳定 slug、可空说明和排序值。成功后返回数据库生成的 UUID 与完整分类记录;slug 将参与公开分类地址,提交前应确认命名准确。',
6
+ [BLOG_MCP_TOOLS.updateCategory]: '按分类 UUID 完整更新名称、slug、说明和排序值,并返回持久化后的分类记录。该操作会改变分类的公开展示信息;未提供增量合并能力,调用前应先读取并保留未要求修改的字段。',
7
+ [BLOG_MCP_TOOLS.deleteCategory]: '按分类 UUID 永久删除一个博客分类,成功时返回被删除的 ID。该操作不可恢复且具有破坏性;当仍有文章引用该分类时服务端会拒绝删除,应先重新归类相关文章。',
8
+ [BLOG_MCP_TOOLS.listTags]: '分页读取博客标签目录,按标签名称与稳定 ID 排序,可通过 limit 和 cursor 继续翻页。返回标签 UUID、名称、slug 与时间戳,不包含文章正文且不会修改任何数据。',
9
+ [BLOG_MCP_TOOLS.readTag]: '按标签 UUID 读取一个博客标签的完整管理记录,包括名称、slug 和创建更新时间。该操作只读,适合在修改、删除或为文章填写 tagIds 前核对真实标签 ID。',
10
+ [BLOG_MCP_TOOLS.createTag]: '创建一个新的博客标签,并写入名称与稳定 slug。成功后返回数据库生成的 UUID 和完整标签记录;为文章选择标签时必须使用这里返回的真实 ID,不得根据名称编造 ID。',
11
+ [BLOG_MCP_TOOLS.updateTag]: '按标签 UUID 完整更新标签名称与 slug,并返回持久化后的标签记录。该操作会影响所有关联文章展示出的标签信息;调用前应先读取当前值并确认新的公开 slug。',
12
+ [BLOG_MCP_TOOLS.deleteTag]: '按标签 UUID 永久删除一个博客标签,成功时返回被删除的 ID。该操作不可恢复并会移除文章与该标签的关联关系;执行前应确认没有内容仍依赖这一分类语义。',
13
+ [BLOG_MCP_TOOLS.listPosts]: '按状态和可选 categoryId 筛选博客文章,并使用 limit、cursor 分页返回完整管理记录。结果包含正文、分类、标签、发布状态和时间戳,适合管理盘点;该操作只读且不改变浏览量。',
14
+ [BLOG_MCP_TOOLS.listPostArchive]: '读取已发布文章的 UTC 年月归档,可选择单一年月或完整起止年月范围,并分别限制文章和月份数量。返回不含正文的文章摘要、月份计数、总数和分页游标;它是只读归档查询,不会把文章改为 archived 状态。',
15
+ [BLOG_MCP_TOOLS.searchPosts]: '在博客文章的标题、摘要和正文中执行有界关键词搜索,可按状态过滤并限制最多二十条结果。返回不含正文的紧凑文章记录用于定位候选项;搜索不会修改文章或记录公开浏览。',
16
+ [BLOG_MCP_TOOLS.readPost]: '按文章 UUID 读取最新完整管理记录,包括正文、摘要、封面、分类、标签、生命周期状态和时间戳。该操作只读,修改、审查、发布、归档或删除前应使用它确认当前持久化内容。',
17
+ [BLOG_MCP_TOOLS.auditPostContent]: '对给定标题、摘要、Markdown 正文、分类 ID 和标签 ID 执行确定性的发布前审查,不读取或修改文章记录。返回 publishable 与有界 findings,逐项给出严重级别、字段、规则、建议和可用位置;只有 block 会阻止发布。',
18
+ [BLOG_MCP_TOOLS.createPost]: '创建一篇 draft 状态的博客文章,并校验真实分类与标签 ID、slug、标题、摘要、封面 URL 和 Markdown 正文。发布准备时应尽可能填写准确 summary、1 至 5 个现有 tagIds 和已验证 coverUrl;无法可靠获得时不要编造。',
19
+ [BLOG_MCP_TOOLS.updatePost]: '按文章 UUID 完整替换所有可编辑字段及标签关联,并返回持久化后的最新文章。它不是增量补丁;调用前应先 read-post 并保留未要求修改的字段,已发布文章更新时仍会执行发布内容约束。',
20
+ [BLOG_MCP_TOOLS.publishPost]: '发布当前博客文章。调用前应尽可能补齐文章字段,特别是 summary、tagIds 和 coverUrl,但不得编造信息或 URL。服务端会重新审查当前内容。若返回 code=POST_CONTENT_BLOCKED,先调用 read-post 获取最新文章,只修复 audit.findings 中 severity=block 的项目,再调用 update-post 和 audit-post-content;publishable=true 后重试,自动修复最多 3 次。需要作者补充事实时停止。',
21
+ [BLOG_MCP_TOOLS.archivePost]: '按文章 UUID 将文章状态切换为 archived,并返回包含原发布时间的最新完整记录。归档会使文章退出公开发布内容,但不会永久删除正文、标签、评论或历史发布时间;重复归档保持相同状态。',
22
+ [BLOG_MCP_TOOLS.deletePost]: '按文章 UUID 永久删除文章及其数据库级关联内容,成功时返回被删除的 ID。该操作不可恢复且具有破坏性;published 文章必须先 archive-post,服务端会拒绝直接删除仍在发布状态的文章。',
23
+ [BLOG_MCP_TOOLS.listPages]: '按生命周期状态和可选展示位置筛选博客单页,并使用 limit、cursor 分页返回完整记录。结果包含标题、slug、摘要、Markdown 正文、位置、排序值与时间戳;该操作只读。',
24
+ [BLOG_MCP_TOOLS.readPage]: '按单页 UUID 读取最新完整管理记录,包括正文、摘要、公开 slug、展示位置、排序值和生命周期状态。该操作只读,修改、发布、归档或删除单页前应先核对当前值。',
25
+ [BLOG_MCP_TOOLS.createPage]: '创建一个 draft 状态的博客单页,并写入标题、slug、摘要、Markdown 正文、可空展示位置和排序值。成功后返回生成的 UUID 与完整记录;创建不会自动发布或加入公开导航。',
26
+ [BLOG_MCP_TOOLS.updatePage]: '按单页 UUID 完整替换标题、slug、摘要、正文、展示位置和排序值,并返回最新记录。该操作不是增量补丁且不会自动改变生命周期状态;调用前应先读取并保留未要求修改的字段。',
27
+ [BLOG_MCP_TOOLS.publishPage]: '按单页 UUID 将内容切换为 published,并在首次发布时记录发布时间,随后返回完整记录。发布后单页可由主题通过稳定 slug 读取;执行前应确认正文、摘要和导航位置均已审核。',
28
+ [BLOG_MCP_TOOLS.archivePage]: '按单页 UUID 将内容切换为 archived,并返回保留原发布时间的完整记录。归档会使单页退出公开读取和导航,但不会永久删除内容;归档后仍可继续修改或再次发布。',
29
+ [BLOG_MCP_TOOLS.deletePage]: '按单页 UUID 永久删除记录,成功时返回被删除的 ID。该操作不可恢复且具有破坏性;published 单页必须先 archive-page,服务端会拒绝直接删除仍在发布状态的单页。',
30
+ [BLOG_MCP_TOOLS.listComments]: '按状态、文章 UUID 和时间顺序筛选博客评论,并使用 limit、cursor 分页;默认最新评论优先。返回评论正文、回复、用户 ID、客户端与原始审计字段,供管理员审核使用;该操作不会改变审核状态。',
31
+ [BLOG_MCP_TOOLS.readComment]: '按评论 UUID 读取完整审核记录,包括正文、回复、状态、用户与文章 ID、IP、User-Agent、位置和客户端标签。该操作只读,批准、拒绝、回复或永久删除前应先核对内容和审计信息。',
32
+ [BLOG_MCP_TOOLS.approveComment]: '按评论 UUID 将审核状态设置为 approved,并返回更新后的完整评论记录。批准后评论可以进入公开展示;这是有副作用的审核决定,必须基于管理员明确判断,不能由自动化自行决定。',
33
+ [BLOG_MCP_TOOLS.rejectComment]: '按评论 UUID 将审核状态设置为 rejected,并返回更新后的完整评论记录。拒绝会阻止评论公开展示但保留记录和审计信息;执行前必须取得管理员对该评论的明确处理决定。',
34
+ [BLOG_MCP_TOOLS.replyComment]: '按评论 UUID 设置管理员回复,或在 replyContent 为 null 时清除已有回复,同时维护回复时间并返回完整记录。该操作会改变评论对外呈现内容;回复文案应由管理员确认,不得虚构承诺或事实。',
35
+ [BLOG_MCP_TOOLS.deleteComment]: '按评论 UUID 永久删除评论及其回复和审计记录,成功时返回被删除的 ID。该操作不可恢复且具有破坏性;只有管理员明确要求永久删除时使用,通常审核应优先选择批准或拒绝。',
36
+ [BLOG_MCP_TOOLS.listFriendLinks]: '分页读取全部友情链接管理记录,按 sortOrder 与稳定 ID 排序,可通过 limit 和 cursor 继续翻页。结果同时包含启用和停用项、目标 URL、说明、图标和时间戳;该操作只读。',
37
+ [BLOG_MCP_TOOLS.readFriendLink]: '按友情链接 UUID 读取完整管理记录,包括名称、目标 URL、说明、图标 URL、启用状态、排序值和时间戳。该操作只读,修改、启停或永久删除前应先核对当前值。',
38
+ [BLOG_MCP_TOOLS.createFriendLink]: '创建一条友情链接,并写入名称、HTTP(S) 目标、可空说明和图标、启用状态与排序值。成功后返回生成的 UUID 和完整记录;启用项可能立即进入主题的公开友链页面。',
39
+ [BLOG_MCP_TOOLS.updateFriendLink]: '按友情链接 UUID 完整替换名称、目标 URL、说明、图标、启用状态和排序值,并返回最新记录。该操作不是增量补丁;调用前应先读取当前项,且不得编造或使用未经验证的外部地址。',
40
+ [BLOG_MCP_TOOLS.enableFriendLink]: '按友情链接 UUID 将 enabled 设置为 true,并返回更新后的完整记录。启用后该链接可以进入公开友链列表;执行前应验证目标站点、名称、说明与图标 URL 均准确且安全。',
41
+ [BLOG_MCP_TOOLS.disableFriendLink]: '按友情链接 UUID 将 enabled 设置为 false,并返回更新后的完整记录。停用会从公开友链列表隐藏该项但保留配置,适合临时下线或等待核验,不会永久删除数据。',
42
+ [BLOG_MCP_TOOLS.deleteFriendLink]: '按友情链接 UUID 永久删除记录,成功时返回被删除的 ID。该操作不可恢复且具有破坏性;如果只是暂时停止公开展示,应优先调用 disable-friend-link 保留配置。',
43
+ [BLOG_MCP_TOOLS.listThemes]: '读取 Registry 发现并经过副本一致性校验的博客主题目录,同时返回当前选择、目录对账时间和每个主题的 generation、buildId、实例数与状态。该操作只读,可在切换前用于确认目标主题是否健康可用。',
44
+ [BLOG_MCP_TOOLS.readThemeSelection]: '读取持久化的当前博客主题选择,返回 themeId、单调 revision、更新时间和审计操作者。该操作只读,只表示已提交的选择事实;主题是否已激活应再用 read-theme-status 核对。',
45
+ [BLOG_MCP_TOOLS.readThemeStatus]: '读取指定 themeId 的发现与激活状态;省略 themeId 时检查当前选择的主题。返回展示信息、generation、buildId、可用实例数和状态,适合切换前健康检查以及切换后的结果验证。',
46
+ [BLOG_MCP_TOOLS.selectTheme]: '将博客主题选择切换到指定的已发现健康 themeId,并返回更新后的完整主题目录与新 selection revision。该操作会改变公开博客渲染实现且不自动重试;应先检查目录和目标状态、取得确认,再写入并读回验证。',
47
+ };
48
+ export function blogToolDescription(name) {
49
+ return descriptions[name];
50
+ }
51
+ //# sourceMappingURL=tool-descriptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-descriptions.js","sourceRoot":"","sources":["../../src/mcp/tool-descriptions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,242 @@
1
+ import { z } from 'zod';
2
+ import type { BlogCategoryRow, BlogCommentRow, BlogFriendLinkRow, BlogPageRow, BlogTagRow } from '../persistence/entities.js';
3
+ import type { PostView } from '../blog/blog-application.js';
4
+ import type { BLOG_MCP_TOOLS } from '../contracts/mcp.js';
5
+ type BlogMcpToolName = typeof BLOG_MCP_TOOLS[keyof typeof BLOG_MCP_TOOLS];
6
+ export declare const idInput: z.ZodObject<{
7
+ id: z.ZodUUID;
8
+ }, z.core.$strict>;
9
+ export declare const listInput: z.ZodObject<{
10
+ limit: z.ZodDefault<z.ZodNumber>;
11
+ cursor: z.ZodOptional<z.ZodUUID>;
12
+ }, z.core.$strict>;
13
+ export declare const dateTime: z.ZodISODateTime;
14
+ export declare const databaseInteger: z.ZodNumber;
15
+ export declare const nullableText: (max: number) => z.ZodNullable<z.ZodString>;
16
+ export declare const slug: (max: number) => z.ZodString;
17
+ export declare const internalUrl: z.ZodString;
18
+ export declare const externalUrl: z.ZodURL;
19
+ export declare const assetUrl: z.ZodUnion<readonly [z.ZodString, z.ZodURL]>;
20
+ export declare const categorySchema: z.ZodObject<{
21
+ id: z.ZodUUID;
22
+ name: z.ZodString;
23
+ slug: z.ZodString;
24
+ description: z.ZodNullable<z.ZodString>;
25
+ sortOrder: z.ZodNumber;
26
+ createdAt: z.ZodISODateTime;
27
+ updatedAt: z.ZodISODateTime;
28
+ }, z.core.$strict>;
29
+ export declare const tagSchema: z.ZodObject<{
30
+ id: z.ZodUUID;
31
+ name: z.ZodString;
32
+ slug: z.ZodString;
33
+ createdAt: z.ZodISODateTime;
34
+ updatedAt: z.ZodISODateTime;
35
+ }, z.core.$strict>;
36
+ export declare const postSchema: z.ZodObject<{
37
+ id: z.ZodUUID;
38
+ categoryId: z.ZodUUID;
39
+ title: z.ZodString;
40
+ slug: z.ZodString;
41
+ summary: z.ZodNullable<z.ZodString>;
42
+ coverUrl: z.ZodNullable<z.ZodUnion<readonly [z.ZodString, z.ZodURL]>>;
43
+ content: z.ZodString;
44
+ status: z.ZodEnum<{
45
+ archived: "archived";
46
+ draft: "draft";
47
+ published: "published";
48
+ }>;
49
+ publishedAt: z.ZodNullable<z.ZodISODateTime>;
50
+ createdAt: z.ZodISODateTime;
51
+ updatedAt: z.ZodISODateTime;
52
+ tags: z.ZodArray<z.ZodObject<{
53
+ id: z.ZodUUID;
54
+ name: z.ZodString;
55
+ slug: z.ZodString;
56
+ createdAt: z.ZodISODateTime;
57
+ updatedAt: z.ZodISODateTime;
58
+ }, z.core.$strict>>;
59
+ }, z.core.$strict>;
60
+ export declare const postSearchSchema: z.ZodObject<{
61
+ id: z.ZodUUID;
62
+ categoryId: z.ZodUUID;
63
+ title: z.ZodString;
64
+ slug: z.ZodString;
65
+ summary: z.ZodNullable<z.ZodString>;
66
+ coverUrl: z.ZodNullable<z.ZodUnion<readonly [z.ZodString, z.ZodURL]>>;
67
+ status: z.ZodEnum<{
68
+ archived: "archived";
69
+ draft: "draft";
70
+ published: "published";
71
+ }>;
72
+ publishedAt: z.ZodNullable<z.ZodISODateTime>;
73
+ createdAt: z.ZodISODateTime;
74
+ updatedAt: z.ZodISODateTime;
75
+ tags: z.ZodArray<z.ZodObject<{
76
+ id: z.ZodUUID;
77
+ name: z.ZodString;
78
+ slug: z.ZodString;
79
+ createdAt: z.ZodISODateTime;
80
+ updatedAt: z.ZodISODateTime;
81
+ }, z.core.$strict>>;
82
+ }, z.core.$strict>;
83
+ export declare const pageSchema: z.ZodObject<{
84
+ id: z.ZodUUID;
85
+ title: z.ZodString;
86
+ slug: z.ZodString;
87
+ summary: z.ZodString;
88
+ content: z.ZodString;
89
+ status: z.ZodEnum<{
90
+ archived: "archived";
91
+ draft: "draft";
92
+ published: "published";
93
+ }>;
94
+ position: z.ZodNullable<z.ZodEnum<{
95
+ navigation: "navigation";
96
+ sidebar: "sidebar";
97
+ }>>;
98
+ sortOrder: z.ZodNumber;
99
+ publishedAt: z.ZodNullable<z.ZodISODateTime>;
100
+ createdAt: z.ZodISODateTime;
101
+ updatedAt: z.ZodISODateTime;
102
+ }, z.core.$strict>;
103
+ export declare const commentSchema: z.ZodObject<{
104
+ id: z.ZodUUID;
105
+ postId: z.ZodUUID;
106
+ userId: z.ZodUUID;
107
+ content: z.ZodString;
108
+ replyContent: z.ZodNullable<z.ZodString>;
109
+ ipAddress: z.ZodNullable<z.ZodUnion<readonly [z.ZodIPv4, z.ZodIPv6]>>;
110
+ userAgent: z.ZodNullable<z.ZodString>;
111
+ ipLocation: z.ZodNullable<z.ZodString>;
112
+ clientLabel: z.ZodNullable<z.ZodString>;
113
+ repliedAt: z.ZodNullable<z.ZodISODateTime>;
114
+ status: z.ZodEnum<{
115
+ approved: "approved";
116
+ pending: "pending";
117
+ rejected: "rejected";
118
+ }>;
119
+ createdAt: z.ZodISODateTime;
120
+ updatedAt: z.ZodISODateTime;
121
+ }, z.core.$strict>;
122
+ export declare const friendLinkSchema: z.ZodObject<{
123
+ id: z.ZodUUID;
124
+ name: z.ZodString;
125
+ url: z.ZodURL;
126
+ description: z.ZodNullable<z.ZodString>;
127
+ logoUrl: z.ZodNullable<z.ZodUnion<readonly [z.ZodString, z.ZodURL]>>;
128
+ enabled: z.ZodBoolean;
129
+ sortOrder: z.ZodNumber;
130
+ createdAt: z.ZodISODateTime;
131
+ updatedAt: z.ZodISODateTime;
132
+ }, z.core.$strict>;
133
+ export declare const deletedSchema: z.ZodObject<{
134
+ deleted: z.ZodLiteral<true>;
135
+ id: z.ZodUUID;
136
+ }, z.core.$strict>;
137
+ export type RecoverableToolFailure = Readonly<{
138
+ message: string;
139
+ structuredContent: Readonly<Record<string, unknown>>;
140
+ }>;
141
+ export type WriteToolOptions<I> = Readonly<{
142
+ recover?: (error: unknown, input: I) => RecoverableToolFailure | undefined;
143
+ }>;
144
+ export declare function readTool<I extends z.ZodType, O extends z.ZodType>(name: BlogMcpToolName, title: string, inputSchema: I, outputSchema: O, handler: (input: z.infer<I>, signal: AbortSignal) => Promise<z.infer<O>>, scope?: string): import("@hile/mcp").McpToolDefinition<z.input<I>, z.TypeOf<I>>;
145
+ export declare function writeTool<I extends z.ZodType, O extends z.ZodType>(name: BlogMcpToolName, title: string, inputSchema: I, outputSchema: O, handler: (input: z.infer<I>, signal: AbortSignal) => Promise<z.infer<O>>, destructive?: boolean, options?: WriteToolOptions<z.infer<I>>): import("@hile/mcp").McpToolDefinition<z.input<I>, z.TypeOf<I>>;
146
+ export declare function moderateTool<I extends z.ZodType, O extends z.ZodType>(name: BlogMcpToolName, title: string, inputSchema: I, outputSchema: O, handler: (input: z.infer<I>, signal: AbortSignal) => Promise<z.infer<O>>, destructive?: boolean): import("@hile/mcp").McpToolDefinition<z.input<I>, z.TypeOf<I>>;
147
+ export declare function categoryView(row: BlogCategoryRow): {
148
+ id: string;
149
+ name: string;
150
+ slug: string;
151
+ description: string | null;
152
+ sortOrder: number;
153
+ createdAt: string;
154
+ updatedAt: string;
155
+ };
156
+ export declare function tagView(row: BlogTagRow): {
157
+ id: string;
158
+ name: string;
159
+ slug: string;
160
+ createdAt: string;
161
+ updatedAt: string;
162
+ };
163
+ export declare function postView(row: PostView): {
164
+ id: string;
165
+ categoryId: string;
166
+ title: string;
167
+ slug: string;
168
+ summary: string | null;
169
+ coverUrl: string | null;
170
+ content: string;
171
+ status: import("../persistence/entities.js").BlogPostStatus;
172
+ publishedAt: string | null;
173
+ createdAt: string;
174
+ updatedAt: string;
175
+ tags: {
176
+ id: string;
177
+ name: string;
178
+ slug: string;
179
+ createdAt: string;
180
+ updatedAt: string;
181
+ }[];
182
+ };
183
+ export declare function postSearchView(row: PostView): {
184
+ id: string;
185
+ categoryId: string;
186
+ title: string;
187
+ slug: string;
188
+ summary: string | null;
189
+ coverUrl: string | null;
190
+ status: import("../persistence/entities.js").BlogPostStatus;
191
+ publishedAt: string | null;
192
+ createdAt: string;
193
+ updatedAt: string;
194
+ tags: {
195
+ id: string;
196
+ name: string;
197
+ slug: string;
198
+ createdAt: string;
199
+ updatedAt: string;
200
+ }[];
201
+ };
202
+ export declare function pageView(row: BlogPageRow): {
203
+ id: string;
204
+ title: string;
205
+ slug: string;
206
+ summary: string;
207
+ content: string;
208
+ status: import("../persistence/entities.js").BlogPostStatus;
209
+ position: import("../persistence/entities.js").BlogPagePosition | null;
210
+ sortOrder: number;
211
+ publishedAt: string | null;
212
+ createdAt: string;
213
+ updatedAt: string;
214
+ };
215
+ export declare function commentView(row: BlogCommentRow): {
216
+ id: string;
217
+ postId: string;
218
+ userId: string;
219
+ content: string;
220
+ ipAddress: string | null;
221
+ userAgent: string | null;
222
+ ipLocation: string | null;
223
+ clientLabel: string | null;
224
+ replyContent: string | null;
225
+ status: import("../persistence/entities.js").BlogCommentStatus;
226
+ repliedAt: string | null;
227
+ createdAt: string;
228
+ updatedAt: string;
229
+ };
230
+ export declare function friendLinkView(row: BlogFriendLinkRow): {
231
+ id: string;
232
+ name: string;
233
+ url: string;
234
+ description: string | null;
235
+ logoUrl: string | null;
236
+ enabled: boolean;
237
+ sortOrder: number;
238
+ createdAt: string;
239
+ updatedAt: string;
240
+ };
241
+ export {};
242
+ //# sourceMappingURL=tool-support.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-support.d.ts","sourceRoot":"","sources":["../../src/mcp/tool-support.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,127 @@
1
+ import { defineMcpTool } from '@hile/mcp';
2
+ import { BLOG_MCP_MODERATE_SCOPE, BLOG_MCP_READ_SCOPE, BLOG_MCP_WRITE_SCOPE, } from '../contracts/mcp.js';
3
+ import { z } from 'zod';
4
+ import { blogToolDescription } from './tool-descriptions.js';
5
+ export const idInput = z.strictObject({ id: z.uuid() });
6
+ export const listInput = z.strictObject({ limit: z.number().int().min(1).max(100).default(50), cursor: z.uuid().optional() });
7
+ export const dateTime = z.iso.datetime({ offset: true });
8
+ export const databaseInteger = z.number().int().min(-2_147_483_648).max(2_147_483_647);
9
+ export const nullableText = (max) => z.string().trim().min(1).max(max).nullable();
10
+ export const slug = (max) => z.string().trim().min(1).max(max).regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/);
11
+ export const internalUrl = z.string().min(1).max(2_048).regex(/^\/(?!\/)[^\s]*$/);
12
+ export const externalUrl = z.url({ protocol: /^https?$/ }).max(2_048);
13
+ export const assetUrl = z.union([internalUrl, externalUrl]);
14
+ export const categorySchema = z.strictObject({ id: z.uuid(), name: z.string().trim().min(1).max(100), slug: slug(120), description: nullableText(500), sortOrder: databaseInteger, createdAt: dateTime, updatedAt: dateTime });
15
+ export const tagSchema = z.strictObject({ id: z.uuid(), name: z.string().trim().min(1).max(100), slug: slug(120), createdAt: dateTime, updatedAt: dateTime });
16
+ export const postSchema = z.strictObject({
17
+ id: z.uuid(), categoryId: z.uuid(), title: z.string().trim().min(1).max(200), slug: slug(200), summary: nullableText(500),
18
+ coverUrl: assetUrl.nullable(), content: z.string().min(1).max(1_000_000), status: z.enum(['draft', 'published', 'archived']),
19
+ publishedAt: dateTime.nullable(), createdAt: dateTime, updatedAt: dateTime, tags: z.array(tagSchema).max(20),
20
+ }).superRefine((post, context) => {
21
+ if (post.status === 'published' && !post.publishedAt)
22
+ context.addIssue({ code: 'custom', path: ['publishedAt'], message: 'Published post requires publishedAt' });
23
+ if (post.status === 'draft' && post.publishedAt)
24
+ context.addIssue({ code: 'custom', path: ['publishedAt'], message: 'Draft post cannot have publishedAt' });
25
+ });
26
+ export const postSearchSchema = z.strictObject({
27
+ id: z.uuid(), categoryId: z.uuid(), title: z.string().trim().min(1).max(200), slug: slug(200), summary: nullableText(500),
28
+ coverUrl: assetUrl.nullable(), status: z.enum(['draft', 'published', 'archived']), publishedAt: dateTime.nullable(),
29
+ createdAt: dateTime, updatedAt: dateTime, tags: z.array(tagSchema).max(20),
30
+ });
31
+ export const pageSchema = z.strictObject({
32
+ id: z.uuid(), title: z.string().trim().min(1).max(200), slug: slug(200),
33
+ summary: z.string().trim().min(1).max(500), content: z.string().min(1).max(1_000_000),
34
+ status: z.enum(['draft', 'published', 'archived']), position: z.enum(['navigation', 'sidebar']).nullable(),
35
+ sortOrder: databaseInteger, publishedAt: dateTime.nullable(), createdAt: dateTime, updatedAt: dateTime,
36
+ }).superRefine((page, context) => {
37
+ if (page.status === 'published' && !page.publishedAt)
38
+ context.addIssue({ code: 'custom', path: ['publishedAt'], message: 'Published page requires publishedAt' });
39
+ if (page.status === 'draft' && page.publishedAt)
40
+ context.addIssue({ code: 'custom', path: ['publishedAt'], message: 'Draft page cannot have publishedAt' });
41
+ });
42
+ export const commentSchema = z.strictObject({
43
+ id: z.uuid(), postId: z.uuid(), userId: z.uuid(), content: z.string().trim().min(1).max(2_000), replyContent: nullableText(2_000),
44
+ ipAddress: z.union([z.ipv4(), z.ipv6()]).nullable(), userAgent: nullableText(1_024),
45
+ ipLocation: nullableText(200), clientLabel: nullableText(160),
46
+ repliedAt: dateTime.nullable(), status: z.enum(['pending', 'approved', 'rejected']), createdAt: dateTime, updatedAt: dateTime,
47
+ }).refine((comment) => Boolean(comment.replyContent) === Boolean(comment.repliedAt), { path: ['repliedAt'], message: 'Reply content and timestamp must agree' });
48
+ export const friendLinkSchema = z.strictObject({
49
+ id: z.uuid(), name: z.string().trim().min(1).max(100), url: externalUrl, description: nullableText(500), logoUrl: assetUrl.nullable(),
50
+ enabled: z.boolean(), sortOrder: databaseInteger, createdAt: dateTime, updatedAt: dateTime,
51
+ });
52
+ export const deletedSchema = z.strictObject({ deleted: z.literal(true), id: z.uuid() });
53
+ export function readTool(name, title, inputSchema, outputSchema, handler, scope = BLOG_MCP_READ_SCOPE) {
54
+ return defineMcpTool({ name, title, description: blogToolDescription(name), inputSchema, outputSchema,
55
+ annotations: { readOnlyHint: true, idempotentHint: true, destructiveHint: false },
56
+ access: { scopes: [scope] }, execution: { timeoutMs: 10_000, retry: 'idempotent-failover' },
57
+ }, async (input, context) => {
58
+ context.signal.throwIfAborted();
59
+ const output = await handler(input, context.signal);
60
+ context.signal.throwIfAborted();
61
+ return result(output);
62
+ });
63
+ }
64
+ export function writeTool(name, title, inputSchema, outputSchema, handler, destructive = false, options) {
65
+ return defineMcpTool({ name, title, description: blogToolDescription(name), inputSchema, outputSchema,
66
+ annotations: { readOnlyHint: false, idempotentHint: false, destructiveHint: destructive },
67
+ access: { scopes: [BLOG_MCP_WRITE_SCOPE] }, execution: { timeoutMs: 10_000, retry: 'never' },
68
+ }, async (input, context) => {
69
+ context.signal.throwIfAborted();
70
+ try {
71
+ return result(await handler(input, context.signal));
72
+ }
73
+ catch (error) {
74
+ const failure = options?.recover?.(error, input);
75
+ if (!failure)
76
+ throw error;
77
+ return errorResult(failure);
78
+ }
79
+ });
80
+ }
81
+ export function moderateTool(name, title, inputSchema, outputSchema, handler, destructive = false) {
82
+ return defineMcpTool({ name, title, description: blogToolDescription(name), inputSchema, outputSchema,
83
+ annotations: { readOnlyHint: false, idempotentHint: false, destructiveHint: destructive },
84
+ access: { scopes: [BLOG_MCP_MODERATE_SCOPE] }, execution: { timeoutMs: 10_000, retry: 'never' },
85
+ }, async (input, context) => {
86
+ context.signal.throwIfAborted();
87
+ return result(await handler(input, context.signal));
88
+ });
89
+ }
90
+ function result(structuredContent) {
91
+ return { content: [{ type: 'text', text: JSON.stringify(structuredContent) }], structuredContent };
92
+ }
93
+ function errorResult(failure) {
94
+ return {
95
+ content: [{ type: 'text', text: failure.message }],
96
+ structuredContent: failure.structuredContent,
97
+ isError: true,
98
+ };
99
+ }
100
+ export function categoryView(row) { return { ...row, createdAt: row.createdAt.toISOString(), updatedAt: row.updatedAt.toISOString() }; }
101
+ export function tagView(row) {
102
+ return { id: row.id, name: row.name, slug: row.slug, createdAt: row.createdAt.toISOString(), updatedAt: row.updatedAt.toISOString() };
103
+ }
104
+ export function postView(row) {
105
+ return {
106
+ id: row.id, categoryId: row.categoryId, title: row.title, slug: row.slug,
107
+ summary: row.summary, coverUrl: row.coverUrl, content: row.content, status: row.status,
108
+ publishedAt: row.publishedAt?.toISOString() ?? null,
109
+ createdAt: row.createdAt.toISOString(), updatedAt: row.updatedAt.toISOString(),
110
+ tags: row.tags.map(tagView),
111
+ };
112
+ }
113
+ export function postSearchView(row) {
114
+ const { content: _content, ...view } = postView(row);
115
+ return view;
116
+ }
117
+ export function pageView(row) {
118
+ return {
119
+ ...row,
120
+ publishedAt: row.publishedAt?.toISOString() ?? null,
121
+ createdAt: row.createdAt.toISOString(),
122
+ updatedAt: row.updatedAt.toISOString(),
123
+ };
124
+ }
125
+ export function commentView(row) { return { ...row, repliedAt: row.repliedAt?.toISOString() ?? null, createdAt: row.createdAt.toISOString(), updatedAt: row.updatedAt.toISOString() }; }
126
+ export function friendLinkView(row) { return { ...row, createdAt: row.createdAt.toISOString(), updatedAt: row.updatedAt.toISOString() }; }
127
+ //# sourceMappingURL=tool-support.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-support.js","sourceRoot":"","sources":["../../src/mcp/tool-support.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ declare const _default: import("@hile/message-loader").MessageRegisterProps<unknown, import("@hile/micro").MicroMessageHandlerExtras>;
2
+ export default _default;
3
+ //# sourceMappingURL=dispatch.msg.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatch.msg.d.ts","sourceRoot":"","sources":["../../../src/messages/browser/dispatch.msg.ts"],"names":[],"mappings":""}
@@ -0,0 +1,9 @@
1
+ import { loadService } from '@hile/core';
2
+ import { defineMicroMessage } from '@hile/micro';
3
+ import { dispatchBrowserApiFrame } from '../../browser-api/dispatch-stream.js';
4
+ import blogRuntimeService from '../../services/blog-runtime.service.js';
5
+ export default defineMicroMessage(async function* ({ data, invocation }) {
6
+ const runtime = await loadService(blogRuntimeService);
7
+ yield* dispatchBrowserApiFrame(runtime.browserApi, data, invocation);
8
+ });
9
+ //# sourceMappingURL=dispatch.msg.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatch.msg.js","sourceRoot":"","sources":["../../../src/messages/browser/dispatch.msg.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,OAAO,kBAAkB,MAAM,wCAAwC,CAAC;AAExE,eAAe,kBAAkB,CAAU,KAAK,SAAS,CAAC,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;IAC9E,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,kBAAkB,CAAC,CAAC;IACtD,KAAK,CAAC,CAAC,uBAAuB,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;AACvE,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ declare const _default: import("@hile/message-loader").MessageRegisterProps<unknown, import("@hile/micro").MicroMessageHandlerExtras>;
2
+ export default _default;
3
+ //# sourceMappingURL=list.msg.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.msg.d.ts","sourceRoot":"","sources":["../../../../src/messages/public/categories/list.msg.ts"],"names":[],"mappings":""}
@@ -0,0 +1,8 @@
1
+ import { loadService } from '@hile/core';
2
+ import { defineMicroMessage } from '@hile/micro';
3
+ import blogRuntimeService from '../../../services/blog-runtime.service.js';
4
+ export default defineMicroMessage(async ({ data, invocation }) => {
5
+ const runtime = await loadService(blogRuntimeService);
6
+ return runtime.publicMicro.listCategories(data, invocation.signal);
7
+ });
8
+ //# sourceMappingURL=list.msg.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.msg.js","sourceRoot":"","sources":["../../../../src/messages/public/categories/list.msg.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,kBAAkB,MAAM,2CAA2C,CAAC;AAE3E,eAAe,kBAAkB,CAAU,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE;IACxE,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,kBAAkB,CAAC,CAAC;IACtD,OAAO,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;AACrE,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ declare const _default: import("@hile/message-loader").MessageRegisterProps<unknown, import("@hile/micro").MicroMessageHandlerExtras>;
2
+ export default _default;
3
+ //# sourceMappingURL=list.msg.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.msg.d.ts","sourceRoot":"","sources":["../../../../src/messages/public/comments/list.msg.ts"],"names":[],"mappings":""}