@techwavedev/agi-agent-kit 1.1.3
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.
- package/CHANGELOG.md +59 -0
- package/README.md +147 -0
- package/bin/init.js +471 -0
- package/package.json +36 -0
- package/templates/.agent/agents/backend-specialist.md +263 -0
- package/templates/.agent/agents/code-archaeologist.md +106 -0
- package/templates/.agent/agents/database-architect.md +226 -0
- package/templates/.agent/agents/debugger.md +225 -0
- package/templates/.agent/agents/devops-engineer.md +242 -0
- package/templates/.agent/agents/documentation-writer.md +104 -0
- package/templates/.agent/agents/explorer-agent.md +73 -0
- package/templates/.agent/agents/frontend-specialist.md +556 -0
- package/templates/.agent/agents/game-developer.md +162 -0
- package/templates/.agent/agents/mobile-developer.md +377 -0
- package/templates/.agent/agents/orchestrator.md +416 -0
- package/templates/.agent/agents/penetration-tester.md +188 -0
- package/templates/.agent/agents/performance-optimizer.md +187 -0
- package/templates/.agent/agents/product-manager.md +112 -0
- package/templates/.agent/agents/project-planner.md +403 -0
- package/templates/.agent/agents/qa-automation-engineer.md +109 -0
- package/templates/.agent/agents/security-auditor.md +170 -0
- package/templates/.agent/agents/seo-specialist.md +111 -0
- package/templates/.agent/agents/test-engineer.md +158 -0
- package/templates/.agent/rules/GEMINI.md +253 -0
- package/templates/.agent/workflows/brainstorm.md +113 -0
- package/templates/.agent/workflows/create.md +59 -0
- package/templates/.agent/workflows/debug.md +103 -0
- package/templates/.agent/workflows/deploy.md +176 -0
- package/templates/.agent/workflows/enhance.md +63 -0
- package/templates/.agent/workflows/orchestrate.md +237 -0
- package/templates/.agent/workflows/plan.md +89 -0
- package/templates/.agent/workflows/preview.md +81 -0
- package/templates/.agent/workflows/status.md +86 -0
- package/templates/.agent/workflows/test.md +144 -0
- package/templates/.agent/workflows/ui-ux-pro-max.md +296 -0
- package/templates/base/.env.example +54 -0
- package/templates/base/AGENTS.md +463 -0
- package/templates/base/requirements.txt +6 -0
- package/templates/base/skill-creator/LICENSE.txt +202 -0
- package/templates/base/skill-creator/SKILL_skillcreator.md +389 -0
- package/templates/base/skill-creator/references/output-patterns.md +82 -0
- package/templates/base/skill-creator/references/workflows.md +28 -0
- package/templates/base/skill-creator/scripts/init_skill.py +304 -0
- package/templates/base/skill-creator/scripts/package_skill.py +110 -0
- package/templates/base/skill-creator/scripts/quick_validate.py +95 -0
- package/templates/base/skill-creator/scripts/update_catalog.py +371 -0
- package/templates/skills/core/README.md +21 -0
- package/templates/skills/core/documentation/SKILL.md +351 -0
- package/templates/skills/core/documentation/references/best_practices.md +201 -0
- package/templates/skills/core/documentation/scripts/analyze_code.py +307 -0
- package/templates/skills/core/documentation/scripts/detect_changes.py +460 -0
- package/templates/skills/core/documentation/scripts/generate_changelog.py +312 -0
- package/templates/skills/core/documentation/scripts/sync_docs.py +272 -0
- package/templates/skills/core/documentation/scripts/update_skill_docs.py +366 -0
- package/templates/skills/core/pdf-reader/SKILL.md +104 -0
- package/templates/skills/core/pdf-reader/references/pdf_libraries.md +83 -0
- package/templates/skills/core/pdf-reader/scripts/extract_text.py +295 -0
- package/templates/skills/core/qdrant-memory/SKILL.md +435 -0
- package/templates/skills/core/qdrant-memory/references/advanced_patterns.md +375 -0
- package/templates/skills/core/qdrant-memory/references/collection_schemas.md +229 -0
- package/templates/skills/core/qdrant-memory/references/complete_guide.md +724 -0
- package/templates/skills/core/qdrant-memory/references/embedding_models.md +325 -0
- package/templates/skills/core/qdrant-memory/scripts/benchmark_token_savings.py +640 -0
- package/templates/skills/core/qdrant-memory/scripts/embedding_utils.py +323 -0
- package/templates/skills/core/qdrant-memory/scripts/hybrid_search.py +214 -0
- package/templates/skills/core/qdrant-memory/scripts/init_collection.py +193 -0
- package/templates/skills/core/qdrant-memory/scripts/memory_retrieval.py +345 -0
- package/templates/skills/core/qdrant-memory/scripts/semantic_cache.py +282 -0
- package/templates/skills/core/qdrant-memory/scripts/test_skill.py +655 -0
- package/templates/skills/core/webcrawler/SKILL.md +292 -0
- package/templates/skills/core/webcrawler/references/advanced_crawling.md +181 -0
- package/templates/skills/core/webcrawler/scripts/crawl_docs.py +532 -0
- package/templates/skills/core/webcrawler/scripts/extract_page.py +189 -0
- package/templates/skills/core/webcrawler/scripts/filter_docs.py +200 -0
- package/templates/skills/knowledge/api-patterns/SKILL.md +81 -0
- package/templates/skills/knowledge/api-patterns/api-style.md +42 -0
- package/templates/skills/knowledge/api-patterns/auth.md +24 -0
- package/templates/skills/knowledge/api-patterns/documentation.md +26 -0
- package/templates/skills/knowledge/api-patterns/graphql.md +41 -0
- package/templates/skills/knowledge/api-patterns/rate-limiting.md +31 -0
- package/templates/skills/knowledge/api-patterns/response.md +37 -0
- package/templates/skills/knowledge/api-patterns/rest.md +40 -0
- package/templates/skills/knowledge/api-patterns/scripts/api_validator.py +211 -0
- package/templates/skills/knowledge/api-patterns/security-testing.md +122 -0
- package/templates/skills/knowledge/api-patterns/trpc.md +41 -0
- package/templates/skills/knowledge/api-patterns/versioning.md +22 -0
- package/templates/skills/knowledge/app-builder/SKILL.md +75 -0
- package/templates/skills/knowledge/app-builder/agent-coordination.md +71 -0
- package/templates/skills/knowledge/app-builder/feature-building.md +53 -0
- package/templates/skills/knowledge/app-builder/project-detection.md +34 -0
- package/templates/skills/knowledge/app-builder/scaffolding.md +118 -0
- package/templates/skills/knowledge/app-builder/tech-stack.md +40 -0
- package/templates/skills/knowledge/app-builder/templates/SKILL.md +39 -0
- package/templates/skills/knowledge/app-builder/templates/astro-static/TEMPLATE.md +76 -0
- package/templates/skills/knowledge/app-builder/templates/chrome-extension/TEMPLATE.md +92 -0
- package/templates/skills/knowledge/app-builder/templates/cli-tool/TEMPLATE.md +88 -0
- package/templates/skills/knowledge/app-builder/templates/electron-desktop/TEMPLATE.md +88 -0
- package/templates/skills/knowledge/app-builder/templates/express-api/TEMPLATE.md +83 -0
- package/templates/skills/knowledge/app-builder/templates/flutter-app/TEMPLATE.md +90 -0
- package/templates/skills/knowledge/app-builder/templates/monorepo-turborepo/TEMPLATE.md +90 -0
- package/templates/skills/knowledge/app-builder/templates/nextjs-fullstack/TEMPLATE.md +82 -0
- package/templates/skills/knowledge/app-builder/templates/nextjs-saas/TEMPLATE.md +100 -0
- package/templates/skills/knowledge/app-builder/templates/nextjs-static/TEMPLATE.md +106 -0
- package/templates/skills/knowledge/app-builder/templates/nuxt-app/TEMPLATE.md +101 -0
- package/templates/skills/knowledge/app-builder/templates/python-fastapi/TEMPLATE.md +83 -0
- package/templates/skills/knowledge/app-builder/templates/react-native-app/TEMPLATE.md +93 -0
- package/templates/skills/knowledge/architecture/SKILL.md +55 -0
- package/templates/skills/knowledge/architecture/context-discovery.md +43 -0
- package/templates/skills/knowledge/architecture/examples.md +94 -0
- package/templates/skills/knowledge/architecture/pattern-selection.md +68 -0
- package/templates/skills/knowledge/architecture/patterns-reference.md +50 -0
- package/templates/skills/knowledge/architecture/trade-off-analysis.md +77 -0
- package/templates/skills/knowledge/bash-linux/SKILL.md +199 -0
- package/templates/skills/knowledge/behavioral-modes/SKILL.md +242 -0
- package/templates/skills/knowledge/brainstorming/SKILL.md +163 -0
- package/templates/skills/knowledge/brainstorming/dynamic-questioning.md +350 -0
- package/templates/skills/knowledge/clean-code/SKILL.md +201 -0
- package/templates/skills/knowledge/code-review-checklist/SKILL.md +109 -0
- package/templates/skills/knowledge/database-design/SKILL.md +52 -0
- package/templates/skills/knowledge/database-design/database-selection.md +43 -0
- package/templates/skills/knowledge/database-design/indexing.md +39 -0
- package/templates/skills/knowledge/database-design/migrations.md +48 -0
- package/templates/skills/knowledge/database-design/optimization.md +36 -0
- package/templates/skills/knowledge/database-design/orm-selection.md +30 -0
- package/templates/skills/knowledge/database-design/schema-design.md +56 -0
- package/templates/skills/knowledge/database-design/scripts/schema_validator.py +172 -0
- package/templates/skills/knowledge/deployment-procedures/SKILL.md +241 -0
- package/templates/skills/knowledge/doc.md +177 -0
- package/templates/skills/knowledge/documentation-templates/SKILL.md +194 -0
- package/templates/skills/knowledge/frontend-design/SKILL.md +396 -0
- package/templates/skills/knowledge/frontend-design/animation-guide.md +331 -0
- package/templates/skills/knowledge/frontend-design/color-system.md +311 -0
- package/templates/skills/knowledge/frontend-design/decision-trees.md +418 -0
- package/templates/skills/knowledge/frontend-design/motion-graphics.md +306 -0
- package/templates/skills/knowledge/frontend-design/scripts/accessibility_checker.py +183 -0
- package/templates/skills/knowledge/frontend-design/scripts/ux_audit.py +722 -0
- package/templates/skills/knowledge/frontend-design/typography-system.md +345 -0
- package/templates/skills/knowledge/frontend-design/ux-psychology.md +541 -0
- package/templates/skills/knowledge/frontend-design/visual-effects.md +383 -0
- package/templates/skills/knowledge/game-development/2d-games/SKILL.md +119 -0
- package/templates/skills/knowledge/game-development/3d-games/SKILL.md +135 -0
- package/templates/skills/knowledge/game-development/SKILL.md +167 -0
- package/templates/skills/knowledge/game-development/game-art/SKILL.md +185 -0
- package/templates/skills/knowledge/game-development/game-audio/SKILL.md +190 -0
- package/templates/skills/knowledge/game-development/game-design/SKILL.md +129 -0
- package/templates/skills/knowledge/game-development/mobile-games/SKILL.md +108 -0
- package/templates/skills/knowledge/game-development/multiplayer/SKILL.md +132 -0
- package/templates/skills/knowledge/game-development/pc-games/SKILL.md +144 -0
- package/templates/skills/knowledge/game-development/vr-ar/SKILL.md +123 -0
- package/templates/skills/knowledge/game-development/web-games/SKILL.md +150 -0
- package/templates/skills/knowledge/geo-fundamentals/SKILL.md +156 -0
- package/templates/skills/knowledge/geo-fundamentals/scripts/geo_checker.py +289 -0
- package/templates/skills/knowledge/i18n-localization/SKILL.md +154 -0
- package/templates/skills/knowledge/i18n-localization/scripts/i18n_checker.py +241 -0
- package/templates/skills/knowledge/intelligent-routing/SKILL.md +334 -0
- package/templates/skills/knowledge/lint-and-validate/SKILL.md +45 -0
- package/templates/skills/knowledge/lint-and-validate/scripts/lint_runner.py +172 -0
- package/templates/skills/knowledge/lint-and-validate/scripts/type_coverage.py +173 -0
- package/templates/skills/knowledge/mcp-builder/SKILL.md +176 -0
- package/templates/skills/knowledge/mobile-design/SKILL.md +394 -0
- package/templates/skills/knowledge/mobile-design/decision-trees.md +516 -0
- package/templates/skills/knowledge/mobile-design/mobile-backend.md +491 -0
- package/templates/skills/knowledge/mobile-design/mobile-color-system.md +420 -0
- package/templates/skills/knowledge/mobile-design/mobile-debugging.md +122 -0
- package/templates/skills/knowledge/mobile-design/mobile-design-thinking.md +357 -0
- package/templates/skills/knowledge/mobile-design/mobile-navigation.md +458 -0
- package/templates/skills/knowledge/mobile-design/mobile-performance.md +767 -0
- package/templates/skills/knowledge/mobile-design/mobile-testing.md +356 -0
- package/templates/skills/knowledge/mobile-design/mobile-typography.md +433 -0
- package/templates/skills/knowledge/mobile-design/platform-android.md +666 -0
- package/templates/skills/knowledge/mobile-design/platform-ios.md +561 -0
- package/templates/skills/knowledge/mobile-design/scripts/mobile_audit.py +670 -0
- package/templates/skills/knowledge/mobile-design/touch-psychology.md +537 -0
- package/templates/skills/knowledge/nextjs-best-practices/SKILL.md +203 -0
- package/templates/skills/knowledge/nodejs-best-practices/SKILL.md +333 -0
- package/templates/skills/knowledge/parallel-agents/SKILL.md +175 -0
- package/templates/skills/knowledge/performance-profiling/SKILL.md +143 -0
- package/templates/skills/knowledge/performance-profiling/scripts/lighthouse_audit.py +76 -0
- package/templates/skills/knowledge/plan-writing/SKILL.md +152 -0
- package/templates/skills/knowledge/powershell-windows/SKILL.md +167 -0
- package/templates/skills/knowledge/python-patterns/SKILL.md +441 -0
- package/templates/skills/knowledge/react-patterns/SKILL.md +198 -0
- package/templates/skills/knowledge/red-team-tactics/SKILL.md +199 -0
- package/templates/skills/knowledge/seo-fundamentals/SKILL.md +129 -0
- package/templates/skills/knowledge/seo-fundamentals/scripts/seo_checker.py +219 -0
- package/templates/skills/knowledge/server-management/SKILL.md +161 -0
- package/templates/skills/knowledge/systematic-debugging/SKILL.md +109 -0
- package/templates/skills/knowledge/tailwind-patterns/SKILL.md +269 -0
- package/templates/skills/knowledge/tdd-workflow/SKILL.md +149 -0
- package/templates/skills/knowledge/testing-patterns/SKILL.md +178 -0
- package/templates/skills/knowledge/testing-patterns/scripts/test_runner.py +219 -0
- package/templates/skills/knowledge/vulnerability-scanner/SKILL.md +276 -0
- package/templates/skills/knowledge/vulnerability-scanner/checklists.md +121 -0
- package/templates/skills/knowledge/vulnerability-scanner/scripts/security_scan.py +458 -0
- package/templates/skills/knowledge/webapp-testing/SKILL.md +187 -0
- package/templates/skills/knowledge/webapp-testing/scripts/playwright_runner.py +173 -0
|
@@ -0,0 +1,371 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
Skills Catalog Updater
|
|
4
|
+
|
|
5
|
+
Scans the skills directory and updates SKILLS_CATALOG.md with current skill information.
|
|
6
|
+
Run this script after creating, modifying, or deleting any skill.
|
|
7
|
+
|
|
8
|
+
Usage:
|
|
9
|
+
update_catalog.py --skills-dir <path>
|
|
10
|
+
|
|
11
|
+
Examples:
|
|
12
|
+
update_catalog.py --skills-dir skills/
|
|
13
|
+
update_catalog.py --skills-dir /path/to/skills
|
|
14
|
+
|
|
15
|
+
Exit Codes:
|
|
16
|
+
0 - Success
|
|
17
|
+
1 - Invalid arguments
|
|
18
|
+
2 - Skills directory not found
|
|
19
|
+
3 - Catalog file error
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
import argparse
|
|
23
|
+
import json
|
|
24
|
+
import re
|
|
25
|
+
import sys
|
|
26
|
+
from datetime import datetime
|
|
27
|
+
from pathlib import Path
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def parse_skill_frontmatter(skill_md_path: Path) -> dict:
|
|
31
|
+
"""
|
|
32
|
+
Parse YAML frontmatter from a SKILL.md file.
|
|
33
|
+
|
|
34
|
+
Returns:
|
|
35
|
+
dict with 'name' and 'description' keys, or None if parsing fails.
|
|
36
|
+
"""
|
|
37
|
+
try:
|
|
38
|
+
content = skill_md_path.read_text()
|
|
39
|
+
except Exception as e:
|
|
40
|
+
print(f" ⚠️ Could not read {skill_md_path}: {e}")
|
|
41
|
+
return None
|
|
42
|
+
|
|
43
|
+
# Check for YAML frontmatter
|
|
44
|
+
if not content.startswith('---'):
|
|
45
|
+
print(f" ⚠️ No YAML frontmatter in {skill_md_path}")
|
|
46
|
+
return None
|
|
47
|
+
|
|
48
|
+
# Extract frontmatter
|
|
49
|
+
parts = content.split('---', 2)
|
|
50
|
+
if len(parts) < 3:
|
|
51
|
+
print(f" ⚠️ Invalid YAML frontmatter in {skill_md_path}")
|
|
52
|
+
return None
|
|
53
|
+
|
|
54
|
+
frontmatter = parts[1].strip()
|
|
55
|
+
|
|
56
|
+
# Parse simple YAML (name and description only)
|
|
57
|
+
result = {}
|
|
58
|
+
for line in frontmatter.split('\n'):
|
|
59
|
+
if ':' in line:
|
|
60
|
+
key, value = line.split(':', 1)
|
|
61
|
+
key = key.strip()
|
|
62
|
+
value = value.strip()
|
|
63
|
+
if key in ('name', 'description'):
|
|
64
|
+
result[key] = value
|
|
65
|
+
|
|
66
|
+
return result if 'name' in result else None
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def scan_skills(skills_dir: Path) -> list:
|
|
70
|
+
"""
|
|
71
|
+
Scan the skills directory for all skills.
|
|
72
|
+
|
|
73
|
+
Returns:
|
|
74
|
+
List of skill info dicts with name, description, location, scripts, references.
|
|
75
|
+
"""
|
|
76
|
+
skills = []
|
|
77
|
+
|
|
78
|
+
for item in sorted(skills_dir.iterdir()):
|
|
79
|
+
if not item.is_dir():
|
|
80
|
+
continue
|
|
81
|
+
|
|
82
|
+
skill_md = item / 'SKILL.md'
|
|
83
|
+
if not skill_md.exists():
|
|
84
|
+
print(f" ⚠️ Skipping {item.name}: no SKILL.md found")
|
|
85
|
+
continue
|
|
86
|
+
|
|
87
|
+
frontmatter = parse_skill_frontmatter(skill_md)
|
|
88
|
+
if not frontmatter:
|
|
89
|
+
print(f" ⚠️ Skipping {item.name}: could not parse frontmatter")
|
|
90
|
+
continue
|
|
91
|
+
|
|
92
|
+
# Gather skill info
|
|
93
|
+
skill_info = {
|
|
94
|
+
'name': frontmatter.get('name', item.name),
|
|
95
|
+
'description': frontmatter.get('description', ''),
|
|
96
|
+
'dir_name': item.name,
|
|
97
|
+
'location': f"skills/{item.name}/",
|
|
98
|
+
'scripts': [],
|
|
99
|
+
'references': [],
|
|
100
|
+
'has_assets': False,
|
|
101
|
+
'parent': None,
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
# Check for scripts
|
|
105
|
+
scripts_dir = item / 'scripts'
|
|
106
|
+
if scripts_dir.exists() and scripts_dir.is_dir():
|
|
107
|
+
for script in sorted(scripts_dir.glob('*.py')):
|
|
108
|
+
if script.name != '__init__.py' and not script.name.startswith('example'):
|
|
109
|
+
skill_info['scripts'].append(script.name)
|
|
110
|
+
|
|
111
|
+
# Check for references
|
|
112
|
+
refs_dir = item / 'references'
|
|
113
|
+
if refs_dir.exists() and refs_dir.is_dir():
|
|
114
|
+
for ref in sorted(refs_dir.glob('*.md')):
|
|
115
|
+
if not ref.name.startswith('example'):
|
|
116
|
+
skill_info['references'].append(ref.name)
|
|
117
|
+
|
|
118
|
+
# Check for assets
|
|
119
|
+
assets_dir = item / 'assets'
|
|
120
|
+
if assets_dir.exists() and assets_dir.is_dir():
|
|
121
|
+
skill_info['has_assets'] = any(assets_dir.iterdir())
|
|
122
|
+
|
|
123
|
+
# Detect parent skill from SKILL.md content
|
|
124
|
+
try:
|
|
125
|
+
content = skill_md.read_text()
|
|
126
|
+
if 'Part of the' in content and 'skill family' in content:
|
|
127
|
+
# Extract parent reference
|
|
128
|
+
match = re.search(r'\[([Aa]ws)\s*(skill family|skill)\]', content)
|
|
129
|
+
if match:
|
|
130
|
+
skill_info['parent'] = 'aws'
|
|
131
|
+
elif '../aws/SKILL.md' in content:
|
|
132
|
+
skill_info['parent'] = 'aws'
|
|
133
|
+
except Exception:
|
|
134
|
+
pass
|
|
135
|
+
|
|
136
|
+
skills.append(skill_info)
|
|
137
|
+
print(f" ✅ Found skill: {skill_info['name']}")
|
|
138
|
+
|
|
139
|
+
return skills
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
def generate_skill_entry(skill: dict) -> str:
|
|
143
|
+
"""Generate a markdown section for a single skill."""
|
|
144
|
+
lines = []
|
|
145
|
+
|
|
146
|
+
# Title
|
|
147
|
+
title = skill['name'].replace('-', ' ').title()
|
|
148
|
+
if skill['name'] == 'aws':
|
|
149
|
+
title = 'AWS (Hub)'
|
|
150
|
+
lines.append(f"### {title}")
|
|
151
|
+
lines.append("")
|
|
152
|
+
|
|
153
|
+
# Property table
|
|
154
|
+
lines.append("| Property | Value |")
|
|
155
|
+
lines.append("| -------- | ----- |")
|
|
156
|
+
lines.append(f"| **Name** | `{skill['name']}` |")
|
|
157
|
+
lines.append(f"| **Location** | `{skill['location']}` |")
|
|
158
|
+
|
|
159
|
+
if skill['parent']:
|
|
160
|
+
parent_title = skill['parent'].replace('-', ' ').title()
|
|
161
|
+
parent_anchor = skill['parent'].replace('-', '')
|
|
162
|
+
lines.append(f"| **Parent** | [{parent_title}](#{parent_anchor}) |")
|
|
163
|
+
elif skill['name'] == 'aws':
|
|
164
|
+
lines.append("| **Type** | Router / Hub |")
|
|
165
|
+
else:
|
|
166
|
+
lines.append("| **Type** | Standalone |")
|
|
167
|
+
|
|
168
|
+
lines.append("")
|
|
169
|
+
|
|
170
|
+
# Description
|
|
171
|
+
desc = skill['description']
|
|
172
|
+
if desc.startswith('[TODO'):
|
|
173
|
+
desc = '*[Description not yet provided]*'
|
|
174
|
+
lines.append(f"**Description:** {desc}")
|
|
175
|
+
lines.append("")
|
|
176
|
+
|
|
177
|
+
# Scripts
|
|
178
|
+
if skill['scripts']:
|
|
179
|
+
lines.append("**Scripts:**")
|
|
180
|
+
lines.append("")
|
|
181
|
+
lines.append("| Script | Purpose |")
|
|
182
|
+
lines.append("| ------ | ------- |")
|
|
183
|
+
for script in skill['scripts']:
|
|
184
|
+
lines.append(f"| `scripts/{script}` | *[See script for details]* |")
|
|
185
|
+
lines.append("")
|
|
186
|
+
|
|
187
|
+
# References
|
|
188
|
+
if skill['references']:
|
|
189
|
+
lines.append("**References:**")
|
|
190
|
+
for ref in skill['references']:
|
|
191
|
+
lines.append(f"- `references/{ref}`")
|
|
192
|
+
lines.append("")
|
|
193
|
+
|
|
194
|
+
lines.append("---")
|
|
195
|
+
lines.append("")
|
|
196
|
+
|
|
197
|
+
return '\n'.join(lines)
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
def generate_catalog(skills: list) -> str:
|
|
201
|
+
"""Generate the complete SKILLS_CATALOG.md content."""
|
|
202
|
+
now = datetime.now().strftime("%Y-%m-%d %H:%M")
|
|
203
|
+
|
|
204
|
+
# Header
|
|
205
|
+
header = f"""# Skills Catalog
|
|
206
|
+
|
|
207
|
+
> **Auto-generated Documentation** — Last updated: {now}
|
|
208
|
+
>
|
|
209
|
+
> This catalog is automatically maintained. Update it by running:
|
|
210
|
+
> ```bash
|
|
211
|
+
> python skill-creator/scripts/update_catalog.py --skills-dir skills/
|
|
212
|
+
> ```
|
|
213
|
+
|
|
214
|
+
This document provides comprehensive documentation on available skills, how to use them, and when each skill should be triggered.
|
|
215
|
+
|
|
216
|
+
---
|
|
217
|
+
|
|
218
|
+
## Table of Contents
|
|
219
|
+
|
|
220
|
+
- [What Are Skills?](#what-are-skills)
|
|
221
|
+
- [Available Skills](#available-skills)
|
|
222
|
+
"""
|
|
223
|
+
|
|
224
|
+
# Add skill links to TOC
|
|
225
|
+
toc_lines = []
|
|
226
|
+
for skill in skills:
|
|
227
|
+
title = skill['name'].replace('-', ' ').title()
|
|
228
|
+
if skill['name'] == 'aws':
|
|
229
|
+
title = 'AWS (Hub)'
|
|
230
|
+
anchor = title.lower().replace(' ', '-').replace('(', '').replace(')', '')
|
|
231
|
+
toc_lines.append(f" - [{title}](#{anchor})")
|
|
232
|
+
|
|
233
|
+
header += '\n'.join(toc_lines)
|
|
234
|
+
header += """
|
|
235
|
+
- [Using Skills](#using-skills)
|
|
236
|
+
- [Creating New Skills](#creating-new-skills)
|
|
237
|
+
- [Maintenance](#maintenance)
|
|
238
|
+
|
|
239
|
+
---
|
|
240
|
+
|
|
241
|
+
## What Are Skills?
|
|
242
|
+
|
|
243
|
+
**Skills** are modular, self-contained packages that extend the AI agent's capabilities with specialized knowledge, workflows, and tools.
|
|
244
|
+
|
|
245
|
+
### Skill Structure
|
|
246
|
+
|
|
247
|
+
```
|
|
248
|
+
skill-name/
|
|
249
|
+
├── SKILL.md # (required) Main instruction file
|
|
250
|
+
├── scripts/ # (optional) Executable scripts
|
|
251
|
+
├── references/ # (optional) Documentation
|
|
252
|
+
└── assets/ # (optional) Templates, images, etc.
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
---
|
|
256
|
+
|
|
257
|
+
## Available Skills
|
|
258
|
+
|
|
259
|
+
"""
|
|
260
|
+
|
|
261
|
+
# Generate skill entries
|
|
262
|
+
skill_entries = []
|
|
263
|
+
|
|
264
|
+
# Sort: hub skills first, then by name
|
|
265
|
+
def sort_key(s):
|
|
266
|
+
if s['name'] == 'aws':
|
|
267
|
+
return ('0', s['name'])
|
|
268
|
+
elif s['parent']:
|
|
269
|
+
return ('1', s['name'])
|
|
270
|
+
else:
|
|
271
|
+
return ('2', s['name'])
|
|
272
|
+
|
|
273
|
+
for skill in sorted(skills, key=sort_key):
|
|
274
|
+
skill_entries.append(generate_skill_entry(skill))
|
|
275
|
+
|
|
276
|
+
# Footer
|
|
277
|
+
footer = """## Using Skills
|
|
278
|
+
|
|
279
|
+
Skills are automatically triggered based on the user's request matching the skill description. You can also explicitly invoke a skill:
|
|
280
|
+
|
|
281
|
+
```
|
|
282
|
+
"Use the <skill-name> skill to <task>"
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
---
|
|
286
|
+
|
|
287
|
+
## Creating New Skills
|
|
288
|
+
|
|
289
|
+
```bash
|
|
290
|
+
# Initialize a new skill
|
|
291
|
+
python skill-creator/scripts/init_skill.py my-new-skill --path skills/
|
|
292
|
+
|
|
293
|
+
# Package the skill
|
|
294
|
+
python skill-creator/scripts/package_skill.py skills/my-new-skill
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
For detailed guidance, see: `skill-creator/SKILL_skillcreator.md`
|
|
298
|
+
|
|
299
|
+
---
|
|
300
|
+
|
|
301
|
+
## Maintenance
|
|
302
|
+
|
|
303
|
+
### Updating This Catalog
|
|
304
|
+
|
|
305
|
+
**IMPORTANT:** This catalog must be updated whenever skills are created, modified, or deleted.
|
|
306
|
+
|
|
307
|
+
```bash
|
|
308
|
+
python skill-creator/scripts/update_catalog.py --skills-dir skills/
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
---
|
|
312
|
+
|
|
313
|
+
*This catalog is part of the [3-Layer Architecture](../AGENTS.md) for reliable AI agent operations.*
|
|
314
|
+
"""
|
|
315
|
+
|
|
316
|
+
return header + '\n'.join(skill_entries) + footer
|
|
317
|
+
|
|
318
|
+
|
|
319
|
+
def main():
|
|
320
|
+
parser = argparse.ArgumentParser(description=__doc__)
|
|
321
|
+
parser.add_argument('--skills-dir', required=True, help='Path to skills directory')
|
|
322
|
+
parser.add_argument('--output', help='Output path (default: <skills-dir>/SKILLS_CATALOG.md)')
|
|
323
|
+
parser.add_argument('--json', action='store_true', help='Also output JSON summary')
|
|
324
|
+
args = parser.parse_args()
|
|
325
|
+
|
|
326
|
+
skills_dir = Path(args.skills_dir).resolve()
|
|
327
|
+
|
|
328
|
+
if not skills_dir.exists() or not skills_dir.is_dir():
|
|
329
|
+
print(f"❌ Error: Skills directory not found: {skills_dir}")
|
|
330
|
+
sys.exit(2)
|
|
331
|
+
|
|
332
|
+
print(f"🔍 Scanning skills in: {skills_dir}")
|
|
333
|
+
print()
|
|
334
|
+
|
|
335
|
+
# Scan for skills
|
|
336
|
+
skills = scan_skills(skills_dir)
|
|
337
|
+
|
|
338
|
+
if not skills:
|
|
339
|
+
print("\n⚠️ No valid skills found.")
|
|
340
|
+
sys.exit(0)
|
|
341
|
+
|
|
342
|
+
print(f"\n📚 Found {len(skills)} skill(s)")
|
|
343
|
+
|
|
344
|
+
# Generate catalog
|
|
345
|
+
catalog_content = generate_catalog(skills)
|
|
346
|
+
|
|
347
|
+
# Determine output path
|
|
348
|
+
output_path = Path(args.output) if args.output else skills_dir / 'SKILLS_CATALOG.md'
|
|
349
|
+
|
|
350
|
+
try:
|
|
351
|
+
output_path.write_text(catalog_content)
|
|
352
|
+
print(f"✅ Catalog updated: {output_path}")
|
|
353
|
+
except Exception as e:
|
|
354
|
+
print(f"❌ Error writing catalog: {e}")
|
|
355
|
+
sys.exit(3)
|
|
356
|
+
|
|
357
|
+
# Optional JSON output
|
|
358
|
+
if args.json:
|
|
359
|
+
json_path = output_path.with_suffix('.json')
|
|
360
|
+
try:
|
|
361
|
+
json_path.write_text(json.dumps(skills, indent=2))
|
|
362
|
+
print(f"✅ JSON summary: {json_path}")
|
|
363
|
+
except Exception as e:
|
|
364
|
+
print(f"⚠️ Could not write JSON: {e}")
|
|
365
|
+
|
|
366
|
+
print("\n✅ Catalog update complete!")
|
|
367
|
+
sys.exit(0)
|
|
368
|
+
|
|
369
|
+
|
|
370
|
+
if __name__ == '__main__':
|
|
371
|
+
main()
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Core Skills (Public)
|
|
2
|
+
|
|
3
|
+
These skills are included in all installation packs and are suitable for public distribution.
|
|
4
|
+
|
|
5
|
+
## Skills Included
|
|
6
|
+
|
|
7
|
+
| Skill | Purpose |
|
|
8
|
+
| ---------------- | --------------------------------- |
|
|
9
|
+
| `webcrawler/` | Documentation harvesting agent |
|
|
10
|
+
| `pdf-reader/` | PDF text extraction |
|
|
11
|
+
| `qdrant-memory/` | Semantic cache & long-term memory |
|
|
12
|
+
|
|
13
|
+
## Usage
|
|
14
|
+
|
|
15
|
+
These skills are automatically installed when running:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
npx @techwavedev/agi-agent-kit init --pack=core
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
All packs (core, ec, full) include these skills.
|