@frase/mcp-server 0.1.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 (115) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/README.md +262 -0
  3. package/dist/api-client.d.ts +93 -0
  4. package/dist/api-client.d.ts.map +1 -0
  5. package/dist/api-client.js +213 -0
  6. package/dist/api-client.js.map +1 -0
  7. package/dist/cache.d.ts +52 -0
  8. package/dist/cache.d.ts.map +1 -0
  9. package/dist/cache.js +97 -0
  10. package/dist/cache.js.map +1 -0
  11. package/dist/config.d.ts +17 -0
  12. package/dist/config.d.ts.map +1 -0
  13. package/dist/config.js +31 -0
  14. package/dist/config.js.map +1 -0
  15. package/dist/formatter.d.ts +47 -0
  16. package/dist/formatter.d.ts.map +1 -0
  17. package/dist/formatter.js +136 -0
  18. package/dist/formatter.js.map +1 -0
  19. package/dist/index.d.ts +32 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +292 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/prompts/competitor-analysis.d.ts +18 -0
  24. package/dist/prompts/competitor-analysis.d.ts.map +1 -0
  25. package/dist/prompts/competitor-analysis.js +71 -0
  26. package/dist/prompts/competitor-analysis.js.map +1 -0
  27. package/dist/prompts/content-audit.d.ts +18 -0
  28. package/dist/prompts/content-audit.d.ts.map +1 -0
  29. package/dist/prompts/content-audit.js +67 -0
  30. package/dist/prompts/content-audit.js.map +1 -0
  31. package/dist/prompts/create-seo-article.d.ts +19 -0
  32. package/dist/prompts/create-seo-article.d.ts.map +1 -0
  33. package/dist/prompts/create-seo-article.js +78 -0
  34. package/dist/prompts/create-seo-article.js.map +1 -0
  35. package/dist/prompts/index.d.ts +18 -0
  36. package/dist/prompts/index.d.ts.map +1 -0
  37. package/dist/prompts/index.js +52 -0
  38. package/dist/prompts/index.js.map +1 -0
  39. package/dist/prompts/keyword-research.d.ts +18 -0
  40. package/dist/prompts/keyword-research.d.ts.map +1 -0
  41. package/dist/prompts/keyword-research.js +72 -0
  42. package/dist/prompts/keyword-research.js.map +1 -0
  43. package/dist/prompts/optimize-content.d.ts +18 -0
  44. package/dist/prompts/optimize-content.d.ts.map +1 -0
  45. package/dist/prompts/optimize-content.js +59 -0
  46. package/dist/prompts/optimize-content.js.map +1 -0
  47. package/dist/resources/briefs.d.ts +26 -0
  48. package/dist/resources/briefs.d.ts.map +1 -0
  49. package/dist/resources/briefs.js +144 -0
  50. package/dist/resources/briefs.js.map +1 -0
  51. package/dist/resources/content.d.ts +26 -0
  52. package/dist/resources/content.d.ts.map +1 -0
  53. package/dist/resources/content.js +128 -0
  54. package/dist/resources/content.js.map +1 -0
  55. package/dist/resources/index.d.ts +32 -0
  56. package/dist/resources/index.d.ts.map +1 -0
  57. package/dist/resources/index.js +85 -0
  58. package/dist/resources/index.js.map +1 -0
  59. package/dist/resources/sites.d.ts +26 -0
  60. package/dist/resources/sites.d.ts.map +1 -0
  61. package/dist/resources/sites.js +108 -0
  62. package/dist/resources/sites.js.map +1 -0
  63. package/dist/tools/ai-visibility.d.ts +25 -0
  64. package/dist/tools/ai-visibility.d.ts.map +1 -0
  65. package/dist/tools/ai-visibility.js +537 -0
  66. package/dist/tools/ai-visibility.js.map +1 -0
  67. package/dist/tools/analytics.d.ts +17 -0
  68. package/dist/tools/analytics.d.ts.map +1 -0
  69. package/dist/tools/analytics.js +311 -0
  70. package/dist/tools/analytics.js.map +1 -0
  71. package/dist/tools/audits.d.ts +73 -0
  72. package/dist/tools/audits.d.ts.map +1 -0
  73. package/dist/tools/audits.js +345 -0
  74. package/dist/tools/audits.js.map +1 -0
  75. package/dist/tools/briefs.d.ts +63 -0
  76. package/dist/tools/briefs.d.ts.map +1 -0
  77. package/dist/tools/briefs.js +276 -0
  78. package/dist/tools/briefs.js.map +1 -0
  79. package/dist/tools/content.d.ts +51 -0
  80. package/dist/tools/content.d.ts.map +1 -0
  81. package/dist/tools/content.js +233 -0
  82. package/dist/tools/content.js.map +1 -0
  83. package/dist/tools/index.d.ts +29 -0
  84. package/dist/tools/index.d.ts.map +1 -0
  85. package/dist/tools/index.js +96 -0
  86. package/dist/tools/index.js.map +1 -0
  87. package/dist/tools/jobs.d.ts +22 -0
  88. package/dist/tools/jobs.d.ts.map +1 -0
  89. package/dist/tools/jobs.js +124 -0
  90. package/dist/tools/jobs.js.map +1 -0
  91. package/dist/tools/optimizations.d.ts +19 -0
  92. package/dist/tools/optimizations.d.ts.map +1 -0
  93. package/dist/tools/optimizations.js +339 -0
  94. package/dist/tools/optimizations.js.map +1 -0
  95. package/dist/tools/research.d.ts +41 -0
  96. package/dist/tools/research.d.ts.map +1 -0
  97. package/dist/tools/research.js +151 -0
  98. package/dist/tools/research.js.map +1 -0
  99. package/dist/tools/serp.d.ts +15 -0
  100. package/dist/tools/serp.d.ts.map +1 -0
  101. package/dist/tools/serp.js +267 -0
  102. package/dist/tools/serp.js.map +1 -0
  103. package/dist/tools/sites.d.ts +31 -0
  104. package/dist/tools/sites.d.ts.map +1 -0
  105. package/dist/tools/sites.js +83 -0
  106. package/dist/tools/sites.js.map +1 -0
  107. package/dist/tools/webhooks.d.ts +19 -0
  108. package/dist/tools/webhooks.d.ts.map +1 -0
  109. package/dist/tools/webhooks.js +350 -0
  110. package/dist/tools/webhooks.js.map +1 -0
  111. package/dist/types.d.ts +167 -0
  112. package/dist/types.d.ts.map +1 -0
  113. package/dist/types.js +5 -0
  114. package/dist/types.js.map +1 -0
  115. package/package.json +67 -0
@@ -0,0 +1,276 @@
1
+ /**
2
+ * Brief tools
3
+ */
4
+ import { z } from "zod";
5
+ import { CACHE_TTL } from "../cache.js";
6
+ import { formatTable, formatStatus, formatDate, formatPagination, formatKeyValue, truncate, } from "../formatter.js";
7
+ // ============================================
8
+ // list_briefs
9
+ // ============================================
10
+ const listBriefsInputSchema = z.object({
11
+ page: z.number().min(1).optional().default(1),
12
+ page_size: z.number().min(1).max(100).optional().default(20),
13
+ status: z
14
+ .enum(["draft", "pending", "research", "ready", "generating", "completed"])
15
+ .optional(),
16
+ });
17
+ export const listBriefsTool = {
18
+ name: "list_briefs",
19
+ description: "List content briefs in your account. Briefs contain research, outlines, and settings for generating content.",
20
+ inputSchema: {
21
+ type: "object",
22
+ properties: {
23
+ page: {
24
+ type: "number",
25
+ description: "Page number (default: 1)",
26
+ },
27
+ page_size: {
28
+ type: "number",
29
+ description: "Items per page, max 100 (default: 20)",
30
+ },
31
+ status: {
32
+ type: "string",
33
+ enum: ["draft", "pending", "research", "ready", "generating", "completed"],
34
+ description: "Filter by status",
35
+ },
36
+ },
37
+ },
38
+ };
39
+ export async function executeListBriefs(input, context) {
40
+ const parsed = listBriefsInputSchema.safeParse(input || {});
41
+ if (!parsed.success) {
42
+ return {
43
+ success: false,
44
+ markdown: `**Error:** Invalid input - ${parsed.error.message}`,
45
+ };
46
+ }
47
+ const { page, page_size, status } = parsed.data;
48
+ try {
49
+ const params = { page, page_size };
50
+ if (status)
51
+ params.status = status;
52
+ const response = await context.client.get("/briefs", params, CACHE_TTL.lists);
53
+ const headers = ["Topic", "Type", "Status", "Keywords", "Created"];
54
+ const rows = response.data.map((brief) => [
55
+ truncate(brief.topic, 40),
56
+ brief.content_type || "blog",
57
+ formatStatus(brief.status),
58
+ brief.target_keywords?.slice(0, 2).join(", ") || "-",
59
+ formatDate(brief.created_at),
60
+ ]);
61
+ const table = formatTable(headers, rows);
62
+ const pagination = formatPagination(response.pagination);
63
+ return {
64
+ success: true,
65
+ markdown: `## Briefs (Page ${page})\n\n${table}${pagination}`,
66
+ data: response,
67
+ };
68
+ }
69
+ catch (error) {
70
+ const message = error instanceof Error ? error.message : "Unknown error";
71
+ return {
72
+ success: false,
73
+ markdown: `**Error:** Failed to list briefs - ${message}`,
74
+ };
75
+ }
76
+ }
77
+ // ============================================
78
+ // create_brief
79
+ // ============================================
80
+ const createBriefInputSchema = z.object({
81
+ topic: z.string().min(1).max(500),
82
+ target_keywords: z.array(z.string()).optional(),
83
+ content_type: z
84
+ .enum(["blog", "guide", "landing", "product", "comparison", "listicle"])
85
+ .optional()
86
+ .default("blog"),
87
+ search_intent: z.string().optional(),
88
+ target_word_count: z.number().positive().optional(),
89
+ generate_outline: z.boolean().optional().default(false),
90
+ competitor_urls: z.array(z.string().url()).optional(),
91
+ });
92
+ export const createBriefTool = {
93
+ name: "create_brief",
94
+ description: "Create a new content brief. Set generate_outline=true to automatically research the topic and generate an outline.",
95
+ inputSchema: {
96
+ type: "object",
97
+ properties: {
98
+ topic: {
99
+ type: "string",
100
+ description: "The topic or title for the brief (required, max 500 chars)",
101
+ },
102
+ target_keywords: {
103
+ type: "array",
104
+ items: { type: "string" },
105
+ description: "Target keywords to optimize for",
106
+ },
107
+ content_type: {
108
+ type: "string",
109
+ enum: ["blog", "guide", "landing", "product", "comparison", "listicle"],
110
+ description: "Type of content (default: blog)",
111
+ },
112
+ search_intent: {
113
+ type: "string",
114
+ description: "Search intent (informational, transactional, etc.)",
115
+ },
116
+ target_word_count: {
117
+ type: "number",
118
+ description: "Target word count for the content",
119
+ },
120
+ generate_outline: {
121
+ type: "boolean",
122
+ description: "Auto-generate outline by researching the topic (default: false)",
123
+ },
124
+ competitor_urls: {
125
+ type: "array",
126
+ items: { type: "string" },
127
+ description: "Competitor URLs to analyze for the outline",
128
+ },
129
+ },
130
+ required: ["topic"],
131
+ },
132
+ };
133
+ export async function executeCreateBrief(input, context) {
134
+ const parsed = createBriefInputSchema.safeParse(input);
135
+ if (!parsed.success) {
136
+ return {
137
+ success: false,
138
+ markdown: `**Error:** Invalid input - ${parsed.error.message}`,
139
+ };
140
+ }
141
+ const data = parsed.data;
142
+ try {
143
+ const response = await context.client.post("/briefs", {
144
+ topic: data.topic,
145
+ target_keywords: data.target_keywords,
146
+ content_type: data.content_type,
147
+ search_intent: data.search_intent,
148
+ target_word_count: data.target_word_count,
149
+ generate_outline: data.generate_outline,
150
+ competitor_urls: data.competitor_urls,
151
+ });
152
+ const brief = response.data;
153
+ let markdown = `## Brief Created\n\n`;
154
+ markdown += formatKeyValue({
155
+ ID: brief.id,
156
+ Topic: brief.topic,
157
+ Type: brief.content_type,
158
+ Status: brief.status,
159
+ Keywords: brief.target_keywords?.join(", ") || "None",
160
+ });
161
+ if (data.generate_outline && brief.status_url) {
162
+ markdown += `\n\n**Outline generation started.** Check status with:\n`;
163
+ markdown += `\`get_job_status\` with \`id: "${brief.id}"\` and \`type: "brief"\``;
164
+ }
165
+ return {
166
+ success: true,
167
+ markdown,
168
+ data: response,
169
+ };
170
+ }
171
+ catch (error) {
172
+ const message = error instanceof Error ? error.message : "Unknown error";
173
+ return {
174
+ success: false,
175
+ markdown: `**Error:** Failed to create brief - ${message}`,
176
+ };
177
+ }
178
+ }
179
+ // ============================================
180
+ // get_brief
181
+ // ============================================
182
+ const getBriefInputSchema = z.object({
183
+ id: z.string().min(1),
184
+ });
185
+ export const getBriefTool = {
186
+ name: "get_brief",
187
+ description: "Get details of a specific brief, including its outline and research data.",
188
+ inputSchema: {
189
+ type: "object",
190
+ properties: {
191
+ id: {
192
+ type: "string",
193
+ description: "The brief ID",
194
+ },
195
+ },
196
+ required: ["id"],
197
+ },
198
+ };
199
+ export async function executeGetBrief(input, context) {
200
+ const parsed = getBriefInputSchema.safeParse(input);
201
+ if (!parsed.success) {
202
+ return {
203
+ success: false,
204
+ markdown: `**Error:** Invalid input - ${parsed.error.message}`,
205
+ };
206
+ }
207
+ const { id } = parsed.data;
208
+ try {
209
+ const response = await context.client.get(`/briefs/${id}`, undefined, CACHE_TTL.resources);
210
+ const brief = response.data;
211
+ let markdown = `## Brief: ${brief.topic}\n\n`;
212
+ markdown += formatKeyValue({
213
+ ID: brief.id,
214
+ Status: brief.status,
215
+ Type: brief.content_type,
216
+ "Target Word Count": brief.target_word_count,
217
+ "Search Intent": brief.search_intent,
218
+ Keywords: brief.target_keywords?.join(", ") || "None",
219
+ Created: formatDate(brief.created_at),
220
+ });
221
+ // Outline
222
+ if (brief.outline) {
223
+ markdown += `\n\n### Outline\n\n`;
224
+ if (Array.isArray(brief.outline)) {
225
+ for (const section of brief.outline) {
226
+ if (section.heading) {
227
+ markdown += `- ${section.heading}\n`;
228
+ }
229
+ }
230
+ }
231
+ else {
232
+ markdown += "```json\n" + JSON.stringify(brief.outline, null, 2) + "\n```";
233
+ }
234
+ }
235
+ // PAA Questions
236
+ if (brief.paa_questions && brief.paa_questions.length > 0) {
237
+ markdown += `\n\n### People Also Ask\n\n`;
238
+ for (const q of brief.paa_questions) {
239
+ markdown += `- ${q}\n`;
240
+ }
241
+ }
242
+ // SERP Results
243
+ if (brief.serp_results && brief.serp_results.length > 0) {
244
+ markdown += `\n\n### Top SERP Results\n\n`;
245
+ for (const result of brief.serp_results.slice(0, 5)) {
246
+ markdown += `- [${result.title}](${result.url})\n`;
247
+ }
248
+ }
249
+ return {
250
+ success: true,
251
+ markdown,
252
+ data: response,
253
+ };
254
+ }
255
+ catch (error) {
256
+ const message = error instanceof Error ? error.message : "Unknown error";
257
+ return {
258
+ success: false,
259
+ markdown: `**Error:** Failed to get brief - ${message}`,
260
+ };
261
+ }
262
+ }
263
+ // ============================================
264
+ // Export all brief tools
265
+ // ============================================
266
+ export const briefTools = [
267
+ listBriefsTool,
268
+ createBriefTool,
269
+ getBriefTool,
270
+ ];
271
+ export const briefExecutors = {
272
+ list_briefs: executeListBriefs,
273
+ create_brief: executeCreateBrief,
274
+ get_brief: executeGetBrief,
275
+ };
276
+ //# sourceMappingURL=briefs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"briefs.js","sourceRoot":"","sources":["../../src/tools/briefs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Content tools
3
+ */
4
+ import { z } from "zod";
5
+ import type { McpToolDefinition, ToolContext, ToolResult } from "../types.js";
6
+ declare const listContentInputSchema: z.ZodObject<{
7
+ page: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
8
+ page_size: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
9
+ status: z.ZodOptional<z.ZodEnum<["draft", "generating", "review", "published", "archived"]>>;
10
+ }, "strip", z.ZodTypeAny, {
11
+ page: number;
12
+ page_size: number;
13
+ status?: "draft" | "generating" | "review" | "published" | "archived" | undefined;
14
+ }, {
15
+ page?: number | undefined;
16
+ page_size?: number | undefined;
17
+ status?: "draft" | "generating" | "review" | "published" | "archived" | undefined;
18
+ }>;
19
+ export type ListContentInput = z.infer<typeof listContentInputSchema>;
20
+ export declare const listContentTool: McpToolDefinition;
21
+ export declare function executeListContent(input: unknown, context: ToolContext): Promise<ToolResult>;
22
+ declare const getContentInputSchema: z.ZodObject<{
23
+ id: z.ZodString;
24
+ include_body: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
25
+ }, "strip", z.ZodTypeAny, {
26
+ id: string;
27
+ include_body: boolean;
28
+ }, {
29
+ id: string;
30
+ include_body?: boolean | undefined;
31
+ }>;
32
+ export type GetContentInput = z.infer<typeof getContentInputSchema>;
33
+ export declare const getContentTool: McpToolDefinition;
34
+ export declare function executeGetContent(input: unknown, context: ToolContext): Promise<ToolResult>;
35
+ declare const generateContentInputSchema: z.ZodObject<{
36
+ brief_id: z.ZodString;
37
+ generate_images: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
38
+ }, "strip", z.ZodTypeAny, {
39
+ brief_id: string;
40
+ generate_images: boolean;
41
+ }, {
42
+ brief_id: string;
43
+ generate_images?: boolean | undefined;
44
+ }>;
45
+ export type GenerateContentInput = z.infer<typeof generateContentInputSchema>;
46
+ export declare const generateContentTool: McpToolDefinition;
47
+ export declare function executeGenerateContent(input: unknown, context: ToolContext): Promise<ToolResult>;
48
+ export declare const contentTools: McpToolDefinition[];
49
+ export declare const contentExecutors: Record<string, (input: unknown, context: ToolContext) => Promise<ToolResult>>;
50
+ export {};
51
+ //# sourceMappingURL=content.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../../src/tools/content.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,EAAiC,MAAM,aAAa,CAAC;AAgB7G,QAAA,MAAM,sBAAsB;;;;;;;;;;;;EAI1B,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE,eAAO,MAAM,eAAe,EAAE,iBAsB7B,CAAC;AAEF,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CA4CrB;AAMD,QAAA,MAAM,qBAAqB;;;;;;;;;EAGzB,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,eAAO,MAAM,cAAc,EAAE,iBAiB5B,CAAC;AAWF,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CAqErB;AAMD,QAAA,MAAM,0BAA0B;;;;;;;;;EAG9B,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE9E,eAAO,MAAM,mBAAmB,EAAE,iBAkBjC,CAAC;AAaF,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CA2CrB;AAMD,eAAO,MAAM,YAAY,EAAE,iBAAiB,EAI3C,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,MAAM,CACnC,MAAM,EACN,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,UAAU,CAAC,CAK9D,CAAC"}
@@ -0,0 +1,233 @@
1
+ /**
2
+ * Content tools
3
+ */
4
+ import { z } from "zod";
5
+ import { CACHE_TTL } from "../cache.js";
6
+ import { formatTable, formatStatus, formatDate, formatPagination, formatKeyValue, formatWordCount, truncate, } from "../formatter.js";
7
+ // ============================================
8
+ // list_content
9
+ // ============================================
10
+ const listContentInputSchema = z.object({
11
+ page: z.number().min(1).optional().default(1),
12
+ page_size: z.number().min(1).max(100).optional().default(20),
13
+ status: z.enum(["draft", "generating", "review", "published", "archived"]).optional(),
14
+ });
15
+ export const listContentTool = {
16
+ name: "list_content",
17
+ description: "List content items in your account. Content can be drafts, in review, published, or archived.",
18
+ inputSchema: {
19
+ type: "object",
20
+ properties: {
21
+ page: {
22
+ type: "number",
23
+ description: "Page number (default: 1)",
24
+ },
25
+ page_size: {
26
+ type: "number",
27
+ description: "Items per page, max 100 (default: 20)",
28
+ },
29
+ status: {
30
+ type: "string",
31
+ enum: ["draft", "generating", "review", "published", "archived"],
32
+ description: "Filter by status",
33
+ },
34
+ },
35
+ },
36
+ };
37
+ export async function executeListContent(input, context) {
38
+ const parsed = listContentInputSchema.safeParse(input || {});
39
+ if (!parsed.success) {
40
+ return {
41
+ success: false,
42
+ markdown: `**Error:** Invalid input - ${parsed.error.message}`,
43
+ };
44
+ }
45
+ const { page, page_size, status } = parsed.data;
46
+ try {
47
+ const params = { page, page_size };
48
+ if (status)
49
+ params.status = status;
50
+ const response = await context.client.get("/content", params, CACHE_TTL.lists);
51
+ const headers = ["Title", "Status", "Words", "Updated"];
52
+ const rows = response.data.map((c) => [
53
+ truncate(c.title || "Untitled", 40),
54
+ formatStatus(c.status),
55
+ formatWordCount(c.word_count),
56
+ c.updated_at ? formatDate(c.updated_at) : formatDate(c.created_at),
57
+ ]);
58
+ const table = formatTable(headers, rows);
59
+ const pagination = formatPagination(response.pagination);
60
+ return {
61
+ success: true,
62
+ markdown: `## Content (Page ${page})\n\n${table}${pagination}`,
63
+ data: response,
64
+ };
65
+ }
66
+ catch (error) {
67
+ const message = error instanceof Error ? error.message : "Unknown error";
68
+ return {
69
+ success: false,
70
+ markdown: `**Error:** Failed to list content - ${message}`,
71
+ };
72
+ }
73
+ }
74
+ // ============================================
75
+ // get_content
76
+ // ============================================
77
+ const getContentInputSchema = z.object({
78
+ id: z.string().min(1),
79
+ include_body: z.boolean().optional().default(true),
80
+ });
81
+ export const getContentTool = {
82
+ name: "get_content",
83
+ description: "Get details of a specific content item, including its full body text.",
84
+ inputSchema: {
85
+ type: "object",
86
+ properties: {
87
+ id: {
88
+ type: "string",
89
+ description: "The content ID",
90
+ },
91
+ include_body: {
92
+ type: "boolean",
93
+ description: "Include the full content body (default: true)",
94
+ },
95
+ },
96
+ required: ["id"],
97
+ },
98
+ };
99
+ export async function executeGetContent(input, context) {
100
+ const parsed = getContentInputSchema.safeParse(input);
101
+ if (!parsed.success) {
102
+ return {
103
+ success: false,
104
+ markdown: `**Error:** Invalid input - ${parsed.error.message}`,
105
+ };
106
+ }
107
+ const { id, include_body } = parsed.data;
108
+ try {
109
+ const response = await context.client.get(`/content/${id}`, undefined, CACHE_TTL.resources);
110
+ const content = response.data;
111
+ let markdown = `## ${content.title || "Untitled Content"}\n\n`;
112
+ markdown += formatKeyValue({
113
+ ID: content.id,
114
+ Status: content.status,
115
+ "Word Count": content.word_count,
116
+ Type: content.type,
117
+ Slug: content.slug,
118
+ Keywords: content.target_keywords?.join(", ") || "None",
119
+ Created: formatDate(content.created_at),
120
+ Updated: content.updated_at ? formatDate(content.updated_at) : null,
121
+ Published: content.published_at ? formatDate(content.published_at) : null,
122
+ });
123
+ // Meta tags
124
+ if (content.meta_title || content.meta_description) {
125
+ markdown += `\n\n### Meta Tags\n\n`;
126
+ if (content.meta_title) {
127
+ markdown += `- **Title:** ${content.meta_title}\n`;
128
+ }
129
+ if (content.meta_description) {
130
+ markdown += `- **Description:** ${content.meta_description}\n`;
131
+ }
132
+ }
133
+ // Content body
134
+ if (include_body && content.body) {
135
+ markdown += `\n\n### Content Body\n\n`;
136
+ // Truncate very long content
137
+ if (content.body.length > 5000) {
138
+ markdown += content.body.slice(0, 5000);
139
+ markdown += `\n\n*... (truncated, ${content.word_count} words total)*`;
140
+ }
141
+ else {
142
+ markdown += content.body;
143
+ }
144
+ }
145
+ return {
146
+ success: true,
147
+ markdown,
148
+ data: response,
149
+ };
150
+ }
151
+ catch (error) {
152
+ const message = error instanceof Error ? error.message : "Unknown error";
153
+ return {
154
+ success: false,
155
+ markdown: `**Error:** Failed to get content - ${message}`,
156
+ };
157
+ }
158
+ }
159
+ // ============================================
160
+ // generate_content
161
+ // ============================================
162
+ const generateContentInputSchema = z.object({
163
+ brief_id: z.string().min(1),
164
+ generate_images: z.boolean().optional().default(false),
165
+ });
166
+ export const generateContentTool = {
167
+ name: "generate_content",
168
+ description: "Generate content from an existing brief. The brief must have a complete outline. Returns a content ID that can be used to track generation progress via the get_job_status tool.",
169
+ inputSchema: {
170
+ type: "object",
171
+ properties: {
172
+ brief_id: {
173
+ type: "string",
174
+ description: "The ID of the brief to generate content from",
175
+ },
176
+ generate_images: {
177
+ type: "boolean",
178
+ description: "Generate a hero image for the content (default: false)",
179
+ },
180
+ },
181
+ required: ["brief_id"],
182
+ },
183
+ };
184
+ export async function executeGenerateContent(input, context) {
185
+ const parsed = generateContentInputSchema.safeParse(input);
186
+ if (!parsed.success) {
187
+ return {
188
+ success: false,
189
+ markdown: `**Error:** Invalid input - ${parsed.error.message}`,
190
+ };
191
+ }
192
+ const { brief_id, generate_images } = parsed.data;
193
+ try {
194
+ const response = await context.client.post("/content/generate", { brief_id, generate_images });
195
+ const content = response.data;
196
+ let markdown = `## Content Generation Started\n\n`;
197
+ markdown += formatKeyValue({
198
+ "Content ID": content.id,
199
+ "Brief ID": content.brief_id,
200
+ Title: content.title,
201
+ Status: formatStatus(content.status),
202
+ "Generate Images": generate_images ? "Yes" : "No",
203
+ Created: formatDate(content.created_at),
204
+ });
205
+ markdown += `\n\n> **Tip:** Use \`get_job_status\` with the content ID to track generation progress.`;
206
+ return {
207
+ success: true,
208
+ markdown,
209
+ data: response,
210
+ };
211
+ }
212
+ catch (error) {
213
+ const message = error instanceof Error ? error.message : "Unknown error";
214
+ return {
215
+ success: false,
216
+ markdown: `**Error:** Failed to generate content - ${message}`,
217
+ };
218
+ }
219
+ }
220
+ // ============================================
221
+ // Export all content tools
222
+ // ============================================
223
+ export const contentTools = [
224
+ listContentTool,
225
+ getContentTool,
226
+ generateContentTool,
227
+ ];
228
+ export const contentExecutors = {
229
+ list_content: executeListContent,
230
+ get_content: executeGetContent,
231
+ generate_content: executeGenerateContent,
232
+ };
233
+ //# sourceMappingURL=content.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content.js","sourceRoot":"","sources":["../../src/tools/content.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EACL,WAAW,EACX,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,QAAQ,GACT,MAAM,iBAAiB,CAAC;AAEzB,+CAA+C;AAC/C,eAAe;AACf,+CAA+C;AAE/C,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAC7C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IAC5D,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE;CACtF,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,eAAe,GAAsB;IAChD,IAAI,EAAE,cAAc;IACpB,WAAW,EACT,+FAA+F;IACjG,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,0BAA0B;aACxC;YACD,SAAS,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,uCAAuC;aACrD;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,CAAC;gBAChE,WAAW,EAAE,kBAAkB;aAChC;SACF;KACF;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,KAAc,EACd,OAAoB;IAEpB,MAAM,MAAM,GAAG,sBAAsB,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAC7D,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO;YACL,OAAO,EAAE,KAAK;YACd,QAAQ,EAAE,8BAA8B,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE;SAC/D,CAAC;IACJ,CAAC;IAED,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IAEhD,IAAI,CAAC;QACH,MAAM,MAAM,GAAoC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QACpE,IAAI,MAAM;YAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;QAEnC,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,GAAG,CACvC,UAAU,EACV,MAAM,EACN,SAAS,CAAC,KAAK,CAChB,CAAC;QAEF,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;QACxD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACpC,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,UAAU,EAAE,EAAE,CAAC;YACnC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC;YACtB,eAAe,CAAC,CAAC,CAAC,UAAU,CAAC;YAC7B,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC;SACnE,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACzC,MAAM,UAAU,GAAG,gBAAgB,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAEzD,OAAO;YACL,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,oBAAoB,IAAI,QAAQ,KAAK,GAAG,UAAU,EAAE;YAC9D,IAAI,EAAE,QAAQ;SACf,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QACzE,OAAO;YACL,OAAO,EAAE,KAAK;YACd,QAAQ,EAAE,uCAAuC,OAAO,EAAE;SAC3D,CAAC;IACJ,CAAC;AACH,CAAC;AAED,+CAA+C;AAC/C,cAAc;AACd,+CAA+C;AAE/C,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACrB,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;CACnD,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,cAAc,GAAsB;IAC/C,IAAI,EAAE,aAAa;IACnB,WAAW,EAAE,uEAAuE;IACpF,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,EAAE,EAAE;gBACF,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,gBAAgB;aAC9B;YACD,YAAY,EAAE;gBACZ,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,+CAA+C;aAC7D;SACF;QACD,QAAQ,EAAE,CAAC,IAAI,CAAC;KACjB;CACF,CAAC;AAWF,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,KAAc,EACd,OAAoB;IAEpB,MAAM,MAAM,GAAG,qBAAqB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACtD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO;YACL,OAAO,EAAE,KAAK;YACd,QAAQ,EAAE,8BAA8B,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE;SAC/D,CAAC;IACJ,CAAC;IAED,MAAM,EAAE,EAAE,EAAE,YAAY,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IAEzC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,GAAG,CACvC,YAAY,EAAE,EAAE,EAChB,SAAS,EACT,SAAS,CAAC,SAAS,CACpB,CAAC;QAEF,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC;QAE9B,IAAI,QAAQ,GAAG,MAAM,OAAO,CAAC,KAAK,IAAI,kBAAkB,MAAM,CAAC;QAE/D,QAAQ,IAAI,cAAc,CAAC;YACzB,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,YAAY,EAAE,OAAO,CAAC,UAAU;YAChC,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,QAAQ,EAAE,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM;YACvD,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC;YACvC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI;YACnE,SAAS,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI;SAC1E,CAAC,CAAC;QAEH,YAAY;QACZ,IAAI,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;YACnD,QAAQ,IAAI,uBAAuB,CAAC;YACpC,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;gBACvB,QAAQ,IAAI,gBAAgB,OAAO,CAAC,UAAU,IAAI,CAAC;YACrD,CAAC;YACD,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;gBAC7B,QAAQ,IAAI,sBAAsB,OAAO,CAAC,gBAAgB,IAAI,CAAC;YACjE,CAAC;QACH,CAAC;QAED,eAAe;QACf,IAAI,YAAY,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjC,QAAQ,IAAI,0BAA0B,CAAC;YACvC,6BAA6B;YAC7B,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC;gBAC/B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;gBACxC,QAAQ,IAAI,wBAAwB,OAAO,CAAC,UAAU,gBAAgB,CAAC;YACzE,CAAC;iBAAM,CAAC;gBACN,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;YAC3B,CAAC;QACH,CAAC;QAED,OAAO;YACL,OAAO,EAAE,IAAI;YACb,QAAQ;YACR,IAAI,EAAE,QAAQ;SACf,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QACzE,OAAO;YACL,OAAO,EAAE,KAAK;YACd,QAAQ,EAAE,sCAAsC,OAAO,EAAE;SAC1D,CAAC;IACJ,CAAC;AACH,CAAC;AAED,+CAA+C;AAC/C,mBAAmB;AACnB,+CAA+C;AAE/C,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,eAAe,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;CACvD,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,mBAAmB,GAAsB;IACpD,IAAI,EAAE,kBAAkB;IACxB,WAAW,EACT,kLAAkL;IACpL,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,8CAA8C;aAC5D;YACD,eAAe,EAAE;gBACf,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,wDAAwD;aACtE;SACF;QACD,QAAQ,EAAE,CAAC,UAAU,CAAC;KACvB;CACF,CAAC;AAaF,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,KAAc,EACd,OAAoB;IAEpB,MAAM,MAAM,GAAG,0BAA0B,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC3D,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO;YACL,OAAO,EAAE,KAAK;YACd,QAAQ,EAAE,8BAA8B,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE;SAC/D,CAAC;IACJ,CAAC;IAED,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IAElD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,IAAI,CACxC,mBAAmB,EACnB,EAAE,QAAQ,EAAE,eAAe,EAAE,CAC9B,CAAC;QAEF,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC;QAE9B,IAAI,QAAQ,GAAG,mCAAmC,CAAC;QACnD,QAAQ,IAAI,cAAc,CAAC;YACzB,YAAY,EAAE,OAAO,CAAC,EAAE;YACxB,UAAU,EAAE,OAAO,CAAC,QAAQ;YAC5B,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC;YACpC,iBAAiB,EAAE,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;YACjD,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC;SACxC,CAAC,CAAC;QAEH,QAAQ,IAAI,yFAAyF,CAAC;QAEtG,OAAO;YACL,OAAO,EAAE,IAAI;YACb,QAAQ;YACR,IAAI,EAAE,QAAQ;SACf,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QACzE,OAAO;YACL,OAAO,EAAE,KAAK;YACd,QAAQ,EAAE,2CAA2C,OAAO,EAAE;SAC/D,CAAC;IACJ,CAAC;AACH,CAAC;AAED,+CAA+C;AAC/C,2BAA2B;AAC3B,+CAA+C;AAE/C,MAAM,CAAC,MAAM,YAAY,GAAwB;IAC/C,eAAe;IACf,cAAc;IACd,mBAAmB;CACpB,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAGzB;IACF,YAAY,EAAE,kBAAkB;IAChC,WAAW,EAAE,iBAAiB;IAC9B,gBAAgB,EAAE,sBAAsB;CACzC,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Tool registry
3
+ *
4
+ * All MCP tools are registered here. Each tool module exports:
5
+ * - Tool definitions (McpToolDefinition[])
6
+ * - Executors (Record<string, ToolExecutor>)
7
+ */
8
+ import type { McpToolDefinition, ToolContext, ToolResult } from "../types.js";
9
+ /**
10
+ * All available MCP tools
11
+ */
12
+ export declare const ALL_TOOLS: McpToolDefinition[];
13
+ /**
14
+ * Tool executor mapping
15
+ */
16
+ export declare const TOOL_EXECUTORS: Record<string, (input: unknown, context: ToolContext) => Promise<ToolResult>>;
17
+ /**
18
+ * Get tool definition by name
19
+ */
20
+ export declare function getToolByName(name: string): McpToolDefinition | undefined;
21
+ /**
22
+ * Get tool executor by name
23
+ */
24
+ export declare function getToolExecutor(name: string): ((input: unknown, context: ToolContext) => Promise<ToolResult>) | undefined;
25
+ /**
26
+ * Get total tool count
27
+ */
28
+ export declare function getToolCount(): number;
29
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAqB9E;;GAEG;AACH,eAAO,MAAM,SAAS,EAAE,iBAAiB,EAiCxC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CACjC,MAAM,EACN,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,UAAU,CAAC,CAkC9D,CAAC;AAEF;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAEzE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,GACX,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,SAAS,CAE7E;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAErC"}