Files
ONE-OS/axhub-make/scripts/sync-third-party-skills.mjs
王冕 a27e3b8e43 feat: sync full workspace including web modules, docs, and configurations to Gitea
Optimized the root .gitignore to exclude virtual environments, node modules,
and temp folders to ensure clean and lightweight version tracking.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-09 18:12:25 +08:00

126 lines
4.5 KiB
JavaScript

import { mkdir, rm, writeFile } from 'node:fs/promises';
import path from 'node:path';
import { fileURLToPath } from 'node:url';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const projectRoot = path.resolve(__dirname, '..');
const LEGACY_DOC_SKILLS_SEGMENT = '/doc-skills/';
const LEGACY_DOC_SKILLS_DIR = path.resolve(projectRoot, 'skills/third-party/doc-skills');
const SKILL_SOURCES = [
{
target: 'skills/third-party/frontend-design/SKILL.md',
url: 'https://raw.githubusercontent.com/anthropics/skills/main/skills/frontend-design/SKILL.md',
},
{
target: 'skills/third-party/interface-design/SKILL.md',
url: 'https://raw.githubusercontent.com/Dammyjay93/interface-design/main/.claude/skills/interface-design/SKILL.md',
},
{
target: 'skills/ui-ux-pro-max/SKILL.md',
url: 'https://raw.githubusercontent.com/nextlevelbuilder/ui-ux-pro-max-skill/main/.claude/skills/ui-ux-pro-max/SKILL.md',
},
{
target: 'skills/third-party/implement-design/SKILL.md',
url: 'https://raw.githubusercontent.com/figma/mcp-server-guide/main/skills/implement-design/SKILL.md',
},
{
target: 'skills/third-party/baoyu-image-gen/SKILL.md',
url: 'https://raw.githubusercontent.com/jimliu/baoyu-skills/main/skills/baoyu-image-gen/SKILL.md',
},
{
target: 'skills/third-party/shadcn-ui/SKILL.md',
url: 'https://raw.githubusercontent.com/giuseppe-trisciuoglio/developer-kit/main/plugins/developer-kit-typescript/skills/shadcn-ui/SKILL.md',
},
{
target: 'skills/third-party/ant-design/SKILL.md',
url: 'https://raw.githubusercontent.com/ant-design/antd-skill/main/skills/ant-design/SKILL.md',
},
{
target: 'skills/third-party/stitch-skills/design-md/SKILL.md',
url: 'https://raw.githubusercontent.com/google-labs-code/stitch-skills/main/skills/design-md/SKILL.md',
},
{
target: 'skills/third-party/stitch-skills/react-components/SKILL.md',
url: 'https://raw.githubusercontent.com/google-labs-code/stitch-skills/main/skills/react-components/SKILL.md',
},
{
target: 'skills/third-party/stitch-skills/stitch-loop/SKILL.md',
url: 'https://raw.githubusercontent.com/google-labs-code/stitch-skills/main/skills/stitch-loop/SKILL.md',
},
{
target: 'skills/third-party/brainstorming/SKILL.md',
url: 'https://raw.githubusercontent.com/obra/superpowers/main/skills/brainstorming/SKILL.md',
},
{
target: 'skills/third-party/deep-research/SKILL.md',
url: 'https://raw.githubusercontent.com/199-biotechnologies/claude-deep-research-skill/main/SKILL.md',
},
{
target: 'skills/third-party/anything-to-notebooklm/SKILL.md',
url: 'https://raw.githubusercontent.com/joeseesun/anything-to-notebooklm/main/SKILL.md',
},
{
target: 'skills/third-party/prd/SKILL.md',
url: 'https://raw.githubusercontent.com/github/awesome-copilot/main/skills/prd/SKILL.md',
},
{
target: 'skills/third-party/product-requirements/SKILL.md',
url: 'https://raw.githubusercontent.com/stellarlinkco/myclaude/master/skills/product-requirements/SKILL.md',
},
{
target: 'skills/third-party/research/SKILL.md',
url: 'https://raw.githubusercontent.com/tavily-ai/skills/main/skills/tavily/research/SKILL.md',
},
{
target: 'skills/third-party/user-story-writing/SKILL.md',
url: 'https://raw.githubusercontent.com/aj-geddes/useful-ai-prompts/main/skills/user-story-writing/SKILL.md',
},
];
async function syncSkill({ target, url }) {
if (target.includes(LEGACY_DOC_SKILLS_SEGMENT)) {
throw new Error(`Legacy nested target is not allowed: ${target}`);
}
const response = await fetch(url);
if (!response.ok) {
throw new Error(`HTTP ${response.status} ${response.statusText}`);
}
const content = await response.text();
const outputPath = path.resolve(projectRoot, target);
await mkdir(path.dirname(outputPath), { recursive: true });
await writeFile(outputPath, content, 'utf8');
}
async function main() {
let hasErrors = false;
await rm(LEGACY_DOC_SKILLS_DIR, { recursive: true, force: true });
for (const source of SKILL_SOURCES) {
try {
await syncSkill(source);
console.log(`[OK] ${source.target}`);
} catch (error) {
hasErrors = true;
const message = error instanceof Error ? error.message : String(error);
console.error(`[FAIL] ${source.target} - ${message}`);
}
}
if (hasErrors) {
process.exitCode = 1;
return;
}
console.log(`Synced ${SKILL_SOURCES.length} third-party skills.`);
}
await main();