@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,296 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bun
|
|
2
|
-
/**
|
|
3
|
-
* skill-merch-mockup-factory
|
|
4
|
-
* Generates merchandise mockup direction using OpenAI.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import { parseArgs } from "util";
|
|
8
|
-
import { existsSync, mkdirSync, appendFileSync } from "fs";
|
|
9
|
-
import { join, dirname } from "path";
|
|
10
|
-
|
|
11
|
-
type OutputFormat = "markdown" | "json";
|
|
12
|
-
|
|
13
|
-
interface SkillOptions {
|
|
14
|
-
brief: string;
|
|
15
|
-
brand?: string;
|
|
16
|
-
palette?: string;
|
|
17
|
-
items: string[];
|
|
18
|
-
tone?: string;
|
|
19
|
-
format: OutputFormat;
|
|
20
|
-
model: string;
|
|
21
|
-
output?: string;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
interface OpenAIChatResponse {
|
|
25
|
-
choices?: Array<{
|
|
26
|
-
message?: {
|
|
27
|
-
content?: string | null;
|
|
28
|
-
};
|
|
29
|
-
}>;
|
|
30
|
-
error?: {
|
|
31
|
-
message?: string;
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
const SKILL_SLUG = "merch-mockup-factory";
|
|
36
|
-
|
|
37
|
-
function ensureDir(path: string) {
|
|
38
|
-
if (!existsSync(path)) {
|
|
39
|
-
mkdirSync(path, { recursive: true });
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
function getPaths() {
|
|
44
|
-
const sessionStamp = new Date().toISOString().replace(/[:.]/g, "_").replace(/-/g, "_");
|
|
45
|
-
const exportsRoot = process.env.SKILLS_EXPORTS_DIR || join(process.cwd(), ".skills", "exports");
|
|
46
|
-
const logsRoot = process.env.SKILLS_LOGS_DIR || join(process.cwd(), ".skills", "logs");
|
|
47
|
-
|
|
48
|
-
const skillExportsDir = join(exportsRoot, SKILL_SLUG);
|
|
49
|
-
const skillLogsDir = join(logsRoot, SKILL_SLUG);
|
|
50
|
-
|
|
51
|
-
ensureDir(skillExportsDir);
|
|
52
|
-
ensureDir(skillLogsDir);
|
|
53
|
-
|
|
54
|
-
return {
|
|
55
|
-
sessionStamp,
|
|
56
|
-
skillExportsDir,
|
|
57
|
-
skillLogsDir,
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
function createLogger(logDir: string, sessionStamp: string) {
|
|
62
|
-
const logFile = join(logDir, `log_${sessionStamp}.txt`);
|
|
63
|
-
|
|
64
|
-
function write(level: "info" | "success" | "error", message: string) {
|
|
65
|
-
const timestamp = new Date().toISOString();
|
|
66
|
-
const entry = `[${timestamp}] [${level.toUpperCase()}] ${message}\n`;
|
|
67
|
-
appendFileSync(logFile, entry);
|
|
68
|
-
const prefix = level === "success" ? "✅" : level === "error" ? "❌" : "ℹ️";
|
|
69
|
-
console.log(`${prefix} ${message}`);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
return {
|
|
73
|
-
info: (message: string) => write("info", message),
|
|
74
|
-
success: (message: string) => write("success", message),
|
|
75
|
-
error: (message: string) => write("error", message),
|
|
76
|
-
logFile,
|
|
77
|
-
};
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
function slugify(value: string): string {
|
|
81
|
-
return value
|
|
82
|
-
.toLowerCase()
|
|
83
|
-
.replace(/[^a-z0-9]+/g, "-")
|
|
84
|
-
.replace(/^-+|-+$/g, "")
|
|
85
|
-
.slice(0, 40) || "merch";
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
function showHelp(): void {
|
|
89
|
-
console.log(`
|
|
90
|
-
skill-merch-mockup-factory - Generate merchandise mockup direction using AI
|
|
91
|
-
|
|
92
|
-
Usage:
|
|
93
|
-
skills run merch-mockup-factory -- "<brief>" [options]
|
|
94
|
-
|
|
95
|
-
Options:
|
|
96
|
-
-h, --help Show this help message
|
|
97
|
-
--brand <name> Brand name
|
|
98
|
-
--palette <colors> Color palette description
|
|
99
|
-
--items <list> Comma-separated item list (default: hoodie, tee, cap, tote, sticker)
|
|
100
|
-
--tone <style> Design tone/style
|
|
101
|
-
--format <type> Output format: markdown | json (default: markdown)
|
|
102
|
-
--model <model> OpenAI model (default: gpt-4o-mini)
|
|
103
|
-
--output <path> Custom output file path
|
|
104
|
-
|
|
105
|
-
Output includes:
|
|
106
|
-
- Collection concept and messaging pillars
|
|
107
|
-
- Item-by-item design direction (colorway, placement, print technique)
|
|
108
|
-
- Model casting and pose guidance
|
|
109
|
-
- Lighting/backdrop recommendations
|
|
110
|
-
- AI prompt variations for image generation tools
|
|
111
|
-
- File prep notes and production specs
|
|
112
|
-
- Packaging suggestions
|
|
113
|
-
|
|
114
|
-
Examples:
|
|
115
|
-
skills run merch-mockup-factory -- "Fan merch for indie band tour" --brand "The Echoes"
|
|
116
|
-
skills run merch-mockup-factory -- "Tech startup swag" --items "tee,hoodie,cap,water-bottle"
|
|
117
|
-
|
|
118
|
-
Requirements:
|
|
119
|
-
OPENAI_API_KEY environment variable must be set.
|
|
120
|
-
`);
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
function parseOptions(): SkillOptions {
|
|
124
|
-
const { values, positionals } = parseArgs({
|
|
125
|
-
args: Bun.argv.slice(2),
|
|
126
|
-
options: {
|
|
127
|
-
help: { type: "boolean", short: "h" },
|
|
128
|
-
brand: { type: "string" },
|
|
129
|
-
palette: { type: "string" },
|
|
130
|
-
items: { type: "string", default: "hoodie, tee, cap, tote, sticker" },
|
|
131
|
-
tone: { type: "string" },
|
|
132
|
-
format: { type: "string", default: "markdown" },
|
|
133
|
-
model: { type: "string", default: "gpt-4o-mini" },
|
|
134
|
-
output: { type: "string" },
|
|
135
|
-
},
|
|
136
|
-
allowPositionals: true,
|
|
137
|
-
});
|
|
138
|
-
|
|
139
|
-
if (values.help) {
|
|
140
|
-
showHelp();
|
|
141
|
-
process.exit(0);
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
const brief = positionals.join(" ").trim();
|
|
145
|
-
|
|
146
|
-
if (!brief) {
|
|
147
|
-
throw new Error(
|
|
148
|
-
"A merch brief is required.\nExample: skills run merch-mockup-factory -- \"Fan merch for indie band tour\""
|
|
149
|
-
);
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
const format: OutputFormat =
|
|
153
|
-
values.format === "json" ? "json" : values.format === "markdown" ? "markdown" : "markdown";
|
|
154
|
-
|
|
155
|
-
const items = values.items
|
|
156
|
-
? values.items
|
|
157
|
-
.split(",")
|
|
158
|
-
.map((c) => c.trim())
|
|
159
|
-
.filter(Boolean)
|
|
160
|
-
: ["hoodie", "tee", "cap", "tote", "sticker"];
|
|
161
|
-
|
|
162
|
-
return {
|
|
163
|
-
brief,
|
|
164
|
-
brand: values.brand,
|
|
165
|
-
palette: values.palette,
|
|
166
|
-
items: items.length > 0 ? items : ["hoodie", "tee", "cap", "tote", "sticker"],
|
|
167
|
-
tone: values.tone,
|
|
168
|
-
format,
|
|
169
|
-
model: values.model,
|
|
170
|
-
output: values.output,
|
|
171
|
-
};
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
function buildPrompt(options: SkillOptions) {
|
|
175
|
-
const system = `You are a merch creative director specializing in apparel and accessory mockups.
|
|
176
|
-
Create a guidance doc that includes:
|
|
177
|
-
- Collection concept and messaging pillars
|
|
178
|
-
- Item-by-item design direction (colorway, placement, print technique, scale)
|
|
179
|
-
- Model casting or mannequin diversity suggestions with pose guidance
|
|
180
|
-
- Lighting/backdrop recommendations for mockup renders or photoshoots
|
|
181
|
-
- AI prompt variations for image generation tools (Midjourney, DALL·E, etc.)
|
|
182
|
-
- File prep notes (layers, print sizes, bleed, color profile)
|
|
183
|
-
- Packaging or presentation suggestions for fulfillment`;
|
|
184
|
-
|
|
185
|
-
const instructions =
|
|
186
|
-
options.format === "json"
|
|
187
|
-
? "Respond in JSON with keys: overview, items, styling, prompts, production, packaging. Each item entry should include name, colorways, graphics, placement, technique, notes."
|
|
188
|
-
: "Respond in polished Markdown. Start with an executive summary blockquote, use tables for item specs, and bullet lists for prompts and production notes.";
|
|
189
|
-
|
|
190
|
-
const userPayload = {
|
|
191
|
-
request: "Create a merch mockup concept plan",
|
|
192
|
-
brief: options.brief,
|
|
193
|
-
brand: options.brand,
|
|
194
|
-
palette: options.palette,
|
|
195
|
-
items: options.items,
|
|
196
|
-
tone: options.tone,
|
|
197
|
-
format: options.format,
|
|
198
|
-
};
|
|
199
|
-
|
|
200
|
-
const user = `${instructions}\n\n${JSON.stringify(userPayload, null, 2)}`;
|
|
201
|
-
|
|
202
|
-
return { system, user };
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
async function callOpenAI(options: SkillOptions, system: string, user: string): Promise<string> {
|
|
206
|
-
const apiKey = process.env.OPENAI_API_KEY;
|
|
207
|
-
|
|
208
|
-
if (!apiKey) {
|
|
209
|
-
throw new Error("OPENAI_API_KEY environment variable is required.");
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
const body = {
|
|
213
|
-
model: options.model,
|
|
214
|
-
messages: [
|
|
215
|
-
{ role: "system", content: system },
|
|
216
|
-
{ role: "user", content: user },
|
|
217
|
-
],
|
|
218
|
-
temperature: 0.6,
|
|
219
|
-
max_tokens: options.format === "json" ? 2400 : 2000,
|
|
220
|
-
};
|
|
221
|
-
|
|
222
|
-
const response = await fetch("https://api.openai.com/v1/chat/completions", {
|
|
223
|
-
method: "POST",
|
|
224
|
-
headers: {
|
|
225
|
-
"Content-Type": "application/json",
|
|
226
|
-
Authorization: `Bearer ${apiKey}`,
|
|
227
|
-
},
|
|
228
|
-
body: JSON.stringify(body),
|
|
229
|
-
});
|
|
230
|
-
|
|
231
|
-
const data: OpenAIChatResponse = await response.json();
|
|
232
|
-
|
|
233
|
-
if (!response.ok) {
|
|
234
|
-
throw new Error(data.error?.message || `OpenAI API error (${response.status})`);
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
const content = data.choices?.[0]?.message?.content;
|
|
238
|
-
|
|
239
|
-
if (!content) {
|
|
240
|
-
throw new Error("OpenAI response did not include content.");
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
return content.trim();
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
async function writeExport(path: string, content: string) {
|
|
247
|
-
ensureDir(dirname(path));
|
|
248
|
-
await Bun.write(path, content);
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
async function run() {
|
|
252
|
-
const options = parseOptions();
|
|
253
|
-
const { sessionStamp, skillExportsDir, skillLogsDir } = getPaths();
|
|
254
|
-
const logger = createLogger(skillLogsDir, sessionStamp);
|
|
255
|
-
|
|
256
|
-
try {
|
|
257
|
-
logger.info("Generating merch mockup guidance.");
|
|
258
|
-
logger.info(`Format: ${options.format.toUpperCase()}, Model: ${options.model}`);
|
|
259
|
-
|
|
260
|
-
const { system, user } = buildPrompt(options);
|
|
261
|
-
const content = await callOpenAI(options, system, user);
|
|
262
|
-
|
|
263
|
-
const brandSlug = slugify(options.brand || options.brief.split(/\s+/).slice(0, 3).join("-"));
|
|
264
|
-
const extension = options.format === "json" ? "json" : "md";
|
|
265
|
-
const defaultPath = join(skillExportsDir, `merch-mockup-${brandSlug}-${sessionStamp}.${extension}`);
|
|
266
|
-
const targetPath = options.output ? options.output : defaultPath;
|
|
267
|
-
|
|
268
|
-
let finalContent = content;
|
|
269
|
-
|
|
270
|
-
if (options.format === "json") {
|
|
271
|
-
try {
|
|
272
|
-
finalContent = JSON.stringify(JSON.parse(content), null, 2);
|
|
273
|
-
} catch {
|
|
274
|
-
logger.error("Model response was not valid JSON. Wrapping raw response.");
|
|
275
|
-
finalContent = JSON.stringify({ raw: content }, null, 2);
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
await writeExport(targetPath, finalContent);
|
|
280
|
-
|
|
281
|
-
logger.success("Merch mockup plan generated successfully.");
|
|
282
|
-
console.log("\n=== Merch Mockup Preview ===\n");
|
|
283
|
-
console.log(finalContent.slice(0, 1500));
|
|
284
|
-
if (finalContent.length > 1500) {
|
|
285
|
-
console.log("\n… (truncated)");
|
|
286
|
-
}
|
|
287
|
-
console.log(`\nExport saved to: ${targetPath}`);
|
|
288
|
-
console.log(`Logs written to: ${skillLogsDir}`);
|
|
289
|
-
} catch (error) {
|
|
290
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
291
|
-
logger.error(message);
|
|
292
|
-
process.exit(1);
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
run();
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"compilerOptions": {
|
|
3
|
-
"target": "ES2022",
|
|
4
|
-
"module": "ES2022",
|
|
5
|
-
"moduleResolution": "bundler",
|
|
6
|
-
"esModuleInterop": true,
|
|
7
|
-
"strict": true,
|
|
8
|
-
"skipLibCheck": true,
|
|
9
|
-
"outDir": "dist",
|
|
10
|
-
"declaration": true,
|
|
11
|
-
"types": ["bun-types"]
|
|
12
|
-
},
|
|
13
|
-
"include": ["src/**/*", "bin/**/*"]
|
|
14
|
-
}
|
|
@@ -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,17 +0,0 @@
|
|
|
1
|
-
# skill-message
|
|
2
|
-
|
|
3
|
-
Send messages via Slack, Discord, SMS, and chat platforms
|
|
4
|
-
|
|
5
|
-
## Overview
|
|
6
|
-
|
|
7
|
-
This skill provides capabilities for sending and managing messages across multiple platforms including Slack, Discord, SMS (Twilio), WhatsApp, and other chat services.
|
|
8
|
-
|
|
9
|
-
## Usage
|
|
10
|
-
|
|
11
|
-
```bash
|
|
12
|
-
# Coming soon
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
## Development
|
|
16
|
-
|
|
17
|
-
See `.implementation/` for development notes and todos.
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
|
|
3
|
-
# Install script for skills
|
|
4
|
-
# Installs the skill either globally for Claude Code or locally in a project
|
|
5
|
-
|
|
6
|
-
set -e
|
|
7
|
-
|
|
8
|
-
SKILL_NAME="$(basename "$(pwd)")"
|
|
9
|
-
SKILL_PATH="$(pwd)"
|
|
10
|
-
|
|
11
|
-
echo "📦 Installing $SKILL_NAME..."
|
|
12
|
-
echo ""
|
|
13
|
-
|
|
14
|
-
# Check if Claude Code is installed
|
|
15
|
-
if ! command -v claude &> /dev/null; then
|
|
16
|
-
echo "⚠️ Claude Code not found in PATH"
|
|
17
|
-
echo " Please install Claude Code first: https://claude.com/claude-code"
|
|
18
|
-
exit 1
|
|
19
|
-
fi
|
|
20
|
-
|
|
21
|
-
# Check if we're in a git repository
|
|
22
|
-
if git rev-parse --git-dir > /dev/null 2>&1; then
|
|
23
|
-
IN_REPO=true
|
|
24
|
-
REPO_ROOT="$(git rev-parse --show-toplevel)"
|
|
25
|
-
echo "📁 Detected git repository: $REPO_ROOT"
|
|
26
|
-
else
|
|
27
|
-
IN_REPO=false
|
|
28
|
-
echo "📁 Not in a git repository"
|
|
29
|
-
fi
|
|
30
|
-
|
|
31
|
-
# Ask installation type
|
|
32
|
-
echo ""
|
|
33
|
-
echo "Where would you like to install this skill?"
|
|
34
|
-
if [ "$IN_REPO" = true ]; then
|
|
35
|
-
echo " 1) Locally (this repository only)"
|
|
36
|
-
echo " 2) Globally (all Claude Code sessions)"
|
|
37
|
-
read -p "Choose [1/2]: " choice
|
|
38
|
-
else
|
|
39
|
-
echo " Installing globally (not in a git repository)"
|
|
40
|
-
choice=2
|
|
41
|
-
fi
|
|
42
|
-
|
|
43
|
-
# Install function
|
|
44
|
-
install_skill() {
|
|
45
|
-
local config_dir=$1
|
|
46
|
-
local config_file="$config_dir/claude_mcp_config.json"
|
|
47
|
-
|
|
48
|
-
# Create config directory if it doesn't exist
|
|
49
|
-
mkdir -p "$config_dir"
|
|
50
|
-
|
|
51
|
-
# Create or update config file
|
|
52
|
-
if [ ! -f "$config_file" ]; then
|
|
53
|
-
echo "{" > "$config_file"
|
|
54
|
-
echo ' "mcpServers": {}' >> "$config_file"
|
|
55
|
-
echo "}" >> "$config_file"
|
|
56
|
-
fi
|
|
57
|
-
|
|
58
|
-
# Add skill to config using bun
|
|
59
|
-
bun -e "
|
|
60
|
-
const fs = require('fs');
|
|
61
|
-
const config = JSON.parse(fs.readFileSync('$config_file', 'utf8'));
|
|
62
|
-
|
|
63
|
-
if (!config.mcpServers) config.mcpServers = {};
|
|
64
|
-
|
|
65
|
-
config.mcpServers['$SKILL_NAME'] = {
|
|
66
|
-
command: 'bun',
|
|
67
|
-
args: ['run', '$SKILL_PATH/src/index.ts'],
|
|
68
|
-
env: {
|
|
69
|
-
SKILL_API_KEY: process.env.SKILL_API_KEY || '',
|
|
70
|
-
ANTHROPIC_API_KEY: process.env.ANTHROPIC_API_KEY || '',
|
|
71
|
-
OPENAI_API_KEY: process.env.OPENAI_API_KEY || '',
|
|
72
|
-
ELEVENLABS_API_KEY: process.env.ELEVENLABS_API_KEY || '',
|
|
73
|
-
GEMINI_API_KEY: process.env.GEMINI_API_KEY || '',
|
|
74
|
-
XAI_API_KEY: process.env.XAI_API_KEY || '',
|
|
75
|
-
GOOGLE_API_KEY: process.env.GOOGLE_API_KEY || '',
|
|
76
|
-
GOOGLE_PROJECT_ID: process.env.GOOGLE_PROJECT_ID || '',
|
|
77
|
-
BROWSER_USE_API_KEY: process.env.BROWSER_USE_API_KEY || '',
|
|
78
|
-
RUNWAY_API_KEY: process.env.RUNWAY_API_KEY || ''
|
|
79
|
-
}
|
|
80
|
-
};
|
|
81
|
-
|
|
82
|
-
fs.writeFileSync('$config_file', JSON.stringify(config, null, 2));
|
|
83
|
-
"
|
|
84
|
-
|
|
85
|
-
echo "✅ Installed $SKILL_NAME to $config_file"
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
# Install based on choice
|
|
89
|
-
if [ "$choice" = "1" ]; then
|
|
90
|
-
# Local installation
|
|
91
|
-
install_skill "$REPO_ROOT/.claude"
|
|
92
|
-
echo ""
|
|
93
|
-
echo "🎉 $SKILL_NAME installed locally!"
|
|
94
|
-
echo " Config: $REPO_ROOT/.claude/claude_mcp_config.json"
|
|
95
|
-
elif [ "$choice" = "2" ]; then
|
|
96
|
-
# Global installation
|
|
97
|
-
install_skill "$HOME/.config/claude-code"
|
|
98
|
-
echo ""
|
|
99
|
-
echo "🎉 $SKILL_NAME installed globally!"
|
|
100
|
-
echo " Config: $HOME/.config/claude-code/claude_mcp_config.json"
|
|
101
|
-
else
|
|
102
|
-
echo "❌ Invalid choice"
|
|
103
|
-
exit 1
|
|
104
|
-
fi
|
|
105
|
-
|
|
106
|
-
echo ""
|
|
107
|
-
echo "📝 Next steps:"
|
|
108
|
-
echo " 1. Restart Claude Code"
|
|
109
|
-
echo " 2. The skill will be available as: $SKILL_NAME"
|
|
110
|
-
echo ""
|
|
111
|
-
echo " Usage: Claude Code will automatically detect and use this skill"
|
|
112
|
-
echo " based on your prompts and task context."
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "skill-message",
|
|
3
|
-
"version": "1.0.0",
|
|
4
|
-
"description": "Send messages via Slack, Discord, SMS, and chat platforms",
|
|
5
|
-
"type": "module",
|
|
6
|
-
"main": "src/index.ts",
|
|
7
|
-
"bin": {
|
|
8
|
-
"skill-message": "src/index.ts"
|
|
9
|
-
},
|
|
10
|
-
"scripts": {
|
|
11
|
-
"start": "bun run src/index.ts",
|
|
12
|
-
"dev": "bun run --watch src/index.ts"
|
|
13
|
-
},
|
|
14
|
-
"keywords": [
|
|
15
|
-
"claude",
|
|
16
|
-
"ai",
|
|
17
|
-
"skill"
|
|
18
|
-
],
|
|
19
|
-
"author": "",
|
|
20
|
-
"license": "MIT",
|
|
21
|
-
"devDependencies": {
|
|
22
|
-
"@types/bun": "latest"
|
|
23
|
-
},
|
|
24
|
-
"peerDependencies": {
|
|
25
|
-
"typescript": "^5.0.0"
|
|
26
|
-
},
|
|
27
|
-
"repository": {
|
|
28
|
-
"type": "git",
|
|
29
|
-
"url": "git+https://github.com/hasnaxyz/skill-message.git"
|
|
30
|
-
}
|
|
31
|
-
}
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Skill Authentication Check
|
|
3
|
-
* Add this to the top of any skill's main function
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
export function checkSkillAuth(): void {
|
|
7
|
-
const SKILL_API_KEY = process.env.SKILL_API_KEY;
|
|
8
|
-
|
|
9
|
-
// Check if SKILL_API_KEY is set
|
|
10
|
-
if (!SKILL_API_KEY) {
|
|
11
|
-
console.error('❌ Error: SKILL_API_KEY environment variable not set');
|
|
12
|
-
console.error('');
|
|
13
|
-
console.error('To use this skill, you must set your SKILL_API_KEY:');
|
|
14
|
-
console.error('');
|
|
15
|
-
console.error(' export SKILL_API_KEY=your-api-key-here');
|
|
16
|
-
console.error('');
|
|
17
|
-
console.error('Contact your administrator to get your API key.');
|
|
18
|
-
process.exit(1);
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
// Validate key format
|
|
22
|
-
if (!SKILL_API_KEY.startsWith('sk-skill-')) {
|
|
23
|
-
console.error('❌ Error: Invalid SKILL_API_KEY format');
|
|
24
|
-
console.error('Expected format: sk-skill-xxxxxxxxxxxx');
|
|
25
|
-
process.exit(1);
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
// Key is valid - skill can proceed
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* Check if running remotely (via SSH or network)
|
|
33
|
-
*/
|
|
34
|
-
export function isRemoteExecution(): boolean {
|
|
35
|
-
return !!(
|
|
36
|
-
process.env.SSH_CONNECTION ||
|
|
37
|
-
process.env.SSH_CLIENT ||
|
|
38
|
-
process.env.SSH_TTY
|
|
39
|
-
);
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* Require auth only if remote execution
|
|
44
|
-
*/
|
|
45
|
-
export function requireAuthIfRemote(): void {
|
|
46
|
-
if (isRemoteExecution()) {
|
|
47
|
-
checkSkillAuth();
|
|
48
|
-
}
|
|
49
|
-
}
|