astro-dev-mcp 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +425 -0
- package/dist/editors/commonEditor.d.ts +47 -0
- package/dist/editors/commonEditor.d.ts.map +1 -0
- package/dist/editors/commonEditor.js +108 -0
- package/dist/editors/commonEditor.js.map +1 -0
- package/dist/editors/scssVariablesEditor.d.ts +64 -0
- package/dist/editors/scssVariablesEditor.d.ts.map +1 -0
- package/dist/editors/scssVariablesEditor.js +105 -0
- package/dist/editors/scssVariablesEditor.js.map +1 -0
- package/dist/generators/astroGenerator.d.ts +15 -0
- package/dist/generators/astroGenerator.d.ts.map +1 -0
- package/dist/generators/astroGenerator.js +192 -0
- package/dist/generators/astroGenerator.js.map +1 -0
- package/dist/generators/scssGenerator.d.ts +15 -0
- package/dist/generators/scssGenerator.d.ts.map +1 -0
- package/dist/generators/scssGenerator.js +70 -0
- package/dist/generators/scssGenerator.js.map +1 -0
- package/dist/generators/typeGenerator.d.ts +5 -0
- package/dist/generators/typeGenerator.d.ts.map +1 -0
- package/dist/generators/typeGenerator.js +45 -0
- package/dist/generators/typeGenerator.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +285 -0
- package/dist/index.js.map +1 -0
- package/dist/parsers/excelParser.d.ts +5 -0
- package/dist/parsers/excelParser.d.ts.map +1 -0
- package/dist/parsers/excelParser.js +55 -0
- package/dist/parsers/excelParser.js.map +1 -0
- package/dist/parsers/markdownParser.d.ts +5 -0
- package/dist/parsers/markdownParser.d.ts.map +1 -0
- package/dist/parsers/markdownParser.js +69 -0
- package/dist/parsers/markdownParser.js.map +1 -0
- package/dist/templates/pageTemplates.d.ts +24 -0
- package/dist/templates/pageTemplates.d.ts.map +1 -0
- package/dist/templates/pageTemplates.js +69 -0
- package/dist/templates/pageTemplates.js.map +1 -0
- package/dist/templates/sectionTemplates.d.ts +14 -0
- package/dist/templates/sectionTemplates.d.ts.map +1 -0
- package/dist/templates/sectionTemplates.js +199 -0
- package/dist/templates/sectionTemplates.js.map +1 -0
- package/dist/templates/uiPatterns.d.ts +23 -0
- package/dist/templates/uiPatterns.d.ts.map +1 -0
- package/dist/templates/uiPatterns.js +330 -0
- package/dist/templates/uiPatterns.js.map +1 -0
- package/dist/tools/generateComponent.d.ts +10 -0
- package/dist/tools/generateComponent.d.ts.map +1 -0
- package/dist/tools/generateComponent.js +40 -0
- package/dist/tools/generateComponent.js.map +1 -0
- package/dist/tools/generatePage.d.ts +10 -0
- package/dist/tools/generatePage.d.ts.map +1 -0
- package/dist/tools/generatePage.js +95 -0
- package/dist/tools/generatePage.js.map +1 -0
- package/dist/tools/generateSchema.d.ts +10 -0
- package/dist/tools/generateSchema.d.ts.map +1 -0
- package/dist/tools/generateSchema.js +70 -0
- package/dist/tools/generateSchema.js.map +1 -0
- package/dist/tools/generateSection.d.ts +10 -0
- package/dist/tools/generateSection.d.ts.map +1 -0
- package/dist/tools/generateSection.js +50 -0
- package/dist/tools/generateSection.js.map +1 -0
- package/dist/utils/formatter.d.ts +6 -0
- package/dist/utils/formatter.d.ts.map +1 -0
- package/dist/utils/formatter.js +11 -0
- package/dist/utils/formatter.js.map +1 -0
- package/dist/utils/promptParser.d.ts +58 -0
- package/dist/utils/promptParser.d.ts.map +1 -0
- package/dist/utils/promptParser.js +200 -0
- package/dist/utils/promptParser.js.map +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { generatePageTemplate } from "../templates/pageTemplates.js";
|
|
2
|
+
import { formatCode } from "../utils/formatter.js";
|
|
3
|
+
import { parsePageIntent } from "../utils/promptParser.js";
|
|
4
|
+
import { updateCommonAstro, } from "../editors/commonEditor.js";
|
|
5
|
+
import { updateScssVariables, } from "../editors/scssVariablesEditor.js";
|
|
6
|
+
import { readFileSync, writeFileSync, existsSync } from "fs";
|
|
7
|
+
import { resolve } from "path";
|
|
8
|
+
/**
|
|
9
|
+
* ページ生成ツール(サイト設定更新統合版)
|
|
10
|
+
*/
|
|
11
|
+
export async function generatePage(args) {
|
|
12
|
+
const { pageName, prompt, pageData, sections, siteConfig, scssConfig, projectRoot = process.cwd(), } = args;
|
|
13
|
+
try {
|
|
14
|
+
const updateLogs = [];
|
|
15
|
+
// ページタイプ自動判定
|
|
16
|
+
let pageType;
|
|
17
|
+
if (prompt) {
|
|
18
|
+
const parsed = parsePageIntent(prompt, pageName);
|
|
19
|
+
pageType = parsed.pageType;
|
|
20
|
+
if (parsed.confidence < 0.7) {
|
|
21
|
+
updateLogs.push(`⚠️ ページタイプ判定の信頼度が低い(${parsed.confidence}): "${prompt}"`);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
// 1. Common.astro の更新(サイト設定が指定されている場合)
|
|
25
|
+
if (siteConfig) {
|
|
26
|
+
const commonPath = resolve(projectRoot, "src/layouts/Common.astro");
|
|
27
|
+
if (existsSync(commonPath)) {
|
|
28
|
+
const originalContent = readFileSync(commonPath, "utf-8");
|
|
29
|
+
const updatedContent = updateCommonAstro(originalContent, siteConfig);
|
|
30
|
+
writeFileSync(commonPath, updatedContent, "utf-8");
|
|
31
|
+
updateLogs.push("✅ Common.astro を更新しました");
|
|
32
|
+
if (siteConfig.head) {
|
|
33
|
+
const updatedFields = Object.keys(siteConfig.head).join(", ");
|
|
34
|
+
updateLogs.push(` - head: ${updatedFields}`);
|
|
35
|
+
}
|
|
36
|
+
if (siteConfig.menu) {
|
|
37
|
+
updateLogs.push(` - menu: ${siteConfig.menu.length}項目`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
updateLogs.push(`⚠️ Common.astro が見つかりません: ${commonPath}`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
// 2. _variables.scss の更新(SCSS設定が指定されている場合)
|
|
45
|
+
if (scssConfig) {
|
|
46
|
+
const scssPath = resolve(projectRoot, "src/scss/abstracts/_variables.scss");
|
|
47
|
+
if (existsSync(scssPath)) {
|
|
48
|
+
const originalContent = readFileSync(scssPath, "utf-8");
|
|
49
|
+
const updatedContent = updateScssVariables(originalContent, scssConfig);
|
|
50
|
+
writeFileSync(scssPath, updatedContent, "utf-8");
|
|
51
|
+
updateLogs.push("✅ _variables.scss を更新しました");
|
|
52
|
+
if (scssConfig.colors) {
|
|
53
|
+
const updatedColors = Object.keys(scssConfig.colors).join(", ");
|
|
54
|
+
updateLogs.push(` - colors: ${updatedColors}`);
|
|
55
|
+
}
|
|
56
|
+
if (scssConfig.layout) {
|
|
57
|
+
const updatedLayout = Object.keys(scssConfig.layout).join(", ");
|
|
58
|
+
updateLogs.push(` - layout: ${updatedLayout}`);
|
|
59
|
+
}
|
|
60
|
+
if (scssConfig.fontSizes) {
|
|
61
|
+
const updatedFonts = Object.keys(scssConfig.fontSizes).join(", ");
|
|
62
|
+
updateLogs.push(` - fontSizes: ${updatedFonts}`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
updateLogs.push(`⚠️ _variables.scss が見つかりません: ${scssPath}`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// 3. ページテンプレート生成
|
|
70
|
+
const pageCode = generatePageTemplate({
|
|
71
|
+
pageName,
|
|
72
|
+
pageType,
|
|
73
|
+
pageData,
|
|
74
|
+
sections,
|
|
75
|
+
});
|
|
76
|
+
// コード整形
|
|
77
|
+
const formatted = await formatCode(pageCode, "astro");
|
|
78
|
+
// 結果メッセージの構築
|
|
79
|
+
const updateSection = updateLogs.length > 0
|
|
80
|
+
? `### サイト設定更新\n${updateLogs.join("\n")}\n\n`
|
|
81
|
+
: "";
|
|
82
|
+
return {
|
|
83
|
+
content: [
|
|
84
|
+
{
|
|
85
|
+
type: "text",
|
|
86
|
+
text: `${updateSection}### ページ生成\n✅ ページ「${pageName}」を生成しました\n\n\`\`\`astro\n${formatted}\n\`\`\`\n\n### 配置先\n- \`src/pages/${pageName}/index.astro\`\n\n### 必要なセクション\n${sections.map((s) => `- \`src/pages/_parts/_${pageName}/_${s}.astro\``).join("\n")}`,
|
|
87
|
+
},
|
|
88
|
+
],
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
throw new Error(`ページ生成エラー: ${error}`);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=generatePage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generatePage.js","sourceRoot":"","sources":["../../src/tools/generatePage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateSchema.d.ts","sourceRoot":"","sources":["../../src/tools/generateSchema.ts"],"names":[],"mappings":"AAWA;;GAEG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,GAAG;;;;;GA0C7C"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { parseExcel } from "../parsers/excelParser.js";
|
|
2
|
+
import { parseMarkdown } from "../parsers/markdownParser.js";
|
|
3
|
+
import { generateTypeDefinition } from "../generators/typeGenerator.js";
|
|
4
|
+
import { formatCode } from "../utils/formatter.js";
|
|
5
|
+
/**
|
|
6
|
+
* スキーマ生成ツール
|
|
7
|
+
*/
|
|
8
|
+
export async function generateSchema(args) {
|
|
9
|
+
const { sourceType, sourceData, schemaName } = args;
|
|
10
|
+
try {
|
|
11
|
+
let parsedData;
|
|
12
|
+
// データソースに応じてパース
|
|
13
|
+
switch (sourceType) {
|
|
14
|
+
case "excel":
|
|
15
|
+
parsedData = await parseExcel(sourceData);
|
|
16
|
+
break;
|
|
17
|
+
case "markdown":
|
|
18
|
+
parsedData = await parseMarkdown(sourceData);
|
|
19
|
+
break;
|
|
20
|
+
case "json":
|
|
21
|
+
parsedData = JSON.parse(sourceData);
|
|
22
|
+
break;
|
|
23
|
+
case "text":
|
|
24
|
+
// テキストから構造を推測
|
|
25
|
+
parsedData = inferStructureFromText(sourceData);
|
|
26
|
+
break;
|
|
27
|
+
default:
|
|
28
|
+
throw new Error(`Unsupported source type: ${sourceType}`);
|
|
29
|
+
}
|
|
30
|
+
// TypeScript型定義生成
|
|
31
|
+
const typeDefinition = generateTypeDefinition(schemaName, parsedData);
|
|
32
|
+
// コード整形
|
|
33
|
+
const formatted = await formatCode(typeDefinition, "typescript");
|
|
34
|
+
return {
|
|
35
|
+
content: [
|
|
36
|
+
{
|
|
37
|
+
type: "text",
|
|
38
|
+
text: `✅ スキーマ「${schemaName}」を生成しました\n\n\`\`\`typescript\n${formatted}\n\`\`\`\n\n### 使用例\n\`\`\`typescript\nconst page: ${schemaName} = {\n // データを記述\n};\n\`\`\``,
|
|
39
|
+
},
|
|
40
|
+
],
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
throw new Error(`スキーマ生成エラー: ${error}`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
function inferStructureFromText(text) {
|
|
48
|
+
// シンプルなテキスト解析(改善の余地あり)
|
|
49
|
+
const lines = text.split("\n").filter((line) => line.trim());
|
|
50
|
+
const structure = {};
|
|
51
|
+
for (const line of lines) {
|
|
52
|
+
if (line.includes(":")) {
|
|
53
|
+
const [key, value] = line.split(":").map((s) => s.trim());
|
|
54
|
+
structure[key] = inferType(value);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return structure;
|
|
58
|
+
}
|
|
59
|
+
function inferType(value) {
|
|
60
|
+
if (!isNaN(Number(value)))
|
|
61
|
+
return "number";
|
|
62
|
+
if (value === "true" || value === "false")
|
|
63
|
+
return "boolean";
|
|
64
|
+
if (value.startsWith("[") && value.endsWith("]"))
|
|
65
|
+
return "array";
|
|
66
|
+
if (value.startsWith("{") && value.endsWith("}"))
|
|
67
|
+
return "object";
|
|
68
|
+
return "string";
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=generateSchema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateSchema.js","sourceRoot":"","sources":["../../src/tools/generateSchema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateSection.d.ts","sourceRoot":"","sources":["../../src/tools/generateSection.ts"],"names":[],"mappings":"AAeA;;GAEG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,GAAG;;;;;GAuD9C"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { generateSectionTemplate } from '../templates/sectionTemplates.js';
|
|
2
|
+
import { formatCode } from '../utils/formatter.js';
|
|
3
|
+
import { parseSectionIntent } from '../utils/promptParser.js';
|
|
4
|
+
/**
|
|
5
|
+
* セクション生成ツール
|
|
6
|
+
*/
|
|
7
|
+
export async function generateSection(args) {
|
|
8
|
+
const { prompt, sectionType, uiPattern, pageName, content, components = [], } = args;
|
|
9
|
+
try {
|
|
10
|
+
let finalSectionType;
|
|
11
|
+
let finalUIPattern;
|
|
12
|
+
// プロンプトが指定されている場合は解析
|
|
13
|
+
if (prompt) {
|
|
14
|
+
const parsed = parseSectionIntent(prompt);
|
|
15
|
+
finalSectionType = parsed.contentType;
|
|
16
|
+
finalUIPattern = parsed.uiPattern;
|
|
17
|
+
// 低信頼度の場合は警告
|
|
18
|
+
if (parsed.confidence < 0.7) {
|
|
19
|
+
console.warn(`⚠️ プロンプト解析の信頼度が低い(${parsed.confidence}): "${prompt}"`);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
// 構造化データが指定されている場合
|
|
24
|
+
finalSectionType = sectionType;
|
|
25
|
+
finalUIPattern = uiPattern;
|
|
26
|
+
}
|
|
27
|
+
// セクションテンプレート生成
|
|
28
|
+
const sectionCode = generateSectionTemplate({
|
|
29
|
+
type: finalSectionType,
|
|
30
|
+
uiPattern: finalUIPattern,
|
|
31
|
+
pageName,
|
|
32
|
+
content: content || {},
|
|
33
|
+
components,
|
|
34
|
+
});
|
|
35
|
+
// コード整形
|
|
36
|
+
const formatted = await formatCode(sectionCode, 'astro');
|
|
37
|
+
return {
|
|
38
|
+
content: [
|
|
39
|
+
{
|
|
40
|
+
type: 'text',
|
|
41
|
+
text: `✅ セクション「${finalSectionType}」(UI: ${finalUIPattern || 'デフォルト'})を生成しました\n\n\`\`\`astro\n${formatted}\n\`\`\`\n\n### 配置先\n- \`src/pages/_parts/_${pageName}/_${finalSectionType}.astro\``,
|
|
42
|
+
},
|
|
43
|
+
],
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
throw new Error(`セクション生成エラー: ${error}`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=generateSection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateSection.js","sourceRoot":"","sources":["../../src/tools/generateSection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAa9D;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAS;IAC9C,MAAM,EACL,MAAM,EACN,WAAW,EACX,SAAS,EACT,QAAQ,EACR,OAAO,EACP,UAAU,GAAG,EAAE,GACf,GAAG,IAAmB,CAAC;IAExB,IAAI,CAAC;QACJ,IAAI,gBAAwB,CAAC;QAC7B,IAAI,cAAkC,CAAC;QAEvC,qBAAqB;QACrB,IAAI,MAAM,EAAE,CAAC;YACZ,MAAM,MAAM,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;YAC1C,gBAAgB,GAAG,MAAM,CAAC,WAAW,CAAC;YACtC,cAAc,GAAG,MAAM,CAAC,SAAS,CAAC;YAElC,aAAa;YACb,IAAI,MAAM,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC;gBAC7B,OAAO,CAAC,IAAI,CACX,qBAAqB,MAAM,CAAC,UAAU,OAAO,MAAM,GAAG,CACtD,CAAC;YACH,CAAC;QACF,CAAC;aAAM,CAAC;YACP,mBAAmB;YACnB,gBAAgB,GAAG,WAAY,CAAC;YAChC,cAAc,GAAG,SAAS,CAAC;QAC5B,CAAC;QAED,gBAAgB;QAChB,MAAM,WAAW,GAAG,uBAAuB,CAAC;YAC3C,IAAI,EAAE,gBAAgB;YACtB,SAAS,EAAE,cAAqB;YAChC,QAAQ;YACR,OAAO,EAAE,OAAO,IAAI,EAAE;YACtB,UAAU;SACV,CAAC,CAAC;QAEH,QAAQ;QACR,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAEzD,OAAO;YACN,OAAO,EAAE;gBACR;oBACC,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,WAAW,gBAAgB,SAAS,cAAc,IAAI,OAAO,4BAA4B,SAAS,8CAA8C,QAAQ,KAAK,gBAAgB,UAAU;iBAC7L;aACD;SACD,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,eAAe,KAAK,EAAE,CAAC,CAAC;IACzC,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../src/utils/formatter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,YAAY,GACtC,OAAO,CAAC,MAAM,CAAC,CAKjB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatter.js","sourceRoot":"","sources":["../../src/utils/formatter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,IAAY,EACZ,MAAuC;IAEvC,WAAW;IACX,kBAAkB;IAClB,gCAAgC;IAChC,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* プロンプト解析ユーティリティ
|
|
3
|
+
* 自然言語からUIパターンとコンテンツタイプを抽出
|
|
4
|
+
*/
|
|
5
|
+
import type { UIPattern } from '../templates/uiPatterns.js';
|
|
6
|
+
export interface ParsedSectionIntent {
|
|
7
|
+
contentType: string;
|
|
8
|
+
uiPattern: UIPattern;
|
|
9
|
+
confidence: number;
|
|
10
|
+
}
|
|
11
|
+
export interface ParsedPageIntent {
|
|
12
|
+
pageType: 'top' | 'lower';
|
|
13
|
+
confidence: number;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* プロンプトからセクション意図を解析
|
|
17
|
+
*/
|
|
18
|
+
export declare function parseSectionIntent(prompt: string): ParsedSectionIntent;
|
|
19
|
+
/**
|
|
20
|
+
* プロンプト例と期待される結果のテスト用サンプル
|
|
21
|
+
*/
|
|
22
|
+
export declare const PROMPT_EXAMPLES: {
|
|
23
|
+
記事一覧をカード形式で表示: {
|
|
24
|
+
contentType: string;
|
|
25
|
+
uiPattern: string;
|
|
26
|
+
confidence: number;
|
|
27
|
+
};
|
|
28
|
+
カテゴリをタブで表示: {
|
|
29
|
+
contentType: string;
|
|
30
|
+
uiPattern: string;
|
|
31
|
+
confidence: number;
|
|
32
|
+
};
|
|
33
|
+
'Q&A\u3092\u30A2\u30B3\u30FC\u30C7\u30A3\u30AA\u30F3\u5F62\u5F0F\u3067': {
|
|
34
|
+
contentType: string;
|
|
35
|
+
uiPattern: string;
|
|
36
|
+
confidence: number;
|
|
37
|
+
};
|
|
38
|
+
技術スタックをグリッドで: {
|
|
39
|
+
contentType: string;
|
|
40
|
+
uiPattern: string;
|
|
41
|
+
confidence: number;
|
|
42
|
+
};
|
|
43
|
+
動画ギャラリーをモーダルで: {
|
|
44
|
+
contentType: string;
|
|
45
|
+
uiPattern: string;
|
|
46
|
+
confidence: number;
|
|
47
|
+
};
|
|
48
|
+
記事をカルーセルで表示: {
|
|
49
|
+
contentType: string;
|
|
50
|
+
uiPattern: string;
|
|
51
|
+
confidence: number;
|
|
52
|
+
};
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* プロンプトからページタイプ(トップ/下層)を判定
|
|
56
|
+
*/
|
|
57
|
+
export declare function parsePageIntent(prompt: string, pageName?: string): ParsedPageIntent;
|
|
58
|
+
//# sourceMappingURL=promptParser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"promptParser.d.ts","sourceRoot":"","sources":["../../src/utils/promptParser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAE5D,MAAM,WAAW,mBAAmB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAChC,QAAQ,EAAE,KAAK,GAAG,OAAO,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,mBAAmB,CAiBtE;AAwGD;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+B3B,CAAC;AAEF;;GAEG;AACH,wBAAgB,eAAe,CAC9B,MAAM,EAAE,MAAM,EACd,QAAQ,CAAC,EAAE,MAAM,GACf,gBAAgB,CAiDlB"}
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* プロンプト解析ユーティリティ
|
|
3
|
+
* 自然言語からUIパターンとコンテンツタイプを抽出
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* プロンプトからセクション意図を解析
|
|
7
|
+
*/
|
|
8
|
+
export function parseSectionIntent(prompt) {
|
|
9
|
+
const normalizedPrompt = prompt.toLowerCase();
|
|
10
|
+
// UIパターンキーワード検出
|
|
11
|
+
const uiPattern = detectUIPattern(normalizedPrompt);
|
|
12
|
+
// コンテンツタイプ検出
|
|
13
|
+
const contentType = detectContentType(normalizedPrompt);
|
|
14
|
+
// 信頼度計算
|
|
15
|
+
const confidence = calculateConfidence(normalizedPrompt, uiPattern, contentType);
|
|
16
|
+
return {
|
|
17
|
+
contentType,
|
|
18
|
+
uiPattern,
|
|
19
|
+
confidence,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* UIパターンキーワード検出
|
|
24
|
+
*/
|
|
25
|
+
function detectUIPattern(prompt) {
|
|
26
|
+
const patterns = {
|
|
27
|
+
タブ: 'tab',
|
|
28
|
+
tab: 'tab',
|
|
29
|
+
アコーディオン: 'accordion',
|
|
30
|
+
accordion: 'accordion',
|
|
31
|
+
グリッド: 'grid',
|
|
32
|
+
grid: 'grid',
|
|
33
|
+
カード: 'grid',
|
|
34
|
+
card: 'grid',
|
|
35
|
+
カルーセル: 'carousel',
|
|
36
|
+
carousel: 'carousel',
|
|
37
|
+
スライダー: 'carousel',
|
|
38
|
+
slider: 'carousel',
|
|
39
|
+
リスト: 'list',
|
|
40
|
+
list: 'list',
|
|
41
|
+
モーダル: 'modal',
|
|
42
|
+
modal: 'modal',
|
|
43
|
+
ギャラリー: 'modal',
|
|
44
|
+
gallery: 'modal',
|
|
45
|
+
};
|
|
46
|
+
for (const [keyword, pattern] of Object.entries(patterns)) {
|
|
47
|
+
if (prompt.includes(keyword)) {
|
|
48
|
+
return pattern;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
// デフォルト: グリッド
|
|
52
|
+
return 'grid';
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* コンテンツタイプ検出
|
|
56
|
+
*/
|
|
57
|
+
function detectContentType(prompt) {
|
|
58
|
+
const contentTypes = {
|
|
59
|
+
記事: 'articles',
|
|
60
|
+
article: 'articles',
|
|
61
|
+
ブログ: 'articles',
|
|
62
|
+
blog: 'articles',
|
|
63
|
+
カテゴリ: 'categories',
|
|
64
|
+
category: 'categories',
|
|
65
|
+
カテゴリー: 'categories',
|
|
66
|
+
categories: 'categories',
|
|
67
|
+
'q&a': 'qa',
|
|
68
|
+
qa: 'qa',
|
|
69
|
+
質問: 'qa',
|
|
70
|
+
faq: 'qa',
|
|
71
|
+
機能: 'features',
|
|
72
|
+
feature: 'features',
|
|
73
|
+
技術: 'tech',
|
|
74
|
+
tech: 'tech',
|
|
75
|
+
technology: 'tech',
|
|
76
|
+
動画: 'videos',
|
|
77
|
+
video: 'videos',
|
|
78
|
+
画像: 'gallery',
|
|
79
|
+
image: 'gallery',
|
|
80
|
+
ギャラリー: 'gallery',
|
|
81
|
+
gallery: 'gallery',
|
|
82
|
+
};
|
|
83
|
+
for (const [keyword, type] of Object.entries(contentTypes)) {
|
|
84
|
+
if (prompt.includes(keyword)) {
|
|
85
|
+
return type;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
// デフォルト: カスタム
|
|
89
|
+
return 'custom';
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* 信頼度計算
|
|
93
|
+
*/
|
|
94
|
+
function calculateConfidence(prompt, uiPattern, contentType) {
|
|
95
|
+
let confidence = 0.5; // 基準値
|
|
96
|
+
// UIパターンのキーワードがあれば +0.3
|
|
97
|
+
if (prompt.includes('タブ') || prompt.includes('tab'))
|
|
98
|
+
confidence += 0.3;
|
|
99
|
+
if (prompt.includes('アコーディオン') || prompt.includes('accordion'))
|
|
100
|
+
confidence += 0.3;
|
|
101
|
+
if (prompt.includes('グリッド') || prompt.includes('grid'))
|
|
102
|
+
confidence += 0.3;
|
|
103
|
+
if (prompt.includes('カード') || prompt.includes('card'))
|
|
104
|
+
confidence += 0.3;
|
|
105
|
+
if (prompt.includes('カルーセル') || prompt.includes('carousel'))
|
|
106
|
+
confidence += 0.3;
|
|
107
|
+
if (prompt.includes('スライダー') || prompt.includes('slider'))
|
|
108
|
+
confidence += 0.3;
|
|
109
|
+
if (prompt.includes('リスト') || prompt.includes('list'))
|
|
110
|
+
confidence += 0.3;
|
|
111
|
+
if (prompt.includes('モーダル') || prompt.includes('modal'))
|
|
112
|
+
confidence += 0.3;
|
|
113
|
+
if (prompt.includes('ギャラリー') || prompt.includes('gallery'))
|
|
114
|
+
confidence += 0.3;
|
|
115
|
+
// コンテンツタイプのキーワードがあれば +0.2
|
|
116
|
+
if (contentType !== 'custom')
|
|
117
|
+
confidence += 0.2;
|
|
118
|
+
return Math.min(confidence, 1.0);
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* プロンプト例と期待される結果のテスト用サンプル
|
|
122
|
+
*/
|
|
123
|
+
export const PROMPT_EXAMPLES = {
|
|
124
|
+
記事一覧をカード形式で表示: {
|
|
125
|
+
contentType: 'articles',
|
|
126
|
+
uiPattern: 'grid',
|
|
127
|
+
confidence: 0.8,
|
|
128
|
+
},
|
|
129
|
+
カテゴリをタブで表示: {
|
|
130
|
+
contentType: 'categories',
|
|
131
|
+
uiPattern: 'tab',
|
|
132
|
+
confidence: 1.0,
|
|
133
|
+
},
|
|
134
|
+
'Q&Aをアコーディオン形式で': {
|
|
135
|
+
contentType: 'qa',
|
|
136
|
+
uiPattern: 'accordion',
|
|
137
|
+
confidence: 1.0,
|
|
138
|
+
},
|
|
139
|
+
技術スタックをグリッドで: {
|
|
140
|
+
contentType: 'tech',
|
|
141
|
+
uiPattern: 'grid',
|
|
142
|
+
confidence: 1.0,
|
|
143
|
+
},
|
|
144
|
+
動画ギャラリーをモーダルで: {
|
|
145
|
+
contentType: 'videos',
|
|
146
|
+
uiPattern: 'modal',
|
|
147
|
+
confidence: 1.0,
|
|
148
|
+
},
|
|
149
|
+
記事をカルーセルで表示: {
|
|
150
|
+
contentType: 'articles',
|
|
151
|
+
uiPattern: 'carousel',
|
|
152
|
+
confidence: 1.0,
|
|
153
|
+
},
|
|
154
|
+
};
|
|
155
|
+
/**
|
|
156
|
+
* プロンプトからページタイプ(トップ/下層)を判定
|
|
157
|
+
*/
|
|
158
|
+
export function parsePageIntent(prompt, pageName) {
|
|
159
|
+
const normalizedPrompt = prompt.toLowerCase();
|
|
160
|
+
let confidence = 0.5;
|
|
161
|
+
// 下層ページキーワード
|
|
162
|
+
const lowerKeywords = [
|
|
163
|
+
'下層',
|
|
164
|
+
'サブ',
|
|
165
|
+
'詳細',
|
|
166
|
+
'子ページ',
|
|
167
|
+
'about',
|
|
168
|
+
'service',
|
|
169
|
+
'contact',
|
|
170
|
+
'company',
|
|
171
|
+
'news',
|
|
172
|
+
'blog',
|
|
173
|
+
'products',
|
|
174
|
+
'recruit',
|
|
175
|
+
];
|
|
176
|
+
// トップページキーワード
|
|
177
|
+
const topKeywords = ['トップ', 'ホーム', 'top', 'home', 'index', 'メイン'];
|
|
178
|
+
// プロンプトから判定
|
|
179
|
+
const hasLowerKeyword = lowerKeywords.some((k) => normalizedPrompt.includes(k));
|
|
180
|
+
const hasTopKeyword = topKeywords.some((k) => normalizedPrompt.includes(k));
|
|
181
|
+
// ページ名から判定(補助的)
|
|
182
|
+
const isTopPageName = pageName === 'top' || pageName === 'index' || pageName === 'home';
|
|
183
|
+
// 判定ロジック
|
|
184
|
+
if (hasTopKeyword || isTopPageName) {
|
|
185
|
+
confidence = hasTopKeyword ? 0.9 : 0.7;
|
|
186
|
+
return { pageType: 'top', confidence };
|
|
187
|
+
}
|
|
188
|
+
if (hasLowerKeyword) {
|
|
189
|
+
confidence = 0.9;
|
|
190
|
+
return { pageType: 'lower', confidence };
|
|
191
|
+
}
|
|
192
|
+
// デフォルト: ページ名がtop/index/home以外は下層と判定
|
|
193
|
+
if (pageName && !isTopPageName) {
|
|
194
|
+
confidence = 0.6;
|
|
195
|
+
return { pageType: 'lower', confidence };
|
|
196
|
+
}
|
|
197
|
+
// 完全にわからない場合はトップページとする
|
|
198
|
+
return { pageType: 'top', confidence: 0.3 };
|
|
199
|
+
}
|
|
200
|
+
//# sourceMappingURL=promptParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"promptParser.js","sourceRoot":"","sources":["../../src/utils/promptParser.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "astro-dev-mcp",
|
|
3
|
+
"version": "0.3.0",
|
|
4
|
+
"description": "MCP server for generating Astro components, sections, and pages from design data and content",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"astro-dev-mcp": "dist/index.js"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"dist",
|
|
12
|
+
"README.md",
|
|
13
|
+
"LICENSE"
|
|
14
|
+
],
|
|
15
|
+
"scripts": {
|
|
16
|
+
"build": "tsc",
|
|
17
|
+
"dev": "tsc --watch",
|
|
18
|
+
"start": "node dist/index.js",
|
|
19
|
+
"inspector": "npx @modelcontextprotocol/inspector dist/index.js",
|
|
20
|
+
"prepublishOnly": "npm run build"
|
|
21
|
+
},
|
|
22
|
+
"keywords": [
|
|
23
|
+
"mcp",
|
|
24
|
+
"astro",
|
|
25
|
+
"generator",
|
|
26
|
+
"code-generation",
|
|
27
|
+
"design-to-code",
|
|
28
|
+
"model-context-protocol"
|
|
29
|
+
],
|
|
30
|
+
"author": "",
|
|
31
|
+
"license": "MIT",
|
|
32
|
+
"repository": {
|
|
33
|
+
"type": "git",
|
|
34
|
+
"url": "https://github.com/YoshiokaY/astro-dev-mcp.git"
|
|
35
|
+
},
|
|
36
|
+
"bugs": {
|
|
37
|
+
"url": "https://github.com/YoshiokaY/astro-dev-mcp/issues"
|
|
38
|
+
},
|
|
39
|
+
"homepage": "https://github.com/YoshiokaY/astro-dev-mcp#readme",
|
|
40
|
+
"dependencies": {
|
|
41
|
+
"@modelcontextprotocol/sdk": "^1.0.4",
|
|
42
|
+
"zod": "^3.23.8",
|
|
43
|
+
"xlsx": "^0.18.5",
|
|
44
|
+
"gray-matter": "^4.0.3",
|
|
45
|
+
"prettier": "^3.5.3"
|
|
46
|
+
},
|
|
47
|
+
"devDependencies": {
|
|
48
|
+
"@types/node": "^22.15.3",
|
|
49
|
+
"typescript": "^5.8.3"
|
|
50
|
+
},
|
|
51
|
+
"engines": {
|
|
52
|
+
"node": ">=18.0.0"
|
|
53
|
+
}
|
|
54
|
+
}
|