Implements MCP server for semantic search across GSD projects: MCP Tools: - gsd_memory_search: Search across all registered projects - gsd_memory_decisions: Find decisions from SUMMARY/PROJECT.md - gsd_memory_patterns: Find patterns from SUMMARY.md - gsd_memory_pitfalls: Find pitfalls from RESEARCH.md - gsd_memory_stack: Find tech stack entries - gsd_memory_register: Register project with memory - gsd_memory_index: Trigger indexing/update - gsd_memory_status: Show system status Architecture: - QMD wrapper with grep fallback when QMD unavailable - YAML frontmatter extractors for GSD document types - Project registry at ~/.gsd/projects.json - Auto-install via bin/install.js for Claude Code Workflow integrations: - new-project: Registers project with memory - plan-phase: Indexes after planning - execute-phase: Indexes after execution - complete-milestone: Indexes milestone completion - Researcher agents query memory before Context7 Tests: 117 passing (66 unit + 51 integration) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
34 lines
790 B
JavaScript
34 lines
790 B
JavaScript
import matter from 'gray-matter';
|
|
/**
|
|
* Extract YAML frontmatter from markdown content
|
|
* Returns empty object if no frontmatter or invalid YAML
|
|
*/
|
|
export function extractFrontmatter(markdown) {
|
|
try {
|
|
const { data } = matter(markdown);
|
|
return data || {};
|
|
}
|
|
catch {
|
|
// Return empty object on parse errors
|
|
return {};
|
|
}
|
|
}
|
|
/**
|
|
* Extract frontmatter and content separately
|
|
*/
|
|
export function parseFrontmatter(markdown) {
|
|
try {
|
|
const { data, content } = matter(markdown);
|
|
return {
|
|
frontmatter: data || {},
|
|
content: content.trim()
|
|
};
|
|
}
|
|
catch {
|
|
return {
|
|
frontmatter: {},
|
|
content: markdown.trim()
|
|
};
|
|
}
|
|
}
|
|
//# sourceMappingURL=frontmatter.js.map
|