@hasna/skills 0.1.62 → 0.1.63
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/README.md +10 -6
- package/bin/index.js +14271 -21602
- package/bin/mcp.js +3527 -11449
- package/bin/migrate.js +53 -3
- package/bin/server.js +5140 -2675
- package/bin/worker.js +4542 -2129
- package/dist/cli/commands/publish.d.ts +2 -0
- package/dist/cli/components/App.d.ts +2 -1
- package/dist/cli/components/CategorySelect.d.ts +2 -1
- package/dist/cli/components/Header.d.ts +2 -1
- package/dist/cli/components/InstallProgress.d.ts +2 -1
- package/dist/cli/components/SearchView.d.ts +2 -1
- package/dist/cli/components/SkillSelect.d.ts +2 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.js +5094 -13755
- package/dist/lib/agent-sync.d.ts +38 -3
- package/dist/lib/home-adoption.d.ts +91 -0
- package/dist/lib/home-census.d.ts +22 -0
- package/dist/lib/home-migration.d.ts +61 -0
- package/dist/lib/portable-skills-files.d.ts +21 -1
- package/dist/lib/portable-skills-types.d.ts +46 -0
- package/dist/lib/pull.d.ts +66 -0
- package/dist/lib/remote-client.d.ts +6 -0
- package/dist/lib/run-state.d.ts +5 -0
- package/dist/lib/skill-bundles.d.ts +54 -0
- package/dist/lib/skill-contract.d.ts +35 -0
- package/dist/lib/skill-hash.d.ts +77 -0
- package/dist/sdk/cancel.d.ts +30 -0
- package/dist/sdk/dispatcher.d.ts +40 -0
- package/dist/sdk/event-sink.d.ts +2 -0
- package/dist/sdk/events.d.ts +79 -0
- package/dist/sdk/execution/admission.d.ts +44 -0
- package/dist/sdk/execution/dispatchers/e2b.d.ts +17 -0
- package/dist/sdk/execution/dispatchers/ecs.d.ts +151 -0
- package/dist/sdk/execution/image-profile.d.ts +73 -0
- package/dist/sdk/execution/index.d.ts +15 -0
- package/dist/sdk/execution/receipts.d.ts +44 -0
- package/dist/sdk/execution/state-machine.d.ts +38 -0
- package/dist/sdk/execution/storage.d.ts +158 -0
- package/dist/sdk/execution/types.d.ts +130 -0
- package/dist/sdk/executor.d.ts +17 -0
- package/dist/sdk/governance-store.d.ts +156 -0
- package/dist/sdk/governance.d.ts +92 -0
- package/dist/sdk/index.d.ts +26 -0
- package/dist/sdk/index.js +48730 -0
- package/dist/sdk/offline.d.ts +16 -0
- package/dist/sdk/outputs.d.ts +71 -0
- package/dist/sdk/registry.d.ts +28 -0
- package/dist/sdk/runs.d.ts +229 -0
- package/dist/sdk/server.d.ts +35 -0
- package/dist/sdk/spend.d.ts +36 -0
- package/dist/sdk/storage.d.ts +25 -0
- package/dist/server/app.d.ts +42 -0
- package/dist/server/artifact-storage.d.ts +102 -0
- package/dist/server/auth.d.ts +5 -0
- package/dist/server/config.d.ts +40 -0
- package/dist/server/database-url.d.ts +42 -0
- package/dist/server/handlers.d.ts +3 -0
- package/dist/server/index.d.ts +2 -0
- package/dist/server/migrate.d.ts +13 -0
- package/dist/server/migrations-dir.d.ts +18 -0
- package/dist/server/redaction.d.ts +1 -0
- package/dist/server/registry.d.ts +5 -0
- package/dist/server/rows.d.ts +23 -0
- package/dist/server/skills-api.d.ts +68 -0
- package/dist/server/sqlite-store.d.ts +114 -0
- package/dist/server/store-fixtures.d.ts +25 -0
- package/dist/server/store.d.ts +144 -0
- package/dist/server/types.d.ts +242 -0
- package/dist/server/worker.d.ts +4 -0
- package/dist/storage.js +32 -0
- package/docs/skill-standard.md +211 -39
- package/migrations/postgres/0003_run_outputs_governance.sql +83 -0
- package/migrations/sqlite/0003_run_outputs_governance.sql +58 -0
- package/package.json +11 -8
- package/schemas/skill.schema.json +181 -0
- package/agent-skills/README.md +0 -41
- package/agent-skills/fleet-package-rollout/SKILL.md +0 -169
- package/agent-skills/inbox/SKILL.md +0 -25
- package/agent-skills/inbox/scripts/inbox +0 -109
- package/agent-skills/inbox/tests/test_registered_sender_id.sh +0 -92
- package/agent-skills/inbox-monitor/SKILL.md +0 -41
- package/agent-skills/inbox-monitor/scripts/inbox_monitor.sh +0 -91
- package/agent-skills/inbox-monitor/scripts/test_inbox_monitor.sh +0 -71
- package/agent-skills/merge-pr/SKILL.md +0 -85
- package/agent-skills/merge-pr/references/merge-safety.md +0 -82
- package/agent-skills/merge-pr/scripts/merge_pr_guard.py +0 -694
- package/agent-skills/merge-pr/scripts/test_merge_pr_guard.py +0 -647
- package/agent-skills/merge-pr/tests/fixtures/multi-commit-synthesized.json +0 -28
- package/agent-skills/merge-pr/tests/fixtures/trailer-free-provider.json +0 -28
- package/agent-skills/skill-goal-execute/SKILL.md +0 -115
- package/agent-skills/skill-login/SKILL.md +0 -109
- package/agent-skills/skill-project-create/SKILL.md +0 -91
- package/agent-skills/skill-publish/SKILL.md +0 -254
- package/agent-skills/skill-publish/scripts/capture_registry.js +0 -47
- package/agent-skills/skill-publish/scripts/publish_with_git_head.sh +0 -143
- package/agent-skills/skill-publish/scripts/test_publish_with_git_head.sh +0 -231
- package/skills/_common/auth.ts +0 -45
- package/skills/_common/http-client.ts +0 -143
- package/skills/_common/index.ts +0 -26
- package/skills/_common/install.sh +0 -7
- package/skills/_common/installer.ts +0 -72
- package/skills/_common/skill-install.ts +0 -37
- package/skills/_common/vision.ts +0 -374
- package/skills/ad-creative-pack/SKILL.md +0 -55
- package/skills/ad-creative-pack/package.json +0 -10
- package/skills/analyze-data/CLAUDE.md +0 -16
- package/skills/analyze-data/SKILL.md +0 -112
- package/skills/analyze-data/package.json +0 -23
- package/skills/analyze-data/src/analysis.ts +0 -401
- package/skills/analyze-data/src/cli.ts +0 -66
- package/skills/analyze-data/src/formatters.ts +0 -235
- package/skills/analyze-data/src/index.ts +0 -74
- package/skills/analyze-data/src/logger.ts +0 -36
- package/skills/analyze-data/src/parsers.ts +0 -57
- package/skills/analyze-data/src/stats.ts +0 -151
- package/skills/analyze-data/src/types.ts +0 -85
- package/skills/analyze-data/tsconfig.json +0 -19
- package/skills/api-docs-portal/SKILL.md +0 -84
- package/skills/api-docs-portal/package.json +0 -35
- package/skills/api-docs-portal/src/index.ts +0 -919
- package/skills/api-docs-portal/tsconfig.json +0 -17
- package/skills/api-test-suite/CLAUDE.md +0 -19
- package/skills/api-test-suite/package.json +0 -27
- package/skills/api-test-suite/src/index.ts +0 -381
- package/skills/api-test-suite/tsconfig.json +0 -10
- package/skills/audio-extract/CLAUDE.md +0 -9
- package/skills/audio-extract/SKILL.md +0 -73
- package/skills/audio-extract/package.json +0 -23
- package/skills/audio-extract/src/index.ts +0 -323
- package/skills/audio-extract/tsconfig.json +0 -11
- package/skills/bio-sequence-tool/CLAUDE.md +0 -19
- package/skills/bio-sequence-tool/package.json +0 -27
- package/skills/bio-sequence-tool/src/index.ts +0 -85
- package/skills/bio-sequence-tool/tsconfig.json +0 -10
- package/skills/blog-article/CLAUDE.md +0 -12
- package/skills/blog-article/SKILL.md +0 -55
- package/skills/blog-article/package.json +0 -10
- package/skills/blog-article/tsconfig.json +0 -10
- package/skills/brand-assets/SKILL.md +0 -118
- package/skills/brand-assets/package.json +0 -35
- package/skills/brand-assets/src/cli.ts +0 -155
- package/skills/brand-assets/src/constants.ts +0 -8
- package/skills/brand-assets/src/extract.ts +0 -236
- package/skills/brand-assets/src/index.ts +0 -668
- package/skills/brand-assets/src/types.ts +0 -59
- package/skills/brand-assets/tsconfig.json +0 -17
- package/skills/brand-kit/SKILL.md +0 -54
- package/skills/brand-kit/package.json +0 -10
- package/skills/businessactivity/CLAUDE.md +0 -176
- package/skills/businessactivity/LICENSE +0 -192
- package/skills/businessactivity/README.md +0 -287
- package/skills/businessactivity/package.json +0 -25
- package/skills/businessactivity/scripts/publish.ts +0 -210
- package/skills/businessactivity/src/commands/activity.ts +0 -211
- package/skills/businessactivity/src/commands/function.ts +0 -227
- package/skills/businessactivity/src/commands/owner.ts +0 -193
- package/skills/businessactivity/src/commands/profile.ts +0 -121
- package/skills/businessactivity/src/commands/responsibility.ts +0 -264
- package/skills/businessactivity/src/commands/team.ts +0 -244
- package/skills/businessactivity/src/commands/workflow.ts +0 -359
- package/skills/businessactivity/src/index.ts +0 -3
- package/skills/businessactivity/src/lib/config.ts +0 -167
- package/skills/businessactivity/src/lib/output.ts +0 -76
- package/skills/businessactivity/src/lib/paths.ts +0 -79
- package/skills/businessactivity/src/lib/storage.ts +0 -95
- package/skills/businessactivity/src/types/index.ts +0 -86
- package/skills/businessactivity/tsconfig.json +0 -29
- package/skills/codefix/LICENSE +0 -192
- package/skills/codefix/README.md +0 -232
- package/skills/codefix/SKILL.md +0 -94
- package/skills/codefix/package.json +0 -21
- package/skills/codefix/src/fixers/batch.ts +0 -213
- package/skills/codefix/src/fixers/detector.ts +0 -160
- package/skills/codefix/src/fixers/index.ts +0 -7
- package/skills/codefix/src/fixers/runner.ts +0 -522
- package/skills/codefix/src/index-local.ts +0 -431
- package/skills/codefix/src/index.ts +0 -4
- package/skills/codefix/src/types.ts +0 -211
- package/skills/codefix/tsconfig.json +0 -15
- package/skills/commitpush/SKILL.md +0 -57
- package/skills/commitpush/package.json +0 -33
- package/skills/commitpush/src/index.ts +0 -34
- package/skills/commitpush/tsconfig.json +0 -17
- package/skills/commitpushpr/SKILL.md +0 -55
- package/skills/commitpushpr/package.json +0 -33
- package/skills/commitpushpr/src/index.ts +0 -34
- package/skills/commitpushpr/tsconfig.json +0 -17
- package/skills/compress-video/CLAUDE.md +0 -9
- package/skills/compress-video/SKILL.md +0 -79
- package/skills/compress-video/package.json +0 -23
- package/skills/compress-video/src/index.ts +0 -473
- package/skills/compress-video/tsconfig.json +0 -11
- package/skills/contract-review-report/SKILL.md +0 -52
- package/skills/contract-review-report/package.json +0 -10
- package/skills/customer-feedback-report/SKILL.md +0 -52
- package/skills/customer-feedback-report/package.json +0 -10
- package/skills/dashboard-builder/CLAUDE.md +0 -19
- package/skills/dashboard-builder/package.json +0 -29
- package/skills/dashboard-builder/src/index.ts +0 -150
- package/skills/dashboard-builder/tsconfig.json +0 -10
- package/skills/data-anonymizer/CLAUDE.md +0 -19
- package/skills/data-anonymizer/package.json +0 -27
- package/skills/data-anonymizer/src/index.ts +0 -183
- package/skills/data-anonymizer/tsconfig.json +0 -10
- package/skills/database-explorer/CLAUDE.md +0 -19
- package/skills/database-explorer/package.json +0 -29
- package/skills/database-explorer/src/index.ts +0 -95
- package/skills/database-explorer/tsconfig.json +0 -10
- package/skills/diff-viewer/CLAUDE.md +0 -19
- package/skills/diff-viewer/package.json +0 -30
- package/skills/diff-viewer/src/index.ts +0 -164
- package/skills/diff-viewer/tsconfig.json +0 -10
- package/skills/doc-read/SKILL.md +0 -45
- package/skills/doc-read/package.json +0 -29
- package/skills/doc-read/src/index.ts +0 -324
- package/skills/doc-read/tsconfig.json +0 -8
- package/skills/domainpurchase/LICENSE +0 -192
- package/skills/domainpurchase/SKILL.md +0 -29
- package/skills/domainpurchase/package.json +0 -30
- package/skills/domainpurchase/src/index.ts +0 -3
- package/skills/domainpurchase/tsconfig.json +0 -21
- package/skills/email-sequence/SKILL.md +0 -53
- package/skills/email-sequence/package.json +0 -10
- package/skills/experiment-power-calculator/CLAUDE.md +0 -19
- package/skills/experiment-power-calculator/package.json +0 -29
- package/skills/experiment-power-calculator/src/index.ts +0 -86
- package/skills/experiment-power-calculator/tsconfig.json +0 -10
- package/skills/extract-frames/CLAUDE.md +0 -19
- package/skills/extract-frames/package.json +0 -27
- package/skills/extract-frames/src/index.ts +0 -616
- package/skills/extract-frames/tsconfig.json +0 -10
- package/skills/file-organizer/CLAUDE.md +0 -19
- package/skills/file-organizer/package.json +0 -27
- package/skills/file-organizer/src/index.ts +0 -91
- package/skills/file-organizer/tsconfig.json +0 -10
- package/skills/folder-tree/CLAUDE.md +0 -19
- package/skills/folder-tree/package.json +0 -29
- package/skills/folder-tree/src/index.ts +0 -568
- package/skills/folder-tree/tsconfig.json +0 -10
- package/skills/form-filler/CLAUDE.md +0 -19
- package/skills/form-filler/package.json +0 -29
- package/skills/form-filler/src/index.ts +0 -81
- package/skills/form-filler/tsconfig.json +0 -10
- package/skills/generate-api-client/CLAUDE.md +0 -19
- package/skills/generate-api-client/package.json +0 -29
- package/skills/generate-api-client/src/generator.ts +0 -47
- package/skills/generate-api-client/src/index.ts +0 -92
- package/skills/generate-api-client/src/logger.ts +0 -34
- package/skills/generate-api-client/src/python-generator.ts +0 -245
- package/skills/generate-api-client/src/spec-loader.ts +0 -48
- package/skills/generate-api-client/src/type-mappers.ts +0 -79
- package/skills/generate-api-client/src/types.ts +0 -76
- package/skills/generate-api-client/src/typescript-generator.ts +0 -247
- package/skills/generate-api-client/tsconfig.json +0 -10
- package/skills/generate-chart/CLAUDE.md +0 -19
- package/skills/generate-chart/package.json +0 -27
- package/skills/generate-chart/src/index.ts +0 -510
- package/skills/generate-chart/tsconfig.json +0 -10
- package/skills/generate-dockerfile/CLAUDE.md +0 -19
- package/skills/generate-dockerfile/package.json +0 -27
- package/skills/generate-dockerfile/src/cli.ts +0 -78
- package/skills/generate-dockerfile/src/dockerfile-templates.ts +0 -392
- package/skills/generate-dockerfile/src/index.ts +0 -81
- package/skills/generate-dockerfile/src/logger.ts +0 -30
- package/skills/generate-dockerfile/src/project-detection.ts +0 -68
- package/skills/generate-dockerfile/src/support-files.ts +0 -171
- package/skills/generate-dockerfile/src/types.ts +0 -29
- package/skills/generate-dockerfile/tsconfig.json +0 -10
- package/skills/generate-env/CLAUDE.md +0 -19
- package/skills/generate-env/package.json +0 -29
- package/skills/generate-env/src/cli.ts +0 -85
- package/skills/generate-env/src/detection.ts +0 -161
- package/skills/generate-env/src/env-data.ts +0 -66
- package/skills/generate-env/src/generators.ts +0 -240
- package/skills/generate-env/src/index.ts +0 -120
- package/skills/generate-env/src/runtime.ts +0 -30
- package/skills/generate-env/src/types.ts +0 -32
- package/skills/generate-env/tsconfig.json +0 -10
- package/skills/generate-favicon/CLAUDE.md +0 -19
- package/skills/generate-favicon/package.json +0 -29
- package/skills/generate-favicon/src/index.ts +0 -421
- package/skills/generate-favicon/tsconfig.json +0 -10
- package/skills/generate-qrcode/CLAUDE.md +0 -19
- package/skills/generate-qrcode/package.json +0 -30
- package/skills/generate-qrcode/src/index.ts +0 -584
- package/skills/generate-qrcode/tsconfig.json +0 -10
- package/skills/generate-resume/CLAUDE.md +0 -19
- package/skills/generate-resume/package.json +0 -27
- package/skills/generate-resume/src/cli.ts +0 -157
- package/skills/generate-resume/src/index.ts +0 -178
- package/skills/generate-resume/src/parsers.ts +0 -95
- package/skills/generate-resume/src/renderers.ts +0 -538
- package/skills/generate-resume/src/security.ts +0 -39
- package/skills/generate-resume/src/types.ts +0 -86
- package/skills/generate-resume/tsconfig.json +0 -10
- package/skills/generate-sitemap/CLAUDE.md +0 -19
- package/skills/generate-sitemap/package.json +0 -27
- package/skills/generate-sitemap/src/index.ts +0 -626
- package/skills/generate-sitemap/tsconfig.json +0 -10
- package/skills/gif-maker/CLAUDE.md +0 -19
- package/skills/gif-maker/package.json +0 -30
- package/skills/gif-maker/src/index.ts +0 -600
- package/skills/gif-maker/tsconfig.json +0 -10
- package/skills/hook/LICENSE +0 -192
- package/skills/hook/README.md +0 -74
- package/skills/hook/SKILL.md +0 -85
- package/skills/hook/bunfig.toml +0 -5
- package/skills/hook/package.json +0 -28
- package/skills/hook/src/commands/create.ts +0 -112
- package/skills/hook/src/commands/events.ts +0 -37
- package/skills/hook/src/commands/validate.ts +0 -117
- package/skills/hook/src/index.ts +0 -118
- package/skills/hook/src/templates/root.ts +0 -196
- package/skills/hook/src/templates/source.ts +0 -647
- package/skills/hook/tsconfig.json +0 -18
- package/skills/http-server/CLAUDE.md +0 -19
- package/skills/http-server/package.json +0 -29
- package/skills/http-server/src/index.ts +0 -51
- package/skills/http-server/tsconfig.json +0 -10
- package/skills/implementation/LICENSE +0 -192
- package/skills/implementation/README.md +0 -53
- package/skills/implementation/SKILL.md +0 -57
- package/skills/implementation/bunfig.toml +0 -5
- package/skills/implementation/package.json +0 -28
- package/skills/implementation/src/commands/create.ts +0 -187
- package/skills/implementation/src/index.ts +0 -62
- package/skills/implementation/tsconfig.json +0 -18
- package/skills/implementation-plan/CLAUDE.md +0 -19
- package/skills/implementation-plan/package.json +0 -29
- package/skills/implementation-plan/src/index.ts +0 -520
- package/skills/implementation-plan/tsconfig.json +0 -10
- package/skills/implementation-todo/CLAUDE.md +0 -19
- package/skills/implementation-todo/package.json +0 -29
- package/skills/implementation-todo/src/index.ts +0 -429
- package/skills/implementation-todo/tsconfig.json +0 -10
- package/skills/invoice/.env.example +0 -3
- package/skills/invoice/CLAUDE.md +0 -31
- package/skills/invoice/LICENSE +0 -192
- package/skills/invoice/README.md +0 -70
- package/skills/invoice/package.json +0 -26
- package/skills/invoice/src/commands/companies.ts +0 -202
- package/skills/invoice/src/commands/config.ts +0 -132
- package/skills/invoice/src/commands/generate.ts +0 -177
- package/skills/invoice/src/commands/invoices.ts +0 -218
- package/skills/invoice/src/index.ts +0 -3
- package/skills/invoice/src/lib/api.ts +0 -124
- package/skills/invoice/src/lib/storage.ts +0 -171
- package/skills/invoice/src/types/index.ts +0 -86
- package/skills/invoice/src/utils/logger.ts +0 -33
- package/skills/invoice/src/utils/paths.ts +0 -25
- package/skills/invoice/tsconfig.json +0 -23
- package/skills/invoice-reconciliation/SKILL.md +0 -98
- package/skills/invoice-reconciliation/package.json +0 -36
- package/skills/invoice-reconciliation/src/index.ts +0 -743
- package/skills/invoice-reconciliation/tsconfig.json +0 -17
- package/skills/landing-page-pack/SKILL.md +0 -55
- package/skills/landing-page-pack/package.json +0 -10
- package/skills/latex-table-generator/CLAUDE.md +0 -19
- package/skills/latex-table-generator/package.json +0 -29
- package/skills/latex-table-generator/src/index.ts +0 -113
- package/skills/latex-table-generator/tsconfig.json +0 -10
- package/skills/logo-design/SKILL.md +0 -94
- package/skills/logo-design/package.json +0 -35
- package/skills/logo-design/src/cli.ts +0 -132
- package/skills/logo-design/src/constants.ts +0 -5
- package/skills/logo-design/src/docs.ts +0 -102
- package/skills/logo-design/src/geometry.ts +0 -324
- package/skills/logo-design/src/index.ts +0 -212
- package/skills/logo-design/src/palette.ts +0 -258
- package/skills/logo-design/src/types.ts +0 -50
- package/skills/logo-design/tsconfig.json +0 -17
- package/skills/lorem-generator/CLAUDE.md +0 -19
- package/skills/lorem-generator/package.json +0 -29
- package/skills/lorem-generator/src/index.ts +0 -59
- package/skills/lorem-generator/tsconfig.json +0 -10
- package/skills/managemcp/CLAUDE.md +0 -14
- package/skills/managemcp/README.md +0 -24
- package/skills/managemcp/package.json +0 -16
- package/skills/managemcp/src/index.ts +0 -3
- package/skills/managemcp/tsconfig.json +0 -27
- package/skills/markdown-validator/CLAUDE.md +0 -19
- package/skills/markdown-validator/package.json +0 -29
- package/skills/markdown-validator/src/index.ts +0 -92
- package/skills/markdown-validator/tsconfig.json +0 -10
- package/skills/market-research-report/SKILL.md +0 -51
- package/skills/market-research-report/package.json +0 -10
- package/skills/meeting-pack/SKILL.md +0 -52
- package/skills/meeting-pack/package.json +0 -10
- package/skills/merge-pdfs/CLAUDE.md +0 -19
- package/skills/merge-pdfs/package.json +0 -31
- package/skills/merge-pdfs/src/index.ts +0 -427
- package/skills/merge-pdfs/tsconfig.json +0 -10
- package/skills/migration-plan-pack/SKILL.md +0 -56
- package/skills/migration-plan-pack/package.json +0 -10
- package/skills/monitor/SKILL.md +0 -69
- package/skills/monitor/package.json +0 -33
- package/skills/monitor/src/index.ts +0 -34
- package/skills/monitor/tsconfig.json +0 -17
- package/skills/one-page-website/SKILL.md +0 -128
- package/skills/one-page-website/package.json +0 -34
- package/skills/one-page-website/src/design.ts +0 -336
- package/skills/one-page-website/src/docs.ts +0 -159
- package/skills/one-page-website/src/index.ts +0 -357
- package/skills/one-page-website/src/page.ts +0 -340
- package/skills/one-page-website/src/styles.ts +0 -508
- package/skills/one-page-website/src/types.ts +0 -78
- package/skills/one-page-website/tsconfig.json +0 -17
- package/skills/pdf-generate/CLAUDE.md +0 -19
- package/skills/pdf-generate/SKILL.md +0 -86
- package/skills/pdf-generate/package.json +0 -21
- package/skills/pdf-generate/src/cli.ts +0 -162
- package/skills/pdf-generate/src/html.ts +0 -84
- package/skills/pdf-generate/src/index.ts +0 -62
- package/skills/pdf-generate/src/markdown.ts +0 -27
- package/skills/pdf-generate/src/pdf-writer.ts +0 -78
- package/skills/pdf-generate/src/runtime.ts +0 -34
- package/skills/pdf-generate/src/security.ts +0 -37
- package/skills/pdf-generate/src/templates.ts +0 -311
- package/skills/pdf-generate/src/types.ts +0 -28
- package/skills/pdf-generate/tsconfig.json +0 -16
- package/skills/pdf-to-dataset/SKILL.md +0 -88
- package/skills/pdf-to-dataset/package.json +0 -37
- package/skills/pdf-to-dataset/src/index.ts +0 -790
- package/skills/pdf-to-dataset/tsconfig.json +0 -17
- package/skills/pdf-to-markdown/SKILL.md +0 -81
- package/skills/pdf-to-markdown/package.json +0 -35
- package/skills/pdf-to-markdown/src/index.ts +0 -694
- package/skills/pdf-to-markdown/tsconfig.json +0 -17
- package/skills/performance-audit-report/SKILL.md +0 -49
- package/skills/performance-audit-report/package.json +0 -10
- package/skills/pitch-deck/SKILL.md +0 -51
- package/skills/pitch-deck/package.json +0 -10
- package/skills/product-mockup/SKILL.md +0 -107
- package/skills/product-mockup/package.json +0 -32
- package/skills/product-mockup/src/cli.ts +0 -150
- package/skills/product-mockup/src/design.ts +0 -151
- package/skills/product-mockup/src/docs.ts +0 -134
- package/skills/product-mockup/src/index.ts +0 -182
- package/skills/product-mockup/src/render.ts +0 -407
- package/skills/product-mockup/src/types.ts +0 -66
- package/skills/product-mockup/tsconfig.json +0 -17
- package/skills/proposal-pack/SKILL.md +0 -53
- package/skills/proposal-pack/package.json +0 -10
- package/skills/read-csv/SKILL.md +0 -62
- package/skills/read-csv/package.json +0 -37
- package/skills/read-csv/src/index.ts +0 -356
- package/skills/read-csv/tsconfig.json +0 -17
- package/skills/read-excel/SKILL.md +0 -64
- package/skills/read-excel/package.json +0 -36
- package/skills/read-excel/src/index.ts +0 -266
- package/skills/read-excel/tsconfig.json +0 -17
- package/skills/regex-tester/CLAUDE.md +0 -19
- package/skills/regex-tester/package.json +0 -27
- package/skills/regex-tester/src/index.ts +0 -183
- package/skills/regex-tester/tsconfig.json +0 -10
- package/skills/repo-onboarding-report/SKILL.md +0 -52
- package/skills/repo-onboarding-report/package.json +0 -10
- package/skills/scancommitpr/SKILL.md +0 -178
- package/skills/scancommitpr/package.json +0 -34
- package/skills/scancommitpr/src/index.ts +0 -44
- package/skills/scancommitpr/tsconfig.json +0 -13
- package/skills/scancommitpush/SKILL.md +0 -174
- package/skills/scancommitpush/package.json +0 -32
- package/skills/scancommitpush/src/index.ts +0 -44
- package/skills/scancommitpush/tsconfig.json +0 -13
- package/skills/scientific-figure-check/CLAUDE.md +0 -19
- package/skills/scientific-figure-check/package.json +0 -29
- package/skills/scientific-figure-check/src/index.ts +0 -83
- package/skills/scientific-figure-check/tsconfig.json +0 -10
- package/skills/security-audit/CLAUDE.md +0 -19
- package/skills/security-audit/package.json +0 -27
- package/skills/security-audit/src/index.ts +0 -145
- package/skills/security-audit/tsconfig.json +0 -10
- package/skills/security-audit-report/SKILL.md +0 -52
- package/skills/security-audit-report/package.json +0 -10
- package/skills/seo-content-pack/SKILL.md +0 -54
- package/skills/seo-content-pack/package.json +0 -10
- package/skills/siteanalyze/SKILL.md +0 -25
- package/skills/siteanalyze/package.json +0 -27
- package/skills/siteanalyze/src/index.ts +0 -592
- package/skills/slide-deck-generator/SKILL.md +0 -93
- package/skills/slide-deck-generator/package.json +0 -38
- package/skills/slide-deck-generator/src/cli.ts +0 -133
- package/skills/slide-deck-generator/src/index.ts +0 -148
- package/skills/slide-deck-generator/src/model.ts +0 -307
- package/skills/slide-deck-generator/src/pptx.ts +0 -143
- package/skills/slide-deck-generator/src/render.ts +0 -248
- package/skills/slide-deck-generator/src/types.ts +0 -114
- package/skills/slide-deck-generator/src/utils.ts +0 -53
- package/skills/slide-deck-generator/tsconfig.json +0 -17
- package/skills/social-content-calendar/SKILL.md +0 -54
- package/skills/social-content-calendar/package.json +0 -10
- package/skills/split-pdf/CLAUDE.md +0 -19
- package/skills/split-pdf/package.json +0 -30
- package/skills/split-pdf/src/index.ts +0 -301
- package/skills/split-pdf/tsconfig.json +0 -10
- package/skills/statistical-test-selector/CLAUDE.md +0 -19
- package/skills/statistical-test-selector/package.json +0 -27
- package/skills/statistical-test-selector/src/index.ts +0 -75
- package/skills/statistical-test-selector/tsconfig.json +0 -10
- package/skills/test-suite-generator/SKILL.md +0 -51
- package/skills/test-suite-generator/package.json +0 -10
- package/skills/tmux-session/SKILL.md +0 -109
- package/skills/tmux-session/package.json +0 -33
- package/skills/tmux-session/src/index.ts +0 -34
- package/skills/tmux-session/tsconfig.json +0 -17
- package/skills/todos-plan/SKILL.md +0 -363
- package/skills/todos-plan/agents/openai.yaml +0 -4
- package/skills/todos-plan/package.json +0 -9
- package/skills/todos-plan/src/index.ts +0 -68
- package/skills/tsconfig.base.json +0 -12
- package/skills/validate-config/CLAUDE.md +0 -19
- package/skills/validate-config/package.json +0 -29
- package/skills/validate-config/src/index.ts +0 -56
- package/skills/validate-config/tsconfig.json +0 -10
- package/skills/video-downloader/CLAUDE.md +0 -19
- package/skills/video-downloader/package.json +0 -29
- package/skills/video-downloader/src/index.ts +0 -561
- package/skills/video-downloader/tsconfig.json +0 -10
- package/skills/video-highlight-pack/SKILL.md +0 -54
- package/skills/video-highlight-pack/package.json +0 -10
- package/skills/watermark/CLAUDE.md +0 -19
- package/skills/watermark/package.json +0 -32
- package/skills/watermark/src/index.ts +0 -587
- package/skills/watermark/tsconfig.json +0 -10
|
@@ -1,323 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bun
|
|
2
|
-
/**
|
|
3
|
-
* Extract Audio Skill
|
|
4
|
-
* Extracts audio from video files using FFmpeg
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import { parseArgs } from "util";
|
|
8
|
-
import { mkdirSync, appendFileSync, existsSync, statSync } from "fs";
|
|
9
|
-
import { join, dirname, basename, extname } from "path";
|
|
10
|
-
import { randomUUID } from "crypto";
|
|
11
|
-
import { spawn } from "child_process";
|
|
12
|
-
|
|
13
|
-
// Types
|
|
14
|
-
interface ExtractOptions {
|
|
15
|
-
inputFiles: string[];
|
|
16
|
-
format: "mp3" | "wav" | "aac" | "flac" | "ogg";
|
|
17
|
-
quality: "low" | "medium" | "high" | "ultra";
|
|
18
|
-
output?: string;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
interface BitrateConfig {
|
|
22
|
-
mp3: string;
|
|
23
|
-
aac: string;
|
|
24
|
-
wav: string;
|
|
25
|
-
flac: string;
|
|
26
|
-
ogg: string;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
// Constants
|
|
30
|
-
const SKILL_NAME = "extract-audio";
|
|
31
|
-
const SESSION_ID = randomUUID().slice(0, 8);
|
|
32
|
-
|
|
33
|
-
// Use SKILLS_OUTPUT_DIR from CLI if available, otherwise fall back to cwd
|
|
34
|
-
const SKILLS_OUTPUT_DIR = process.env.SKILLS_OUTPUT_DIR || join(process.cwd(), ".skills");
|
|
35
|
-
const EXPORTS_DIR = join(SKILLS_OUTPUT_DIR, "exports", SKILL_NAME);
|
|
36
|
-
const LOGS_DIR = join(SKILLS_OUTPUT_DIR, "logs", SKILL_NAME);
|
|
37
|
-
|
|
38
|
-
// Supported video formats
|
|
39
|
-
const SUPPORTED_VIDEO_FORMATS = [".mp4", ".mov", ".avi", ".mkv", ".webm", ".flv", ".wmv", ".m4v", ".3gp"];
|
|
40
|
-
|
|
41
|
-
// Bitrate configurations for different quality levels
|
|
42
|
-
const BITRATES: Record<ExtractOptions["quality"], BitrateConfig> = {
|
|
43
|
-
low: { mp3: "128k", aac: "96k", wav: "", flac: "", ogg: "64k" },
|
|
44
|
-
medium: { mp3: "192k", aac: "128k", wav: "", flac: "", ogg: "128k" },
|
|
45
|
-
high: { mp3: "256k", aac: "192k", wav: "", flac: "", ogg: "192k" },
|
|
46
|
-
ultra: { mp3: "320k", aac: "256k", wav: "", flac: "", ogg: "256k" },
|
|
47
|
-
};
|
|
48
|
-
|
|
49
|
-
// Ensure directories exist
|
|
50
|
-
function ensureDir(dir: string) {
|
|
51
|
-
if (!existsSync(dir)) {
|
|
52
|
-
mkdirSync(dir, { recursive: true });
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
// Session timestamp for log filename
|
|
57
|
-
const SESSION_TIMESTAMP = new Date().toISOString().replace(/[:.]/g, "_").replace(/-/g, "_").slice(0, 19).toLowerCase();
|
|
58
|
-
|
|
59
|
-
// Logger
|
|
60
|
-
function log(message: string, level: "info" | "error" | "success" = "info") {
|
|
61
|
-
const timestamp = new Date().toISOString();
|
|
62
|
-
const logFile = join(LOGS_DIR, `log_${SESSION_TIMESTAMP}_${SESSION_ID}.log`);
|
|
63
|
-
|
|
64
|
-
ensureDir(LOGS_DIR);
|
|
65
|
-
|
|
66
|
-
const logEntry = `[${timestamp}] [${level.toUpperCase()}] ${message}\n`;
|
|
67
|
-
appendFileSync(logFile, logEntry);
|
|
68
|
-
|
|
69
|
-
const prefix = level === "error" ? "❌" : level === "success" ? "✅" : "ℹ️";
|
|
70
|
-
if (level === "error") {
|
|
71
|
-
console.error(`${prefix} ${message}`);
|
|
72
|
-
} else {
|
|
73
|
-
console.log(`${prefix} ${message}`);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
// Check if FFmpeg is installed
|
|
78
|
-
async function checkFFmpeg(): Promise<boolean> {
|
|
79
|
-
return new Promise((resolve) => {
|
|
80
|
-
const process = spawn("ffmpeg", ["-version"]);
|
|
81
|
-
|
|
82
|
-
process.on("error", () => {
|
|
83
|
-
resolve(false);
|
|
84
|
-
});
|
|
85
|
-
|
|
86
|
-
process.on("close", (code) => {
|
|
87
|
-
resolve(code === 0);
|
|
88
|
-
});
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
// Validate input file
|
|
93
|
-
function validateInputFile(filePath: string): void {
|
|
94
|
-
if (!existsSync(filePath)) {
|
|
95
|
-
throw new Error(`Input file not found: ${filePath}`);
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
const stats = statSync(filePath);
|
|
99
|
-
if (!stats.isFile()) {
|
|
100
|
-
throw new Error(`Not a file: ${filePath}`);
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
const ext = extname(filePath).toLowerCase();
|
|
104
|
-
if (!SUPPORTED_VIDEO_FORMATS.includes(ext)) {
|
|
105
|
-
throw new Error(`Unsupported video format: ${ext}. Supported formats: ${SUPPORTED_VIDEO_FORMATS.join(", ")}`);
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
// Extract audio from video file
|
|
110
|
-
async function extractAudio(
|
|
111
|
-
inputFile: string,
|
|
112
|
-
outputFile: string,
|
|
113
|
-
options: ExtractOptions
|
|
114
|
-
): Promise<void> {
|
|
115
|
-
log(`Extracting audio from: ${inputFile}`);
|
|
116
|
-
log(`Output format: ${options.format}, Quality: ${options.quality}`);
|
|
117
|
-
|
|
118
|
-
const args: string[] = [
|
|
119
|
-
"-i", inputFile,
|
|
120
|
-
"-vn", // No video
|
|
121
|
-
];
|
|
122
|
-
|
|
123
|
-
// Add codec and bitrate based on format
|
|
124
|
-
const bitrate = BITRATES[options.quality][options.format];
|
|
125
|
-
|
|
126
|
-
switch (options.format) {
|
|
127
|
-
case "mp3":
|
|
128
|
-
args.push("-acodec", "libmp3lame");
|
|
129
|
-
if (bitrate) args.push("-b:a", bitrate);
|
|
130
|
-
break;
|
|
131
|
-
case "wav":
|
|
132
|
-
args.push("-acodec", "pcm_s16le");
|
|
133
|
-
break;
|
|
134
|
-
case "aac":
|
|
135
|
-
args.push("-acodec", "aac");
|
|
136
|
-
if (bitrate) args.push("-b:a", bitrate);
|
|
137
|
-
break;
|
|
138
|
-
case "flac":
|
|
139
|
-
args.push("-acodec", "flac");
|
|
140
|
-
break;
|
|
141
|
-
case "ogg":
|
|
142
|
-
args.push("-acodec", "libvorbis");
|
|
143
|
-
if (bitrate) args.push("-b:a", bitrate);
|
|
144
|
-
break;
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
args.push("-y"); // Overwrite output file
|
|
148
|
-
args.push(outputFile);
|
|
149
|
-
|
|
150
|
-
return new Promise((resolve, reject) => {
|
|
151
|
-
const ffmpeg = spawn("ffmpeg", args);
|
|
152
|
-
|
|
153
|
-
let stderr = "";
|
|
154
|
-
|
|
155
|
-
ffmpeg.stderr.on("data", (data) => {
|
|
156
|
-
stderr += data.toString();
|
|
157
|
-
});
|
|
158
|
-
|
|
159
|
-
ffmpeg.on("close", (code) => {
|
|
160
|
-
if (code === 0) {
|
|
161
|
-
log(`Successfully extracted audio to: ${outputFile}`, "success");
|
|
162
|
-
resolve();
|
|
163
|
-
} else {
|
|
164
|
-
log(`FFmpeg error: ${stderr}`, "error");
|
|
165
|
-
reject(new Error(`FFmpeg exited with code ${code}`));
|
|
166
|
-
}
|
|
167
|
-
});
|
|
168
|
-
|
|
169
|
-
ffmpeg.on("error", (error) => {
|
|
170
|
-
reject(new Error(`Failed to spawn FFmpeg: ${error.message}`));
|
|
171
|
-
});
|
|
172
|
-
});
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
// Generate output filename
|
|
176
|
-
function generateOutputFilename(inputFile: string, format: string): string {
|
|
177
|
-
const timestamp = new Date().toISOString().replace(/[:.]/g, "_").replace(/-/g, "_").slice(0, 19).toLowerCase();
|
|
178
|
-
const inputBasename = basename(inputFile, extname(inputFile));
|
|
179
|
-
return join(EXPORTS_DIR, `export_${timestamp}_${inputBasename}.${format}`);
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
// Main function
|
|
183
|
-
async function main() {
|
|
184
|
-
const { values, positionals } = parseArgs({
|
|
185
|
-
args: Bun.argv.slice(2),
|
|
186
|
-
options: {
|
|
187
|
-
format: { type: "string", default: "mp3" },
|
|
188
|
-
quality: { type: "string", default: "medium" },
|
|
189
|
-
output: { type: "string", short: "o" },
|
|
190
|
-
help: { type: "boolean", short: "h" },
|
|
191
|
-
},
|
|
192
|
-
allowPositionals: true,
|
|
193
|
-
});
|
|
194
|
-
|
|
195
|
-
// Show help
|
|
196
|
-
if (values.help || positionals.length === 0) {
|
|
197
|
-
console.log(`
|
|
198
|
-
Extract Audio - Extract audio from video files using FFmpeg
|
|
199
|
-
|
|
200
|
-
Usage:
|
|
201
|
-
bun run src/index.ts <video-file> [more-files...] [options]
|
|
202
|
-
|
|
203
|
-
Options:
|
|
204
|
-
--format <format> Output format (mp3, wav, aac, flac, ogg) [default: mp3]
|
|
205
|
-
--quality <quality> Quality level (low, medium, high, ultra) [default: medium]
|
|
206
|
-
--output, -o <path> Custom output path (single file only)
|
|
207
|
-
--help, -h Show this help
|
|
208
|
-
|
|
209
|
-
Quality Levels:
|
|
210
|
-
low - MP3: 128k, AAC: 96k (suitable for voice, podcasts)
|
|
211
|
-
medium - MP3: 192k, AAC: 128k (good balance)
|
|
212
|
-
high - MP3: 256k, AAC: 192k (high quality music)
|
|
213
|
-
ultra - MP3: 320k, AAC: 256k (maximum quality)
|
|
214
|
-
|
|
215
|
-
Supported Input Formats:
|
|
216
|
-
${SUPPORTED_VIDEO_FORMATS.join(", ")}
|
|
217
|
-
|
|
218
|
-
Examples:
|
|
219
|
-
bun run src/index.ts video.mp4
|
|
220
|
-
bun run src/index.ts video.mov --format wav --quality high
|
|
221
|
-
bun run src/index.ts video1.mp4 video2.mp4 video3.mp4
|
|
222
|
-
bun run src/index.ts interview.mp4 --output ./podcast.mp3
|
|
223
|
-
`);
|
|
224
|
-
process.exit(0);
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
// Validate format
|
|
228
|
-
const format = values.format?.toLowerCase() as ExtractOptions["format"];
|
|
229
|
-
const validFormats = ["mp3", "wav", "aac", "flac", "ogg"];
|
|
230
|
-
if (!validFormats.includes(format)) {
|
|
231
|
-
log(`Invalid format: ${format}. Valid formats: ${validFormats.join(", ")}`, "error");
|
|
232
|
-
process.exit(1);
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
// Validate quality
|
|
236
|
-
const quality = values.quality?.toLowerCase() as ExtractOptions["quality"];
|
|
237
|
-
const validQualities = ["low", "medium", "high", "ultra"];
|
|
238
|
-
if (!validQualities.includes(quality)) {
|
|
239
|
-
log(`Invalid quality: ${quality}. Valid qualities: ${validQualities.join(", ")}`, "error");
|
|
240
|
-
process.exit(1);
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
// Get input files
|
|
244
|
-
const inputFiles = positionals;
|
|
245
|
-
|
|
246
|
-
if (inputFiles.length === 0) {
|
|
247
|
-
log("Please provide at least one video file", "error");
|
|
248
|
-
process.exit(1);
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
// Check for custom output with multiple files
|
|
252
|
-
if (values.output && inputFiles.length > 1) {
|
|
253
|
-
log("Custom output path can only be used with a single input file", "error");
|
|
254
|
-
process.exit(1);
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
try {
|
|
258
|
-
log(`Session ID: ${SESSION_ID}`);
|
|
259
|
-
|
|
260
|
-
// Check if FFmpeg is installed
|
|
261
|
-
log("Checking for FFmpeg installation...");
|
|
262
|
-
const ffmpegInstalled = await checkFFmpeg();
|
|
263
|
-
|
|
264
|
-
if (!ffmpegInstalled) {
|
|
265
|
-
log("FFmpeg is not installed or not found in PATH", "error");
|
|
266
|
-
console.log(`
|
|
267
|
-
⚠️ FFmpeg is required but not found
|
|
268
|
-
|
|
269
|
-
Please install FFmpeg:
|
|
270
|
-
|
|
271
|
-
macOS:
|
|
272
|
-
brew install ffmpeg
|
|
273
|
-
|
|
274
|
-
Ubuntu/Debian:
|
|
275
|
-
sudo apt-get install ffmpeg
|
|
276
|
-
|
|
277
|
-
Windows:
|
|
278
|
-
Download from https://ffmpeg.org/download.html
|
|
279
|
-
`);
|
|
280
|
-
process.exit(1);
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
log("FFmpeg is installed", "success");
|
|
284
|
-
|
|
285
|
-
// Ensure export directory exists
|
|
286
|
-
ensureDir(EXPORTS_DIR);
|
|
287
|
-
|
|
288
|
-
// Validate all input files
|
|
289
|
-
for (const inputFile of inputFiles) {
|
|
290
|
-
validateInputFile(inputFile);
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
log(`Processing ${inputFiles.length} file(s)...`);
|
|
294
|
-
|
|
295
|
-
// Process each file
|
|
296
|
-
for (const inputFile of inputFiles) {
|
|
297
|
-
const outputFile = values.output || generateOutputFilename(inputFile, format);
|
|
298
|
-
|
|
299
|
-
// Ensure output directory exists
|
|
300
|
-
const outputDir = dirname(outputFile);
|
|
301
|
-
ensureDir(outputDir);
|
|
302
|
-
|
|
303
|
-
await extractAudio(inputFile, outputFile, {
|
|
304
|
-
inputFiles,
|
|
305
|
-
format,
|
|
306
|
-
quality,
|
|
307
|
-
output: values.output as string,
|
|
308
|
-
});
|
|
309
|
-
|
|
310
|
-
console.log(`\n✨ Audio extracted successfully!`);
|
|
311
|
-
console.log(` 📁 Input: ${inputFile}`);
|
|
312
|
-
console.log(` 🎵 Output: ${outputFile}`);
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
console.log(`\n 📋 Log: ${join(LOGS_DIR, `log_${SESSION_TIMESTAMP}_${SESSION_ID}.log`)}`);
|
|
316
|
-
|
|
317
|
-
} catch (error) {
|
|
318
|
-
log(`Error: ${error instanceof Error ? error.message : "Unknown error"}`, "error");
|
|
319
|
-
process.exit(1);
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
|
-
|
|
323
|
-
main();
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
# bio-sequence-tool
|
|
2
|
-
|
|
3
|
-
Bio Sequence Tool skill.
|
|
4
|
-
|
|
5
|
-
## Tech Stack
|
|
6
|
-
|
|
7
|
-
- Runtime: Bun
|
|
8
|
-
- Language: TypeScript
|
|
9
|
-
- CLI: Commander.js
|
|
10
|
-
|
|
11
|
-
## CLI
|
|
12
|
-
|
|
13
|
-
```bash
|
|
14
|
-
bio-sequence-tool run
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
## Data Directory
|
|
18
|
-
|
|
19
|
-
~/.skill/bio-sequence-tool/
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "bio-sequence-tool",
|
|
3
|
-
"version": "0.1.0",
|
|
4
|
-
"description": "Bio Sequence Tool skill",
|
|
5
|
-
"type": "module",
|
|
6
|
-
"bin": {
|
|
7
|
-
"bio-sequence-tool": "./src/index.ts"
|
|
8
|
-
},
|
|
9
|
-
"scripts": {
|
|
10
|
-
"dev": "bun run src/index.ts",
|
|
11
|
-
"build": "bun build src/index.ts --outdir dist --target node",
|
|
12
|
-
"typecheck": "tsc --noEmit"
|
|
13
|
-
},
|
|
14
|
-
"dependencies": {},
|
|
15
|
-
"devDependencies": {
|
|
16
|
-
"@types/bun": "latest",
|
|
17
|
-
"typescript": "^5.7.0"
|
|
18
|
-
},
|
|
19
|
-
"publishConfig": {
|
|
20
|
-
"access": "restricted",
|
|
21
|
-
"registry": "https://registry.npmjs.org/"
|
|
22
|
-
},
|
|
23
|
-
"files": [
|
|
24
|
-
"src",
|
|
25
|
-
"tsconfig.json"
|
|
26
|
-
]
|
|
27
|
-
}
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bun
|
|
2
|
-
import { parseArgs } from "util";
|
|
3
|
-
|
|
4
|
-
const { values, positionals } = parseArgs({
|
|
5
|
-
args: process.argv.slice(2),
|
|
6
|
-
options: {
|
|
7
|
-
mode: { type: "string", default: "reverse-complement" }, // reverse-complement, translate, gc-content
|
|
8
|
-
help: { type: "boolean" },
|
|
9
|
-
},
|
|
10
|
-
allowPositionals: true,
|
|
11
|
-
});
|
|
12
|
-
|
|
13
|
-
if (values.help || positionals.length === 0) {
|
|
14
|
-
console.log(`
|
|
15
|
-
Bio Sequence Tool
|
|
16
|
-
Usage: skills run bio-sequence-tool -- <sequence> [options]
|
|
17
|
-
|
|
18
|
-
Options:
|
|
19
|
-
--mode <mode> Operation mode: reverse-complement, translate, gc-content
|
|
20
|
-
`);
|
|
21
|
-
process.exit(0);
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
const sequence = positionals[0].toUpperCase().replace(/[^ATGCU]/g, "");
|
|
25
|
-
|
|
26
|
-
if (!sequence) {
|
|
27
|
-
console.error("Error: Invalid sequence provided.");
|
|
28
|
-
process.exit(1);
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
function reverseComplement(seq: string): string {
|
|
32
|
-
const map: Record<string, string> = { A: "T", T: "A", G: "C", C: "G", U: "A" };
|
|
33
|
-
return seq.split("").reverse().map(c => map[c] || c).join("");
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
function getGCContent(seq: string): number {
|
|
37
|
-
const gc = seq.split("").filter(c => c === "G" || c === "C").length;
|
|
38
|
-
return (gc / seq.length) * 100;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
function translate(seq: string): string {
|
|
42
|
-
// Basic codon table (DNA)
|
|
43
|
-
const codons: Record<string, string> = {
|
|
44
|
-
ATA: "I", ATC: "I", ATT: "I", ATG: "M",
|
|
45
|
-
ACA: "T", ACC: "T", ACG: "T", ACT: "T",
|
|
46
|
-
AAC: "N", AAT: "N", AAA: "K", AAG: "K",
|
|
47
|
-
AGC: "S", AGT: "S", AGA: "R", AGG: "R",
|
|
48
|
-
CTA: "L", CTC: "L", CTG: "L", CTT: "L",
|
|
49
|
-
CCA: "P", CCC: "P", CCG: "P", CCT: "P",
|
|
50
|
-
CAC: "H", CAT: "H", CAA: "Q", CAG: "Q",
|
|
51
|
-
CGA: "R", CGC: "R", CGG: "R", CGT: "R",
|
|
52
|
-
GTA: "V", GTC: "V", GTG: "V", GTT: "V",
|
|
53
|
-
GCA: "A", GCC: "A", GCG: "A", GCT: "A",
|
|
54
|
-
GAC: "D", GAT: "D", GAA: "E", GAG: "E",
|
|
55
|
-
GGA: "G", GGC: "G", GGG: "G", GGT: "G",
|
|
56
|
-
TCA: "S", TCC: "S", TCG: "S", TCT: "S",
|
|
57
|
-
TTC: "F", TTT: "F", TTA: "L", TTG: "L",
|
|
58
|
-
TAC: "Y", TAT: "Y", TAA: "_", TAG: "_",
|
|
59
|
-
TGC: "C", TGT: "C", TGA: "_", TGG: "W",
|
|
60
|
-
};
|
|
61
|
-
|
|
62
|
-
let protein = "";
|
|
63
|
-
for (let i = 0; i < seq.length; i += 3) {
|
|
64
|
-
const codon = seq.substr(i, 3);
|
|
65
|
-
if (codon.length === 3) {
|
|
66
|
-
protein += codons[codon] || "?";
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
return protein;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
switch (values.mode) {
|
|
73
|
-
case "reverse-complement":
|
|
74
|
-
console.log(reverseComplement(sequence));
|
|
75
|
-
break;
|
|
76
|
-
case "translate":
|
|
77
|
-
console.log(translate(sequence.replace(/U/g, "T"))); // Treat as DNA for simplicity
|
|
78
|
-
break;
|
|
79
|
-
case "gc-content":
|
|
80
|
-
console.log(`${getGCContent(sequence).toFixed(2)}%`);
|
|
81
|
-
break;
|
|
82
|
-
default:
|
|
83
|
-
console.error(`Unknown mode: ${values.mode}`);
|
|
84
|
-
process.exit(1);
|
|
85
|
-
}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
# blog-article
|
|
2
|
-
|
|
3
|
-
Generate one or more SEO-ready blog article packages through the hosted Skills runtime.
|
|
4
|
-
|
|
5
|
-
Use via:
|
|
6
|
-
|
|
7
|
-
```bash
|
|
8
|
-
skills quote create-blog-article --count 8 --topic "SaaS onboarding"
|
|
9
|
-
skills run create-blog-article --count 8 --topic "SaaS onboarding" --audience "founders" --length long --seo
|
|
10
|
-
```
|
|
11
|
-
|
|
12
|
-
Hosted runs write Markdown, HTML, JSON, and manifest artifacts to the run export directory.
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: blog-article
|
|
3
|
-
description: Generate one or more SEO-ready blog article packages as hosted artifacts.
|
|
4
|
-
kind: instruction
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Blog Article
|
|
8
|
-
|
|
9
|
-
Generate blog articles as downloadable Markdown, HTML, JSON, and manifest artifacts.
|
|
10
|
-
|
|
11
|
-
## Requirements
|
|
12
|
-
|
|
13
|
-
None. This is an instruction skill: it is prose an agent follows, so it needs no
|
|
14
|
-
credentials, no network access, and no local runtime.
|
|
15
|
-
|
|
16
|
-
## Usage
|
|
17
|
-
|
|
18
|
-
Ask an agent for the deliverables below and give it the inputs. Reading this file
|
|
19
|
-
IS the invocation; `skills run` refuses instruction skills on purpose.
|
|
20
|
-
|
|
21
|
-
## Inputs
|
|
22
|
-
|
|
23
|
-
| Input | Description | Default |
|
|
24
|
-
|--------|-------------|---------|
|
|
25
|
-
| `topic` | Topic or theme. Positional text also works. | required |
|
|
26
|
-
| `audience` | Intended reader or buyer persona. | |
|
|
27
|
-
| `count` | Number of articles to generate, 1-12. | 1 |
|
|
28
|
-
| `articles` | Alias for `--count`. | |
|
|
29
|
-
| `tone` | `professional`, `casual`, `technical`, or `friendly`. | professional |
|
|
30
|
-
| `length` | `short`, `medium`, or `long`. | medium |
|
|
31
|
-
| `seo` | Include SEO metadata and keyword-oriented structure. | false |
|
|
32
|
-
| `outline` | Optional outline, angles, or required sections. | |
|
|
33
|
-
|
|
34
|
-
## Deliverables
|
|
35
|
-
|
|
36
|
-
- `manifest.json` using the `skills.blogArticle.outputs.v1` contract
|
|
37
|
-
- For a single article: `article.md`, `article.html`, `article.json`
|
|
38
|
-
- For batch runs: `article-XX-<slug>/article.md`, `article.html`, `article.json`
|
|
39
|
-
|
|
40
|
-
`manifest.json` includes the run id, prompt, sanitized input options, requested tone/length/SEO settings, receipt cost, and an `articles` array. Each article entry includes `title`, `slug`, `summary`, `keywords`, optional `featuredImage`, word count, reading time, and relative file paths.
|
|
41
|
-
|
|
42
|
-
## Method
|
|
43
|
-
|
|
44
|
-
1. Confirm topic, audience and search intent before writing. If the topic is
|
|
45
|
-
ambiguous, state the interpretation you chose.
|
|
46
|
-
2. Outline first: H2/H3 skeleton with one sentence of intent per section. Get the
|
|
47
|
-
shape right before producing prose.
|
|
48
|
-
3. Write the draft to the requested length and tone. Lead with the answer; do not
|
|
49
|
-
warm up for three paragraphs.
|
|
50
|
-
4. Support claims with specifics — numbers, examples, named tools. Remove any
|
|
51
|
-
sentence that would survive unchanged in an article about something else.
|
|
52
|
-
5. If SEO is requested, add title, meta description, slug and internal-link
|
|
53
|
-
suggestions as a separate block, never by stuffing the body.
|
|
54
|
-
6. Finish with a self-edit pass: cut hedging, merge duplicate points, verify every
|
|
55
|
-
factual claim you cannot source is marked as an assumption.
|
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: brand-assets
|
|
3
|
-
description: Extract brand assets from a website you name — icons, social preview images, logo images, inline SVG marks, theme colors, CSS color tokens, and font stacks — downloaded into a folder with full source provenance. Use when a user asks to find, extract, download, or package a site's logo and visual identity.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Brand Assets
|
|
7
|
-
|
|
8
|
-
Point this at a URL. It fetches that page over plain HTTP, parses the markup and
|
|
9
|
-
the stylesheets it links, and pulls out the brand's icons, social images, logo
|
|
10
|
-
images, colors, and typography. Everything downloaded is recorded against the
|
|
11
|
-
exact URL it came from.
|
|
12
|
-
|
|
13
|
-
The only hosts contacted are the one you name and whatever that page links its
|
|
14
|
-
own assets from. There is no search API, no AI service, and no key of any kind.
|
|
15
|
-
|
|
16
|
-
## Requirements
|
|
17
|
-
|
|
18
|
-
- Bun (the skill runs as `bun run src/index.ts`).
|
|
19
|
-
- Outbound HTTP access to the site you pass. Nothing else.
|
|
20
|
-
- No API keys and no environment variables.
|
|
21
|
-
- One runtime dependency: `node-html-parser`. Run `bun install` in this skill
|
|
22
|
-
directory. If it is missing you get
|
|
23
|
-
`Missing dependency 'node-html-parser'. Run bun install in this skill directory.`
|
|
24
|
-
|
|
25
|
-
`--url` is **required**. There is no brand-name search fallback — omitting it
|
|
26
|
-
fails immediately and names the flag.
|
|
27
|
-
|
|
28
|
-
## Usage
|
|
29
|
-
|
|
30
|
-
```bash
|
|
31
|
-
# the normal case
|
|
32
|
-
skills run brand-assets -- --url https://example.com
|
|
33
|
-
|
|
34
|
-
# positional URL, custom destination and timeout
|
|
35
|
-
skills run brand-assets -- https://example.com --output ./out/example --timeout 30000
|
|
36
|
-
|
|
37
|
-
# inspect without downloading any binaries
|
|
38
|
-
skills run brand-assets -- --url https://example.com --no-download
|
|
39
|
-
|
|
40
|
-
# machine-readable profile on stdout
|
|
41
|
-
skills run brand-assets -- --url https://example.com --json
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
Run it directly from the skill directory with `bun run src/index.ts --help`.
|
|
45
|
-
|
|
46
|
-
## Options
|
|
47
|
-
|
|
48
|
-
| Option | Description | Default |
|
|
49
|
-
|--------|-------------|---------|
|
|
50
|
-
| `--url <url>`, `-u` | Website to inspect. A bare hostname is upgraded to `https://`. A positional URL also works. | **required** |
|
|
51
|
-
| `--output <dir>`, `-o` | Output directory. | `./brand-assets` |
|
|
52
|
-
| `--timeout <ms>`, `-t` | Per-request timeout, 500–300000. Applies to the page, each stylesheet, and each asset. | `15000` |
|
|
53
|
-
| `--max-assets <n>` | Cap on downloaded assets, 0–200. Anything beyond is listed as `skipped`. | `20` |
|
|
54
|
-
| `--no-download` | Discover and report only; fetch no binaries. | off |
|
|
55
|
-
| `--json` | Print the full profile as JSON on stdout. | off |
|
|
56
|
-
| `--help` | Show help and exit 0. | |
|
|
57
|
-
| `--version` | Print the version. | |
|
|
58
|
-
|
|
59
|
-
## What is discovered
|
|
60
|
-
|
|
61
|
-
| Source | What is taken |
|
|
62
|
-
|--------|---------------|
|
|
63
|
-
| `<link rel="icon">`, `shortcut icon`, `apple-touch-icon`, `mask-icon` | Favicons and touch icons, with their `sizes` and `type` |
|
|
64
|
-
| `<link rel="manifest">` | The web app manifest: `name`, `short_name`, `theme_color`, `background_color`, and every declared icon |
|
|
65
|
-
| `<meta property="og:image">`, `<meta name="twitter:image">` | Social preview images |
|
|
66
|
-
| `<meta name="theme-color">` | Brand color, including per-`media` light/dark variants |
|
|
67
|
-
| `<img>` whose `src`, `alt`, `class`, or `id` matches logo / wordmark / brandmark / brand | Logo images |
|
|
68
|
-
| Inline `<svg>` inside `header`, `nav`, links, or logo-classed elements | Up to three inline marks, saved as standalone SVG files |
|
|
69
|
-
| Inline `<style>`, `style=` attributes, and up to 6 linked stylesheets | CSS custom properties whose name mentions color / brand / accent / primary / bg / fg / surface / theme, plus ordinary `color`, `background`, `fill`, and `stroke` declarations |
|
|
70
|
-
| The same CSS | `font-family` declarations and font-related custom properties |
|
|
71
|
-
|
|
72
|
-
If the page declares no icon at all, `/favicon.ico` is tried as a conventional
|
|
73
|
-
fallback and reported honestly if it 404s.
|
|
74
|
-
|
|
75
|
-
### How colors are ranked
|
|
76
|
-
|
|
77
|
-
`<meta>` and web app manifest colors first, then hand-authored CSS custom
|
|
78
|
-
properties, then ordinary declarations. Utility-framework plumbing (`--tw-*` and
|
|
79
|
-
friends) is deliberately demoted so real brand tokens surface first. Every entry
|
|
80
|
-
records how many times it was seen and every source it appeared in. The palette
|
|
81
|
-
is capped at 48 distinct colors.
|
|
82
|
-
|
|
83
|
-
## Outputs
|
|
84
|
-
|
|
85
|
-
| File | Contents |
|
|
86
|
-
|------|----------|
|
|
87
|
-
| `assets/` | Every downloaded file, named `<role>-<original-name>.<ext>` — e.g. `icon-favicon-32x32.png`, `logo-img-wordmark.svg`, `inline-logo-01.svg`. |
|
|
88
|
-
| `brand-profile.json` | Everything discovered: metadata, assets with status, palette, typography, stylesheet results, counts. |
|
|
89
|
-
| `brand-profile.md` | The same profile as a readable summary with asset, palette, and typography tables. |
|
|
90
|
-
| `palette.json` | Every color: hex, how it was declared, which properties carried it, its kind, occurrence count, and every source. |
|
|
91
|
-
| `typography.md` | Each font stack with its full fallback chain, source, and notes on reproducing the type without the font binaries. |
|
|
92
|
-
| `sources.json` | The provenance map: downloaded file → source URL, status, content type, byte size, plus per-stylesheet fetch results. |
|
|
93
|
-
| `manifest.json` | Every file written, with byte sizes and the run inputs. |
|
|
94
|
-
|
|
95
|
-
Webfont binaries are never downloaded — licenses almost never permit
|
|
96
|
-
redistributing them. `typography.md` gives you the stacks instead.
|
|
97
|
-
|
|
98
|
-
## Failure behaviour
|
|
99
|
-
|
|
100
|
-
Exit code 1 with a single clear line on stderr for each of:
|
|
101
|
-
|
|
102
|
-
- `--url` missing — names the flag and shows an example.
|
|
103
|
-
- A value that is not an http(s) URL.
|
|
104
|
-
- DNS or connection failure.
|
|
105
|
-
- A timeout — the message tells you to raise `--timeout`.
|
|
106
|
-
- A non-200 response — the status code is included.
|
|
107
|
-
- A response whose content type is not HTML — the actual content type is quoted.
|
|
108
|
-
|
|
109
|
-
Failures *below* the page level are not fatal: a 404 favicon, an unreachable
|
|
110
|
-
stylesheet, or a malformed manifest is recorded with its status in
|
|
111
|
-
`sources.json` and `brand-profile.md`, and the run still completes.
|
|
112
|
-
|
|
113
|
-
## Provenance and reuse
|
|
114
|
-
|
|
115
|
-
These are someone else's trademarks. `sources.json` exists so you can prove where
|
|
116
|
-
each file came from. Confirm you have the right to use an asset before you ship
|
|
117
|
-
it, and check the site's own brand or press page for official guidelines and
|
|
118
|
-
higher-resolution originals.
|