@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,473 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bun
|
|
2
|
-
|
|
3
|
-
import { parseArgs } from "util";
|
|
4
|
-
import { existsSync, statSync, mkdirSync, appendFileSync } from "fs";
|
|
5
|
-
import { join, dirname, basename, extname } from "path";
|
|
6
|
-
import { exec } from "child_process";
|
|
7
|
-
import { promisify } from "util";
|
|
8
|
-
import { randomUUID } from "crypto";
|
|
9
|
-
|
|
10
|
-
const execAsync = promisify(exec);
|
|
11
|
-
|
|
12
|
-
// Constants
|
|
13
|
-
const SKILL_NAME = "compress-video";
|
|
14
|
-
const SESSION_ID = randomUUID().slice(0, 8);
|
|
15
|
-
const SKILLS_OUTPUT_DIR = process.env.SKILLS_OUTPUT_DIR || join(process.cwd(), ".skills");
|
|
16
|
-
const LOGS_DIR = join(SKILLS_OUTPUT_DIR, "logs", SKILL_NAME);
|
|
17
|
-
const SESSION_TIMESTAMP = new Date().toISOString().replace(/[:.]/g, "_").slice(0, 19);
|
|
18
|
-
|
|
19
|
-
// Ensure directories exist
|
|
20
|
-
function ensureDir(dir: string) {
|
|
21
|
-
if (!existsSync(dir)) {
|
|
22
|
-
mkdirSync(dir, { recursive: true });
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
// Logger
|
|
27
|
-
function log(message: string, level: "info" | "error" | "success" | "debug" = "info") {
|
|
28
|
-
ensureDir(LOGS_DIR);
|
|
29
|
-
const timestamp = new Date().toISOString();
|
|
30
|
-
const logFile = join(LOGS_DIR, `log_${SESSION_TIMESTAMP}_${SESSION_ID}.log`);
|
|
31
|
-
const logEntry = `[${timestamp}] [${level.toUpperCase()}] ${message}\n`;
|
|
32
|
-
appendFileSync(logFile, logEntry);
|
|
33
|
-
|
|
34
|
-
const prefix = level === "error" ? "❌" : level === "success" ? "✅" : level === "debug" ? "🔍" : "ℹ️";
|
|
35
|
-
if (level === "error") {
|
|
36
|
-
console.error(`${prefix} ${message}`);
|
|
37
|
-
} else if (level !== "debug") {
|
|
38
|
-
console.log(`${prefix} ${message}`);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
interface CompressionPreset {
|
|
43
|
-
crf: number;
|
|
44
|
-
codec: string;
|
|
45
|
-
resolution?: string;
|
|
46
|
-
audioBitrate: number;
|
|
47
|
-
description: string;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
const PRESETS: Record<string, CompressionPreset> = {
|
|
51
|
-
web: {
|
|
52
|
-
crf: 23,
|
|
53
|
-
codec: "h264",
|
|
54
|
-
audioBitrate: 128,
|
|
55
|
-
description: "Balanced for web streaming",
|
|
56
|
-
},
|
|
57
|
-
mobile: {
|
|
58
|
-
crf: 28,
|
|
59
|
-
codec: "h264",
|
|
60
|
-
resolution: "720p",
|
|
61
|
-
audioBitrate: 96,
|
|
62
|
-
description: "Optimized for mobile devices",
|
|
63
|
-
},
|
|
64
|
-
archive: {
|
|
65
|
-
crf: 30,
|
|
66
|
-
codec: "hevc",
|
|
67
|
-
audioBitrate: 96,
|
|
68
|
-
description: "Maximum compression for archival",
|
|
69
|
-
},
|
|
70
|
-
"high-quality": {
|
|
71
|
-
crf: 18,
|
|
72
|
-
codec: "h264",
|
|
73
|
-
audioBitrate: 192,
|
|
74
|
-
description: "Minimal quality loss",
|
|
75
|
-
},
|
|
76
|
-
};
|
|
77
|
-
|
|
78
|
-
const RESOLUTIONS: Record<string, string> = {
|
|
79
|
-
"1080p": "1920:1080",
|
|
80
|
-
"720p": "1280:720",
|
|
81
|
-
"480p": "854:480",
|
|
82
|
-
"360p": "640:360",
|
|
83
|
-
};
|
|
84
|
-
|
|
85
|
-
const CODECS: Record<string, { encoder: string; extension: string }> = {
|
|
86
|
-
h264: { encoder: "libx264", extension: ".mp4" },
|
|
87
|
-
hevc: { encoder: "libx265", extension: ".mp4" },
|
|
88
|
-
vp9: { encoder: "libvpx-vp9", extension: ".webm" },
|
|
89
|
-
};
|
|
90
|
-
|
|
91
|
-
interface CompressOptions {
|
|
92
|
-
preset: string;
|
|
93
|
-
crf?: number;
|
|
94
|
-
targetSize?: number;
|
|
95
|
-
resolution: string;
|
|
96
|
-
codec: string;
|
|
97
|
-
audioBitrate: number;
|
|
98
|
-
noAudio: boolean;
|
|
99
|
-
output: string;
|
|
100
|
-
suffix: string;
|
|
101
|
-
overwrite: boolean;
|
|
102
|
-
stats: boolean;
|
|
103
|
-
verbose: boolean;
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
interface CompressionResult {
|
|
107
|
-
inputFile: string;
|
|
108
|
-
outputFile: string;
|
|
109
|
-
originalSize: number;
|
|
110
|
-
compressedSize: number;
|
|
111
|
-
compressionRatio: number;
|
|
112
|
-
success: boolean;
|
|
113
|
-
error?: string;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
async function checkFFmpeg(): Promise<boolean> {
|
|
117
|
-
try {
|
|
118
|
-
await execAsync("ffmpeg -version");
|
|
119
|
-
return true;
|
|
120
|
-
} catch {
|
|
121
|
-
return false;
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
async function getVideoInfo(
|
|
126
|
-
file: string
|
|
127
|
-
): Promise<{ duration: number; bitrate: number; width: number; height: number }> {
|
|
128
|
-
const cmd = `ffprobe -v error -show_entries format=duration,bit_rate -show_entries stream=width,height -of json "${file}"`;
|
|
129
|
-
const { stdout } = await execAsync(cmd);
|
|
130
|
-
const info = JSON.parse(stdout);
|
|
131
|
-
|
|
132
|
-
return {
|
|
133
|
-
duration: parseFloat(info.format.duration || 0),
|
|
134
|
-
bitrate: parseInt(info.format.bit_rate || 0),
|
|
135
|
-
width: info.streams[0]?.width || 0,
|
|
136
|
-
height: info.streams[0]?.height || 0,
|
|
137
|
-
};
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
function calculateBitrateForTargetSize(
|
|
141
|
-
targetSizeMB: number,
|
|
142
|
-
durationSeconds: number,
|
|
143
|
-
audioBitrate: number
|
|
144
|
-
): number {
|
|
145
|
-
// Convert MB to bits
|
|
146
|
-
const targetSizeBits = targetSizeMB * 8 * 1024 * 1024;
|
|
147
|
-
// Calculate total bitrate needed
|
|
148
|
-
const totalBitrate = targetSizeBits / durationSeconds;
|
|
149
|
-
// Subtract audio bitrate to get video bitrate
|
|
150
|
-
const videoBitrate = totalBitrate - audioBitrate * 1000;
|
|
151
|
-
return Math.max(Math.floor(videoBitrate / 1000), 100); // Return kbps, min 100
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
function formatBytes(bytes: number): string {
|
|
155
|
-
if (bytes < 1024) return bytes + " B";
|
|
156
|
-
if (bytes < 1024 * 1024) return (bytes / 1024).toFixed(1) + " KB";
|
|
157
|
-
if (bytes < 1024 * 1024 * 1024) return (bytes / (1024 * 1024)).toFixed(1) + " MB";
|
|
158
|
-
return (bytes / (1024 * 1024 * 1024)).toFixed(1) + " GB";
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
async function compressVideo(
|
|
162
|
-
inputFile: string,
|
|
163
|
-
options: CompressOptions
|
|
164
|
-
): Promise<CompressionResult> {
|
|
165
|
-
try {
|
|
166
|
-
// Validate input file
|
|
167
|
-
if (!existsSync(inputFile)) {
|
|
168
|
-
throw new Error(`Input file not found: ${inputFile}`);
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
// Get preset settings
|
|
172
|
-
const preset = PRESETS[options.preset];
|
|
173
|
-
const crf = options.crf ?? preset.crf;
|
|
174
|
-
const codec = CODECS[options.codec];
|
|
175
|
-
const audioBitrate = options.audioBitrate ?? preset.audioBitrate;
|
|
176
|
-
|
|
177
|
-
// Get video info
|
|
178
|
-
const videoInfo = await getVideoInfo(inputFile);
|
|
179
|
-
|
|
180
|
-
// Determine output path
|
|
181
|
-
const inputDir = dirname(inputFile);
|
|
182
|
-
const inputBase = basename(inputFile, extname(inputFile));
|
|
183
|
-
const outputDir = options.output || inputDir;
|
|
184
|
-
const outputExt = codec.extension;
|
|
185
|
-
const outputFile = join(outputDir, `${inputBase}${options.suffix}${outputExt}`);
|
|
186
|
-
|
|
187
|
-
// Create output directory if needed
|
|
188
|
-
if (!existsSync(outputDir)) {
|
|
189
|
-
mkdirSync(outputDir, { recursive: true });
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
// Check if output exists
|
|
193
|
-
if (existsSync(outputFile) && !options.overwrite) {
|
|
194
|
-
throw new Error(
|
|
195
|
-
`Output file already exists: ${outputFile}. Use --overwrite to replace.`
|
|
196
|
-
);
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
// Build FFmpeg command
|
|
200
|
-
let cmd = `ffmpeg -i "${inputFile}" -c:v ${codec.encoder}`;
|
|
201
|
-
|
|
202
|
-
// Video encoding settings
|
|
203
|
-
if (options.targetSize) {
|
|
204
|
-
// Calculate bitrate for target size
|
|
205
|
-
const videoBitrate = calculateBitrateForTargetSize(
|
|
206
|
-
options.targetSize,
|
|
207
|
-
videoInfo.duration,
|
|
208
|
-
audioBitrate
|
|
209
|
-
);
|
|
210
|
-
cmd += ` -b:v ${videoBitrate}k -maxrate ${videoBitrate * 1.5}k -bufsize ${videoBitrate * 2}k`;
|
|
211
|
-
// Two-pass encoding for better quality at target size
|
|
212
|
-
cmd += " -pass 1 -an -f null /dev/null && ";
|
|
213
|
-
cmd += `ffmpeg -i "${inputFile}" -c:v ${codec.encoder}`;
|
|
214
|
-
cmd += ` -b:v ${videoBitrate}k -maxrate ${videoBitrate * 1.5}k -bufsize ${videoBitrate * 2}k`;
|
|
215
|
-
cmd += " -pass 2";
|
|
216
|
-
} else {
|
|
217
|
-
// CRF-based encoding
|
|
218
|
-
cmd += ` -crf ${crf}`;
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
// Resolution scaling
|
|
222
|
-
if (options.resolution !== "original") {
|
|
223
|
-
const resolution = RESOLUTIONS[options.resolution] || options.resolution;
|
|
224
|
-
cmd += ` -vf scale=${resolution}:force_original_aspect_ratio=decrease`;
|
|
225
|
-
} else if (preset.resolution && options.resolution === "original") {
|
|
226
|
-
// Use preset resolution if no custom resolution specified
|
|
227
|
-
const resolution = RESOLUTIONS[preset.resolution];
|
|
228
|
-
if (resolution) {
|
|
229
|
-
cmd += ` -vf scale=${resolution}:force_original_aspect_ratio=decrease`;
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
// Audio settings
|
|
234
|
-
if (options.noAudio) {
|
|
235
|
-
cmd += " -an";
|
|
236
|
-
} else {
|
|
237
|
-
const audioCodec = codec.extension === ".webm" ? "libopus" : "aac";
|
|
238
|
-
cmd += ` -c:a ${audioCodec} -b:a ${audioBitrate}k`;
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
// Preset and optimization
|
|
242
|
-
if (options.codec === "h264" || options.codec === "hevc") {
|
|
243
|
-
cmd += " -preset medium";
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
// Overwrite flag
|
|
247
|
-
if (options.overwrite) {
|
|
248
|
-
cmd += " -y";
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
// Output file
|
|
252
|
-
cmd += ` "${outputFile}"`;
|
|
253
|
-
|
|
254
|
-
// Add error output suppression unless verbose
|
|
255
|
-
if (!options.verbose) {
|
|
256
|
-
cmd += " 2>&1 | grep -E 'time=|error|Error|failed|Failed' || true";
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
// Show compression details
|
|
260
|
-
log(`Processing: ${basename(inputFile)}`);
|
|
261
|
-
log(` Preset: ${options.preset}`, "debug");
|
|
262
|
-
log(` Codec: ${options.codec.toUpperCase()}`, "debug");
|
|
263
|
-
log(
|
|
264
|
-
` Resolution: ${videoInfo.width}x${videoInfo.height}${options.resolution !== "original" ? ` → ${options.resolution}` : ""}`, "debug"
|
|
265
|
-
);
|
|
266
|
-
if (options.targetSize) {
|
|
267
|
-
log(` Target Size: ${options.targetSize} MB`, "debug");
|
|
268
|
-
} else {
|
|
269
|
-
log(` CRF: ${crf}`, "debug");
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
// Execute compression
|
|
273
|
-
const startTime = Date.now();
|
|
274
|
-
await execAsync(cmd, { maxBuffer: 1024 * 1024 * 10 });
|
|
275
|
-
const endTime = Date.now();
|
|
276
|
-
|
|
277
|
-
// Get file sizes
|
|
278
|
-
const originalSize = statSync(inputFile).size;
|
|
279
|
-
const compressedSize = statSync(outputFile).size;
|
|
280
|
-
const compressionRatio = ((originalSize - compressedSize) / originalSize) * 100;
|
|
281
|
-
|
|
282
|
-
log(`✓ ${basename(outputFile)}`, "success");
|
|
283
|
-
log(` Time: ${((endTime - startTime) / 1000).toFixed(1)}s`, "debug");
|
|
284
|
-
|
|
285
|
-
return {
|
|
286
|
-
inputFile,
|
|
287
|
-
outputFile,
|
|
288
|
-
originalSize,
|
|
289
|
-
compressedSize,
|
|
290
|
-
compressionRatio,
|
|
291
|
-
success: true,
|
|
292
|
-
};
|
|
293
|
-
} catch (error) {
|
|
294
|
-
return {
|
|
295
|
-
inputFile,
|
|
296
|
-
outputFile: "",
|
|
297
|
-
originalSize: 0,
|
|
298
|
-
compressedSize: 0,
|
|
299
|
-
compressionRatio: 0,
|
|
300
|
-
success: false,
|
|
301
|
-
error: error instanceof Error ? error.message : String(error),
|
|
302
|
-
};
|
|
303
|
-
}
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
async function main() {
|
|
307
|
-
log(`Starting ${SKILL_NAME} session: ${SESSION_ID}`, "debug");
|
|
308
|
-
|
|
309
|
-
const { values, positionals } = parseArgs({
|
|
310
|
-
args: process.argv.slice(2),
|
|
311
|
-
options: {
|
|
312
|
-
preset: { type: "string", default: "web" },
|
|
313
|
-
crf: { type: "string" },
|
|
314
|
-
"target-size": { type: "string" },
|
|
315
|
-
resolution: { type: "string", default: "original" },
|
|
316
|
-
codec: { type: "string", default: "h264" },
|
|
317
|
-
"audio-bitrate": { type: "string" },
|
|
318
|
-
"no-audio": { type: "boolean", default: false },
|
|
319
|
-
output: { type: "string" },
|
|
320
|
-
suffix: { type: "string", default: "_compressed" },
|
|
321
|
-
overwrite: { type: "boolean", default: false },
|
|
322
|
-
stats: { type: "boolean", default: true },
|
|
323
|
-
verbose: { type: "boolean", default: false },
|
|
324
|
-
help: { type: "boolean", default: false },
|
|
325
|
-
},
|
|
326
|
-
allowPositionals: true,
|
|
327
|
-
});
|
|
328
|
-
|
|
329
|
-
// Show help
|
|
330
|
-
if (values.help) {
|
|
331
|
-
console.log(`
|
|
332
|
-
Compress Video - FFmpeg video compression tool
|
|
333
|
-
|
|
334
|
-
Usage:
|
|
335
|
-
compress-video <files...> [options]
|
|
336
|
-
|
|
337
|
-
Options:
|
|
338
|
-
--preset <name> Compression preset (web, mobile, archive, high-quality)
|
|
339
|
-
--crf <value> Constant Rate Factor (0-51, lower = better)
|
|
340
|
-
--target-size <MB> Target file size in megabytes
|
|
341
|
-
--resolution <size> Output resolution (1080p, 720p, 480p, 360p, original)
|
|
342
|
-
--codec <name> Video codec (h264, hevc, vp9)
|
|
343
|
-
--audio-bitrate <kbps> Audio bitrate in kbps
|
|
344
|
-
--no-audio Remove audio track
|
|
345
|
-
--output <dir> Output directory
|
|
346
|
-
--suffix <text> Filename suffix (default: _compressed)
|
|
347
|
-
--overwrite Overwrite existing files
|
|
348
|
-
--stats Show compression statistics
|
|
349
|
-
--verbose Show FFmpeg output
|
|
350
|
-
--help Show this help message
|
|
351
|
-
|
|
352
|
-
Examples:
|
|
353
|
-
compress-video video.mp4
|
|
354
|
-
compress-video video.mp4 --preset mobile
|
|
355
|
-
compress-video video.mp4 --target-size 50
|
|
356
|
-
compress-video *.mp4 --preset web --output ./compressed/
|
|
357
|
-
`);
|
|
358
|
-
process.exit(0);
|
|
359
|
-
}
|
|
360
|
-
|
|
361
|
-
// Check for input files
|
|
362
|
-
if (positionals.length === 0) {
|
|
363
|
-
log("Error: No input files specified", "error");
|
|
364
|
-
console.error("Usage: compress-video <files...> [options]");
|
|
365
|
-
console.error('Run "compress-video --help" for more information');
|
|
366
|
-
process.exit(1);
|
|
367
|
-
}
|
|
368
|
-
|
|
369
|
-
// Validate preset
|
|
370
|
-
if (values.preset && !PRESETS[values.preset as string]) {
|
|
371
|
-
log(`Error: Invalid preset "${values.preset}"`, "error");
|
|
372
|
-
console.error(`Available presets: ${Object.keys(PRESETS).join(", ")}`);
|
|
373
|
-
process.exit(1);
|
|
374
|
-
}
|
|
375
|
-
|
|
376
|
-
// Validate codec
|
|
377
|
-
const codec = (values.codec as string) || "h264";
|
|
378
|
-
if (!CODECS[codec]) {
|
|
379
|
-
log(`Error: Invalid codec "${codec}"`, "error");
|
|
380
|
-
console.error(`Available codecs: ${Object.keys(CODECS).join(", ")}`);
|
|
381
|
-
process.exit(1);
|
|
382
|
-
}
|
|
383
|
-
|
|
384
|
-
// Check FFmpeg
|
|
385
|
-
const hasFFmpeg = await checkFFmpeg();
|
|
386
|
-
if (!hasFFmpeg) {
|
|
387
|
-
log("Error: FFmpeg is not installed or not in PATH", "error");
|
|
388
|
-
console.error("\nInstall FFmpeg:");
|
|
389
|
-
console.error(" macOS: brew install ffmpeg");
|
|
390
|
-
console.error(" Ubuntu: sudo apt-get install ffmpeg");
|
|
391
|
-
console.error(" Windows: choco install ffmpeg");
|
|
392
|
-
process.exit(1);
|
|
393
|
-
}
|
|
394
|
-
|
|
395
|
-
// Build options
|
|
396
|
-
const options: CompressOptions = {
|
|
397
|
-
preset: (values.preset as string) || "web",
|
|
398
|
-
crf: values.crf ? parseInt(values.crf as string) : undefined,
|
|
399
|
-
targetSize: values["target-size"] ? parseFloat(values["target-size"] as string) : undefined,
|
|
400
|
-
resolution: (values.resolution as string) || "original",
|
|
401
|
-
codec: codec,
|
|
402
|
-
audioBitrate: values["audio-bitrate"] ? parseInt(values["audio-bitrate"] as string) : PRESETS[(values.preset as string) || "web"].audioBitrate,
|
|
403
|
-
noAudio: values["no-audio"] as boolean,
|
|
404
|
-
output: values.output as string,
|
|
405
|
-
suffix: (values.suffix as string) || "_compressed",
|
|
406
|
-
overwrite: values.overwrite as boolean,
|
|
407
|
-
stats: values.stats !== false,
|
|
408
|
-
verbose: values.verbose as boolean,
|
|
409
|
-
};
|
|
410
|
-
|
|
411
|
-
log("Compressing Videos", "info");
|
|
412
|
-
|
|
413
|
-
// Process all files
|
|
414
|
-
const results: CompressionResult[] = [];
|
|
415
|
-
for (const file of positionals) {
|
|
416
|
-
const result = await compressVideo(file, options);
|
|
417
|
-
results.push(result);
|
|
418
|
-
|
|
419
|
-
if (!result.success) {
|
|
420
|
-
log(`Failed: ${basename(file)}`, "error");
|
|
421
|
-
log(`Error: ${result.error}`, "error");
|
|
422
|
-
}
|
|
423
|
-
}
|
|
424
|
-
|
|
425
|
-
// Show statistics
|
|
426
|
-
if (options.stats) {
|
|
427
|
-
console.log("\nCompression Statistics");
|
|
428
|
-
console.log("======================\n");
|
|
429
|
-
|
|
430
|
-
let totalOriginal = 0;
|
|
431
|
-
let totalCompressed = 0;
|
|
432
|
-
let successCount = 0;
|
|
433
|
-
|
|
434
|
-
for (const result of results) {
|
|
435
|
-
if (result.success) {
|
|
436
|
-
console.log(`File: ${basename(result.inputFile)}`);
|
|
437
|
-
console.log(` Original Size: ${formatBytes(result.originalSize)}`);
|
|
438
|
-
console.log(` Compressed Size: ${formatBytes(result.compressedSize)}`);
|
|
439
|
-
console.log(` Compression Ratio: ${result.compressionRatio.toFixed(1)}%`);
|
|
440
|
-
console.log(
|
|
441
|
-
` Space Saved: ${formatBytes(result.originalSize - result.compressedSize)}\n`
|
|
442
|
-
);
|
|
443
|
-
|
|
444
|
-
totalOriginal += result.originalSize;
|
|
445
|
-
totalCompressed += result.compressedSize;
|
|
446
|
-
successCount++;
|
|
447
|
-
}
|
|
448
|
-
}
|
|
449
|
-
|
|
450
|
-
if (successCount > 0) {
|
|
451
|
-
const avgCompression = ((totalOriginal - totalCompressed) / totalOriginal) * 100;
|
|
452
|
-
console.log("Total Results");
|
|
453
|
-
console.log("=============");
|
|
454
|
-
console.log(`Files Processed: ${successCount}/${results.length}`);
|
|
455
|
-
console.log(`Total Original Size: ${formatBytes(totalOriginal)}`);
|
|
456
|
-
console.log(`Total Compressed Size: ${formatBytes(totalCompressed)}`);
|
|
457
|
-
console.log(`Average Compression: ${avgCompression.toFixed(1)}%`);
|
|
458
|
-
console.log(`Total Space Saved: ${formatBytes(totalOriginal - totalCompressed)}`);
|
|
459
|
-
}
|
|
460
|
-
}
|
|
461
|
-
|
|
462
|
-
// Exit with error if any failed
|
|
463
|
-
const failedCount = results.filter((r) => !r.success).length;
|
|
464
|
-
if (failedCount > 0) {
|
|
465
|
-
log(`${failedCount} file(s) failed to compress`, "error");
|
|
466
|
-
process.exit(1);
|
|
467
|
-
}
|
|
468
|
-
}
|
|
469
|
-
|
|
470
|
-
main().catch((error) => {
|
|
471
|
-
log(`Error: ${error.message}`, "error");
|
|
472
|
-
process.exit(1);
|
|
473
|
-
});
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: contract-review-report
|
|
3
|
-
description: Generate contract review reports with clause summaries, risk register, negotiation points, redline-style suggestions, counterparty email draft, and manifest metadata.
|
|
4
|
-
kind: instruction
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Contract Review Report
|
|
8
|
-
|
|
9
|
-
Generate a structured contract review package from an agreement, terms sheet, statement of work, vendor contract, or customer contract.
|
|
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
|
-
| `contract` | Contract text. Positional text also works. | required unless `--source` is used |
|
|
26
|
-
| `source` | Read contract text from a file. | none |
|
|
27
|
-
| `party` | Your company or client name. | Our company |
|
|
28
|
-
| `counterparty` | Other party name. | Counterparty |
|
|
29
|
-
| `jurisdiction` | Governing context for notes. | Not specified |
|
|
30
|
-
| `focus` | Comma-separated focus areas. | liability,payment,termination,privacy |
|
|
31
|
-
|
|
32
|
-
## Deliverables
|
|
33
|
-
|
|
34
|
-
- `contract-review-report.md`
|
|
35
|
-
- `risk-register.csv`
|
|
36
|
-
- `clause-summary.json`
|
|
37
|
-
- `redline-suggestions.md`
|
|
38
|
-
- `negotiation-email.md`
|
|
39
|
-
- `manifest.json`
|
|
40
|
-
|
|
41
|
-
## Method
|
|
42
|
-
|
|
43
|
-
1. Read the whole agreement before commenting on any clause; obligations are
|
|
44
|
-
frequently defined in one section and modified in another.
|
|
45
|
-
2. Build a clause inventory: what it says, in plain language, per section.
|
|
46
|
-
3. Score each risk on likelihood and impact, and say which party it favours.
|
|
47
|
-
A risk register with no counterparty attribution is not useful.
|
|
48
|
-
4. Draft redlines as concrete replacement wording, not "consider revising".
|
|
49
|
-
5. Separate deal-breakers from negotiable points, and rank the negotiables.
|
|
50
|
-
6. Write the negotiation email so it opens with agreement, raises the top three
|
|
51
|
-
items only, and proposes specific alternatives.
|
|
52
|
-
7. State clearly that this is not legal advice and name what a lawyer must review.
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: customer-feedback-report
|
|
3
|
-
description: Generate customer feedback reports from reviews, support tickets, surveys, call notes, or raw feedback with clusters, sentiment, root causes, roadmap recommendations, evidence, and manifest metadata.
|
|
4
|
-
kind: instruction
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Customer Feedback Report
|
|
8
|
-
|
|
9
|
-
Generate a structured customer feedback insight package from reviews, support tickets, survey responses, interview notes, sales call notes, or mixed raw feedback.
|
|
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
|
-
| `feedback` | Raw feedback text. Positional text also works. | required unless `--source` is used |
|
|
26
|
-
| `source` | Read feedback text from a file. | none |
|
|
27
|
-
| `product` | Product, service, or workflow name. | Product |
|
|
28
|
-
| `segment` | Customer segment or audience. | All customers |
|
|
29
|
-
| `channel` | `reviews`, `tickets`, `calls`, `surveys`, or `mixed`. | mixed |
|
|
30
|
-
| `format` | `product`, `support`, or `executive`. | product |
|
|
31
|
-
|
|
32
|
-
## Deliverables
|
|
33
|
-
|
|
34
|
-
- `customer-feedback-report.md`
|
|
35
|
-
- `feedback-clusters.csv`
|
|
36
|
-
- `roadmap-suggestions.md`
|
|
37
|
-
- `sentiment-summary.json`
|
|
38
|
-
- `evidence.json`
|
|
39
|
-
- `manifest.json`
|
|
40
|
-
|
|
41
|
-
## Method
|
|
42
|
-
|
|
43
|
-
1. Normalize the raw feedback: dedupe, drop empty entries, and record the total
|
|
44
|
-
you actually analysed versus what you were given.
|
|
45
|
-
2. Cluster by underlying problem, not by keyword — "slow" and "times out" are
|
|
46
|
-
often one cluster; "slow" and "sluggish onboarding" are often two.
|
|
47
|
-
3. Size each cluster and cite two or three verbatim quotes per cluster. A cluster
|
|
48
|
-
without quotes cannot be checked.
|
|
49
|
-
4. Assign sentiment per cluster and note where sentiment and volume disagree.
|
|
50
|
-
5. For each top cluster, separate the reported symptom from your inferred root
|
|
51
|
-
cause, and mark the inference as an inference.
|
|
52
|
-
6. Turn the top clusters into roadmap candidates with an effort/impact call.
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
# dashboard-builder
|
|
2
|
-
|
|
3
|
-
Dashboard Builder skill.
|
|
4
|
-
|
|
5
|
-
## Tech Stack
|
|
6
|
-
|
|
7
|
-
- Runtime: Bun
|
|
8
|
-
- Language: TypeScript
|
|
9
|
-
- CLI: Commander.js
|
|
10
|
-
|
|
11
|
-
## CLI
|
|
12
|
-
|
|
13
|
-
```bash
|
|
14
|
-
dashboard-builder run
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
## Data Directory
|
|
18
|
-
|
|
19
|
-
~/.skill/dashboard-builder/
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "dashboard-builder",
|
|
3
|
-
"version": "0.1.0",
|
|
4
|
-
"description": "Dashboard Builder skill",
|
|
5
|
-
"type": "module",
|
|
6
|
-
"bin": {
|
|
7
|
-
"dashboard-builder": "./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
|
-
"csv-parse": "^5.6.0"
|
|
16
|
-
},
|
|
17
|
-
"devDependencies": {
|
|
18
|
-
"@types/bun": "latest",
|
|
19
|
-
"typescript": "^5.7.0"
|
|
20
|
-
},
|
|
21
|
-
"publishConfig": {
|
|
22
|
-
"access": "restricted",
|
|
23
|
-
"registry": "https://registry.npmjs.org/"
|
|
24
|
-
},
|
|
25
|
-
"files": [
|
|
26
|
-
"src",
|
|
27
|
-
"tsconfig.json"
|
|
28
|
-
]
|
|
29
|
-
}
|