mcp-ai-agent-guidelines 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.
- package/LICENSE +21 -0
- package/README.md +336 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +307 -0
- package/dist/index.js.map +1 -0
- package/dist/prompts/index.d.ts +21 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +504 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/resources/index.d.ts +14 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +92 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/resources/structured.d.ts +47 -0
- package/dist/resources/structured.d.ts.map +1 -0
- package/dist/resources/structured.js +857 -0
- package/dist/resources/structured.js.map +1 -0
- package/dist/tools/code-hygiene-analyzer.d.ts +7 -0
- package/dist/tools/code-hygiene-analyzer.d.ts.map +1 -0
- package/dist/tools/code-hygiene-analyzer.js +176 -0
- package/dist/tools/code-hygiene-analyzer.js.map +1 -0
- package/dist/tools/config/guidelines-config.d.ts +16 -0
- package/dist/tools/config/guidelines-config.d.ts.map +1 -0
- package/dist/tools/config/guidelines-config.js +236 -0
- package/dist/tools/config/guidelines-config.js.map +1 -0
- package/dist/tools/config/model-config.d.ts +33 -0
- package/dist/tools/config/model-config.d.ts.map +1 -0
- package/dist/tools/config/model-config.js +206 -0
- package/dist/tools/config/model-config.js.map +1 -0
- package/dist/tools/guidelines-validator.d.ts +7 -0
- package/dist/tools/guidelines-validator.d.ts.map +1 -0
- package/dist/tools/guidelines-validator.js +178 -0
- package/dist/tools/guidelines-validator.js.map +1 -0
- package/dist/tools/hierarchical-prompt-builder.d.ts +7 -0
- package/dist/tools/hierarchical-prompt-builder.d.ts.map +1 -0
- package/dist/tools/hierarchical-prompt-builder.js +147 -0
- package/dist/tools/hierarchical-prompt-builder.js.map +1 -0
- package/dist/tools/memory-context-optimizer.d.ts +7 -0
- package/dist/tools/memory-context-optimizer.d.ts.map +1 -0
- package/dist/tools/memory-context-optimizer.js +256 -0
- package/dist/tools/memory-context-optimizer.js.map +1 -0
- package/dist/tools/mermaid-diagram-generator.d.ts +7 -0
- package/dist/tools/mermaid-diagram-generator.d.ts.map +1 -0
- package/dist/tools/mermaid-diagram-generator.js +312 -0
- package/dist/tools/mermaid-diagram-generator.js.map +1 -0
- package/dist/tools/model-compatibility-checker.d.ts +7 -0
- package/dist/tools/model-compatibility-checker.d.ts.map +1 -0
- package/dist/tools/model-compatibility-checker.js +204 -0
- package/dist/tools/model-compatibility-checker.js.map +1 -0
- package/dist/tools/sprint-timeline-calculator.d.ts +7 -0
- package/dist/tools/sprint-timeline-calculator.d.ts.map +1 -0
- package/dist/tools/sprint-timeline-calculator.js +240 -0
- package/dist/tools/sprint-timeline-calculator.js.map +1 -0
- package/package.json +75 -0
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
const MemoryOptimizationSchema = z.object({
|
|
3
|
+
contextContent: z.string(),
|
|
4
|
+
maxTokens: z.number().optional(),
|
|
5
|
+
cacheStrategy: z.enum(["aggressive", "conservative", "balanced"]).optional(),
|
|
6
|
+
includeReferences: z.boolean().optional().default(true),
|
|
7
|
+
language: z.string().optional(),
|
|
8
|
+
includeMetadata: z.boolean().optional().default(true),
|
|
9
|
+
inputFile: z.string().optional(),
|
|
10
|
+
});
|
|
11
|
+
export async function memoryContextOptimizer(args) {
|
|
12
|
+
const input = MemoryOptimizationSchema.parse(args);
|
|
13
|
+
const optimization = optimizeMemoryContext(input);
|
|
14
|
+
const references = input.includeReferences
|
|
15
|
+
? [
|
|
16
|
+
"- Prompt Caching overview (Anthropic): https://www.anthropic.com/news/prompt-caching",
|
|
17
|
+
"- Anthropic docs on caching: https://docs.anthropic.com/en/docs/build-with-claude/prompt-caching",
|
|
18
|
+
"- Token usage optimization tips: https://caylent.com/blog/prompt-caching-saving-time-and-money-in-llm-applications",
|
|
19
|
+
].join("\n")
|
|
20
|
+
: undefined;
|
|
21
|
+
const fence = input.language ? input.language.toLowerCase() : "";
|
|
22
|
+
const segmentsList = optimization.cacheSegments.length
|
|
23
|
+
? optimization.cacheSegments
|
|
24
|
+
.map((s, i) => `${i + 1}. **${s.type}** (${s.tokens} tokens): ${s.description}`)
|
|
25
|
+
.join("\n")
|
|
26
|
+
: "";
|
|
27
|
+
const segmentsTable = optimization.cacheSegments.length
|
|
28
|
+
? `\n#### Cache Segment Table\n| # | Type | Tokens | Purpose |\n|---:|---|---:|---|\n${optimization.cacheSegments
|
|
29
|
+
.map((s, i) => `| ${i + 1} | ${s.type} | ${s.tokens} | ${s.description} |`)
|
|
30
|
+
.join("\n")}`
|
|
31
|
+
: "";
|
|
32
|
+
const pie = (() => {
|
|
33
|
+
const total = optimization.cacheSegments.reduce((acc, s) => acc + (s.tokens || 0), 0);
|
|
34
|
+
if (!total)
|
|
35
|
+
return "";
|
|
36
|
+
const lines = optimization.cacheSegments
|
|
37
|
+
.map((s) => ` "${s.type}" : ${Math.max(0, s.tokens || 0)}`)
|
|
38
|
+
.join("\n");
|
|
39
|
+
return `\n#### Mermaid: Cache Tokens by Segment\n\n\`\`\`mermaid\npie showData\n title Cache Tokens by Segment\n${lines}\n\`\`\``;
|
|
40
|
+
})();
|
|
41
|
+
const usage = fence === "python"
|
|
42
|
+
? `\`\`\`python\n# Example: prepare concise context and request optimization\ncontext = "Python repo. Fix security issues; add validation and logging. Key: UserManager, calculate_discount, process_user_data."\n# In an MCP call, pass as { contextContent: context, cacheStrategy: 'balanced', language: 'python' }\n# This tool returns a Markdown report with an optimized context block.\n\`\`\``
|
|
43
|
+
: `\`\`\`ts\n// Example: prepare concise context and request optimization\nconst context = "Python repo. Fix security issues; add validation and logging. Key: UserManager, calculate_discount, process_user_data.";\n// In an MCP call, pass as { contextContent: context, cacheStrategy: 'balanced', language: 'typescript' }\n// This tool returns a Markdown report with an optimized context block.\n\`\`\``;
|
|
44
|
+
const metadata = input.includeMetadata
|
|
45
|
+
? [
|
|
46
|
+
"### Metadata",
|
|
47
|
+
`- Updated: ${new Date().toISOString().slice(0, 10)}`,
|
|
48
|
+
"- Source tool: mcp_ai-agent-guid_memory-context-optimizer",
|
|
49
|
+
input.inputFile ? `- Input file: ${input.inputFile}` : undefined,
|
|
50
|
+
"",
|
|
51
|
+
]
|
|
52
|
+
.filter(Boolean)
|
|
53
|
+
.join("\n")
|
|
54
|
+
: "";
|
|
55
|
+
const text = `## 🧠 Memory Context Optimization Report
|
|
56
|
+
|
|
57
|
+
${metadata}
|
|
58
|
+
|
|
59
|
+
### 🔎 Input Analysis
|
|
60
|
+
- **Original Length**: ${input.contextContent.length} characters
|
|
61
|
+
- **Estimated Tokens**: ~${Math.ceil(input.contextContent.length / 4)}
|
|
62
|
+
- **Max Tokens Limit**: ${input.maxTokens || "Not specified"}
|
|
63
|
+
- **Cache Strategy**: ${input.cacheStrategy || "balanced"}
|
|
64
|
+
|
|
65
|
+
### ✅ Optimization Results
|
|
66
|
+
- **Optimized Length**: ${optimization.optimizedContent.length} characters
|
|
67
|
+
- **Estimated Tokens**: ~${Math.ceil(optimization.optimizedContent.length / 4)}
|
|
68
|
+
- **Reduction**: ${optimization.reductionPercentage}%
|
|
69
|
+
- **Cache Segments**: ${optimization.cacheSegments.length}
|
|
70
|
+
|
|
71
|
+
### 📊 Summary
|
|
72
|
+
| Metric | Value |
|
|
73
|
+
|---|---|
|
|
74
|
+
| Original Length | ${input.contextContent.length} chars |
|
|
75
|
+
| Original Tokens (est.) | ~${Math.ceil(input.contextContent.length / 4)} |
|
|
76
|
+
| Optimized Length | ${optimization.optimizedContent.length} chars |
|
|
77
|
+
| Optimized Tokens (est.) | ~${Math.ceil(optimization.optimizedContent.length / 4)} |
|
|
78
|
+
| Reduction | ${optimization.reductionPercentage}% |
|
|
79
|
+
| Cache Strategy | ${optimization.cacheStrategy} |
|
|
80
|
+
| Max Tokens | ${input.maxTokens || "Not specified"} |
|
|
81
|
+
| Cache Segments | ${optimization.cacheSegments.length} |
|
|
82
|
+
|
|
83
|
+
### ✂️ Optimized Content
|
|
84
|
+
\`\`\`${fence}
|
|
85
|
+
${optimization.optimizedContent}
|
|
86
|
+
\`\`\`
|
|
87
|
+
|
|
88
|
+
### 🧩 Caching Strategy
|
|
89
|
+
${(input.cacheStrategy || "balanced") === "aggressive"
|
|
90
|
+
? "**Aggressive Caching**: Maximizes cache usage, suitable for repetitive contexts"
|
|
91
|
+
: (input.cacheStrategy || "balanced") === "conservative"
|
|
92
|
+
? "**Conservative Caching**: Minimal caching, preserves most context freshness"
|
|
93
|
+
: "**Balanced Caching**: Optimizes between cache efficiency and context freshness"}
|
|
94
|
+
|
|
95
|
+
${optimization.cacheSegments.length ? `### 🧱 Cache Segments\n${segmentsList}\n${segmentsTable}\n${pie}\n` : ""}
|
|
96
|
+
|
|
97
|
+
### 🔧 Implementation Tips
|
|
98
|
+
1. **Use prompt caching** for repeated system messages and tool definitions
|
|
99
|
+
2. **Implement conversation summarization** for long sessions
|
|
100
|
+
3. **Clear unnecessary context** periodically to reduce token usage
|
|
101
|
+
4. **Prioritize recent context** over older conversation history
|
|
102
|
+
5. **Cache static resources** like guidelines and templates
|
|
103
|
+
|
|
104
|
+
### 🧭 Memory Management Best Practices
|
|
105
|
+
- Monitor token usage in real-time
|
|
106
|
+
- Implement automatic context compression when approaching limits
|
|
107
|
+
- Use structured data formats to reduce token overhead
|
|
108
|
+
- Leverage semantic similarity to identify redundant information
|
|
109
|
+
- Implement rolling window approach for conversation history
|
|
110
|
+
${references ? `\n### References\n${references}\n` : ""}
|
|
111
|
+
|
|
112
|
+
### 📁 Files
|
|
113
|
+
- Source tool: src/tools/memory-context-optimizer.ts
|
|
114
|
+
- Demo output: demos/demo-code-analysis.memory-optimizer.md
|
|
115
|
+
|
|
116
|
+
### 🚀 Quick Usage Example
|
|
117
|
+
${usage}
|
|
118
|
+
|
|
119
|
+
### ⚠️ Disclaimer
|
|
120
|
+
- Caching effectiveness and token estimates vary by provider and model. Validate in your environment.
|
|
121
|
+
`;
|
|
122
|
+
return { content: [{ type: "text", text }] };
|
|
123
|
+
}
|
|
124
|
+
function optimizeMemoryContext(input) {
|
|
125
|
+
const { contextContent, maxTokens, cacheStrategy = "balanced" } = input;
|
|
126
|
+
let optimizedContent = contextContent;
|
|
127
|
+
const cacheSegments = [];
|
|
128
|
+
// Preserve code formatting for likely code blocks
|
|
129
|
+
const looksLikeCode = /\b(class |def |function |import |const |let |{ |}\s*$)/m.test(contextContent);
|
|
130
|
+
if (!looksLikeCode) {
|
|
131
|
+
optimizedContent = optimizedContent.replace(/\s+/g, " ").trim();
|
|
132
|
+
}
|
|
133
|
+
const systemPrompts = extractSystemPrompts(optimizedContent);
|
|
134
|
+
const toolDefinitions = extractToolDefinitions(optimizedContent);
|
|
135
|
+
const staticResources = extractStaticResources(optimizedContent);
|
|
136
|
+
switch (cacheStrategy) {
|
|
137
|
+
case "aggressive": {
|
|
138
|
+
if (systemPrompts.length > 0) {
|
|
139
|
+
cacheSegments.push({
|
|
140
|
+
type: "System Prompts",
|
|
141
|
+
tokens: Math.ceil(systemPrompts.join(" ").length / 4),
|
|
142
|
+
description: "Cached system-level instructions and guidelines",
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
if (toolDefinitions.length > 0) {
|
|
146
|
+
cacheSegments.push({
|
|
147
|
+
type: "Tool Definitions",
|
|
148
|
+
tokens: Math.ceil(toolDefinitions.join(" ").length / 4),
|
|
149
|
+
description: "Cached tool schemas and descriptions",
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
if (staticResources.length > 0) {
|
|
153
|
+
cacheSegments.push({
|
|
154
|
+
type: "Static Resources",
|
|
155
|
+
tokens: Math.ceil(staticResources.join(" ").length / 4),
|
|
156
|
+
description: "Cached documentation and reference materials",
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
break;
|
|
160
|
+
}
|
|
161
|
+
case "conservative": {
|
|
162
|
+
if (systemPrompts.length > 0) {
|
|
163
|
+
cacheSegments.push({
|
|
164
|
+
type: "Core System Prompt",
|
|
165
|
+
tokens: Math.ceil((systemPrompts[0] || "").length / 4),
|
|
166
|
+
description: "Primary system instructions only",
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
break;
|
|
170
|
+
}
|
|
171
|
+
default: {
|
|
172
|
+
if (systemPrompts.length > 0) {
|
|
173
|
+
cacheSegments.push({
|
|
174
|
+
type: "System Prompts",
|
|
175
|
+
tokens: Math.ceil(systemPrompts.join(" ").length / 4),
|
|
176
|
+
description: "System-level instructions and core guidelines",
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
if (toolDefinitions.length > 0) {
|
|
180
|
+
cacheSegments.push({
|
|
181
|
+
type: "Tool Definitions",
|
|
182
|
+
tokens: Math.ceil(toolDefinitions.join(" ").length / 4),
|
|
183
|
+
description: "Tool schemas and function descriptions",
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
break;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
if (maxTokens) {
|
|
190
|
+
const currentTokens = Math.ceil(optimizedContent.length / 4);
|
|
191
|
+
if (currentTokens > maxTokens) {
|
|
192
|
+
const targetLength = maxTokens * 4;
|
|
193
|
+
optimizedContent = intelligentTruncate(optimizedContent, targetLength);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
const originalLength = contextContent.length;
|
|
197
|
+
const optimizedLength = optimizedContent.length;
|
|
198
|
+
const reductionPercentage = Math.round((1 - optimizedLength / originalLength) * 100);
|
|
199
|
+
return {
|
|
200
|
+
optimizedContent,
|
|
201
|
+
reductionPercentage,
|
|
202
|
+
cacheSegments,
|
|
203
|
+
cacheStrategy,
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
function extractSystemPrompts(content) {
|
|
207
|
+
const patterns = [
|
|
208
|
+
/You are a[^.]+\./gi,
|
|
209
|
+
/System:[^\n]+/gi,
|
|
210
|
+
/Instructions:[^\n]+/gi,
|
|
211
|
+
];
|
|
212
|
+
const results = [];
|
|
213
|
+
patterns.forEach((p) => {
|
|
214
|
+
const m = content.match(p);
|
|
215
|
+
if (m)
|
|
216
|
+
results.push(...m);
|
|
217
|
+
});
|
|
218
|
+
return results;
|
|
219
|
+
}
|
|
220
|
+
function extractToolDefinitions(content) {
|
|
221
|
+
const patterns = [
|
|
222
|
+
/function\s+\w+[^}]+}/gi,
|
|
223
|
+
/tool\s*:\s*[^\n]+/gi,
|
|
224
|
+
/"name"\s*:\s*"[^"]+"/gi,
|
|
225
|
+
];
|
|
226
|
+
const results = [];
|
|
227
|
+
patterns.forEach((p) => {
|
|
228
|
+
const m = content.match(p);
|
|
229
|
+
if (m)
|
|
230
|
+
results.push(...m);
|
|
231
|
+
});
|
|
232
|
+
return results;
|
|
233
|
+
}
|
|
234
|
+
function extractStaticResources(content) {
|
|
235
|
+
const patterns = [/# [A-Z][^\n]+/g, /## [A-Z][^\n]+/g, /- [A-Z][^\n]+/g];
|
|
236
|
+
const results = [];
|
|
237
|
+
patterns.forEach((p) => {
|
|
238
|
+
const m = content.match(p);
|
|
239
|
+
if (m)
|
|
240
|
+
results.push(...m);
|
|
241
|
+
});
|
|
242
|
+
return results;
|
|
243
|
+
}
|
|
244
|
+
function intelligentTruncate(content, targetLength) {
|
|
245
|
+
if (content.length <= targetLength)
|
|
246
|
+
return content;
|
|
247
|
+
const sentences = content.split(/[.!?]+/);
|
|
248
|
+
let truncated = "";
|
|
249
|
+
for (const sentence of sentences) {
|
|
250
|
+
if ((truncated + sentence).length > targetLength)
|
|
251
|
+
break;
|
|
252
|
+
truncated += `${sentence}. `;
|
|
253
|
+
}
|
|
254
|
+
return truncated.trim() || content.substring(0, targetLength);
|
|
255
|
+
}
|
|
256
|
+
//# sourceMappingURL=memory-context-optimizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-context-optimizer.js","sourceRoot":"","sources":["../../src/tools/memory-context-optimizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mermaid-diagram-generator.d.ts","sourceRoot":"","sources":["../../src/tools/mermaid-diagram-generator.ts"],"names":[],"mappings":"AA+CA,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,OAAO;;;;;GAoF1D"}
|
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
async function validateDiagram(code) {
|
|
3
|
+
try {
|
|
4
|
+
// dynamic import keeps tool lightweight if mermaid not installed
|
|
5
|
+
const mermaid = await import("mermaid");
|
|
6
|
+
// mermaid.parse will throw on error
|
|
7
|
+
// Some versions expose parse async; wrap in Promise.resolve
|
|
8
|
+
// @ts-ignore
|
|
9
|
+
await Promise.resolve(mermaid.parse(code));
|
|
10
|
+
return { valid: true };
|
|
11
|
+
}
|
|
12
|
+
catch (err) {
|
|
13
|
+
const msg = err.message || String(err);
|
|
14
|
+
// If mermaid is not installed/available, skip validation but allow diagram output
|
|
15
|
+
if (/Cannot find module 'mermaid'|Cannot use import statement|module not found/i.test(msg)) {
|
|
16
|
+
return { valid: true, skipped: true };
|
|
17
|
+
}
|
|
18
|
+
return { valid: false, error: msg };
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
const MermaidDiagramSchema = z.object({
|
|
22
|
+
description: z.string(),
|
|
23
|
+
diagramType: z.enum([
|
|
24
|
+
"flowchart",
|
|
25
|
+
"sequence",
|
|
26
|
+
"class",
|
|
27
|
+
"state",
|
|
28
|
+
"gantt",
|
|
29
|
+
"pie",
|
|
30
|
+
]),
|
|
31
|
+
theme: z.string().optional(),
|
|
32
|
+
strict: z.boolean().optional().default(true), // if true, never emit invalid diagram; fallback if needed
|
|
33
|
+
repair: z.boolean().optional().default(true), // attempt auto-repair on failure
|
|
34
|
+
// Accessibility metadata (added as Mermaid comments to avoid requiring specific Mermaid versions)
|
|
35
|
+
accTitle: z.string().optional(),
|
|
36
|
+
accDescr: z.string().optional(),
|
|
37
|
+
});
|
|
38
|
+
export async function mermaidDiagramGenerator(args) {
|
|
39
|
+
const input = MermaidDiagramSchema.parse(args);
|
|
40
|
+
let diagram = generateMermaidDiagram(input);
|
|
41
|
+
// Prepend accessibility comments if provided
|
|
42
|
+
const accLines = [];
|
|
43
|
+
if (input.accTitle)
|
|
44
|
+
accLines.push(`%% AccTitle: ${input.accTitle} %%`);
|
|
45
|
+
if (input.accDescr)
|
|
46
|
+
accLines.push(`%% AccDescr: ${input.accDescr} %%`);
|
|
47
|
+
if (accLines.length) {
|
|
48
|
+
diagram = [accLines.join("\n"), diagram].join("\n");
|
|
49
|
+
}
|
|
50
|
+
let validation = await validateDiagram(diagram);
|
|
51
|
+
let repaired = false;
|
|
52
|
+
if (!validation.valid && input.repair) {
|
|
53
|
+
const attempt = repairDiagram(diagram);
|
|
54
|
+
if (attempt !== diagram) {
|
|
55
|
+
diagram = attempt;
|
|
56
|
+
validation = await validateDiagram(diagram);
|
|
57
|
+
repaired = validation.valid;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
if (!validation.valid && input.strict) {
|
|
61
|
+
// Provide safe fallback minimal valid diagram
|
|
62
|
+
diagram = fallbackDiagram();
|
|
63
|
+
validation = await validateDiagram(diagram); // should pass; if not, still return with flag
|
|
64
|
+
}
|
|
65
|
+
const validityNote = validation.valid
|
|
66
|
+
? validation.skipped
|
|
67
|
+
? `ℹ️ Validation skipped (mermaid not available). Diagram generated.`
|
|
68
|
+
: `✅ Diagram validated successfully${repaired ? " (after auto-repair)" : ""}.`
|
|
69
|
+
: `❌ Diagram invalid even after attempts: ${validation.error}`;
|
|
70
|
+
const feedback = validation.valid
|
|
71
|
+
? ""
|
|
72
|
+
: [
|
|
73
|
+
"### Feedback Loop",
|
|
74
|
+
"- Try simplifying node labels (avoid punctuation that Mermaid may misparse)",
|
|
75
|
+
"- Ensure a single diagram header (e.g., 'flowchart TD')",
|
|
76
|
+
"- Replace complex punctuation with plain words",
|
|
77
|
+
"- If describing a pipeline, try a simpler 5-step flow and add branches gradually",
|
|
78
|
+
].join("\n");
|
|
79
|
+
return {
|
|
80
|
+
content: [
|
|
81
|
+
{
|
|
82
|
+
type: "text",
|
|
83
|
+
text: [
|
|
84
|
+
"## Generated Mermaid Diagram",
|
|
85
|
+
"",
|
|
86
|
+
"### Description",
|
|
87
|
+
input.description,
|
|
88
|
+
"",
|
|
89
|
+
"### Diagram Code",
|
|
90
|
+
"```mermaid",
|
|
91
|
+
diagram,
|
|
92
|
+
"```",
|
|
93
|
+
"",
|
|
94
|
+
"### Accessibility",
|
|
95
|
+
input.accTitle || input.accDescr
|
|
96
|
+
? [
|
|
97
|
+
input.accTitle ? `- Title: ${input.accTitle}` : undefined,
|
|
98
|
+
input.accDescr ? `- Description: ${input.accDescr}` : undefined,
|
|
99
|
+
]
|
|
100
|
+
.filter(Boolean)
|
|
101
|
+
.join("\n")
|
|
102
|
+
: "- You can provide accTitle and accDescr to improve screen reader context.",
|
|
103
|
+
"",
|
|
104
|
+
"### Validation",
|
|
105
|
+
validityNote,
|
|
106
|
+
feedback,
|
|
107
|
+
"",
|
|
108
|
+
"### Generation Settings",
|
|
109
|
+
`Type: ${input.diagramType}`,
|
|
110
|
+
`Strict: ${input.strict}`,
|
|
111
|
+
`Repair: ${input.repair}`,
|
|
112
|
+
"",
|
|
113
|
+
"### Usage Instructions",
|
|
114
|
+
"1. Copy the Mermaid code above",
|
|
115
|
+
"2. Paste it into any Mermaid-enabled Markdown renderer or the Live Editor",
|
|
116
|
+
"3. Adjust styling, layout, or relationships as needed",
|
|
117
|
+
"",
|
|
118
|
+
"### Notes",
|
|
119
|
+
"Repair heuristics: classDef style tokens normalized, ensures colon syntax, fallback to minimal diagram if unrecoverable.",
|
|
120
|
+
].join("\n"),
|
|
121
|
+
},
|
|
122
|
+
],
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
function repairDiagram(diagram) {
|
|
126
|
+
let repaired = diagram;
|
|
127
|
+
// Normalize classDef syntax (convert fill= to fill: etc.)
|
|
128
|
+
repaired = repaired.replace(/classDef (\w+) ([^\n;]+);?/g, (_m, name, body) => {
|
|
129
|
+
const fixed = body
|
|
130
|
+
.split(/[, ]+/)
|
|
131
|
+
.filter(Boolean)
|
|
132
|
+
.map((pair) => pair.replace(/=/g, ":"))
|
|
133
|
+
.join(",");
|
|
134
|
+
return `classDef ${name} ${fixed};`;
|
|
135
|
+
});
|
|
136
|
+
// Ensure flowchart header present
|
|
137
|
+
if (!/^\s*flowchart /.test(repaired) && /\bflowchart\b/.test(repaired)) {
|
|
138
|
+
repaired = `flowchart TD\n${repaired}`;
|
|
139
|
+
}
|
|
140
|
+
return repaired;
|
|
141
|
+
}
|
|
142
|
+
function fallbackDiagram() {
|
|
143
|
+
return [
|
|
144
|
+
"flowchart TD",
|
|
145
|
+
"A([Start]) --> B[Fallback Diagram]",
|
|
146
|
+
"B --> C([End])",
|
|
147
|
+
].join("\n");
|
|
148
|
+
}
|
|
149
|
+
function generateMermaidDiagram(input) {
|
|
150
|
+
const { description, diagramType, theme } = input;
|
|
151
|
+
switch (diagramType) {
|
|
152
|
+
case "flowchart":
|
|
153
|
+
return generateFlowchart(description, theme);
|
|
154
|
+
case "sequence":
|
|
155
|
+
return generateSequenceDiagram(description, theme);
|
|
156
|
+
case "class":
|
|
157
|
+
return generateClassDiagram(description, theme);
|
|
158
|
+
case "state":
|
|
159
|
+
return generateStateDiagram(description, theme);
|
|
160
|
+
case "gantt":
|
|
161
|
+
return generateGanttChart(description, theme);
|
|
162
|
+
case "pie":
|
|
163
|
+
return generatePieChart(description, theme);
|
|
164
|
+
default:
|
|
165
|
+
return generateFlowchart(description, theme);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
function generateFlowchart(description, theme) {
|
|
169
|
+
const steps = extractSteps(description);
|
|
170
|
+
const lines = ["flowchart TD"];
|
|
171
|
+
if (theme)
|
|
172
|
+
lines.unshift(`%%{init: {'theme':'${theme}'}}%%`);
|
|
173
|
+
if (!steps.length) {
|
|
174
|
+
// Provide a simple user->system->processor->output pipeline if description lacks clear steps
|
|
175
|
+
lines.push("U([User]) --> R[Read users.json]", "R --> P[Filter active users with permissions]", "P --> A[Append to result]", "A --> O([Summary Output])");
|
|
176
|
+
return lines.join("\n");
|
|
177
|
+
}
|
|
178
|
+
// Build main chain with optional branching for filter step
|
|
179
|
+
let offset = 0;
|
|
180
|
+
for (let i = 0; i < steps.length; i++) {
|
|
181
|
+
const id = String.fromCharCode(65 + i + offset);
|
|
182
|
+
const label = steps[i];
|
|
183
|
+
const isFilter = /filter .*active .*users/i.test(label);
|
|
184
|
+
const decisionLike = /(decision|choose|\?)/i.test(label) || isFilter;
|
|
185
|
+
if (isFilter) {
|
|
186
|
+
// Create decision node with yes/no branches
|
|
187
|
+
lines.push(`${id}{${label}?}`);
|
|
188
|
+
const yesId = String.fromCharCode(65 + i + 1 + offset);
|
|
189
|
+
const noId = String.fromCharCode(65 + i + 2 + offset);
|
|
190
|
+
lines.push(`${id} -->|Yes| ${yesId}[Append to result]`);
|
|
191
|
+
lines.push(`${id} -->|No| ${noId}[Skip]`);
|
|
192
|
+
// Advance offset because we injected two extra nodes
|
|
193
|
+
offset += 2;
|
|
194
|
+
const nextId = String.fromCharCode(65 + i + 1 + offset);
|
|
195
|
+
if (i < steps.length - 1) {
|
|
196
|
+
lines.push(`${yesId} --> ${nextId}`);
|
|
197
|
+
lines.push(`${noId} --> ${nextId}`);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
lines.push(decisionLike ? `${id}{${label}}` : `${id}[${label}]`);
|
|
202
|
+
if (i < steps.length - 1) {
|
|
203
|
+
const nextId = String.fromCharCode(65 + i + 1 + offset);
|
|
204
|
+
lines.push(`${id} --> ${nextId}`);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
const lastId = String.fromCharCode(65 + steps.length - 1 + offset);
|
|
209
|
+
const endId = String.fromCharCode(65 + steps.length + offset);
|
|
210
|
+
lines.push(`${lastId} --> ${endId}([End])`);
|
|
211
|
+
// Enrich with risk / smell nodes based on keywords
|
|
212
|
+
const riskNodes = [];
|
|
213
|
+
let riskIndex = steps.length + 1 + offset; // starting after End
|
|
214
|
+
const addRisk = (id, label, connectFrom) => {
|
|
215
|
+
lines.push(`${id}[${label}]`);
|
|
216
|
+
lines.push(`${connectFrom} -.-> ${id}`);
|
|
217
|
+
riskNodes.push(id);
|
|
218
|
+
};
|
|
219
|
+
const lower = description.toLowerCase();
|
|
220
|
+
const firstId = "A";
|
|
221
|
+
if (/api key|secret/.test(lower)) {
|
|
222
|
+
const id = String.fromCharCode(65 + riskIndex++);
|
|
223
|
+
addRisk(id, "Hardcoded Secret", firstId);
|
|
224
|
+
}
|
|
225
|
+
if (/sql/.test(lower)) {
|
|
226
|
+
const id = String.fromCharCode(65 + riskIndex++);
|
|
227
|
+
addRisk(id, "Raw SQL Query Risk", firstId);
|
|
228
|
+
}
|
|
229
|
+
if (/deprecated|old method|old\b/.test(lower)) {
|
|
230
|
+
const id = String.fromCharCode(65 + riskIndex++);
|
|
231
|
+
addRisk(id, "Deprecated Method", firstId);
|
|
232
|
+
}
|
|
233
|
+
if (riskNodes.length) {
|
|
234
|
+
lines.push("classDef risk fill:#fee,stroke:#d33,stroke-width:1px;");
|
|
235
|
+
lines.push(`class ${riskNodes.join(",")} risk;`);
|
|
236
|
+
}
|
|
237
|
+
return lines.join("\n");
|
|
238
|
+
}
|
|
239
|
+
function generateSequenceDiagram(_description, theme) {
|
|
240
|
+
const header = ["sequenceDiagram"];
|
|
241
|
+
if (theme)
|
|
242
|
+
header.unshift(`%%{init: {'theme':'${theme}'}}%%`);
|
|
243
|
+
// For now still static; could parse description for interactions later
|
|
244
|
+
const body = [
|
|
245
|
+
"participant U as User",
|
|
246
|
+
"participant S as System",
|
|
247
|
+
"participant D as Database",
|
|
248
|
+
"U->>S: Request",
|
|
249
|
+
"S->>D: Query",
|
|
250
|
+
"D-->>S: Data",
|
|
251
|
+
"S-->>U: Response",
|
|
252
|
+
];
|
|
253
|
+
return [...header, ...body].join("\n");
|
|
254
|
+
}
|
|
255
|
+
function generateClassDiagram(_description, theme) {
|
|
256
|
+
const lines = ["classDiagram"];
|
|
257
|
+
if (theme)
|
|
258
|
+
lines.unshift(`%%{init: {'theme':'${theme}'}}%%`);
|
|
259
|
+
lines.push("class User {", " +String name", " +String email", " +login()", " +logout()", "}", "class System {", " +processRequest()", " +validateUser()", "}", "User --> System : uses");
|
|
260
|
+
return lines.join("\n");
|
|
261
|
+
}
|
|
262
|
+
function generateStateDiagram(_description, theme) {
|
|
263
|
+
const lines = ["stateDiagram-v2"];
|
|
264
|
+
if (theme)
|
|
265
|
+
lines.unshift(`%%{init: {'theme':'${theme}'}}%%`);
|
|
266
|
+
lines.push("[*] --> Idle", "Idle --> Processing : start", "Processing --> Complete : finish", "Processing --> Error : fail", "Complete --> [*]", "Error --> Idle : retry");
|
|
267
|
+
return lines.join("\n");
|
|
268
|
+
}
|
|
269
|
+
function generateGanttChart(_description, _theme) {
|
|
270
|
+
// Generate dynamic dates starting from current date
|
|
271
|
+
const today = new Date();
|
|
272
|
+
const formatDate = (date) => date.toISOString().split("T")[0];
|
|
273
|
+
const startDate = formatDate(today);
|
|
274
|
+
const researchEnd = formatDate(new Date(today.getTime() + 4 * 24 * 60 * 60 * 1000)); // +4 days
|
|
275
|
+
const designStart = formatDate(new Date(today.getTime() + 5 * 24 * 60 * 60 * 1000)); // +5 days
|
|
276
|
+
const designEnd = formatDate(new Date(today.getTime() + 11 * 24 * 60 * 60 * 1000)); // +11 days
|
|
277
|
+
// Derive implementation and testing phases from design end
|
|
278
|
+
const implementationStart = formatDate(new Date(new Date(designEnd).getTime() + 1 * 24 * 60 * 60 * 1000)); // day after design end
|
|
279
|
+
const implementationEnd = formatDate(new Date(new Date(designEnd).getTime() + 11 * 24 * 60 * 60 * 1000)); // +10 days duration
|
|
280
|
+
const testingStart = formatDate(new Date(new Date(implementationEnd).getTime() + 1 * 24 * 60 * 60 * 1000)); // day after implementation
|
|
281
|
+
const testingEnd = formatDate(new Date(new Date(implementationEnd).getTime() + 6 * 24 * 60 * 60 * 1000)); // +5 days duration
|
|
282
|
+
return [
|
|
283
|
+
"gantt",
|
|
284
|
+
"title Project Timeline",
|
|
285
|
+
"dateFormat YYYY-MM-DD",
|
|
286
|
+
"section Planning",
|
|
287
|
+
`Research :done, research, ${startDate}, ${researchEnd}`,
|
|
288
|
+
`Design :active, design, ${designStart}, ${designEnd}`,
|
|
289
|
+
"section Development",
|
|
290
|
+
`Implementation :impl, ${implementationStart}, ${implementationEnd}`,
|
|
291
|
+
`Testing :test, ${testingStart}, ${testingEnd}`,
|
|
292
|
+
].join("\n");
|
|
293
|
+
}
|
|
294
|
+
function generatePieChart(_description, _theme) {
|
|
295
|
+
return [
|
|
296
|
+
"pie title Sample Distribution",
|
|
297
|
+
'"Category A" : 45',
|
|
298
|
+
'"Category B" : 30',
|
|
299
|
+
'"Category C" : 15',
|
|
300
|
+
'"Category D" : 10',
|
|
301
|
+
].join("\n");
|
|
302
|
+
}
|
|
303
|
+
function extractSteps(description) {
|
|
304
|
+
// Simple step extraction logic: split on sentence terminators & newlines
|
|
305
|
+
const sentences = description
|
|
306
|
+
.split(/[.!?\n]+/)
|
|
307
|
+
.map((s) => s.trim())
|
|
308
|
+
.filter((s) => s.length > 0);
|
|
309
|
+
// Allow up to 12 steps for better granularity while keeping diagram readable
|
|
310
|
+
return sentences.slice(0, 12);
|
|
311
|
+
}
|
|
312
|
+
//# sourceMappingURL=mermaid-diagram-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mermaid-diagram-generator.js","sourceRoot":"","sources":["../../src/tools/mermaid-diagram-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-compatibility-checker.d.ts","sourceRoot":"","sources":["../../src/tools/model-compatibility-checker.ts"],"names":[],"mappings":"AA4BA,wBAAsB,yBAAyB,CAAC,IAAI,EAAE,OAAO;;;;;GAoG5D"}
|