From 656ac493da239811520428f651f372811bc17d4e Mon Sep 17 00:00:00 2001 From: alwkala Date: Wed, 2 Sep 2026 00:01:04 +0300 Subject: [PATCH] docs: standardize 8-language documentation, badges and organization footers --- dist/tidyfactor-html.skill | Bin 531253 -> 531864 bytes dist/tidyfactor-html/bin/add-skill.js | 46 ++++++++++++++++++++++---- 2 files changed, 40 insertions(+), 6 deletions(-) diff --git a/dist/tidyfactor-html.skill b/dist/tidyfactor-html.skill index 389ec48140cfcdb05dcbd7e167c5bc40a920cc56..fe597384de3f2979630d3171e04a0314fba3fb9e 100644 GIT binary patch delta 1837 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 diff --git a/dist/tidyfactor-html/bin/add-skill.js b/dist/tidyfactor-html/bin/add-skill.js index ba267b6..4f8b011 100644 --- a/dist/tidyfactor-html/bin/add-skill.js +++ b/dist/tidyfactor-html/bin/add-skill.js @@ -1,25 +1,42 @@ #!/usr/bin/env node /** - * bin/add-skill.js — CLI installer wrapper for tidyfactor-html + * bin/add-skill.js — Multi-Agent Skill Installer Wrapper for tidyfactor-html + * Supports Trae, Cursor, Windsurf, Antigravity, GitHub Copilot, RooCode, OpenCode, KiloCode, Warp, and Universal. + * + * @license Apache-2.0 */ const fs = require('fs'); const path = require('path'); +const os = require('os'); const targetDir = process.cwd(); const skillSource = path.resolve(__dirname, '..'); -const agentSkillsDir = path.join(targetDir, '.agents', 'skills', 'tidyfactor-html'); +const skillName = 'tidyfactor-html'; -fs.mkdirSync(agentSkillsDir, { recursive: true }); +const AGENT_MAP = [ + { name: 'Trae AI IDE', dir: path.join(targetDir, '.trae', 'skills', skillName), test: path.join(targetDir, '.trae') }, + { name: 'Cursor IDE', dir: path.join(targetDir, '.cursor', 'skills', skillName), test: path.join(targetDir, '.cursor') }, + { name: 'Windsurf Cascade', dir: path.join(targetDir, '.windsurf', 'skills', skillName), test: path.join(targetDir, '.windsurf') }, + { name: 'GitHub Copilot', dir: path.join(targetDir, '.github', 'prompts', skillName), test: path.join(targetDir, '.github') }, + { name: 'RooCode', dir: path.join(targetDir, '.roo', 'skills', skillName), test: path.join(targetDir, '.roo') }, + { name: 'OpenCode / Zen', dir: path.join(targetDir, '.opencode', 'skills', skillName), test: path.join(targetDir, '.opencode') }, + { name: 'KiloCode', dir: path.join(targetDir, '.kilocode', 'skills', skillName), test: path.join(targetDir, '.kilocode') }, + { name: 'Warp Terminal', dir: path.join(targetDir, '.warp', 'skills', skillName), test: path.join(targetDir, '.warp') }, + { name: 'Kiro Spec IDE', dir: path.join(targetDir, '.kiro', 'skills', skillName), test: path.join(targetDir, '.kiro') }, + { name: 'Claude Code', dir: path.join(targetDir, '.claude', 'skills', skillName), test: path.join(targetDir, '.claude') }, + { name: 'Zed AI Agent', dir: path.join(targetDir, '.zed', 'skills', skillName), test: path.join(targetDir, '.zed') }, + { name: 'Google Antigravity/Gemini', dir: path.join(targetDir, '.agents', 'skills', skillName), test: path.join(targetDir, '.agents') }, +]; function copyRecursive(src, dest) { + fs.mkdirSync(dest, { recursive: true }); const entries = fs.readdirSync(src, { withFileTypes: true }); for (const entry of entries) { const srcPath = path.join(src, entry.name); const destPath = path.join(dest, entry.name); if (['.git', 'node_modules', 'dist'].includes(entry.name)) continue; if (entry.isDirectory()) { - fs.mkdirSync(destPath, { recursive: true }); copyRecursive(srcPath, destPath); } else { fs.copyFileSync(srcPath, destPath); @@ -27,5 +44,22 @@ function copyRecursive(src, dest) { } } -copyRecursive(skillSource, agentSkillsDir); -console.log('✓ Successfully injected tidyfactor-html skill into .agents/skills/tidyfactor-html'); +// Determine installation targets +let mountedTargets = []; + +for (const agent of AGENT_MAP) { + if (fs.existsSync(agent.test)) { + copyRecursive(skillSource, agent.dir); + mountedTargets.push(agent.name + ' (' + path.relative(targetDir, agent.dir) + ')'); + } +} + +// Always ensure universal fallback in .agents/skills/ +const defaultDir = path.join(targetDir, '.agents', 'skills', skillName); +copyRecursive(skillSource, defaultDir); +if (!mountedTargets.some(t => t.includes('.agents'))) { + mountedTargets.push('Universal Default (.agents/skills/' + skillName + ')'); +} + +console.log('✨ Successfully injected ' + skillName + ' into:'); +mountedTargets.forEach(t => console.log(' • ' + t));