@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
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [1.1.2] - 2026-01-23
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- **Self-Update Skill**: New `self-update` skill with `update_kit.py` script for easy framework updates.
|
|
13
|
+
- **System Checkup**: New `system_checkup.py` execution script to verify agents, skills, workflows, and scripts.
|
|
14
|
+
- **Workflows**: Added `/checkup` and `/update` workflows for quick access.
|
|
15
|
+
|
|
16
|
+
### Changed
|
|
17
|
+
|
|
18
|
+
- Updated `README.md` with comprehensive Quick Start, Commands, and Architecture sections.
|
|
19
|
+
- Updated `SKILLS_CATALOG.md` to include self-update skill.
|
|
20
|
+
|
|
21
|
+
## [1.1.01] - 2026-01-23
|
|
22
|
+
|
|
23
|
+
### Fixed
|
|
24
|
+
|
|
25
|
+
- Stabilized Full Suite activation.
|
|
26
|
+
- Micro-bump for polish releases.
|
|
27
|
+
|
|
28
|
+
## [1.1.0] - 2026-01-23
|
|
29
|
+
|
|
30
|
+
### Added
|
|
31
|
+
|
|
32
|
+
- **Knowledge Pack**: Imported 36+ new skills from `agents-web` including:
|
|
33
|
+
- `api-patterns`: Best practices for REST/GraphQL/tRPC.
|
|
34
|
+
- `frontend-design`: UX/UI principles and audit tools.
|
|
35
|
+
- `security-auditor`: Vulnerability scanning and red-team tactics.
|
|
36
|
+
- `mobile-design`: iOS/Android development patterns.
|
|
37
|
+
- **Agent Roles**: Added `project-planner`, `orchestrator`, and `security-auditor` agent personas.
|
|
38
|
+
- **Rules**: Added global `deployment_policy` and `clean-code` standards.
|
|
39
|
+
|
|
40
|
+
### Changed
|
|
41
|
+
|
|
42
|
+
- Refactored `init` command to support `knowledge` pack.
|
|
43
|
+
- Enhanced `AGENTS.md` with new agent capabilities.
|
|
44
|
+
- Updated `SKILLS_CATALOG.md` with full list of new skills.
|
|
45
|
+
|
|
46
|
+
## [1.0.1] - 2026-01-23
|
|
47
|
+
|
|
48
|
+
### Fixed
|
|
49
|
+
|
|
50
|
+
- **Security**: Removed all references to private infrastructure from public templates.
|
|
51
|
+
- **Safety**: Added `verify_public_release.py` to prevent accidental publication of private secrets.
|
|
52
|
+
- **Menu**: Fixed `init` menu showing internal options.
|
|
53
|
+
|
|
54
|
+
## [0.1.0] - 2026-01-23
|
|
55
|
+
|
|
56
|
+
### Initial Release
|
|
57
|
+
|
|
58
|
+
- Core framework with `webcrawler`, `pdf-reader`, and `qdrant-memory`.
|
|
59
|
+
- CLI tool `agi-agent-kit` for scaffolding.
|
package/README.md
ADDED
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
# AGI Agent Kit
|
|
2
|
+
|
|
3
|
+
**Enterprise-Grade Agentic Framework & Scaffolding Tool**
|
|
4
|
+
|
|
5
|
+
[](https://www.npmjs.com/package/@techwavedev/agi-agent-kit)
|
|
6
|
+
[](https://opensource.org/licenses/Apache-2.0)
|
|
7
|
+
|
|
8
|
+
`@techwavedev/agi-agent-kit` is a modular, deterministic framework designed to bridge the gap between LLM reasoning and reliable production execution. It scaffolds a "3-Layer Architecture" (Intent → Orchestration → Execution) that forces agents to use tested scripts rather than hallucinating code.
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## 🚀 Quick Start
|
|
13
|
+
|
|
14
|
+
Scaffold a new agent workspace in seconds:
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
npx @techwavedev/agi-agent-kit init
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
You'll be prompted to choose a pack:
|
|
21
|
+
|
|
22
|
+
- **core** - Essential skills (webcrawler, pdf-reader, qdrant-memory, documentation)
|
|
23
|
+
- **knowledge** - Core + 36 specialized skills (API, Security, Design, Architecture)
|
|
24
|
+
- **full** - Complete suite with `.agent/` structure (agents, workflows, rules)
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## ✨ Key Features
|
|
29
|
+
|
|
30
|
+
| Feature | Description |
|
|
31
|
+
| --------------------------- | -------------------------------------------------------------------------- |
|
|
32
|
+
| **Deterministic Execution** | Separates business logic (Python scripts) from AI reasoning (Directives) |
|
|
33
|
+
| **Modular Skill System** | Plug-and-play capabilities that can be added or removed instantly |
|
|
34
|
+
| **Semantic Memory** | Built-in Qdrant-powered memory with 95% token savings via caching |
|
|
35
|
+
| **Universal Compatibility** | Works with Claude, Gemini, and OpenAI via standardized context files |
|
|
36
|
+
| **Self-Healing Workflows** | Agents read error logs, patch scripts, and update directives automatically |
|
|
37
|
+
| **Self-Update** | Update to the latest version with a single command |
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## 📦 What You Get
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
your-project/
|
|
45
|
+
├── AGENTS.md # Master instruction file (symlinked to GEMINI.md, CLAUDE.md)
|
|
46
|
+
├── skills/ # Pre-built tools
|
|
47
|
+
│ ├── webcrawler/ # Documentation harvesting
|
|
48
|
+
│ ├── pdf-reader/ # PDF text extraction
|
|
49
|
+
│ ├── qdrant-memory/ # Semantic caching & memory
|
|
50
|
+
│ ├── documentation/ # Auto-documentation maintenance
|
|
51
|
+
│ └── self-update/ # Framework self-update capability
|
|
52
|
+
├── directives/ # SOPs in Markdown
|
|
53
|
+
├── execution/ # Deterministic Python scripts
|
|
54
|
+
├── skill-creator/ # Tools to create new skills
|
|
55
|
+
└── .agent/ # (full pack) Agents, workflows, rules
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## 📖 Architecture
|
|
61
|
+
|
|
62
|
+
The system operates on three layers:
|
|
63
|
+
|
|
64
|
+
```
|
|
65
|
+
┌─────────────────────────────────────────────────────────┐
|
|
66
|
+
│ Layer 1: DIRECTIVES (Intent) │
|
|
67
|
+
│ └─ SOPs written in Markdown (directives/) │
|
|
68
|
+
├─────────────────────────────────────────────────────────┤
|
|
69
|
+
│ Layer 2: ORCHESTRATION (Agent) │
|
|
70
|
+
│ └─ LLM reads directive, decides which tool to call │
|
|
71
|
+
├─────────────────────────────────────────────────────────┤
|
|
72
|
+
│ Layer 3: EXECUTION (Code) │
|
|
73
|
+
│ └─ Pure Python scripts (execution/) do the actual work │
|
|
74
|
+
└─────────────────────────────────────────────────────────┘
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
**Why?** LLMs are probabilistic. 90% accuracy per step = 59% success over 5 steps. By pushing complexity into deterministic scripts, we achieve reliable execution.
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## ⚡ Prerequisites
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
pip install requests beautifulsoup4 html2text lxml qdrant-client
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Optional (for semantic memory with local embeddings):
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
pip install ollama sentence-transformers
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## 🔧 Commands
|
|
96
|
+
|
|
97
|
+
### Initialize a new project
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
npx @techwavedev/agi-agent-kit init --pack=full
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### Update to latest version
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
npx @techwavedev/agi-agent-kit@latest init --pack=full
|
|
107
|
+
# or use the built-in skill:
|
|
108
|
+
python3 skills/self-update/scripts/update_kit.py
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### System health check
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
python3 execution/system_checkup.py --verbose
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### Create a new skill
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
python3 skill-creator/scripts/init_skill.py my-skill --path skills/
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### Update skills catalog
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
python3 skill-creator/scripts/update_catalog.py --skills-dir skills/
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## 📚 Documentation
|
|
132
|
+
|
|
133
|
+
- **[AGENTS.md](./AGENTS.md)** - Complete architecture and operating principles
|
|
134
|
+
- **[skills/SKILLS_CATALOG.md](./skills/SKILLS_CATALOG.md)** - All available skills
|
|
135
|
+
- **[CHANGELOG.md](./CHANGELOG.md)** - Version history
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## 🛡️ Security
|
|
140
|
+
|
|
141
|
+
This package includes a pre-flight security scanner (`verify_public_release.py`) that checks for private terms before publishing. All templates are sanitized for public use.
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## 📄 License
|
|
146
|
+
|
|
147
|
+
Apache-2.0 © [Elton Machado@TechWaveDev](https://github.com/techwavedev)
|
package/bin/init.js
ADDED
|
@@ -0,0 +1,471 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* agi-agent-kit init
|
|
4
|
+
*
|
|
5
|
+
* CLI tool to scaffold AI agent projects with modular skill packs.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* npx @techwavedev/agi-agent-kit init [--pack=<pack>] [--path=<dir>]
|
|
9
|
+
*
|
|
10
|
+
* Packs:
|
|
11
|
+
* core - Base framework + common skills (webcrawler, pdf-reader, qdrant-memory)
|
|
12
|
+
*
|
|
13
|
+
* Options:
|
|
14
|
+
* --path=<dir> Target directory (default: current)
|
|
15
|
+
* --no-symlinks Skip GEMINI.md/CLAUDE.md symlink creation
|
|
16
|
+
* --help Show help
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
const fs = require('fs');
|
|
20
|
+
const path = require('path');
|
|
21
|
+
const readline = require('readline');
|
|
22
|
+
|
|
23
|
+
// Color utilities for terminal output
|
|
24
|
+
const colors = {
|
|
25
|
+
reset: '\x1b[0m',
|
|
26
|
+
bright: '\x1b[1m',
|
|
27
|
+
green: '\x1b[32m',
|
|
28
|
+
yellow: '\x1b[33m',
|
|
29
|
+
blue: '\x1b[34m',
|
|
30
|
+
cyan: '\x1b[36m',
|
|
31
|
+
red: '\x1b[31m'
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
const log = {
|
|
35
|
+
info: (msg) => console.log(`${colors.cyan}ℹ${colors.reset} ${msg}`),
|
|
36
|
+
success: (msg) => console.log(`${colors.green}✔${colors.reset} ${msg}`),
|
|
37
|
+
warn: (msg) => console.log(`${colors.yellow}⚠${colors.reset} ${msg}`),
|
|
38
|
+
error: (msg) => console.log(`${colors.red}✖${colors.reset} ${msg}`),
|
|
39
|
+
header: (msg) => console.log(`\n${colors.bright}${colors.blue}${msg}${colors.reset}\n`)
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
// Pack definitions
|
|
43
|
+
const PACKS = {
|
|
44
|
+
core: {
|
|
45
|
+
name: 'Core',
|
|
46
|
+
description: 'Essential skills (webcrawler, pdf-reader, qdrant-memory, documentation)',
|
|
47
|
+
skills: ['core']
|
|
48
|
+
},
|
|
49
|
+
knowledge: {
|
|
50
|
+
name: 'Knowledge',
|
|
51
|
+
description: 'Core + 36 specialized skills (API, Security, Design, Architecture)',
|
|
52
|
+
skills: ['core', 'knowledge']
|
|
53
|
+
},
|
|
54
|
+
full: {
|
|
55
|
+
name: 'Full Suite',
|
|
56
|
+
description: 'Complete suite (Core + Knowledge + .agent structure)',
|
|
57
|
+
skills: ['core', 'knowledge'],
|
|
58
|
+
includeAgent: true
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
// Parse command line arguments
|
|
63
|
+
function parseArgs() {
|
|
64
|
+
const args = process.argv.slice(2);
|
|
65
|
+
const options = {
|
|
66
|
+
command: null,
|
|
67
|
+
pack: null,
|
|
68
|
+
path: process.cwd(),
|
|
69
|
+
symlinks: true,
|
|
70
|
+
help: false
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
for (const arg of args) {
|
|
74
|
+
if (arg === 'init') {
|
|
75
|
+
options.command = 'init';
|
|
76
|
+
} else if (arg.startsWith('--pack=')) {
|
|
77
|
+
options.pack = arg.split('=')[1];
|
|
78
|
+
} else if (arg.startsWith('--path=')) {
|
|
79
|
+
options.path = path.resolve(arg.split('=')[1]);
|
|
80
|
+
} else if (arg === '--no-symlinks') {
|
|
81
|
+
options.symlinks = false;
|
|
82
|
+
} else if (arg === '--help' || arg === '-h') {
|
|
83
|
+
options.help = true;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
return options;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// Show help message
|
|
91
|
+
function showHelp() {
|
|
92
|
+
console.log(`
|
|
93
|
+
${colors.bright}agi-agent-kit${colors.reset} - AI Agent Kit Initializer
|
|
94
|
+
|
|
95
|
+
${colors.bright}Usage:${colors.reset}
|
|
96
|
+
npx @techwavedev/agi-agent-kit init [options]
|
|
97
|
+
|
|
98
|
+
${colors.bright}Options:${colors.reset}
|
|
99
|
+
--pack=<pack> Select skill pack (core, ec, full)
|
|
100
|
+
--path=<dir> Target directory (default: current)
|
|
101
|
+
--no-symlinks Skip GEMINI.md/CLAUDE.md symlink creation
|
|
102
|
+
--help Show this help message
|
|
103
|
+
|
|
104
|
+
${colors.bright}Packs:${colors.reset}
|
|
105
|
+
${colors.green}core${colors.reset} Base framework + common skills
|
|
106
|
+
(webcrawler, pdf-reader, qdrant-memory, documentation)
|
|
107
|
+
|
|
108
|
+
${colors.blue}knowledge${colors.reset} Core + 36 specialized skills
|
|
109
|
+
(API, Security, Design, Architecture, Testing...)
|
|
110
|
+
|
|
111
|
+
${colors.yellow}full${colors.reset} Complete suite
|
|
112
|
+
(Core + Knowledge + .agent/ structure)
|
|
113
|
+
|
|
114
|
+
${colors.bright}Examples:${colors.reset}
|
|
115
|
+
npx @techwavedev/agi-agent-kit init
|
|
116
|
+
npx @techwavedev/agi-agent-kit init --pack=core
|
|
117
|
+
|
|
118
|
+
${colors.bright}Note:${colors.reset} Most scripts require ${colors.cyan}python3${colors.reset}.
|
|
119
|
+
`);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// Prompt user for pack selection
|
|
123
|
+
async function promptPackSelection() {
|
|
124
|
+
const rl = readline.createInterface({
|
|
125
|
+
input: process.stdin,
|
|
126
|
+
output: process.stdout
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
return new Promise((resolve) => {
|
|
130
|
+
console.log(`\n${colors.bright}Which pack would you like to install?${colors.reset}\n`);
|
|
131
|
+
console.log(` 1. ${colors.green}core${colors.reset} - Essential skills (webcrawler, pdf-reader, qdrant-memory, documentation)`);
|
|
132
|
+
console.log(` 2. ${colors.blue}knowledge${colors.reset} - Core + 36 specialized skills (API, Security, Design...)`);
|
|
133
|
+
console.log(` 3. ${colors.yellow}full${colors.reset} - Complete suite including .agent/ structure\n`);
|
|
134
|
+
|
|
135
|
+
rl.question(`Enter choice (1-3) or pack name (default: core): `, (answer) => {
|
|
136
|
+
rl.close();
|
|
137
|
+
const choice = answer.trim().toLowerCase();
|
|
138
|
+
|
|
139
|
+
if (choice === '1' || choice === 'core' || choice === '') resolve('core');
|
|
140
|
+
else if (choice === '2' || choice === 'knowledge') resolve('knowledge');
|
|
141
|
+
else if (choice === '3' || choice === 'full') resolve('full');
|
|
142
|
+
else {
|
|
143
|
+
log.warn('Invalid choice, defaulting to core');
|
|
144
|
+
resolve('core');
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// Prompt for update components
|
|
151
|
+
async function promptUpdateSelection() {
|
|
152
|
+
return new Promise((resolve) => {
|
|
153
|
+
// For now, update implies updating the Full suite or existing installation
|
|
154
|
+
// We can default to 'full' logic for updates to ensure everything is covered
|
|
155
|
+
resolve('full');
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
// Copy directory recursively
|
|
160
|
+
function copyDirSync(src, dest) {
|
|
161
|
+
if (!fs.existsSync(src)) {
|
|
162
|
+
return false;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
fs.mkdirSync(dest, { recursive: true });
|
|
166
|
+
|
|
167
|
+
const entries = fs.readdirSync(src, { withFileTypes: true });
|
|
168
|
+
|
|
169
|
+
for (const entry of entries) {
|
|
170
|
+
const srcPath = path.join(src, entry.name);
|
|
171
|
+
const destPath = path.join(dest, entry.name);
|
|
172
|
+
|
|
173
|
+
if (entry.isDirectory()) {
|
|
174
|
+
copyDirSync(srcPath, destPath);
|
|
175
|
+
} else {
|
|
176
|
+
fs.copyFileSync(srcPath, destPath);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
return true;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
// Create directory structure
|
|
184
|
+
function createStructure(targetPath, options) {
|
|
185
|
+
log.header('Creating directory structure...');
|
|
186
|
+
|
|
187
|
+
const dirs = [
|
|
188
|
+
'directives',
|
|
189
|
+
'execution',
|
|
190
|
+
'skills',
|
|
191
|
+
'skill-creator',
|
|
192
|
+
'.tmp'
|
|
193
|
+
];
|
|
194
|
+
|
|
195
|
+
for (const dir of dirs) {
|
|
196
|
+
const fullPath = path.join(targetPath, dir);
|
|
197
|
+
fs.mkdirSync(fullPath, { recursive: true });
|
|
198
|
+
log.success(`Created ${dir}/`);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
// Copy skills based on pack
|
|
203
|
+
function copySkills(targetPath, pack, templatesPath) {
|
|
204
|
+
log.header(`Installing ${PACKS[pack].name} skills...`);
|
|
205
|
+
|
|
206
|
+
const skillGroups = PACKS[pack].skills;
|
|
207
|
+
|
|
208
|
+
for (const group of skillGroups) {
|
|
209
|
+
const srcSkillsPath = path.join(templatesPath, 'skills', group);
|
|
210
|
+
const destSkillsPath = path.join(targetPath, 'skills');
|
|
211
|
+
|
|
212
|
+
if (fs.existsSync(srcSkillsPath)) {
|
|
213
|
+
const skills = fs.readdirSync(srcSkillsPath, { withFileTypes: true })
|
|
214
|
+
.filter(d => d.isDirectory())
|
|
215
|
+
.map(d => d.name);
|
|
216
|
+
|
|
217
|
+
for (const skill of skills) {
|
|
218
|
+
const src = path.join(srcSkillsPath, skill);
|
|
219
|
+
const dest = path.join(destSkillsPath, skill);
|
|
220
|
+
|
|
221
|
+
if (copyDirSync(src, dest)) {
|
|
222
|
+
log.success(`Installed skill: ${skill}`);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
} else {
|
|
226
|
+
log.warn(`Skills directory not found: ${srcSkillsPath}`);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
// Copy base files
|
|
232
|
+
function copyBaseFiles(targetPath, templatesPath, options) {
|
|
233
|
+
log.header('Copying base files...');
|
|
234
|
+
|
|
235
|
+
const baseFiles = [
|
|
236
|
+
{ src: 'AGENTS.md', dest: 'AGENTS.md' },
|
|
237
|
+
{ src: '.gitignore', dest: '.gitignore' },
|
|
238
|
+
{ src: 'requirements.txt', dest: 'requirements.txt' }
|
|
239
|
+
];
|
|
240
|
+
|
|
241
|
+
for (const file of baseFiles) {
|
|
242
|
+
const srcPath = path.join(templatesPath, 'base', file.src);
|
|
243
|
+
const destPath = path.join(targetPath, file.dest);
|
|
244
|
+
|
|
245
|
+
if (fs.existsSync(srcPath)) {
|
|
246
|
+
fs.copyFileSync(srcPath, destPath);
|
|
247
|
+
log.success(`Created ${file.dest}`);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
// Copy skill-creator
|
|
252
|
+
const srcSkillCreator = path.join(templatesPath, 'base', 'skill-creator');
|
|
253
|
+
const destSkillCreator = path.join(targetPath, 'skill-creator');
|
|
254
|
+
|
|
255
|
+
if (fs.existsSync(srcSkillCreator)) {
|
|
256
|
+
copyDirSync(srcSkillCreator, destSkillCreator);
|
|
257
|
+
log.success('Installed skill-creator/');
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
// Create symlinks
|
|
262
|
+
function createSymlinks(targetPath) {
|
|
263
|
+
log.header('Creating symlinks...');
|
|
264
|
+
|
|
265
|
+
const agentsMd = path.join(targetPath, 'AGENTS.md');
|
|
266
|
+
|
|
267
|
+
if (!fs.existsSync(agentsMd)) {
|
|
268
|
+
log.warn('AGENTS.md not found, skipping symlinks');
|
|
269
|
+
return;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
const symlinks = [
|
|
273
|
+
{ name: 'GEMINI.md', target: 'AGENTS.md' },
|
|
274
|
+
{ name: 'CLAUDE.md', target: 'AGENTS.md' }
|
|
275
|
+
];
|
|
276
|
+
|
|
277
|
+
for (const link of symlinks) {
|
|
278
|
+
const linkPath = path.join(targetPath, link.name);
|
|
279
|
+
|
|
280
|
+
try {
|
|
281
|
+
if (fs.existsSync(linkPath)) {
|
|
282
|
+
fs.unlinkSync(linkPath);
|
|
283
|
+
}
|
|
284
|
+
fs.symlinkSync(link.target, linkPath);
|
|
285
|
+
log.success(`Created symlink: ${link.name} → ${link.target}`);
|
|
286
|
+
} catch (err) {
|
|
287
|
+
log.warn(`Failed to create symlink ${link.name}: ${err.message}`);
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
// Copy .agent/ structure for full pack
|
|
293
|
+
function copyAgentStructure(targetPath, templatesPath) {
|
|
294
|
+
log.header('Installing .agent/ structure...');
|
|
295
|
+
|
|
296
|
+
const srcAgent = path.join(templatesPath, '.agent');
|
|
297
|
+
const destAgent = path.join(targetPath, '.agent');
|
|
298
|
+
|
|
299
|
+
if (fs.existsSync(srcAgent)) {
|
|
300
|
+
copyDirSync(srcAgent, destAgent);
|
|
301
|
+
log.success('Installed .agent/ (agents, workflows, rules)');
|
|
302
|
+
} else {
|
|
303
|
+
log.warn('.agent/ template not found');
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
// Main init function
|
|
308
|
+
async function init(options) {
|
|
309
|
+
log.header('🚀 AGI Agent Kit Initializer');
|
|
310
|
+
|
|
311
|
+
// Determine pack
|
|
312
|
+
let pack = options.pack;
|
|
313
|
+
if (!pack) {
|
|
314
|
+
pack = await promptPackSelection();
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
if (!PACKS[pack]) {
|
|
318
|
+
log.error(`Unknown pack: ${pack}`);
|
|
319
|
+
process.exit(1);
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
log.info(`Installing ${PACKS[pack].name} pack to: ${options.path}`);
|
|
323
|
+
|
|
324
|
+
// Get templates path (relative to this script)
|
|
325
|
+
const templatesPath = path.join(__dirname, '..', 'templates');
|
|
326
|
+
|
|
327
|
+
if (!fs.existsSync(templatesPath)) {
|
|
328
|
+
log.error('Templates directory not found. Package may be corrupted.');
|
|
329
|
+
process.exit(1);
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
// Create structure
|
|
333
|
+
createStructure(options.path, options);
|
|
334
|
+
|
|
335
|
+
// Copy base files
|
|
336
|
+
copyBaseFiles(options.path, templatesPath, options);
|
|
337
|
+
|
|
338
|
+
// Copy skills
|
|
339
|
+
copySkills(options.path, pack, templatesPath);
|
|
340
|
+
|
|
341
|
+
// Create symlinks
|
|
342
|
+
if (options.symlinks) {
|
|
343
|
+
createSymlinks(options.path);
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
// Copy .agent/ for full pack
|
|
347
|
+
if (PACKS[pack].includeAgent) {
|
|
348
|
+
copyAgentStructure(options.path, templatesPath);
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
// Final message
|
|
352
|
+
log.header('✨ Installation complete!');
|
|
353
|
+
console.log(`
|
|
354
|
+
Next steps:
|
|
355
|
+
1. Review ${colors.cyan}AGENTS.md${colors.reset} for architecture overview
|
|
356
|
+
2. Install Python dependencies:
|
|
357
|
+
${colors.yellow}pip install requests beautifulsoup4 html2text lxml qdrant-client${colors.reset}
|
|
358
|
+
3. Check ${colors.cyan}skills/${colors.reset} for available capabilities
|
|
359
|
+
4. Create ${colors.cyan}.env${colors.reset} with your API keys
|
|
360
|
+
|
|
361
|
+
Happy coding! 🎉
|
|
362
|
+
`);
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
// Update function
|
|
366
|
+
async function update(options) {
|
|
367
|
+
log.header('🔄 AGI Agent Kit Updater');
|
|
368
|
+
|
|
369
|
+
if (!fs.existsSync(path.join(options.path, 'AGENTS.md'))) {
|
|
370
|
+
log.error('AGENTS.md not found. Are you in a valid AGI Agent project?');
|
|
371
|
+
log.info('Use "init" to start a new project.');
|
|
372
|
+
process.exit(1);
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
// Default to full pack logic for updates to capture all skills/agents
|
|
376
|
+
// Users typically want to update their tooling
|
|
377
|
+
log.info(`Updating framework components in: ${options.path}`);
|
|
378
|
+
|
|
379
|
+
const templatesPath = path.join(__dirname, '..', 'templates');
|
|
380
|
+
|
|
381
|
+
if (!fs.existsSync(templatesPath)) {
|
|
382
|
+
log.error('Templates directory not found.');
|
|
383
|
+
process.exit(1);
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
// 1. Update Skills (Core + Knowledge)
|
|
387
|
+
// We use 'knowledge' pack definition to cover all skills
|
|
388
|
+
const skillsToUpdate = ['core', 'knowledge'];
|
|
389
|
+
log.header('Updating Skills...');
|
|
390
|
+
|
|
391
|
+
for (const group of skillsToUpdate) {
|
|
392
|
+
const srcSkillsPath = path.join(templatesPath, 'skills', group);
|
|
393
|
+
const destSkillsPath = path.join(options.path, 'skills');
|
|
394
|
+
|
|
395
|
+
if (fs.existsSync(srcSkillsPath)) {
|
|
396
|
+
const skills = fs.readdirSync(srcSkillsPath, { withFileTypes: true })
|
|
397
|
+
.filter(d => d.isDirectory())
|
|
398
|
+
.map(d => d.name);
|
|
399
|
+
|
|
400
|
+
for (const skill of skills) {
|
|
401
|
+
// Only update if it already exists or if it's new (standard updates usually add new capabilities)
|
|
402
|
+
const src = path.join(srcSkillsPath, skill);
|
|
403
|
+
const dest = path.join(destSkillsPath, skill);
|
|
404
|
+
|
|
405
|
+
// We overwrite logic scripts but maybe we should be careful?
|
|
406
|
+
// For now, standard behavior is to upgrade toolsets.
|
|
407
|
+
if (copyDirSync(src, dest)) {
|
|
408
|
+
console.log(` ${colors.green}✔${colors.reset} Updated: ${skill}`);
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
// 2. Update Agents & Workflows (.agent/)
|
|
415
|
+
log.header('Updating Agents & Workflows...');
|
|
416
|
+
const srcAgent = path.join(templatesPath, '.agent');
|
|
417
|
+
const destAgent = path.join(options.path, '.agent');
|
|
418
|
+
if (fs.existsSync(srcAgent)) {
|
|
419
|
+
if (copyDirSync(srcAgent, destAgent)) {
|
|
420
|
+
console.log(` ${colors.green}✔${colors.reset} Updated .agent/ directory`);
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
// 3. Update Skill Creator
|
|
425
|
+
log.header('Updating Skill Creator...');
|
|
426
|
+
const srcSC = path.join(templatesPath, 'base', 'skill-creator');
|
|
427
|
+
const destSC = path.join(options.path, 'skill-creator');
|
|
428
|
+
if (fs.existsSync(srcSC)) {
|
|
429
|
+
copyDirSync(srcSC, destSC);
|
|
430
|
+
console.log(` ${colors.green}✔${colors.reset} Updated skill-creator/`);
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
// 4. Update Core Documentation if needed
|
|
434
|
+
// We generally respect user's AGENTS.md, but maybe we update GEMINI.md/CLAUDE.md symlinks?
|
|
435
|
+
if (options.symlinks) {
|
|
436
|
+
createSymlinks(options.path);
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
log.header('✨ Update complete!');
|
|
440
|
+
log.info('Please review any changes to your skills or agents.');
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
// Entry point
|
|
444
|
+
async function main() {
|
|
445
|
+
const options = parseArgs();
|
|
446
|
+
|
|
447
|
+
if (options.help) {
|
|
448
|
+
showHelp();
|
|
449
|
+
process.exit(0);
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
if (options.command !== 'init' && options.command !== 'update' && !options.command) {
|
|
453
|
+
// Default to init if no command specified
|
|
454
|
+
options.command = 'init';
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
if (options.command === 'init') {
|
|
458
|
+
await init(options);
|
|
459
|
+
} else if (options.command === 'update') {
|
|
460
|
+
await update(options);
|
|
461
|
+
} else {
|
|
462
|
+
log.error(`Unknown command: ${options.command}`);
|
|
463
|
+
showHelp();
|
|
464
|
+
process.exit(1);
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
main().catch(err => {
|
|
469
|
+
log.error(`Fatal error: ${err.message}`);
|
|
470
|
+
process.exit(1);
|
|
471
|
+
});
|