feat: bundle desktop skills

This commit is contained in:
boos
2026-06-26 14:28:13 +08:00
parent 424aaa9b1f
commit cd08ac931d
18 changed files with 719 additions and 17 deletions
+51 -2
View File
@@ -28,7 +28,56 @@ const openExternalUrl = (url: string) => {
const { Text, Paragraph } = Typography;
const BUILTIN_MARKETPLACE_DETAILS: Record<string, string> = {
'dimitrovakulenko/dwg-mcp-server': `# DWG MCP Server Skill
Use this skill when a user wants to inspect AutoCAD DWG drawings with an AI agent.
Upstream project: https://github.com/dimitrovakulenko/dwg-mcp-server
## Setup
\`\`\`bash
npx -y @dmytro-prototypes/dwg-mcp-server
\`\`\`
For clients without MCP roots:
\`\`\`bash
DWG_MCP_ALLOWED_ROOTS="$HOME" npx -y @dmytro-prototypes/dwg-mcp-server
\`\`\`
## Workflow
1. Ask for the DWG file path and confirm it is under an allowed root.
2. Use \`dwg.list_roots\`, \`dwg.open_file\`, \`dwg.list_file_types\`, \`dwg.describe_type\`, \`dwg.get_objects\`, and \`dwg.query_objects\`.
3. Summarize entities, layers, blocks, layouts, references, and notable properties.
4. Close the document with \`dwg.close_file\`.
`,
'jeremylongshore/cad-ai-agent': `# CAD AI Agent Skill
Use this skill for CAD/DXF drawing summaries, compliance checks, quantity takeoffs, RFIs, health reports, revision comparison, and safe edit planning.
Upstream project: https://github.com/jeremylongshore/cad-ai-agent
## Setup
\`\`\`bash
git clone https://github.com/jeremylongshore/cad-ai-agent.git
cd cad-ai-agent
python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
\`\`\`
## Workflow
1. Identify drawing format and user intent.
2. Preserve originals and prefer save-as outputs.
3. For edits, produce structured operation plans rather than touching raw CAD data directly.
4. For analysis, return layer/entity summaries, issues, measurements, and concrete next actions.
`,
};
const SOURCE_ICONS: Record<string, React.ReactNode> = {
boosapi: <img src={appLogo} alt="" style={{ width: 14, height: 14, verticalAlign: 'middle' }} />,
@@ -299,10 +348,10 @@ export function SkillsPage() {
setMarketplaceDetailContent({ name: skill.name, repo: skill.repo, content: '' });
try {
const res = await fetch(`https://raw.githubusercontent.com/${repo}/main/SKILL.md`);
const content = res.ok ? await res.text() : '(SKILL.md not found)';
const content = res.ok ? await res.text() : (BUILTIN_MARKETPLACE_DETAILS[repo] || '(SKILL.md not found)');
setMarketplaceDetailContent({ name: skill.name, repo: skill.repo, content });
} catch {
setMarketplaceDetailContent({ name: skill.name, repo: skill.repo, content: '(Failed to fetch SKILL.md)' });
setMarketplaceDetailContent({ name: skill.name, repo: skill.repo, content: BUILTIN_MARKETPLACE_DETAILS[repo] || '(Failed to fetch SKILL.md)' });
} finally {
setMarketplaceDetailLoading(false);
}