natureco-cli 5.18.3 → 5.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (154) hide show
  1. package/package.json +1 -1
  2. package/skills/airunway-aks-setup/SKILL.md +73 -0
  3. package/skills/algorithmic-art/SKILL.md +405 -0
  4. package/skills/appinsights-instrumentation/SKILL.md +76 -0
  5. package/skills/azure-ai/SKILL.md +71 -0
  6. package/skills/azure-aigateway/SKILL.md +129 -0
  7. package/skills/azure-cloud-migrate/SKILL.md +52 -0
  8. package/skills/azure-compliance/SKILL.md +108 -0
  9. package/skills/azure-compute/SKILL.md +46 -0
  10. package/skills/azure-cost/SKILL.md +45 -0
  11. package/skills/azure-deploy/SKILL.md +97 -0
  12. package/skills/azure-diagnostics/SKILL.md +151 -0
  13. package/skills/azure-enterprise-infra-planner/SKILL.md +54 -0
  14. package/skills/azure-hosted-copilot-sdk/SKILL.md +89 -0
  15. package/skills/azure-kubernetes/SKILL.md +153 -0
  16. package/skills/azure-kusto/SKILL.md +231 -0
  17. package/skills/azure-messaging/SKILL.md +57 -0
  18. package/skills/azure-prepare/SKILL.md +165 -0
  19. package/skills/azure-quotas/SKILL.md +276 -0
  20. package/skills/azure-rbac/SKILL.md +17 -0
  21. package/skills/azure-reliability/SKILL.md +387 -0
  22. package/skills/azure-resource-lookup/SKILL.md +108 -0
  23. package/skills/azure-resource-visualizer/SKILL.md +183 -0
  24. package/skills/azure-storage/SKILL.md +100 -0
  25. package/skills/azure-upgrade/SKILL.md +91 -0
  26. package/skills/azure-validate/SKILL.md +72 -0
  27. package/skills/brainstorming/SKILL.md +159 -0
  28. package/skills/brand-guidelines/SKILL.md +73 -0
  29. package/skills/brandkit/SKILL.md +798 -0
  30. package/skills/brutalist-skill/SKILL.md +92 -0
  31. package/skills/canvas-design/SKILL.md +130 -0
  32. package/skills/cavecrew/SKILL.md +82 -0
  33. package/skills/caveman-commit/SKILL.md +65 -0
  34. package/skills/caveman-help/SKILL.md +63 -0
  35. package/skills/caveman-review/SKILL.md +55 -0
  36. package/skills/caveman-stats/SKILL.md +10 -0
  37. package/skills/claude-api/SKILL.md +356 -0
  38. package/skills/composition-patterns/SKILL.md +89 -0
  39. package/skills/decision-mapping/SKILL.md +84 -0
  40. package/skills/deploy-to-vercel/SKILL.md +296 -0
  41. package/skills/design-an-interface/SKILL.md +94 -0
  42. package/skills/design-doc-mermaid/SKILL.md +498 -0
  43. package/skills/develop-userscripts/SKILL.md +84 -0
  44. package/skills/doc-coauthoring/SKILL.md +375 -0
  45. package/skills/documentation/SKILL.md +109 -0
  46. package/skills/docx/SKILL.md +590 -0
  47. package/skills/edit-article/SKILL.md +15 -0
  48. package/skills/entra-agent-id/SKILL.md +356 -0
  49. package/skills/entra-app-registration/SKILL.md +191 -0
  50. package/skills/faceless-explainer/SKILL.md +202 -0
  51. package/skills/fastify/SKILL.md +75 -0
  52. package/skills/general-video/SKILL.md +143 -0
  53. package/skills/git-guardrails-claude-code/SKILL.md +95 -0
  54. package/skills/github-actions-docs/SKILL.md +98 -0
  55. package/skills/gpt-tasteskill/SKILL.md +74 -0
  56. package/skills/grill-me/SKILL.md +7 -0
  57. package/skills/grilling/SKILL.md +10 -0
  58. package/skills/handoff/SKILL.md +16 -0
  59. package/skills/hyperframes/SKILL.md +152 -0
  60. package/skills/hyperframes-animation/SKILL.md +82 -0
  61. package/skills/hyperframes-cli/SKILL.md +109 -0
  62. package/skills/hyperframes-core/SKILL.md +78 -0
  63. package/skills/hyperframes-creative/SKILL.md +68 -0
  64. package/skills/hyperframes-media/SKILL.md +97 -0
  65. package/skills/image-to-code-skill/SKILL.md +1228 -0
  66. package/skills/imagegen-frontend-mobile/SKILL.md +1465 -0
  67. package/skills/imagegen-frontend-web/SKILL.md +987 -0
  68. package/skills/implement/SKILL.md +15 -0
  69. package/skills/init/SKILL.md +91 -0
  70. package/skills/internal-comms/SKILL.md +32 -0
  71. package/skills/lark-approval/SKILL.md +56 -0
  72. package/skills/lark-base/SKILL.md +157 -0
  73. package/skills/lark-doc/SKILL.md +81 -0
  74. package/skills/lark-shared/SKILL.md +168 -0
  75. package/skills/lark-workflow-meeting-summary/SKILL.md +122 -0
  76. package/skills/linting-neostandard-eslint9/SKILL.md +64 -0
  77. package/skills/loop-me/SKILL.md +32 -0
  78. package/skills/microsoft-foundry/SKILL.md +262 -0
  79. package/skills/migrate-to-shoehorn/SKILL.md +118 -0
  80. package/skills/minimalist-skill/SKILL.md +85 -0
  81. package/skills/motion-graphics/SKILL.md +170 -0
  82. package/skills/music-to-video/SKILL.md +197 -0
  83. package/skills/node/SKILL.md +94 -0
  84. package/skills/nodejs-core/SKILL.md +156 -0
  85. package/skills/oauth/SKILL.md +186 -0
  86. package/skills/obsidian-vault/SKILL.md +59 -0
  87. package/skills/octocat/SKILL.md +93 -0
  88. package/skills/openclaw-secure-linux-cloud/SKILL.md +157 -0
  89. package/skills/opensource-guide-coach/SKILL.md +218 -0
  90. package/skills/output-skill/SKILL.md +49 -0
  91. package/skills/pdf/SKILL.md +314 -0
  92. package/skills/pptx/SKILL.md +232 -0
  93. package/skills/pr-to-video/SKILL.md +235 -0
  94. package/skills/product-launch-video/SKILL.md +205 -0
  95. package/skills/python-appservice-deploy/SKILL.md +36 -0
  96. package/skills/qa/SKILL.md +130 -0
  97. package/skills/react-best-practices/SKILL.md +149 -0
  98. package/skills/react-native-skills/SKILL.md +121 -0
  99. package/skills/react-view-transitions/SKILL.md +320 -0
  100. package/skills/readme-i18n/SKILL.md +176 -0
  101. package/skills/redesign-skill/SKILL.md +178 -0
  102. package/skills/remotion/SKILL.md +364 -0
  103. package/skills/request-refactor-plan/SKILL.md +68 -0
  104. package/skills/resolving-merge-conflicts/SKILL.md +14 -0
  105. package/skills/running-claude-code-via-litellm-copilot/SKILL.md +263 -0
  106. package/skills/scaffold-exercises/SKILL.md +106 -0
  107. package/skills/secure-linux-web-hosting/SKILL.md +162 -0
  108. package/skills/setup-pre-commit/SKILL.md +91 -0
  109. package/skills/shadcn/SKILL.md +267 -0
  110. package/skills/simple/SKILL.md +52 -0
  111. package/skills/skill-creator/SKILL.md +485 -0
  112. package/skills/skill-optimizer/SKILL.md +47 -0
  113. package/skills/skills-cli/SKILL.md +281 -0
  114. package/skills/slack-gif-creator/SKILL.md +254 -0
  115. package/skills/snipgrapher/SKILL.md +58 -0
  116. package/skills/soft-skill/SKILL.md +98 -0
  117. package/skills/stitch-skill/SKILL.md +184 -0
  118. package/skills/supabase/SKILL.md +135 -0
  119. package/skills/supabase-postgres-best-practices/SKILL.md +64 -0
  120. package/skills/systematic-debugging/SKILL.md +296 -0
  121. package/skills/talking-head-recut/SKILL.md +1191 -0
  122. package/skills/taste-skill/SKILL.md +1206 -0
  123. package/skills/taste-skill-v1/SKILL.md +226 -0
  124. package/skills/tdd/SKILL.md +108 -0
  125. package/skills/teach/SKILL.md +140 -0
  126. package/skills/test-driven-development/SKILL.md +371 -0
  127. package/skills/theme-factory/SKILL.md +59 -0
  128. package/skills/to-prd/SKILL.md +75 -0
  129. package/skills/typescript-magician/SKILL.md +117 -0
  130. package/skills/tzst/SKILL.md +68 -0
  131. package/skills/ubiquitous-language/SKILL.md +93 -0
  132. package/skills/use-my-browser/SKILL.md +110 -0
  133. package/skills/using-superpowers/SKILL.md +121 -0
  134. package/skills/vercel-cli-with-tokens/SKILL.md +353 -0
  135. package/skills/vercel-optimize/SKILL.md +322 -0
  136. package/skills/viral-instagram-reels/SKILL.md +180 -0
  137. package/skills/viral-short-form/SKILL.md +147 -0
  138. package/skills/viral-short-form-ideas/SKILL.md +184 -0
  139. package/skills/viral-tiktok-content/SKILL.md +180 -0
  140. package/skills/web-artifacts-builder/SKILL.md +74 -0
  141. package/skills/web-design-guidelines/SKILL.md +39 -0
  142. package/skills/webapp-testing/SKILL.md +96 -0
  143. package/skills/website-to-video/SKILL.md +145 -0
  144. package/skills/writing-beats/SKILL.md +67 -0
  145. package/skills/writing-fragments/SKILL.md +79 -0
  146. package/skills/writing-great-skills/SKILL.md +82 -0
  147. package/skills/writing-guidelines/SKILL.md +39 -0
  148. package/skills/writing-plans/SKILL.md +174 -0
  149. package/skills/writing-shape/SKILL.md +79 -0
  150. package/skills/xdrop/SKILL.md +78 -0
  151. package/skills/xget/SKILL.md +87 -0
  152. package/skills/xlsx/SKILL.md +292 -0
  153. package/src/tools/skills_download.js +217 -0
  154. package/src/utils/tools.js +2 -2
@@ -0,0 +1,217 @@
1
+ /**
2
+ * skills_download — Download skills from skills.sh ecosystem or GitHub repos
3
+ *
4
+ * Bulk-imports Agent Skills from the open ecosystem into natureco's skill system.
5
+ * Skills are SKILL.md files following the Agent Skills standard (agentskills.io).
6
+ *
7
+ * Sources:
8
+ * - GitHub repos (anthropics/skills, vercel-labs/agent-skills, etc.)
9
+ * - skills.sh registry
10
+ * - Direct SKILL.md URLs
11
+ */
12
+
13
+ const https = require('https');
14
+ const fs = require('fs');
15
+ const path = require('path');
16
+ const os = require('os');
17
+
18
+ const BUILTIN_SKILLS_DIR = path.join(__dirname, '..', '..', 'skills');
19
+ const USER_SKILLS_DIR = path.join(os.homedir(), '.natureco', 'skills');
20
+
21
+ // Known skill repos with high-quality skills
22
+ const KNOWN_REPOS = [
23
+ { owner: 'anthropics', repo: 'skills', topic: 'general' },
24
+ { owner: 'mattpocock', repo: 'skills', topic: 'typescript' },
25
+ { owner: 'vercel-labs', repo: 'agent-skills', topic: 'vercel' },
26
+ { owner: 'supabase', repo: 'agent-skills', topic: 'database' },
27
+ { owner: 'xixu-me', repo: 'skills', topic: 'devops' },
28
+ { owner: 'microsoft', repo: 'azure-skills', topic: 'cloud' },
29
+ { owner: 'shadcn', repo: 'ui', topic: 'design' },
30
+ { owner: 'nrwl', repo: 'nx-ai-agents-config', topic: 'nx' },
31
+ { owner: 'remotion-dev', repo: 'skills', topic: 'video' },
32
+ { owner: 'mcollina', repo: 'skills', topic: 'nodejs' },
33
+ { owner: 'spillwavesolutions', repo: 'design-doc-mermaid', topic: 'design' },
34
+ { owner: 'nextlevelbuilder', repo: 'ui-ux-pro-max-skill', topic: 'design' },
35
+ { owner: 'browser-act', repo: 'skills', topic: 'browser' },
36
+ { owner: 'obra', repo: 'superpowers', topic: 'workflow' },
37
+ ];
38
+
39
+ function httpsGet(url) {
40
+ return new Promise((resolve, reject) => {
41
+ https.get(url, { timeout: 15000 }, (res) => {
42
+ let data = '';
43
+ res.on('data', c => data += c);
44
+ res.on('end', () => resolve(data));
45
+ }).on('error', reject).on('timeout', function() { this.destroy(); reject(new Error('Timeout')); });
46
+ });
47
+ }
48
+
49
+ function getGithubContentsUrl(owner, repo, path) {
50
+ return `https://api.github.com/repos/${owner}/${repo}/contents/${path}`;
51
+ }
52
+
53
+ async function listRepos() {
54
+ return KNOWN_REPOS.map(r => ({
55
+ id: `${r.owner}/${r.repo}`,
56
+ owner: r.owner,
57
+ repo: r.repo,
58
+ topic: r.topic,
59
+ }));
60
+ }
61
+
62
+ function parseFrontmatter(content) {
63
+ const m = content.match(/^---\n([\s\S]*?)\n---\n?([\s\S]*)$/);
64
+ if (!m) return { metadata: {}, body: content };
65
+ const fm = {};
66
+ for (const line of m[1].split('\n')) {
67
+ const kv = line.match(/^(\w+):\s*(.+)$/);
68
+ if (kv) fm[kv[1]] = kv[2].replace(/^["']|["']$/g, '');
69
+ }
70
+ return { metadata: fm, body: (m[2] || '').trim() };
71
+ }
72
+
73
+ async function fetchGithubRepo(owner, repo) {
74
+ // Use GitHub API to list contents of /skills directory
75
+ const url = `https://api.github.com/repos/${owner}/${repo}/git/trees/HEAD?recursive=1`;
76
+ const data = await httpsGet(url, { headers: { 'User-Agent': 'natureco-cli', 'Accept': 'application/vnd.github.v3+json' } });
77
+ const tree = JSON.parse(data).tree || [];
78
+
79
+ // Find all SKILL.md files
80
+ const skillFiles = tree.filter(f => f.path.endsWith('SKILL.md'));
81
+ const skills = [];
82
+
83
+ for (const file of skillFiles) {
84
+ const skillDir = path.dirname(file.path);
85
+ const skillName = path.basename(skillDir);
86
+
87
+ // Fetch SKILL.md content
88
+ const rawUrl = `https://raw.githubusercontent.com/${owner}/${repo}/main/${file.path}`;
89
+ let content;
90
+ try {
91
+ content = await httpsGet(rawUrl);
92
+ } catch { continue; }
93
+
94
+ const { metadata, body } = parseFrontmatter(content);
95
+ const name = metadata.name || skillName;
96
+ const description = metadata.description || '';
97
+
98
+ // Find additional files in the skill directory
99
+ const additionalFiles = tree
100
+ .filter(f => f.path.startsWith(skillDir + '/') && f.path !== file.path)
101
+ .map(f => ({ path: f.path.replace(skillDir + '/', ''), url: `https://raw.githubusercontent.com/${owner}/${repo}/main/${f.path}` }));
102
+
103
+ skills.push({
104
+ name,
105
+ description: description.length > 200 ? description.slice(0, 200) + '...' : description,
106
+ fullDescription: description,
107
+ content: body,
108
+ source: `${owner}/${repo}/${skillDir}`,
109
+ metadata,
110
+ additionalFiles,
111
+ });
112
+ }
113
+
114
+ return skills;
115
+ }
116
+
117
+ async function downloadSkill(skill, targetDir) {
118
+ const skillDir = path.join(targetDir, skill.name);
119
+ if (fs.existsSync(skillDir)) {
120
+ return { success: false, error: 'Already exists', path: skillDir };
121
+ }
122
+
123
+ fs.mkdirSync(skillDir, { recursive: true });
124
+
125
+ // Write SKILL.md
126
+ const frontmatter = [
127
+ '---',
128
+ `name: ${skill.name}`,
129
+ `description: ${skill.description}`,
130
+ skill.metadata.license ? `license: ${skill.metadata.license}` : null,
131
+ skill.source ? `metadata:\n source: ${skill.source}` : null,
132
+ '---',
133
+ '',
134
+ skill.content,
135
+ ].filter(Boolean).join('\n');
136
+
137
+ fs.writeFileSync(path.join(skillDir, 'SKILL.md'), frontmatter, 'utf8');
138
+
139
+ // Download additional files
140
+ for (const af of (skill.additionalFiles || [])) {
141
+ try {
142
+ const data = await httpsGet(af.url);
143
+ const afDir = path.dirname(path.join(skillDir, af.path));
144
+ fs.mkdirSync(afDir, { recursive: true });
145
+ fs.writeFileSync(path.join(skillDir, af.path), data, 'utf8');
146
+ } catch {}
147
+ }
148
+
149
+ return { success: true, path: skillDir, name: skill.name };
150
+ }
151
+
152
+ async function execute(params) {
153
+ const { action, source, name, target } = params;
154
+ const targetDir = target === 'user' ? USER_SKILLS_DIR : BUILTIN_SKILLS_DIR;
155
+
156
+ if (action === 'list_sources') {
157
+ const repos = await listRepos();
158
+ return JSON.stringify({ success: true, sources: repos });
159
+ }
160
+
161
+ if (action === 'list_skills') {
162
+ const [owner, repo] = (source || '').split('/');
163
+ if (!owner || !repo) return JSON.stringify({ success: false, error: 'source must be owner/repo (e.g. anthropics/skills)' });
164
+ const skills = await fetchGithubRepo(owner, repo);
165
+ return JSON.stringify({ success: true, source, count: skills.length, skills: skills.map(s => ({ name: s.name, description: s.description })) });
166
+ }
167
+
168
+ if (action === 'download') {
169
+ const [owner, repo] = (source || '').split('/');
170
+ if (!owner || !repo) return JSON.stringify({ success: false, error: 'source must be owner/repo' });
171
+ const skills = await fetchGithubRepo(owner, repo);
172
+ const targetSkill = name ? skills.find(s => s.name === name) : null;
173
+ const toDownload = targetSkill ? [targetSkill] : skills;
174
+ const results = [];
175
+ for (const skill of toDownload) {
176
+ const result = await downloadSkill(skill, targetDir);
177
+ results.push({ name: skill.name, ...result });
178
+ }
179
+ const succeeded = results.filter(r => r.success).length;
180
+ return JSON.stringify({ success: true, source, total: results.length, succeeded, failed: results.length - succeeded, results });
181
+ }
182
+
183
+ if (action === 'download_all') {
184
+ const repos = await listRepos();
185
+ const allResults = [];
186
+ for (const repo of repos) {
187
+ try {
188
+ const skills = await fetchGithubRepo(repo.owner, repo.repo);
189
+ for (const skill of skills) {
190
+ const result = await downloadSkill(skill, targetDir);
191
+ allResults.push({ repo: repo.id, name: skill.name, ...result });
192
+ }
193
+ } catch (e) {
194
+ allResults.push({ repo: repo.id, error: e.message });
195
+ }
196
+ }
197
+ const succeeded = allResults.filter(r => r.success).length;
198
+ return JSON.stringify({ success: true, total: allResults.length, succeeded, failed: allResults.length - succeeded, results: allResults });
199
+ }
200
+
201
+ return JSON.stringify({ success: false, error: 'Unknown action. Use: list_sources, list_skills, download, download_all' });
202
+ }
203
+
204
+ const name = 'skills_download';
205
+ const description = 'Download skills from skills.sh ecosystem or GitHub repos. Bulk-import Agent Skills from anthropics/skills, vercel-labs/agent-skills, supabase/agent-skills and more. Actions: list_sources, list_skills, download, download_all.';
206
+ const parameters = {
207
+ type: 'object',
208
+ properties: {
209
+ action: { type: 'string', enum: ['list_sources', 'list_skills', 'download', 'download_all'] },
210
+ source: { type: 'string', description: 'Source repo in owner/repo format (e.g. anthropics/skills)' },
211
+ name: { type: 'string', description: 'Specific skill name to download (optional, downloads all if not set)' },
212
+ target: { type: 'string', enum: ['builtin', 'user'], description: 'Target directory: builtin (project) or user (~/.natureco)' },
213
+ },
214
+ required: ['action'],
215
+ };
216
+
217
+ module.exports = { name, description, parameters, execute };
@@ -24,7 +24,7 @@ const EMOJI_MAP = {
24
24
  // Memory
25
25
  memory: '🧠', memory_write: '🧠', memory_search: '🔍',
26
26
  // Skills
27
- skill_view: '📚', skills_list: '📋', skill_generate: '✨', skills_autoload: '🔄', skills_marketplace: '🏪', skill_manage: '🛠️',
27
+ skill_view: '📚', skills_list: '📋', skill_generate: '✨', skills_autoload: '🔄', skills_marketplace: '🏪', skill_manage: '🛠️', skills_download: '📥',
28
28
  // Agent
29
29
  delegate_task: '👥', llm_task: '🤖', sub_agent: '👤',
30
30
  // Documents
@@ -89,7 +89,7 @@ const TOOLSET_MAP = {
89
89
  memory: 'memory', memory_write: 'memory', memory_search: 'memory',
90
90
  // Skills
91
91
  skill_view: 'skills', skills_list: 'skills', skill_generate: 'skills',
92
- skills_autoload: 'skills', skills_marketplace: 'skills', skill_manage: 'skills',
92
+ skills_autoload: 'skills', skills_marketplace: 'skills', skill_manage: 'skills', skills_download: 'skills',
93
93
  // Agent
94
94
  delegate_task: 'agent', llm_task: 'agent',
95
95
  // Documents