@hasna/skills 0.0.2 → 0.0.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/bin/index.js +253 -715
- package/bin/mcp.js +221 -683
- package/package.json +1 -1
- package/src/cli/cli.test.ts +14 -14
- package/src/cli/index.tsx +1 -1
- package/src/lib/installer.test.ts +41 -41
- package/src/lib/registry.test.ts +10 -10
- package/src/lib/registry.ts +10 -472
- package/src/lib/skillinfo.test.ts +12 -12
- package/src/mcp/index.ts +1 -1
- package/skills/skill-architecture-docs/CLAUDE.md +0 -19
- package/skills/skill-architecture-docs/package.json +0 -32
- package/skills/skill-architecture-docs/src/index.ts +0 -543
- package/skills/skill-auto-format/CLAUDE.md +0 -19
- package/skills/skill-auto-format/package.json +0 -32
- package/skills/skill-auto-format/src/index.ts +0 -103
- package/skills/skill-auto-format/tsconfig.json +0 -14
- package/skills/skill-brainstorm/README.md +0 -17
- package/skills/skill-brainstorm/install.sh +0 -112
- package/skills/skill-brainstorm/src/auth.ts +0 -49
- package/skills/skill-brainstorm/src/installer.ts +0 -324
- package/skills/skill-brainstorm/src/skill-install.ts +0 -205
- package/skills/skill-browser-agent/CLAUDE.md +0 -19
- package/skills/skill-browser-agent/package.json +0 -32
- package/skills/skill-browser-agent/src/index.ts +0 -626
- package/skills/skill-browser-agent/tsconfig.json +0 -14
- package/skills/skill-browseruse/LICENSE +0 -21
- package/skills/skill-browseruse/README.md +0 -27
- package/skills/skill-browseruse/SKILL.md +0 -113
- package/skills/skill-browseruse/install.sh +0 -112
- package/skills/skill-browseruse/package.json +0 -31
- package/skills/skill-browseruse/src/auth.ts +0 -49
- package/skills/skill-browseruse/src/installer.ts +0 -324
- package/skills/skill-browseruse/src/skill-install.ts +0 -174
- package/skills/skill-calculate/LICENSE +0 -21
- package/skills/skill-calculate/README.md +0 -17
- package/skills/skill-calculate/install.sh +0 -112
- package/skills/skill-calculate/package.json +0 -31
- package/skills/skill-calculate/src/auth.ts +0 -49
- package/skills/skill-calculate/src/installer.ts +0 -324
- package/skills/skill-calculate/src/skill-install.ts +0 -205
- package/skills/skill-chromedevtools/LICENSE +0 -21
- package/skills/skill-chromedevtools/README.md +0 -27
- package/skills/skill-chromedevtools/SKILL.md +0 -110
- package/skills/skill-chromedevtools/install.sh +0 -112
- package/skills/skill-chromedevtools/package.json +0 -31
- package/skills/skill-chromedevtools/src/auth.ts +0 -49
- package/skills/skill-chromedevtools/src/installer.ts +0 -324
- package/skills/skill-chromedevtools/src/skill-install.ts +0 -174
- package/skills/skill-companyguide/LICENSE +0 -21
- package/skills/skill-companyguide/README.md +0 -17
- package/skills/skill-companyguide/install.sh +0 -112
- package/skills/skill-companyguide/package.json +0 -31
- package/skills/skill-companyguide/src/auth.ts +0 -49
- package/skills/skill-companyguide/src/installer.ts +0 -324
- package/skills/skill-companyguide/src/skill-install.ts +0 -205
- package/skills/skill-compose-gmail/tsconfig.json +0 -14
- package/skills/skill-context7/LICENSE +0 -21
- package/skills/skill-context7/README.md +0 -27
- package/skills/skill-context7/SKILL.md +0 -103
- package/skills/skill-context7/install.sh +0 -112
- package/skills/skill-context7/package.json +0 -31
- package/skills/skill-context7/src/auth.ts +0 -49
- package/skills/skill-context7/src/installer.ts +0 -324
- package/skills/skill-context7/src/skill-install.ts +0 -174
- package/skills/skill-crawl/LICENSE +0 -21
- package/skills/skill-crawl/README.md +0 -17
- package/skills/skill-crawl/install.sh +0 -112
- package/skills/skill-crawl/package.json +0 -31
- package/skills/skill-crawl/src/auth.ts +0 -49
- package/skills/skill-crawl/src/installer.ts +0 -324
- package/skills/skill-crawl/src/skill-install.ts +0 -205
- package/skills/skill-csv-transformer/CLAUDE.md +0 -19
- package/skills/skill-csv-transformer/package.json +0 -32
- package/skills/skill-csv-transformer/src/index.ts +0 -81
- package/skills/skill-csv-transformer/tsconfig.json +0 -14
- package/skills/skill-debug/LICENSE +0 -21
- package/skills/skill-debug/README.md +0 -17
- package/skills/skill-debug/install.sh +0 -112
- package/skills/skill-debug/package.json +0 -31
- package/skills/skill-debug/src/auth.ts +0 -49
- package/skills/skill-debug/src/installer.ts +0 -324
- package/skills/skill-debug/src/skill-install.ts +0 -205
- package/skills/skill-deep-research/CLAUDE.md +0 -19
- package/skills/skill-deep-research/package.json +0 -32
- package/skills/skill-deep-research/src/index.ts +0 -1149
- package/skills/skill-deep-research/tsconfig.json +0 -14
- package/skills/skill-dns-manager/CLAUDE.md +0 -19
- package/skills/skill-dns-manager/package.json +0 -32
- package/skills/skill-dns-manager/src/index.ts +0 -92
- package/skills/skill-dns-manager/tsconfig.json +0 -14
- package/skills/skill-download/LICENSE +0 -21
- package/skills/skill-download/README.md +0 -17
- package/skills/skill-download/install.sh +0 -112
- package/skills/skill-download/package.json +0 -31
- package/skills/skill-download/src/auth.ts +0 -49
- package/skills/skill-download/src/installer.ts +0 -324
- package/skills/skill-download/src/skill-install.ts +0 -205
- package/skills/skill-exa/LICENSE +0 -21
- package/skills/skill-exa/README.md +0 -26
- package/skills/skill-exa/SKILL.md +0 -92
- package/skills/skill-exa/install.sh +0 -112
- package/skills/skill-exa/package.json +0 -31
- package/skills/skill-exa/src/auth.ts +0 -49
- package/skills/skill-exa/src/installer.ts +0 -324
- package/skills/skill-exa/src/skill-install.ts +0 -174
- package/skills/skill-filesearch/LICENSE +0 -21
- package/skills/skill-filesearch/README.md +0 -17
- package/skills/skill-filesearch/install.sh +0 -112
- package/skills/skill-filesearch/package.json +0 -31
- package/skills/skill-filesearch/src/auth.ts +0 -49
- package/skills/skill-filesearch/src/installer.ts +0 -324
- package/skills/skill-filesearch/src/skill-install.ts +0 -205
- package/skills/skill-fill/LICENSE +0 -21
- package/skills/skill-fill/README.md +0 -17
- package/skills/skill-fill/install.sh +0 -112
- package/skills/skill-fill/package.json +0 -31
- package/skills/skill-fill/src/auth.ts +0 -49
- package/skills/skill-fill/src/installer.ts +0 -324
- package/skills/skill-fill/src/skill-install.ts +0 -205
- package/skills/skill-generate-audio/CLAUDE.md +0 -3
- package/skills/skill-generate-audio/SKILL.md +0 -53
- package/skills/skill-generate-audio/package.json +0 -30
- package/skills/skill-generate-audio/src/index.ts +0 -656
- package/skills/skill-generate-audio/tsconfig.json +0 -18
- package/skills/skill-generate-readme/CLAUDE.md +0 -19
- package/skills/skill-generate-readme/package.json +0 -32
- package/skills/skill-generate-readme/src/index.ts +0 -867
- package/skills/skill-generate-readme/tsconfig.json +0 -14
- package/skills/skill-generate-slides/CLAUDE.md +0 -19
- package/skills/skill-generate-slides/package.json +0 -32
- package/skills/skill-generate-slides/src/ai.ts +0 -140
- package/skills/skill-generate-slides/src/cli.ts +0 -161
- package/skills/skill-generate-slides/src/export.ts +0 -65
- package/skills/skill-generate-slides/src/index.ts +0 -1417
- package/skills/skill-generate-slides/src/layout.ts +0 -31
- package/skills/skill-generate-slides/src/parse.ts +0 -282
- package/skills/skill-generate-slides/src/render.ts +0 -711
- package/skills/skill-generate-slides/tsconfig.json +0 -14
- package/skills/skill-get-api-docs/CLAUDE.md +0 -19
- package/skills/skill-get-api-docs/package.json +0 -32
- package/skills/skill-get-api-docs/src/index.ts +0 -1176
- package/skills/skill-get-api-docs/tsconfig.json +0 -14
- package/skills/skill-googledrive/LICENSE +0 -21
- package/skills/skill-googledrive/README.md +0 -27
- package/skills/skill-googledrive/SKILL.md +0 -140
- package/skills/skill-googledrive/install.sh +0 -112
- package/skills/skill-googledrive/package.json +0 -31
- package/skills/skill-googledrive/src/auth.ts +0 -49
- package/skills/skill-googledrive/src/installer.ts +0 -324
- package/skills/skill-googledrive/src/skill-install.ts +0 -174
- package/skills/skill-grant-compliance-scanner/CLAUDE.md +0 -19
- package/skills/skill-grant-compliance-scanner/package.json +0 -32
- package/skills/skill-grant-compliance-scanner/src/index.ts +0 -94
- package/skills/skill-grant-compliance-scanner/tsconfig.json +0 -14
- package/skills/skill-hubsearch/LICENSE +0 -21
- package/skills/skill-hubsearch/README.md +0 -17
- package/skills/skill-hubsearch/install.sh +0 -112
- package/skills/skill-hubsearch/package.json +0 -31
- package/skills/skill-hubsearch/src/auth.ts +0 -49
- package/skills/skill-hubsearch/src/installer.ts +0 -324
- package/skills/skill-hubsearch/src/skill-install.ts +0 -205
- package/skills/skill-implementation-architecture/CLAUDE.md +0 -19
- package/skills/skill-implementation-architecture/package.json +0 -32
- package/skills/skill-implementation-architecture/src/index.ts +0 -460
- package/skills/skill-implementation-architecture/tsconfig.json +0 -14
- package/skills/skill-implementation-audit/CLAUDE.md +0 -19
- package/skills/skill-implementation-audit/package.json +0 -32
- package/skills/skill-implementation-audit/src/index.ts +0 -502
- package/skills/skill-implementation-audit/tsconfig.json +0 -14
- package/skills/skill-implementation-cost/CLAUDE.md +0 -19
- package/skills/skill-implementation-cost/package.json +0 -32
- package/skills/skill-implementation-cost/src/index.ts +0 -873
- package/skills/skill-implementation-cost/tsconfig.json +0 -14
- package/skills/skill-implementation-dispatch/CLAUDE.md +0 -19
- package/skills/skill-implementation-dispatch/package.json +0 -32
- package/skills/skill-implementation-dispatch/src/index.ts +0 -390
- package/skills/skill-implementation-dispatch/tsconfig.json +0 -14
- package/skills/skill-implementation-hook/CLAUDE.md +0 -19
- package/skills/skill-implementation-hook/package.json +0 -32
- package/skills/skill-implementation-hook/src/index.ts +0 -787
- package/skills/skill-implementation-hook/tsconfig.json +0 -14
- package/skills/skill-implementation-index/CLAUDE.md +0 -19
- package/skills/skill-implementation-index/package.json +0 -32
- package/skills/skill-implementation-index/src/index.ts +0 -767
- package/skills/skill-implementation-index/tsconfig.json +0 -14
- package/skills/skill-implementation-init/CLAUDE.md +0 -19
- package/skills/skill-implementation-init/package.json +0 -32
- package/skills/skill-implementation-init/src/index.ts +0 -378
- package/skills/skill-implementation-init/tsconfig.json +0 -14
- package/skills/skill-implementation-memento/CLAUDE.md +0 -19
- package/skills/skill-implementation-memento/package.json +0 -32
- package/skills/skill-implementation-memento/src/index.ts +0 -442
- package/skills/skill-implementation-memento/tsconfig.json +0 -14
- package/skills/skill-linear/LICENSE +0 -21
- package/skills/skill-linear/README.md +0 -28
- package/skills/skill-linear/SKILL.md +0 -94
- package/skills/skill-linear/install.sh +0 -112
- package/skills/skill-linear/package.json +0 -31
- package/skills/skill-linear/src/auth.ts +0 -49
- package/skills/skill-linear/src/installer.ts +0 -324
- package/skills/skill-linear/src/skill-install.ts +0 -174
- package/skills/skill-mail/LICENSE +0 -21
- package/skills/skill-mail/README.md +0 -17
- package/skills/skill-mail/install.sh +0 -112
- package/skills/skill-mail/package.json +0 -31
- package/skills/skill-mail/src/auth.ts +0 -49
- package/skills/skill-mail/src/installer.ts +0 -324
- package/skills/skill-mail/src/skill-install.ts +0 -205
- package/skills/skill-manage-gmail/CLAUDE.md +0 -19
- package/skills/skill-manage-gmail/package.json +0 -32
- package/skills/skill-manage-gmail/src/index.ts +0 -504
- package/skills/skill-manage-gmail/tsconfig.json +0 -14
- package/skills/skill-merch-mockup-factory/CLAUDE.md +0 -19
- package/skills/skill-merch-mockup-factory/package.json +0 -32
- package/skills/skill-merch-mockup-factory/src/index.ts +0 -296
- package/skills/skill-merch-mockup-factory/tsconfig.json +0 -14
- package/skills/skill-message/LICENSE +0 -21
- package/skills/skill-message/README.md +0 -17
- package/skills/skill-message/install.sh +0 -112
- package/skills/skill-message/package.json +0 -31
- package/skills/skill-message/src/auth.ts +0 -49
- package/skills/skill-message/src/installer.ts +0 -324
- package/skills/skill-message/src/skill-install.ts +0 -205
- package/skills/skill-newsletter-campaign-planner/CLAUDE.md +0 -19
- package/skills/skill-newsletter-campaign-planner/package.json +0 -32
- package/skills/skill-newsletter-campaign-planner/src/index.ts +0 -252
- package/skills/skill-newsletter-campaign-planner/tsconfig.json +0 -14
- package/skills/skill-notify/LICENSE +0 -21
- package/skills/skill-notify/README.md +0 -17
- package/skills/skill-notify/install.sh +0 -112
- package/skills/skill-notify/package.json +0 -31
- package/skills/skill-notify/src/auth.ts +0 -49
- package/skills/skill-notify/src/installer.ts +0 -324
- package/skills/skill-notify/src/skill-install.ts +0 -205
- package/skills/skill-notion/LICENSE +0 -21
- package/skills/skill-notion/README.md +0 -27
- package/skills/skill-notion/SKILL.md +0 -115
- package/skills/skill-notion/install.sh +0 -112
- package/skills/skill-notion/package.json +0 -31
- package/skills/skill-notion/src/auth.ts +0 -49
- package/skills/skill-notion/src/installer.ts +0 -324
- package/skills/skill-notion/src/skill-install.ts +0 -174
- package/skills/skill-parse-pdf/CLAUDE.md +0 -19
- package/skills/skill-parse-pdf/package.json +0 -32
- package/skills/skill-parse-pdf/src/index.ts +0 -581
- package/skills/skill-parse-pdf/tsconfig.json +0 -14
- package/skills/skill-playwright/LICENSE +0 -21
- package/skills/skill-playwright/README.md +0 -27
- package/skills/skill-playwright/SKILL.md +0 -116
- package/skills/skill-playwright/install.sh +0 -112
- package/skills/skill-playwright/package.json +0 -31
- package/skills/skill-playwright/src/auth.ts +0 -49
- package/skills/skill-playwright/src/installer.ts +0 -324
- package/skills/skill-playwright/src/skill-install.ts +0 -174
- package/skills/skill-projectbuild/LICENSE +0 -21
- package/skills/skill-projectbuild/README.md +0 -17
- package/skills/skill-projectbuild/install.sh +0 -112
- package/skills/skill-projectbuild/package.json +0 -31
- package/skills/skill-projectbuild/src/auth.ts +0 -49
- package/skills/skill-projectbuild/src/installer.ts +0 -324
- package/skills/skill-projectbuild/src/skill-install.ts +0 -205
- package/skills/skill-read-gmail/CLAUDE.md +0 -19
- package/skills/skill-read-gmail/package.json +0 -32
- package/skills/skill-read-gmail/src/index.ts +0 -343
- package/skills/skill-read-gmail/tsconfig.json +0 -14
- package/skills/skill-remember/LICENSE +0 -21
- package/skills/skill-remember/README.md +0 -17
- package/skills/skill-remember/install.sh +0 -112
- package/skills/skill-remember/package.json +0 -31
- package/skills/skill-remember/src/auth.ts +0 -49
- package/skills/skill-remember/src/installer.ts +0 -324
- package/skills/skill-remember/src/skill-install.ts +0 -205
- package/skills/skill-schedule/README.md +0 -17
- package/skills/skill-schedule/install.sh +0 -112
- package/skills/skill-schedule/src/auth.ts +0 -49
- package/skills/skill-schedule/src/installer.ts +0 -324
- package/skills/skill-schedule/src/skill-install.ts +0 -205
- package/skills/skill-search/LICENSE +0 -21
- package/skills/skill-search/README.md +0 -17
- package/skills/skill-search/install.sh +0 -112
- package/skills/skill-search/package.json +0 -31
- package/skills/skill-search/src/auth.ts +0 -49
- package/skills/skill-search/src/installer.ts +0 -324
- package/skills/skill-search/src/skill-install.ts +0 -205
- package/skills/skill-shadcn/LICENSE +0 -21
- package/skills/skill-shadcn/README.md +0 -27
- package/skills/skill-shadcn/SKILL.md +0 -113
- package/skills/skill-shadcn/install.sh +0 -112
- package/skills/skill-shadcn/package.json +0 -31
- package/skills/skill-shadcn/src/auth.ts +0 -49
- package/skills/skill-shadcn/src/installer.ts +0 -324
- package/skills/skill-shadcn/src/skill-install.ts +0 -174
- package/skills/skill-shadcn-theme/CLAUDE.md +0 -19
- package/skills/skill-shadcn-theme/package.json +0 -32
- package/skills/skill-shadcn-theme/src/index.ts +0 -16
- package/skills/skill-shadcn-theme/tsconfig.json +0 -14
- package/skills/skill-social-template-kit/CLAUDE.md +0 -19
- package/skills/skill-social-template-kit/package.json +0 -32
- package/skills/skill-social-template-kit/src/index.ts +0 -303
- package/skills/skill-social-template-kit/tsconfig.json +0 -14
- package/skills/skill-summarize/LICENSE +0 -21
- package/skills/skill-summarize/README.md +0 -17
- package/skills/skill-summarize/install.sh +0 -112
- package/skills/skill-summarize/package.json +0 -31
- package/skills/skill-summarize/src/auth.ts +0 -49
- package/skills/skill-summarize/src/installer.ts +0 -324
- package/skills/skill-summarize/src/skill-install.ts +0 -205
- package/skills/skill-sync/LICENSE +0 -21
- package/skills/skill-sync/README.md +0 -17
- package/skills/skill-sync/install.sh +0 -112
- package/skills/skill-sync/package.json +0 -31
- package/skills/skill-sync/src/auth.ts +0 -49
- package/skills/skill-sync/src/installer.ts +0 -324
- package/skills/skill-sync/src/skill-install.ts +0 -205
- package/skills/skill-time-blocking-orchestrator/CLAUDE.md +0 -19
- package/skills/skill-time-blocking-orchestrator/package.json +0 -32
- package/skills/skill-time-blocking-orchestrator/src/index.ts +0 -328
- package/skills/skill-time-blocking-orchestrator/tsconfig.json +0 -14
- package/skills/skill-transform/.env.example +0 -2
- package/skills/skill-transform/LICENSE +0 -21
- package/skills/skill-transform/README.md +0 -17
- package/skills/skill-transform/SKILL.md +0 -127
- package/skills/skill-transform/install.sh +0 -112
- package/skills/skill-transform/package.json +0 -37
- package/skills/skill-transform/src/auth.ts +0 -49
- package/skills/skill-transform/src/http-client.ts +0 -128
- package/skills/skill-transform/src/index-http.ts +0 -111
- package/skills/skill-transform/src/index-local.ts +0 -368
- package/skills/skill-transform/src/index.ts +0 -111
- package/skills/skill-transform/src/installer.ts +0 -324
- package/skills/skill-transform/src/skill-install.ts +0 -205
- package/skills/skill-transform/src/transformers/ai-transformer.ts +0 -202
- package/skills/skill-transform/src/transformers/format-detector.ts +0 -147
- package/skills/skill-transform/src/types.ts +0 -95
- package/skills/skill-transform/tsconfig.json +0 -18
- package/skills/skill-translate/LICENSE +0 -21
- package/skills/skill-translate/README.md +0 -17
- package/skills/skill-translate/install.sh +0 -112
- package/skills/skill-translate/package.json +0 -31
- package/skills/skill-translate/src/auth.ts +0 -49
- package/skills/skill-translate/src/installer.ts +0 -324
- package/skills/skill-translate/src/skill-install.ts +0 -205
- package/skills/skill-vendor-comparison-coach/CLAUDE.md +0 -19
- package/skills/skill-vendor-comparison-coach/package.json +0 -32
- package/skills/skill-vendor-comparison-coach/src/index.ts +0 -337
- package/skills/skill-vendor-comparison-coach/tsconfig.json +0 -14
- package/skills/skill-videodownload/.env.example +0 -5
- package/skills/skill-videodownload/CLAUDE.md +0 -64
- package/skills/skill-videodownload/LICENSE +0 -21
- package/skills/skill-videodownload/README.md +0 -166
- package/skills/skill-videodownload/package.json +0 -49
- package/skills/skill-videodownload/src/commands/config.ts +0 -89
- package/skills/skill-videodownload/src/commands/download.ts +0 -61
- package/skills/skill-videodownload/src/commands/info.ts +0 -83
- package/skills/skill-videodownload/src/commands/list.ts +0 -84
- package/skills/skill-videodownload/src/lib/downloader.ts +0 -270
- package/skills/skill-videodownload/src/lib/storage.ts +0 -167
- package/skills/skill-videodownload/src/types/index.ts +0 -64
- package/skills/skill-videodownload/src/utils/logger.ts +0 -49
- package/skills/skill-videodownload/src/utils/paths.ts +0 -94
- package/skills/skill-videodownload/tsconfig.json +0 -17
- package/skills/skill-voiceover/.env.example +0 -5
- package/skills/skill-voiceover/CLAUDE.md +0 -40
- package/skills/skill-voiceover/LICENSE +0 -21
- package/skills/skill-voiceover/README.md +0 -64
- package/skills/skill-voiceover/package.json +0 -43
- package/skills/skill-voiceover/src/commands/config.ts +0 -38
- package/skills/skill-voiceover/src/commands/generate.ts +0 -37
- package/skills/skill-voiceover/src/commands/voices.ts +0 -33
- package/skills/skill-voiceover/src/lib/generator.ts +0 -159
- package/skills/skill-voiceover/src/lib/storage.ts +0 -55
- package/skills/skill-voiceover/src/types/index.ts +0 -55
- package/skills/skill-voiceover/src/utils/logger.ts +0 -30
- package/skills/skill-voiceover/src/utils/paths.ts +0 -22
- package/skills/skill-voiceover/tsconfig.json +0 -17
- package/skills/skill-websearch/LICENSE +0 -21
- package/skills/skill-websearch/README.md +0 -17
- package/skills/skill-websearch/install.sh +0 -112
- package/skills/skill-websearch/package.json +0 -31
- package/skills/skill-websearch/src/auth.ts +0 -49
- package/skills/skill-websearch/src/installer.ts +0 -324
- package/skills/skill-websearch/src/skill-install.ts +0 -205
- /package/skills/{skill-compose-gmail → skill-gmail}/CLAUDE.md +0 -0
- /package/skills/{skill-compose-gmail → skill-gmail}/package.json +0 -0
- /package/skills/{skill-compose-gmail → skill-gmail}/src/index.ts +0 -0
- /package/skills/{skill-architecture-docs → skill-gmail}/tsconfig.json +0 -0
|
@@ -1,324 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bun
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Skill Installer Module
|
|
5
|
-
*
|
|
6
|
-
* Universal installer for skills to integrate with AI code assistants
|
|
7
|
-
* Usage: skill-[name] install [claude|codex|windsurf|cursor]
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
import { writeFileSync, mkdirSync, existsSync, readFileSync } from 'fs';
|
|
11
|
-
import { resolve, join } from 'path';
|
|
12
|
-
import { homedir } from 'os';
|
|
13
|
-
|
|
14
|
-
export interface SkillConfig {
|
|
15
|
-
name: string;
|
|
16
|
-
description: string;
|
|
17
|
-
version: string;
|
|
18
|
-
commands: Array<{
|
|
19
|
-
name: string;
|
|
20
|
-
description: string;
|
|
21
|
-
usage: string;
|
|
22
|
-
examples: string[];
|
|
23
|
-
}>;
|
|
24
|
-
requiredEnvVars?: string[];
|
|
25
|
-
optionalEnvVars?: string[];
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
export type AssistantType = 'claude' | 'codex' | 'windsurf' | 'cursor';
|
|
29
|
-
|
|
30
|
-
const ASSISTANT_PATHS: Record<AssistantType, string> = {
|
|
31
|
-
claude: '.claude/skills',
|
|
32
|
-
codex: '.codex/skills',
|
|
33
|
-
windsurf: '.windsurf/skills',
|
|
34
|
-
cursor: '.cursor/skills',
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
export class SkillInstaller {
|
|
38
|
-
private config: SkillConfig;
|
|
39
|
-
private skillPath: string;
|
|
40
|
-
|
|
41
|
-
constructor(config: SkillConfig, currentFilePath: string) {
|
|
42
|
-
this.config = config;
|
|
43
|
-
// Get the root directory of the skill (where package.json is)
|
|
44
|
-
this.skillPath = resolve(currentFilePath, '..');
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* Install the skill to specified AI assistant
|
|
49
|
-
*/
|
|
50
|
-
async install(assistant: AssistantType): Promise<void> {
|
|
51
|
-
console.log(`📦 Installing ${this.config.name} for ${assistant}...`);
|
|
52
|
-
console.log('');
|
|
53
|
-
|
|
54
|
-
const assistantPath = ASSISTANT_PATHS[assistant];
|
|
55
|
-
if (!assistantPath) {
|
|
56
|
-
throw new Error(`Unknown assistant: ${assistant}`);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
// Create skill directory
|
|
60
|
-
const skillDir = join(homedir(), assistantPath, this.config.name);
|
|
61
|
-
mkdirSync(skillDir, { recursive: true });
|
|
62
|
-
console.log(`✓ Created: ${skillDir}`);
|
|
63
|
-
|
|
64
|
-
// Generate and write SKILL.md
|
|
65
|
-
const skillMd = this.generateSkillMd();
|
|
66
|
-
writeFileSync(join(skillDir, 'SKILL.md'), skillMd);
|
|
67
|
-
console.log(`✓ Created: SKILL.md`);
|
|
68
|
-
|
|
69
|
-
// Generate and write README.md
|
|
70
|
-
const readme = this.generateReadme();
|
|
71
|
-
writeFileSync(join(skillDir, 'README.md'), readme);
|
|
72
|
-
console.log(`✓ Created: README.md`);
|
|
73
|
-
|
|
74
|
-
// Create log file
|
|
75
|
-
const logFile = join(skillDir, `${this.config.name}.log`);
|
|
76
|
-
if (!existsSync(logFile)) {
|
|
77
|
-
writeFileSync(logFile, `# ${this.config.name} execution log\n# Created: ${new Date().toISOString()}\n\n`);
|
|
78
|
-
console.log(`✓ Created: ${this.config.name}.log`);
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
// Update MCP config
|
|
82
|
-
this.updateMcpConfig(assistant, skillDir);
|
|
83
|
-
|
|
84
|
-
console.log('');
|
|
85
|
-
console.log(`✅ ${this.config.name} installed successfully!`);
|
|
86
|
-
console.log('');
|
|
87
|
-
console.log('Location:', skillDir);
|
|
88
|
-
console.log('');
|
|
89
|
-
console.log('Usage:');
|
|
90
|
-
this.config.commands.slice(0, 3).forEach(cmd => {
|
|
91
|
-
console.log(` ${this.config.name} ${cmd.usage}`);
|
|
92
|
-
});
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
/**
|
|
96
|
-
* Generate SKILL.md documentation
|
|
97
|
-
*/
|
|
98
|
-
private generateSkillMd(): string {
|
|
99
|
-
const envVarsSection = this.config.requiredEnvVars?.length || this.config.optionalEnvVars?.length ? `
|
|
100
|
-
|
|
101
|
-
## Environment Variables
|
|
102
|
-
|
|
103
|
-
${this.config.requiredEnvVars?.length ? `### Required
|
|
104
|
-
${this.config.requiredEnvVars.map(v => `- \`${v}\``).join('\n')}
|
|
105
|
-
` : ''}
|
|
106
|
-
${this.config.optionalEnvVars?.length ? `### Optional
|
|
107
|
-
${this.config.optionalEnvVars.map(v => `- \`${v}\``).join('\n')}
|
|
108
|
-
` : ''}` : '';
|
|
109
|
-
|
|
110
|
-
return `# ${this.config.name}
|
|
111
|
-
|
|
112
|
-
${this.config.description}
|
|
113
|
-
|
|
114
|
-
## Version
|
|
115
|
-
${this.config.version}
|
|
116
|
-
|
|
117
|
-
## Commands
|
|
118
|
-
|
|
119
|
-
${this.config.commands.map(cmd => `### ${cmd.name}
|
|
120
|
-
|
|
121
|
-
${cmd.description}
|
|
122
|
-
|
|
123
|
-
**Usage:**
|
|
124
|
-
\`\`\`bash
|
|
125
|
-
${this.config.name} ${cmd.usage}
|
|
126
|
-
\`\`\`
|
|
127
|
-
|
|
128
|
-
**Examples:**
|
|
129
|
-
${cmd.examples.map(ex => `\`\`\`bash
|
|
130
|
-
${ex}
|
|
131
|
-
\`\`\``).join('\n')}
|
|
132
|
-
`).join('\n')}
|
|
133
|
-
${envVarsSection}
|
|
134
|
-
|
|
135
|
-
## Installation
|
|
136
|
-
|
|
137
|
-
This skill is installed at:
|
|
138
|
-
\`~/.claude/skills/${this.config.name}/\`
|
|
139
|
-
|
|
140
|
-
## Logs
|
|
141
|
-
|
|
142
|
-
Execution logs are written to:
|
|
143
|
-
\`~/.claude/skills/${this.config.name}/${this.config.name}.log\`
|
|
144
|
-
|
|
145
|
-
## Support
|
|
146
|
-
|
|
147
|
-
For issues, visit: https://github.com/hasnaxyz/${this.config.name}/issues
|
|
148
|
-
`;
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
/**
|
|
152
|
-
* Generate README.md
|
|
153
|
-
*/
|
|
154
|
-
private generateReadme(): string {
|
|
155
|
-
return `# ${this.config.name}
|
|
156
|
-
|
|
157
|
-
${this.config.description}
|
|
158
|
-
|
|
159
|
-
## Quick Start
|
|
160
|
-
|
|
161
|
-
\`\`\`bash
|
|
162
|
-
${this.config.commands[0] ? `${this.config.name} ${this.config.commands[0].usage}` : `${this.config.name} --help`}
|
|
163
|
-
\`\`\`
|
|
164
|
-
|
|
165
|
-
## Documentation
|
|
166
|
-
|
|
167
|
-
See [SKILL.md](./SKILL.md) for complete documentation.
|
|
168
|
-
|
|
169
|
-
## Version
|
|
170
|
-
|
|
171
|
-
${this.config.version}
|
|
172
|
-
`;
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
/**
|
|
176
|
-
* Update MCP config to register the skill
|
|
177
|
-
*/
|
|
178
|
-
private updateMcpConfig(assistant: AssistantType, skillDir: string): void {
|
|
179
|
-
const configPaths: Record<AssistantType, string> = {
|
|
180
|
-
claude: join(homedir(), '.config/claude-code/claude_mcp_config.json'),
|
|
181
|
-
codex: join(homedir(), '.config/codex/mcp_config.json'),
|
|
182
|
-
windsurf: join(homedir(), '.config/windsurf/mcp_config.json'),
|
|
183
|
-
cursor: join(homedir(), '.config/cursor/mcp_config.json'),
|
|
184
|
-
};
|
|
185
|
-
|
|
186
|
-
const configPath = configPaths[assistant];
|
|
187
|
-
|
|
188
|
-
// Read existing config or create new
|
|
189
|
-
let config: any = { mcpServers: {} };
|
|
190
|
-
if (existsSync(configPath)) {
|
|
191
|
-
const content = readFileSync(configPath, 'utf8');
|
|
192
|
-
config = JSON.parse(content);
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
if (!config.mcpServers) {
|
|
196
|
-
config.mcpServers = {};
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
// Add or update this skill
|
|
200
|
-
config.mcpServers[this.config.name] = {
|
|
201
|
-
command: 'bun',
|
|
202
|
-
args: ['run', join(this.skillPath, 'src/index.ts')],
|
|
203
|
-
env: this.getEnvConfig(),
|
|
204
|
-
};
|
|
205
|
-
|
|
206
|
-
// Write config
|
|
207
|
-
mkdirSync(resolve(configPath, '..'), { recursive: true });
|
|
208
|
-
writeFileSync(configPath, JSON.stringify(config, null, 2));
|
|
209
|
-
console.log(`✓ Updated: ${assistant} MCP config`);
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
/**
|
|
213
|
-
* Get environment variables config
|
|
214
|
-
*/
|
|
215
|
-
private getEnvConfig(): Record<string, string> {
|
|
216
|
-
const env: Record<string, string> = {
|
|
217
|
-
SKILL_API_KEY: process.env.SKILL_API_KEY || '',
|
|
218
|
-
};
|
|
219
|
-
|
|
220
|
-
// Add required env vars
|
|
221
|
-
this.config.requiredEnvVars?.forEach(key => {
|
|
222
|
-
env[key] = process.env[key] || '';
|
|
223
|
-
});
|
|
224
|
-
|
|
225
|
-
// Add optional env vars
|
|
226
|
-
this.config.optionalEnvVars?.forEach(key => {
|
|
227
|
-
env[key] = process.env[key] || '';
|
|
228
|
-
});
|
|
229
|
-
|
|
230
|
-
return env;
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
/**
|
|
234
|
-
* Uninstall the skill from specified AI assistant
|
|
235
|
-
*/
|
|
236
|
-
async uninstall(assistant: AssistantType): Promise<void> {
|
|
237
|
-
console.log(`🗑️ Uninstalling ${this.config.name} from ${assistant}...`);
|
|
238
|
-
console.log('');
|
|
239
|
-
|
|
240
|
-
const assistantPath = ASSISTANT_PATHS[assistant];
|
|
241
|
-
const skillDir = join(homedir(), assistantPath, this.config.name);
|
|
242
|
-
|
|
243
|
-
if (existsSync(skillDir)) {
|
|
244
|
-
// Remove from MCP config first
|
|
245
|
-
this.removeFromMcpConfig(assistant);
|
|
246
|
-
|
|
247
|
-
// Note: We don't delete the directory to preserve logs and user data
|
|
248
|
-
console.log(`✓ Removed from ${assistant} MCP config`);
|
|
249
|
-
console.log('');
|
|
250
|
-
console.log(`⚠️ Directory preserved: ${skillDir}`);
|
|
251
|
-
console.log(' (contains logs and configuration)');
|
|
252
|
-
console.log(' Delete manually if needed.');
|
|
253
|
-
} else {
|
|
254
|
-
console.log(`⚠️ ${this.config.name} is not installed for ${assistant}`);
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
/**
|
|
259
|
-
* Remove skill from MCP config
|
|
260
|
-
*/
|
|
261
|
-
private removeFromMcpConfig(assistant: AssistantType): void {
|
|
262
|
-
const configPaths: Record<AssistantType, string> = {
|
|
263
|
-
claude: join(homedir(), '.config/claude-code/claude_mcp_config.json'),
|
|
264
|
-
codex: join(homedir(), '.config/codex/mcp_config.json'),
|
|
265
|
-
windsurf: join(homedir(), '.config/windsurf/mcp_config.json'),
|
|
266
|
-
cursor: join(homedir(), '.config/cursor/mcp_config.json'),
|
|
267
|
-
};
|
|
268
|
-
|
|
269
|
-
const configPath = configPaths[assistant];
|
|
270
|
-
|
|
271
|
-
if (existsSync(configPath)) {
|
|
272
|
-
const content = readFileSync(configPath, 'utf8');
|
|
273
|
-
const config = JSON.parse(content);
|
|
274
|
-
|
|
275
|
-
if (config.mcpServers && config.mcpServers[this.config.name]) {
|
|
276
|
-
delete config.mcpServers[this.config.name];
|
|
277
|
-
writeFileSync(configPath, JSON.stringify(config, null, 2));
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
/**
|
|
284
|
-
* Helper to run installer from skill CLI
|
|
285
|
-
*/
|
|
286
|
-
export async function runInstaller(
|
|
287
|
-
config: SkillConfig,
|
|
288
|
-
currentFilePath: string,
|
|
289
|
-
args: string[]
|
|
290
|
-
): Promise<void> {
|
|
291
|
-
const installer = new SkillInstaller(config, currentFilePath);
|
|
292
|
-
|
|
293
|
-
const command = args[0];
|
|
294
|
-
const assistant = args[1] as AssistantType;
|
|
295
|
-
|
|
296
|
-
if (command === 'install') {
|
|
297
|
-
if (!assistant || !['claude', 'codex', 'windsurf', 'cursor'].includes(assistant)) {
|
|
298
|
-
console.error('❌ Error: Please specify an assistant');
|
|
299
|
-
console.error('');
|
|
300
|
-
console.error('Usage:');
|
|
301
|
-
console.error(` ${config.name} install [claude|codex|windsurf|cursor]`);
|
|
302
|
-
console.error('');
|
|
303
|
-
console.error('Examples:');
|
|
304
|
-
console.error(` ${config.name} install claude`);
|
|
305
|
-
console.error(` ${config.name} install codex`);
|
|
306
|
-
process.exit(1);
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
await installer.install(assistant);
|
|
310
|
-
} else if (command === 'uninstall') {
|
|
311
|
-
if (!assistant || !['claude', 'codex', 'windsurf', 'cursor'].includes(assistant)) {
|
|
312
|
-
console.error('❌ Error: Please specify an assistant');
|
|
313
|
-
console.error('');
|
|
314
|
-
console.error('Usage:');
|
|
315
|
-
console.error(` ${config.name} uninstall [claude|codex|windsurf|cursor]`);
|
|
316
|
-
process.exit(1);
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
await installer.uninstall(assistant);
|
|
320
|
-
} else {
|
|
321
|
-
console.error(`❌ Unknown installer command: ${command}`);
|
|
322
|
-
process.exit(1);
|
|
323
|
-
}
|
|
324
|
-
}
|
|
@@ -1,205 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Skill Installation Handler
|
|
3
|
-
*
|
|
4
|
-
* Add this code to your skill's index.ts to enable:
|
|
5
|
-
* skill-[name] install claude
|
|
6
|
-
* skill-[name] install codex
|
|
7
|
-
* skill-[name] uninstall claude
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
import { writeFileSync, mkdirSync, existsSync } from 'fs';
|
|
11
|
-
import { join } from 'path';
|
|
12
|
-
import { homedir } from 'os';
|
|
13
|
-
|
|
14
|
-
interface SkillMeta {
|
|
15
|
-
name: string;
|
|
16
|
-
description: string;
|
|
17
|
-
version: string;
|
|
18
|
-
commands: string; // Help text or command list
|
|
19
|
-
requiredEnvVars?: string[];
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export async function handleInstallCommand(meta: SkillMeta, args: string[]): Promise<boolean> {
|
|
23
|
-
const command = args[0];
|
|
24
|
-
const assistant = args[1];
|
|
25
|
-
|
|
26
|
-
if (command !== 'install' && command !== 'uninstall') {
|
|
27
|
-
return false; // Not an install command
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
if (!assistant || !['claude', 'codex', 'windsurf', 'cursor'].includes(assistant)) {
|
|
31
|
-
console.error('❌ Error: Please specify an assistant');
|
|
32
|
-
console.error('');
|
|
33
|
-
console.error('Usage:');
|
|
34
|
-
console.error(` ${meta.name} install [claude|codex|windsurf|cursor]`);
|
|
35
|
-
console.error(` ${meta.name} uninstall [claude|codex|windsurf|cursor]`);
|
|
36
|
-
console.error('');
|
|
37
|
-
console.error('Examples:');
|
|
38
|
-
console.error(` ${meta.name} install claude`);
|
|
39
|
-
console.error(` ${meta.name} install codex`);
|
|
40
|
-
process.exit(1);
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
if (command === 'install') {
|
|
44
|
-
await installSkill(meta, assistant);
|
|
45
|
-
} else {
|
|
46
|
-
await uninstallSkill(meta, assistant);
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
return true;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
async function installSkill(meta: SkillMeta, assistant: string): Promise<void> {
|
|
53
|
-
console.log(`📦 Installing ${meta.name} for ${assistant}...`);
|
|
54
|
-
console.log('');
|
|
55
|
-
|
|
56
|
-
const assistantPaths: Record<string, string> = {
|
|
57
|
-
claude: '.claude/skills',
|
|
58
|
-
codex: '.codex/skills',
|
|
59
|
-
windsurf: '.windsurf/skills',
|
|
60
|
-
cursor: '.cursor/skills',
|
|
61
|
-
};
|
|
62
|
-
|
|
63
|
-
const skillDir = join(homedir(), assistantPaths[assistant], meta.name);
|
|
64
|
-
mkdirSync(skillDir, { recursive: true });
|
|
65
|
-
console.log(`✓ Created: ${skillDir}`);
|
|
66
|
-
|
|
67
|
-
// Generate SKILL.md
|
|
68
|
-
const skillMd = generateSkillMd(meta);
|
|
69
|
-
writeFileSync(join(skillDir, 'SKILL.md'), skillMd);
|
|
70
|
-
console.log(`✓ Created: SKILL.md`);
|
|
71
|
-
|
|
72
|
-
// Generate README.md
|
|
73
|
-
const readme = generateReadme(meta);
|
|
74
|
-
writeFileSync(join(skillDir, 'README.md'), readme);
|
|
75
|
-
console.log(`✓ Created: README.md`);
|
|
76
|
-
|
|
77
|
-
// Create log file
|
|
78
|
-
const logFile = join(skillDir, `${meta.name}.log`);
|
|
79
|
-
if (!existsSync(logFile)) {
|
|
80
|
-
writeFileSync(logFile, `# ${meta.name} execution log\n# Created: ${new Date().toISOString()}\n\n`);
|
|
81
|
-
console.log(`✓ Created: ${meta.name}.log`);
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
console.log('');
|
|
85
|
-
console.log(`✅ ${meta.name} installed successfully!`);
|
|
86
|
-
console.log('');
|
|
87
|
-
console.log('Location:', skillDir);
|
|
88
|
-
console.log('');
|
|
89
|
-
console.log('Files created:');
|
|
90
|
-
console.log(' - SKILL.md (documentation)');
|
|
91
|
-
console.log(' - README.md (quick reference)');
|
|
92
|
-
console.log(` - ${meta.name}.log (execution logs)`);
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
async function uninstallSkill(meta: SkillMeta, assistant: string): Promise<void> {
|
|
96
|
-
console.log(`🗑️ Uninstalling ${meta.name} from ${assistant}...`);
|
|
97
|
-
console.log('');
|
|
98
|
-
|
|
99
|
-
const assistantPaths: Record<string, string> = {
|
|
100
|
-
claude: '.claude/skills',
|
|
101
|
-
codex: '.codex/skills',
|
|
102
|
-
windsurf: '.windsurf/skills',
|
|
103
|
-
cursor: '.cursor/skills',
|
|
104
|
-
};
|
|
105
|
-
|
|
106
|
-
const skillDir = join(homedir(), assistantPaths[assistant], meta.name);
|
|
107
|
-
|
|
108
|
-
if (existsSync(skillDir)) {
|
|
109
|
-
console.log(`⚠️ Directory preserved: ${skillDir}`);
|
|
110
|
-
console.log(' (contains logs and configuration)');
|
|
111
|
-
console.log(' Delete manually if needed:');
|
|
112
|
-
console.log(` rm -rf ${skillDir}`);
|
|
113
|
-
} else {
|
|
114
|
-
console.log(`✓ ${meta.name} is not installed for ${assistant}`);
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
function generateSkillMd(meta: SkillMeta): string {
|
|
119
|
-
// Extract skill type from name (e.g., "skill-audio" -> "audio")
|
|
120
|
-
const skillType = meta.name.replace('skill-', '');
|
|
121
|
-
|
|
122
|
-
// Create gerund form for description trigger (e.g., "audio" -> "generating audio")
|
|
123
|
-
const gerundForms: Record<string, string> = {
|
|
124
|
-
audio: 'generating audio',
|
|
125
|
-
image: 'generating images',
|
|
126
|
-
video: 'generating videos',
|
|
127
|
-
browse: 'browsing websites',
|
|
128
|
-
codefix: 'fixing code',
|
|
129
|
-
convert: 'converting files',
|
|
130
|
-
deploy: 'deploying applications',
|
|
131
|
-
emoji: 'generating emojis',
|
|
132
|
-
extract: 'extracting data',
|
|
133
|
-
transcript: 'transcribing audio',
|
|
134
|
-
transform: 'transforming data',
|
|
135
|
-
write: 'writing content',
|
|
136
|
-
};
|
|
137
|
-
|
|
138
|
-
const gerund = gerundForms[skillType] || `using ${skillType}`;
|
|
139
|
-
|
|
140
|
-
// Enhanced description with usage triggers
|
|
141
|
-
const enhancedDesc = `${meta.description}. Use when ${gerund} or when the user mentions ${skillType}.`;
|
|
142
|
-
|
|
143
|
-
const envSection = meta.requiredEnvVars?.length ? `
|
|
144
|
-
|
|
145
|
-
## Environment Variables
|
|
146
|
-
|
|
147
|
-
${meta.requiredEnvVars.map(v => `- \`${v}\``).join('\n')}
|
|
148
|
-
|
|
149
|
-
Add to your \`~/.zshrc\` or \`~/.bashrc\`:
|
|
150
|
-
\`\`\`bash
|
|
151
|
-
${meta.requiredEnvVars.map(v => `export ${v}=your_key_here`).join('\n')}
|
|
152
|
-
\`\`\`
|
|
153
|
-
` : '';
|
|
154
|
-
|
|
155
|
-
return `---
|
|
156
|
-
name: ${meta.name}
|
|
157
|
-
description: ${enhancedDesc}
|
|
158
|
-
---
|
|
159
|
-
|
|
160
|
-
# ${meta.name.split('-').map(w => w.charAt(0).toUpperCase() + w.slice(1)).join(' ')}
|
|
161
|
-
|
|
162
|
-
${meta.description}
|
|
163
|
-
|
|
164
|
-
## Quick Start
|
|
165
|
-
|
|
166
|
-
\`\`\`bash
|
|
167
|
-
${meta.commands}
|
|
168
|
-
\`\`\`
|
|
169
|
-
|
|
170
|
-
## Version
|
|
171
|
-
|
|
172
|
-
${meta.version}${envSection}
|
|
173
|
-
|
|
174
|
-
## Installation
|
|
175
|
-
|
|
176
|
-
Installed at: \`~/.claude/skills/${meta.name}/\`
|
|
177
|
-
|
|
178
|
-
## Logs
|
|
179
|
-
|
|
180
|
-
Execution logs: \`~/.claude/skills/${meta.name}/${meta.name}.log\`
|
|
181
|
-
|
|
182
|
-
## Support
|
|
183
|
-
|
|
184
|
-
For issues, visit: https://github.com/hasnaxyz/${meta.name}/issues
|
|
185
|
-
`;
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
function generateReadme(meta: SkillMeta): string {
|
|
189
|
-
return `# ${meta.name}
|
|
190
|
-
|
|
191
|
-
${meta.description}
|
|
192
|
-
|
|
193
|
-
**Version:** ${meta.version}
|
|
194
|
-
|
|
195
|
-
## Documentation
|
|
196
|
-
|
|
197
|
-
See [SKILL.md](./SKILL.md) for complete documentation.
|
|
198
|
-
|
|
199
|
-
## Quick Reference
|
|
200
|
-
|
|
201
|
-
\`\`\`bash
|
|
202
|
-
${meta.name} --help
|
|
203
|
-
\`\`\`
|
|
204
|
-
`;
|
|
205
|
-
}
|
package/skills/skill-exa/LICENSE
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2025 Hasna
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
# skill-exa
|
|
2
|
-
|
|
3
|
-
Advanced web search and code search using Exa AI
|
|
4
|
-
|
|
5
|
-
## Overview
|
|
6
|
-
|
|
7
|
-
This Skill provides semantic web search capabilities powered by Exa AI, specializing in finding code examples, technical documentation, and high-quality technical content.
|
|
8
|
-
|
|
9
|
-
## MCP Server
|
|
10
|
-
|
|
11
|
-
Uses the Exa MCP server for AI-powered search.
|
|
12
|
-
|
|
13
|
-
Connection: NPM package `exa-mcp-server`
|
|
14
|
-
|
|
15
|
-
## Usage
|
|
16
|
-
|
|
17
|
-
This Skill is automatically invoked by Claude Code when performing web or code searches.
|
|
18
|
-
|
|
19
|
-
Example requests:
|
|
20
|
-
- "Search for React useState examples"
|
|
21
|
-
- "Find FastAPI authentication documentation"
|
|
22
|
-
- "What are best practices for Redis caching?"
|
|
23
|
-
|
|
24
|
-
## Setup
|
|
25
|
-
|
|
26
|
-
Get your Exa API key from: https://exa.ai
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: skill-exa
|
|
3
|
-
description: Advanced web search and code search using Exa AI. Search the web with semantic understanding, find code examples, documentation, and technical content. Use for research, finding examples, or discovering technical information.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Exa AI Search Skill
|
|
7
|
-
|
|
8
|
-
## What this Skill does
|
|
9
|
-
|
|
10
|
-
This Skill provides advanced web search capabilities using Exa AI, which specializes in semantic search, code discovery, and technical content retrieval.
|
|
11
|
-
|
|
12
|
-
## When to use this Skill
|
|
13
|
-
|
|
14
|
-
Use this Skill when you need to:
|
|
15
|
-
- Search the web with semantic understanding
|
|
16
|
-
- Find code examples and snippets
|
|
17
|
-
- Discover documentation and technical articles
|
|
18
|
-
- Research libraries, frameworks, and APIs
|
|
19
|
-
- Get contextual information from web content
|
|
20
|
-
- Find high-quality technical resources
|
|
21
|
-
|
|
22
|
-
## MCP Server Connection
|
|
23
|
-
|
|
24
|
-
The Exa MCP server provides access to Exa AI's search capabilities.
|
|
25
|
-
|
|
26
|
-
```json
|
|
27
|
-
{
|
|
28
|
-
"exa": {
|
|
29
|
-
"command": "npx",
|
|
30
|
-
"args": ["-y", "exa-mcp-server"],
|
|
31
|
-
"env": {
|
|
32
|
-
"EXA_API_KEY": "your-api-key-here"
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
**Setup**: Get your API key from [exa.ai](https://exa.ai)
|
|
39
|
-
|
|
40
|
-
## Available Operations
|
|
41
|
-
|
|
42
|
-
The Exa MCP server provides tools for:
|
|
43
|
-
|
|
44
|
-
- **Web Search**: Semantic web search with high-quality results
|
|
45
|
-
- **Code Search**: Find code examples and implementations
|
|
46
|
-
- **Documentation Search**: Discover technical documentation
|
|
47
|
-
- **Content Extraction**: Get detailed content from URLs
|
|
48
|
-
- **Similar Content**: Find related articles and resources
|
|
49
|
-
|
|
50
|
-
## Search Capabilities
|
|
51
|
-
|
|
52
|
-
Exa excels at:
|
|
53
|
-
- Understanding intent and context
|
|
54
|
-
- Finding technical and programming content
|
|
55
|
-
- Filtering for quality sources
|
|
56
|
-
- Providing relevant code examples
|
|
57
|
-
- Discovering documentation and guides
|
|
58
|
-
|
|
59
|
-
## Examples
|
|
60
|
-
|
|
61
|
-
### Example 1: Find code examples
|
|
62
|
-
"Search for React hooks examples using useEffect for data fetching"
|
|
63
|
-
→ Claude uses Exa to find relevant code examples
|
|
64
|
-
|
|
65
|
-
### Example 2: Research a library
|
|
66
|
-
"Find documentation and examples for FastAPI authentication"
|
|
67
|
-
→ Claude searches for FastAPI auth resources
|
|
68
|
-
|
|
69
|
-
### Example 3: Technical research
|
|
70
|
-
"What are the best practices for PostgreSQL connection pooling?"
|
|
71
|
-
→ Claude uses Exa to find technical articles and documentation
|
|
72
|
-
|
|
73
|
-
### Example 4: Find similar content
|
|
74
|
-
"Find articles similar to this URL about microservices patterns"
|
|
75
|
-
→ Claude discovers related technical content
|
|
76
|
-
|
|
77
|
-
## Best practices
|
|
78
|
-
|
|
79
|
-
- Use specific, technical queries for better results
|
|
80
|
-
- Include programming languages or frameworks when searching for code
|
|
81
|
-
- Ask for examples, documentation, or guides explicitly
|
|
82
|
-
- Leverage semantic search for concept-based queries
|
|
83
|
-
- Use Exa for technical content over general web search
|
|
84
|
-
|
|
85
|
-
## Integration Notes
|
|
86
|
-
|
|
87
|
-
The Exa MCP server automatically handles:
|
|
88
|
-
- API authentication
|
|
89
|
-
- Query optimization
|
|
90
|
-
- Result ranking and filtering
|
|
91
|
-
- Content extraction from URLs
|
|
92
|
-
- Rate limiting
|