forked from boos/BoosAPI
feat: bundle desktop skills
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user