@page.su/ai-blog-cli 0.1.0-beta.1 → 0.1.0-beta.10

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 (107) hide show
  1. package/dist/cli.js +14 -5
  2. package/dist/cli.js.map +1 -1
  3. package/dist/commands/comments.js +1 -1
  4. package/dist/commands/comments.js.map +1 -1
  5. package/dist/commands/config.d.ts +12 -0
  6. package/dist/commands/config.d.ts.map +1 -0
  7. package/dist/commands/config.js +128 -0
  8. package/dist/commands/config.js.map +1 -0
  9. package/dist/commands/demo.js +2 -2
  10. package/dist/commands/demo.js.map +1 -1
  11. package/dist/commands/post.d.ts.map +1 -1
  12. package/dist/commands/post.js +30 -3
  13. package/dist/commands/post.js.map +1 -1
  14. package/dist/commands/render-errors.d.ts +4 -0
  15. package/dist/commands/render-errors.d.ts.map +1 -0
  16. package/dist/commands/render-errors.js +22 -0
  17. package/dist/commands/render-errors.js.map +1 -0
  18. package/dist/commands/skills.d.ts.map +1 -1
  19. package/dist/commands/skills.js +67 -19
  20. package/dist/commands/skills.js.map +1 -1
  21. package/dist/commands/syntax.d.ts +4 -0
  22. package/dist/commands/syntax.d.ts.map +1 -0
  23. package/dist/commands/syntax.js +29 -0
  24. package/dist/commands/syntax.js.map +1 -0
  25. package/dist/config.d.ts +84 -8
  26. package/dist/config.d.ts.map +1 -1
  27. package/dist/config.js +196 -29
  28. package/dist/config.js.map +1 -1
  29. package/dist/config.test.js +150 -19
  30. package/dist/config.test.js.map +1 -1
  31. package/package.json +12 -6
  32. package/dist/index.d.ts +0 -3
  33. package/dist/index.d.ts.map +0 -1
  34. package/dist/index.js +0 -100
  35. package/dist/index.js.map +0 -1
  36. package/dist/prompts/index.d.ts +0 -9
  37. package/dist/prompts/index.d.ts.map +0 -1
  38. package/dist/prompts/index.js +0 -178
  39. package/dist/prompts/index.js.map +0 -1
  40. package/dist/resources/syntax-spec.d.ts +0 -23
  41. package/dist/resources/syntax-spec.d.ts.map +0 -1
  42. package/dist/resources/syntax-spec.js +0 -105
  43. package/dist/resources/syntax-spec.js.map +0 -1
  44. package/dist/resources/syntax-spec.test.d.ts +0 -2
  45. package/dist/resources/syntax-spec.test.d.ts.map +0 -1
  46. package/dist/resources/syntax-spec.test.js +0 -47
  47. package/dist/resources/syntax-spec.test.js.map +0 -1
  48. package/dist/tools/build.d.ts +0 -13
  49. package/dist/tools/build.d.ts.map +0 -1
  50. package/dist/tools/build.js +0 -181
  51. package/dist/tools/build.js.map +0 -1
  52. package/dist/tools/code-repos.d.ts +0 -5
  53. package/dist/tools/code-repos.d.ts.map +0 -1
  54. package/dist/tools/code-repos.js +0 -149
  55. package/dist/tools/code-repos.js.map +0 -1
  56. package/dist/tools/comments.d.ts +0 -12
  57. package/dist/tools/comments.d.ts.map +0 -1
  58. package/dist/tools/comments.js +0 -87
  59. package/dist/tools/comments.js.map +0 -1
  60. package/dist/tools/demos.d.ts +0 -5
  61. package/dist/tools/demos.d.ts.map +0 -1
  62. package/dist/tools/demos.js +0 -98
  63. package/dist/tools/demos.js.map +0 -1
  64. package/dist/tools/glossary.d.ts +0 -4
  65. package/dist/tools/glossary.d.ts.map +0 -1
  66. package/dist/tools/glossary.js +0 -139
  67. package/dist/tools/glossary.js.map +0 -1
  68. package/dist/tools/helpers.d.ts +0 -44
  69. package/dist/tools/helpers.d.ts.map +0 -1
  70. package/dist/tools/helpers.js +0 -65
  71. package/dist/tools/helpers.js.map +0 -1
  72. package/dist/tools/knowledge.d.ts +0 -4
  73. package/dist/tools/knowledge.d.ts.map +0 -1
  74. package/dist/tools/knowledge.js +0 -140
  75. package/dist/tools/knowledge.js.map +0 -1
  76. package/dist/tools/math-concepts.d.ts +0 -4
  77. package/dist/tools/math-concepts.d.ts.map +0 -1
  78. package/dist/tools/math-concepts.js +0 -158
  79. package/dist/tools/math-concepts.js.map +0 -1
  80. package/dist/tools/posts.d.ts +0 -35
  81. package/dist/tools/posts.d.ts.map +0 -1
  82. package/dist/tools/posts.js +0 -278
  83. package/dist/tools/posts.js.map +0 -1
  84. package/dist/tools/scout.d.ts +0 -10
  85. package/dist/tools/scout.d.ts.map +0 -1
  86. package/dist/tools/scout.js +0 -111
  87. package/dist/tools/scout.js.map +0 -1
  88. package/dist/tools/series.d.ts +0 -12
  89. package/dist/tools/series.d.ts.map +0 -1
  90. package/dist/tools/series.js +0 -120
  91. package/dist/tools/series.js.map +0 -1
  92. package/dist/tools/syntax-capabilities.d.ts +0 -15
  93. package/dist/tools/syntax-capabilities.d.ts.map +0 -1
  94. package/dist/tools/syntax-capabilities.js +0 -859
  95. package/dist/tools/syntax-capabilities.js.map +0 -1
  96. package/dist/tools/taxonomy.d.ts +0 -4
  97. package/dist/tools/taxonomy.d.ts.map +0 -1
  98. package/dist/tools/taxonomy.js +0 -73
  99. package/dist/tools/taxonomy.js.map +0 -1
  100. package/dist/tools/uploads.d.ts +0 -15
  101. package/dist/tools/uploads.d.ts.map +0 -1
  102. package/dist/tools/uploads.js +0 -56
  103. package/dist/tools/uploads.js.map +0 -1
  104. package/dist/tools/workflows.d.ts +0 -9
  105. package/dist/tools/workflows.d.ts.map +0 -1
  106. package/dist/tools/workflows.js +0 -249
  107. package/dist/tools/workflows.js.map +0 -1
@@ -1,139 +0,0 @@
1
- import { z } from "zod";
2
- import { ApiClientError } from "../api-client.js";
3
- /**
4
- * 术语词库相关 MCP 工具:glossary.list / get / create / update / delete
5
- *
6
- * 独立于 post 工具,因为术语有额外的 terms/brief/autoLink 字段,
7
- * 且语义上应与文章区分,AI 使用时更清晰。
8
- */
9
- /** 术语字段 schema */
10
- const glossaryFieldsShape = {
11
- title: z.string().min(1).describe("术语标题,必填").optional(),
12
- slug: z.string().describe("术语 slug;为空时由后端自动生成").optional(),
13
- status: z.enum(["draft", "published"]).describe("状态").optional(),
14
- publishedAt: z.string().describe("ISO 时间字符串").optional(),
15
- categoryIds: z.array(z.string().uuid()).describe("分类 id 列表").optional(),
16
- tagIds: z.array(z.string().uuid()).describe("标签 id 列表").optional(),
17
- excerpt: z.string().describe("摘要,最长 400 字符").optional(),
18
- content: z.string().describe("Markdown 正文,术语的完整说明").optional(),
19
- seoTitle: z.string().describe("SEO 标题").optional(),
20
- seoDescription: z.string().describe("SEO 描述").optional(),
21
- terms: z.string().describe("匹配词,多个用 | 分隔,如 'Promise|Thenable'").optional(),
22
- brief: z.string().describe("简短释义(≤200字),用于 hover tooltip").optional(),
23
- autoLink: z.boolean().describe("是否启用自动高亮匹配").optional(),
24
- };
25
- function toToolText(value) {
26
- return {
27
- content: [
28
- {
29
- type: "text",
30
- text: typeof value === "string" ? value : JSON.stringify(value, null, 2),
31
- },
32
- ],
33
- };
34
- }
35
- function toToolError(error) {
36
- let text;
37
- if (error instanceof ApiClientError) {
38
- const lines = [`HTTP ${error.status}: ${error.message}`];
39
- if (error.issues !== undefined) {
40
- lines.push("Validation issues:");
41
- lines.push(JSON.stringify(error.issues, null, 2));
42
- }
43
- text = lines.join("\n");
44
- }
45
- else if (error instanceof Error) {
46
- text = error.message;
47
- }
48
- else {
49
- text = String(error);
50
- }
51
- return {
52
- content: [{ type: "text", text }],
53
- isError: true,
54
- };
55
- }
56
- export function registerGlossaryTools(server, api) {
57
- // ── glossary.list ──
58
- server.tool("glossary_list", "列出术语词库中的术语。支持按状态筛选和关键词搜索。", {
59
- status: z.enum(["draft", "published"]).describe("按状态筛选").optional(),
60
- search: z.string().describe("搜索关键词(匹配术语名/匹配词)").optional(),
61
- page: z.number().int().positive().describe("页码,默认 1").optional(),
62
- pageSize: z.number().int().positive().max(100).describe("每页数量,默认 20").optional(),
63
- }, async ({ status, search, page, pageSize }) => {
64
- try {
65
- const params = new URLSearchParams();
66
- if (status)
67
- params.set("status", status);
68
- if (search)
69
- params.set("search", search);
70
- if (page)
71
- params.set("page", String(page));
72
- if (pageSize)
73
- params.set("pageSize", String(pageSize));
74
- const result = await api.get(`/api/mcp/glossary?action=list&${params.toString()}`);
75
- return toToolText(result);
76
- }
77
- catch (error) {
78
- return toToolError(error);
79
- }
80
- });
81
- // ── glossary.get ──
82
- server.tool("glossary_get", "获取一个术语的完整可编辑数据,包含匹配词、简短释义、Markdown 正文等。", {
83
- id: z.string().uuid().describe("术语 id (uuid)"),
84
- }, async ({ id }) => {
85
- try {
86
- const result = await api.get(`/api/mcp/glossary?action=get&id=${id}`);
87
- return toToolText(result);
88
- }
89
- catch (error) {
90
- return toToolError(error);
91
- }
92
- });
93
- // ── glossary.create ──
94
- server.tool("glossary_create", "创建一个新的术语条目。terms(匹配词)和 brief(简短释义)为术语特有必填字段。", glossaryFieldsShape, async (params) => {
95
- try {
96
- const result = await api.post("/api/mcp/glossary", {
97
- action: "create",
98
- data: params,
99
- });
100
- return toToolText(result);
101
- }
102
- catch (error) {
103
- return toToolError(error);
104
- }
105
- });
106
- // ── glossary.update ──
107
- server.tool("glossary_update", "更新一个已有的术语条目。需要传入完整字段。", {
108
- id: z.string().uuid().describe("术语 id (uuid)"),
109
- ...glossaryFieldsShape,
110
- }, async ({ id, ...data }) => {
111
- try {
112
- const result = await api.post("/api/mcp/glossary", {
113
- action: "update",
114
- id,
115
- data,
116
- });
117
- return toToolText(result);
118
- }
119
- catch (error) {
120
- return toToolError(error);
121
- }
122
- });
123
- // ── glossary.delete ──
124
- server.tool("glossary_delete", "永久删除一个术语条目。请谨慎使用。", {
125
- id: z.string().uuid().describe("术语 id (uuid)"),
126
- }, async ({ id }) => {
127
- try {
128
- const result = await api.post("/api/mcp/glossary", {
129
- action: "delete",
130
- id,
131
- });
132
- return toToolText(result);
133
- }
134
- catch (error) {
135
- return toToolError(error);
136
- }
137
- });
138
- }
139
- //# sourceMappingURL=glossary.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"glossary.js","sourceRoot":"","sources":["../../src/tools/glossary.ts"],"names":[],"mappings":"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"}
@@ -1,44 +0,0 @@
1
- /**
2
- * MCP 工具通用 helper 函数
3
- * 统一处理工具返回值和错误格式,避免各工具文件重复定义
4
- */
5
- /**
6
- * 将数据转换为 MCP 工具的标准文本响应格式
7
- */
8
- export declare function toToolText(value: unknown): {
9
- content: Array<{
10
- type: "text";
11
- text: string;
12
- }>;
13
- };
14
- /**
15
- * 将错误转换为 MCP 工具的标准错误响应格式
16
- * 对 ApiClientError 做特殊处理,输出 HTTP 状态码和校验问题
17
- */
18
- export declare function toToolError(error: unknown): {
19
- content: Array<{
20
- type: "text";
21
- text: string;
22
- }>;
23
- isError: true;
24
- };
25
- /**
26
- * 安全执行异步函数,自动捕获错误并转换为标准错误格式
27
- * 用于简化工具函数的错误处理逻辑
28
- */
29
- export declare function safe<T>(fn: () => Promise<T>): Promise<{
30
- content: Array<{
31
- type: "text";
32
- text: string;
33
- }>;
34
- isError?: true;
35
- }>;
36
- /**
37
- * 导出统一的 helper 对象,方便导入使用
38
- */
39
- export declare const toolReplyHelpers: {
40
- toToolText: typeof toToolText;
41
- toToolError: typeof toToolError;
42
- safe: typeof safe;
43
- };
44
- //# sourceMappingURL=helpers.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/tools/helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAS7F;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG;IAC3C,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,OAAO,EAAE,IAAI,CAAC;CACf,CAkBA;AAED;;;GAGG;AACH,wBAAsB,IAAI,CAAC,CAAC,EAC1B,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACnB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,IAAI,CAAA;CAAE,CAAC,CAO7E;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;CAI5B,CAAC"}
@@ -1,65 +0,0 @@
1
- /**
2
- * MCP 工具通用 helper 函数
3
- * 统一处理工具返回值和错误格式,避免各工具文件重复定义
4
- */
5
- import { ApiClientError } from "../api-client.js";
6
- /**
7
- * 将数据转换为 MCP 工具的标准文本响应格式
8
- */
9
- export function toToolText(value) {
10
- return {
11
- content: [
12
- {
13
- type: "text",
14
- text: typeof value === "string" ? value : JSON.stringify(value, null, 2),
15
- },
16
- ],
17
- };
18
- }
19
- /**
20
- * 将错误转换为 MCP 工具的标准错误响应格式
21
- * 对 ApiClientError 做特殊处理,输出 HTTP 状态码和校验问题
22
- */
23
- export function toToolError(error) {
24
- let text;
25
- if (error instanceof ApiClientError) {
26
- const lines = [`HTTP ${error.status}: ${error.message}`];
27
- if (error.issues !== undefined) {
28
- lines.push("Validation issues:");
29
- lines.push(JSON.stringify(error.issues, null, 2));
30
- }
31
- text = lines.join("\n");
32
- }
33
- else if (error instanceof Error) {
34
- text = error.message;
35
- }
36
- else {
37
- text = String(error);
38
- }
39
- return {
40
- content: [{ type: "text", text }],
41
- isError: true,
42
- };
43
- }
44
- /**
45
- * 安全执行异步函数,自动捕获错误并转换为标准错误格式
46
- * 用于简化工具函数的错误处理逻辑
47
- */
48
- export async function safe(fn) {
49
- try {
50
- const result = await fn();
51
- return toToolText(result);
52
- }
53
- catch (error) {
54
- return toToolError(error);
55
- }
56
- }
57
- /**
58
- * 导出统一的 helper 对象,方便导入使用
59
- */
60
- export const toolReplyHelpers = {
61
- toToolText,
62
- toToolError,
63
- safe,
64
- };
65
- //# sourceMappingURL=helpers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/tools/helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,KAAc;IACvC,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;aACzE;SACF;KACF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,KAAc;IAIxC,IAAI,IAAY,CAAC;IACjB,IAAI,KAAK,YAAY,cAAc,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,CAAC,QAAQ,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACzD,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC/B,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;YACjC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACpD,CAAC;QACD,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;SAAM,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAClC,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC;IACvB,CAAC;SAAM,CAAC;QACN,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IACD,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QACjC,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,IAAI,CACxB,EAAoB;IAEpB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,EAAE,EAAE,CAAC;QAC1B,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,UAAU;IACV,WAAW;IACX,IAAI;CACL,CAAC"}
@@ -1,4 +0,0 @@
1
- import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
- import type { ApiClient } from "../api-client.js";
3
- export declare function registerKnowledgeTools(server: McpServer, api: ApiClient): void;
4
- //# sourceMappingURL=knowledge.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"knowledge.d.ts","sourceRoot":"","sources":["../../src/tools/knowledge.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAuClD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,GAAG,IAAI,CAgI9E"}
@@ -1,140 +0,0 @@
1
- import { z } from "zod";
2
- import { toToolText, toToolError } from "./helpers.js";
3
- /**
4
- * 统一知识库 MCP 工具:knowledge.list / get / create / update / delete / find_or_suggest
5
- *
6
- * 合并了原 glossary 和 math-concepts 两套工具。
7
- * 通过 domain 参数区分:glossary(纯术语)、math(数学概念)、all(全部)。
8
- * 数学概念额外支持 mathEnhancement 字段(difficulty/formulas/notation/prerequisites)。
9
- */
10
- /** 知识条目基础字段 schema */
11
- const knowledgeFieldsShape = {
12
- title: z.string().min(1).describe("知识条目标题,必填").optional(),
13
- slug: z.string().describe("条目 slug;为空时由后端自动生成").optional(),
14
- status: z.enum(["draft", "published"]).describe("状态").optional(),
15
- publishedAt: z.string().describe("ISO 时间字符串").optional(),
16
- categoryIds: z.array(z.string().uuid()).describe("分类 id 列表").optional(),
17
- tagIds: z.array(z.string().uuid()).describe("标签 id 列表").optional(),
18
- excerpt: z.string().describe("摘要,最长 400 字符").optional(),
19
- content: z.string().describe("Markdown 正文,知识条目的完整说明").optional(),
20
- seoTitle: z.string().describe("SEO 标题").optional(),
21
- seoDescription: z.string().describe("SEO 描述").optional(),
22
- terms: z.string().describe("匹配词,多个用 | 分隔,如 'Promise|Thenable'").optional(),
23
- brief: z.string().describe("简短释义(≤200字),用于 hover tooltip").optional(),
24
- autoLink: z.boolean().describe("是否启用自动高亮匹配").optional(),
25
- mathEnhancement: z.object({
26
- difficulty: z.number().int().min(1).max(5).describe("难度等级 1-5(1=入门, 2=基础, 3=进阶, 4=高级, 5=专家)").optional(),
27
- formulas: z.string().describe("核心公式(LaTeX),列表页预览用。同一公式不可重复创建,系统会自动去重检查").optional(),
28
- notation: z.string().describe("符号说明。推荐使用 JSON 格式(结构化参数表 + 可选分步计算),示例:" +
29
- '{"params":[{"symbol":"z_i","name":"第i个输入值","detail":"任意实数","range":"(-∞,+∞)"}],' +
30
- '"steps":[{"expression":"e^{z_i}","explanation":"对每个输入值取指数,确保结果为正数"}]}。' +
31
- "也兼容旧格式:'n: 样本数, μ: 均值'").optional(),
32
- prerequisites: z.string().describe("前置知识 slug 列表(逗号分隔)").optional(),
33
- }).describe("数学增强字段,传入则标记为数学概念,不传或传 null 则为普通术语").optional().nullable(),
34
- };
35
- export function registerKnowledgeTools(server, api) {
36
- // ── knowledge.list ──
37
- server.tool("knowledge_list", "列出知识库中的条目。支持按域(general=术语/math=数学概念/all=全部)、状态、难度筛选和关键词搜索。", {
38
- domain: z.enum(["all", "glossary", "math"]).describe("筛选域:all=全部, glossary=纯术语, math=数学概念").optional(),
39
- status: z.enum(["draft", "published"]).describe("按状态筛选").optional(),
40
- difficulty: z.number().int().min(1).max(5).describe("按难度筛选(1-5),仅对数学概念有效").optional(),
41
- search: z.string().describe("搜索关键词(匹配条目名/匹配词)").optional(),
42
- page: z.number().int().positive().describe("页码,默认 1").optional(),
43
- pageSize: z.number().int().positive().max(100).describe("每页数量,默认 20").optional(),
44
- }, async ({ domain, status, difficulty, search, page, pageSize }) => {
45
- try {
46
- const params = new URLSearchParams();
47
- params.set("action", "list");
48
- if (domain)
49
- params.set("domain", domain);
50
- if (status)
51
- params.set("status", status);
52
- if (difficulty)
53
- params.set("difficulty", String(difficulty));
54
- if (search)
55
- params.set("search", search);
56
- if (page)
57
- params.set("page", String(page));
58
- if (pageSize)
59
- params.set("pageSize", String(pageSize));
60
- const result = await api.get(`/api/mcp/knowledge?${params.toString()}`);
61
- return toToolText(result);
62
- }
63
- catch (error) {
64
- return toToolError(error);
65
- }
66
- });
67
- // ── knowledge.get ──
68
- server.tool("knowledge_get", "获取一个知识条目的完整可编辑数据,包含匹配词、简短释义、Markdown 正文,以及数学增强字段(如有)。", {
69
- id: z.string().uuid().describe("知识条目 id (uuid)"),
70
- }, async ({ id }) => {
71
- try {
72
- const result = await api.get(`/api/mcp/knowledge?action=get&id=${id}`);
73
- return toToolText(result);
74
- }
75
- catch (error) {
76
- return toToolError(error);
77
- }
78
- });
79
- // ── knowledge.create ──
80
- server.tool("knowledge_create", "创建一个新的知识条目。terms(匹配词)和 brief(简短释义)为必填字段。" +
81
- "传入 mathEnhancement 则创建为数学概念,不传则为普通术语。" +
82
- "⚠️ 创建前先用 knowledge.find_or_suggest 查重,避免重复创建。", knowledgeFieldsShape, async (params) => {
83
- try {
84
- const result = await api.post("/api/mcp/knowledge", {
85
- action: "create",
86
- data: params,
87
- });
88
- return toToolText(result);
89
- }
90
- catch (error) {
91
- return toToolError(error);
92
- }
93
- });
94
- // ── knowledge.update ──
95
- server.tool("knowledge_update", "更新一个已有的知识条目。传入 mathEnhancement 可添加/更新数学增强;传入 null 可移除数学增强,将其降级为普通术语。", {
96
- id: z.string().uuid().describe("知识条目 id (uuid)"),
97
- ...knowledgeFieldsShape,
98
- }, async ({ id, ...data }) => {
99
- try {
100
- const result = await api.post("/api/mcp/knowledge", {
101
- action: "update",
102
- id,
103
- data,
104
- });
105
- return toToolText(result);
106
- }
107
- catch (error) {
108
- return toToolError(error);
109
- }
110
- });
111
- // ── knowledge.delete ──
112
- server.tool("knowledge_delete", "永久删除一个知识条目。请谨慎使用。", {
113
- id: z.string().uuid().describe("知识条目 id (uuid)"),
114
- }, async ({ id }) => {
115
- try {
116
- const result = await api.post("/api/mcp/knowledge", {
117
- action: "delete",
118
- id,
119
- });
120
- return toToolText(result);
121
- }
122
- catch (error) {
123
- return toToolError(error);
124
- }
125
- });
126
- // ── knowledge.find_or_suggest ──
127
- server.tool("knowledge_find_or_suggest", "写文章时传入关键词,查找是否已有匹配的知识条目。如果有则返回条目信息(可直接引用),如果没有则提示创建新条目。" +
128
- "⚠️ 推荐在写文章时对正文涉及的专业术语逐一调用此工具,确保与知识库关联。", {
129
- keyword: z.string().min(1).describe("要查找的关键词,如 '贝叶斯' 或 'Promise'"),
130
- }, async ({ keyword }) => {
131
- try {
132
- const result = await api.get(`/api/mcp/knowledge?action=find_or_suggest&keyword=${encodeURIComponent(keyword)}`);
133
- return toToolText(result);
134
- }
135
- catch (error) {
136
- return toToolError(error);
137
- }
138
- });
139
- }
140
- //# sourceMappingURL=knowledge.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"knowledge.js","sourceRoot":"","sources":["../../src/tools/knowledge.ts"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
- import { type ApiClient } from "../api-client.js";
3
- export declare function registerMathConceptTools(server: McpServer, api: ApiClient): void;
4
- //# sourceMappingURL=math-concepts.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"math-concepts.d.ts","sourceRoot":"","sources":["../../src/tools/math-concepts.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAkB,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAgElE,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,GAAG,IAAI,CA0HhF"}
@@ -1,158 +0,0 @@
1
- import { z } from "zod";
2
- import { ApiClientError } from "../api-client.js";
3
- /**
4
- * 数学知识库相关 MCP 工具:math_concept.list / get / create / update / delete / find_or_suggest
5
- *
6
- * 独立于 post 和 glossary 工具,数学概念有额外的 difficulty/formulas/notation/prerequisites 字段,
7
- * 且语义上应与文章和术语区分,AI 使用时更清晰。
8
- */
9
- /** 数学概念字段 schema */
10
- const mathConceptFieldsShape = {
11
- title: z.string().min(1).describe("数学概念标题,必填").optional(),
12
- slug: z.string().describe("概念 slug;为空时由后端自动生成").optional(),
13
- status: z.enum(["draft", "published"]).describe("状态").optional(),
14
- publishedAt: z.string().describe("ISO 时间字符串").optional(),
15
- categoryIds: z.array(z.string().uuid()).describe("分类 id 列表").optional(),
16
- tagIds: z.array(z.string().uuid()).describe("标签 id 列表").optional(),
17
- excerpt: z.string().describe("摘要,最长 400 字符").optional(),
18
- content: z.string().describe("Markdown 正文,数学概念的完整说明,建议包含 Live Demo 可视化").optional(),
19
- seoTitle: z.string().describe("SEO 标题").optional(),
20
- seoDescription: z.string().describe("SEO 描述").optional(),
21
- terms: z.string().describe("匹配词,多个用 | 分隔,如 '贝叶斯定理|Bayes' theorem|贝叶斯公式'").optional(),
22
- brief: z.string().describe("简短释义(≤200字),用于 hover tooltip").optional(),
23
- autoLink: z.boolean().describe("是否启用自动高亮匹配").optional(),
24
- difficulty: z.number().int().min(1).max(5).describe("难度等级 1-5(1=入门, 2=基础, 3=进阶, 4=高级, 5=专家)").optional(),
25
- formulas: z.string().describe("核心公式(LaTeX),列表页预览用").optional(),
26
- notation: z.string().describe("符号说明,如 'n: 样本数, μ: 均值'").optional(),
27
- prerequisites: z.string().describe("前置知识 slug 列表(逗号分隔)").optional(),
28
- };
29
- function toToolText(value) {
30
- return {
31
- content: [
32
- {
33
- type: "text",
34
- text: typeof value === "string" ? value : JSON.stringify(value, null, 2),
35
- },
36
- ],
37
- };
38
- }
39
- function toToolError(error) {
40
- let text;
41
- if (error instanceof ApiClientError) {
42
- const lines = [`HTTP ${error.status}: ${error.message}`];
43
- if (error.issues !== undefined) {
44
- lines.push("Validation issues:");
45
- lines.push(JSON.stringify(error.issues, null, 2));
46
- }
47
- text = lines.join("\n");
48
- }
49
- else if (error instanceof Error) {
50
- text = error.message;
51
- }
52
- else {
53
- text = String(error);
54
- }
55
- return {
56
- content: [{ type: "text", text }],
57
- isError: true,
58
- };
59
- }
60
- export function registerMathConceptTools(server, api) {
61
- // ── math_concept.list ──
62
- server.tool("math_concept_list", "列出数学知识库中的概念。支持按状态筛选、难度筛选和关键词搜索。", {
63
- status: z.enum(["draft", "published"]).describe("按状态筛选").optional(),
64
- difficulty: z.number().int().min(1).max(5).describe("按难度筛选(1-5)").optional(),
65
- search: z.string().describe("搜索关键词(匹配概念名/匹配词)").optional(),
66
- page: z.number().int().positive().describe("页码,默认 1").optional(),
67
- pageSize: z.number().int().positive().max(100).describe("每页数量,默认 20").optional(),
68
- }, async ({ status, difficulty, search, page, pageSize }) => {
69
- try {
70
- const params = new URLSearchParams();
71
- if (status)
72
- params.set("status", status);
73
- if (difficulty)
74
- params.set("difficulty", String(difficulty));
75
- if (search)
76
- params.set("search", search);
77
- if (page)
78
- params.set("page", String(page));
79
- if (pageSize)
80
- params.set("pageSize", String(pageSize));
81
- const result = await api.get(`/api/mcp/math-concepts?action=list&${params.toString()}`);
82
- return toToolText(result);
83
- }
84
- catch (error) {
85
- return toToolError(error);
86
- }
87
- });
88
- // ── math_concept.get ──
89
- server.tool("math_concept_get", "获取一个数学概念的完整可编辑数据,包含匹配词、简短释义、难度、公式、符号说明等。", {
90
- id: z.string().uuid().describe("数学概念 id (uuid)"),
91
- }, async ({ id }) => {
92
- try {
93
- const result = await api.get(`/api/mcp/math-concepts?action=get&id=${id}`);
94
- return toToolText(result);
95
- }
96
- catch (error) {
97
- return toToolError(error);
98
- }
99
- });
100
- // ── math_concept.create ──
101
- server.tool("math_concept_create", "创建一个新的数学概念条目。terms(匹配词)、brief(简短释义)、difficulty(难度)为关键字段。content 建议包含 Live Demo 可视化。", mathConceptFieldsShape, async (params) => {
102
- try {
103
- const result = await api.post("/api/mcp/math-concepts", {
104
- action: "create",
105
- data: params,
106
- });
107
- return toToolText(result);
108
- }
109
- catch (error) {
110
- return toToolError(error);
111
- }
112
- });
113
- // ── math_concept.update ──
114
- server.tool("math_concept_update", "更新一个已有的数学概念条目。需要传入完整字段。", {
115
- id: z.string().uuid().describe("数学概念 id (uuid)"),
116
- ...mathConceptFieldsShape,
117
- }, async ({ id, ...data }) => {
118
- try {
119
- const result = await api.post("/api/mcp/math-concepts", {
120
- action: "update",
121
- id,
122
- data,
123
- });
124
- return toToolText(result);
125
- }
126
- catch (error) {
127
- return toToolError(error);
128
- }
129
- });
130
- // ── math_concept.delete ──
131
- server.tool("math_concept_delete", "永久删除一个数学概念条目。请谨慎使用。", {
132
- id: z.string().uuid().describe("数学概念 id (uuid)"),
133
- }, async ({ id }) => {
134
- try {
135
- const result = await api.post("/api/mcp/math-concepts", {
136
- action: "delete",
137
- id,
138
- });
139
- return toToolText(result);
140
- }
141
- catch (error) {
142
- return toToolError(error);
143
- }
144
- });
145
- // ── math_concept.find_or_suggest ──
146
- server.tool("math_concept_find_or_suggest", "写文章时传入数学关键词,查找是否已有匹配的数学概念。如果有则返回概念信息(可直接引用),如果没有则提示创建新概念。这是写数学相关文章时推荐先调用的工具。", {
147
- keyword: z.string().min(1).describe("要查找的数学关键词,如 '贝叶斯' 或 'gradient descent'"),
148
- }, async ({ keyword }) => {
149
- try {
150
- const result = await api.get(`/api/mcp/math-concepts?action=find_or_suggest&keyword=${encodeURIComponent(keyword)}`);
151
- return toToolText(result);
152
- }
153
- catch (error) {
154
- return toToolError(error);
155
- }
156
- });
157
- }
158
- //# sourceMappingURL=math-concepts.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"math-concepts.js","sourceRoot":"","sources":["../../src/tools/math-concepts.ts"],"names":[],"mappings":"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"}
@@ -1,35 +0,0 @@
1
- import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
- import { type ApiClient } from "../api-client.js";
3
- /** 把任意值序列化为可读 JSON 文本,用于 tool result */
4
- declare function toToolText(value: unknown): {
5
- content: Array<{
6
- type: "text";
7
- text: string;
8
- }>;
9
- };
10
- /** 把 ApiClientError 转成可读的 tool error result,让 AI 能在对话里看到原因 */
11
- declare function toToolError(error: unknown): {
12
- content: Array<{
13
- type: "text";
14
- text: string;
15
- }>;
16
- isError: true;
17
- };
18
- /** 在 tool 的 callback 内统一接住异常,避免抛出去后 SDK 给客户端 generic 错误 */
19
- declare function safe<T>(fn: () => Promise<T>): Promise<{
20
- content: Array<{
21
- type: "text";
22
- text: string;
23
- }>;
24
- isError?: true;
25
- }>;
26
- /** 注册全部 post.* 工具 */
27
- export declare function registerPostTools(server: McpServer, api: ApiClient): void;
28
- /** 工具内部辅助:暴露给 build.ts / validate.ts 等共享 toToolText/toToolError */
29
- export declare const toolReplyHelpers: {
30
- toToolText: typeof toToolText;
31
- toToolError: typeof toToolError;
32
- safe: typeof safe;
33
- };
34
- export {};
35
- //# sourceMappingURL=posts.d.ts.map