@hasna/skills 0.1.61 → 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 -207
- 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,51 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: market-research-report
|
|
3
|
-
description: Generate a market research report with competitor, audience, pricing, source, Markdown, and PDF artifacts.
|
|
4
|
-
kind: instruction
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Market Research Report
|
|
8
|
-
|
|
9
|
-
Generate a market research report package for SaaS, developer tools, and business planning work.
|
|
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` | Market, product category, or research question. Positional text also works. | required |
|
|
26
|
-
| `audience` | Target audience or buyer segment. | Operators and founders |
|
|
27
|
-
| `competitors` | Comma-separated competitor names. | inferred examples |
|
|
28
|
-
| `region` | Geographic or commercial scope. | Global |
|
|
29
|
-
| `format` | `strategic`, `investor`, or `product`. | strategic |
|
|
30
|
-
|
|
31
|
-
## Deliverables
|
|
32
|
-
|
|
33
|
-
- `market-research-report.md`
|
|
34
|
-
- `competitors.csv`
|
|
35
|
-
- `sources.json`
|
|
36
|
-
- `manifest.json`
|
|
37
|
-
|
|
38
|
-
## Method
|
|
39
|
-
|
|
40
|
-
1. State the question, the market boundary, and the date. A market report without
|
|
41
|
-
an explicit as-of date decays silently.
|
|
42
|
-
2. Map competitors by the dimension that actually differentiates them, not by
|
|
43
|
-
feature checklist. Say what each one is genuinely best at.
|
|
44
|
-
3. Segment the audience by job-to-be-done and note which segments are underserved.
|
|
45
|
-
4. Analyse pricing as packaging: what is metered, what is gated, where the
|
|
46
|
-
upgrade pressure sits.
|
|
47
|
-
5. Separate what you verified from what you inferred, and record every source
|
|
48
|
-
with its URL and access date. Use your own web tools or sources the user
|
|
49
|
-
supplied; do not invent citations.
|
|
50
|
-
6. Close with the two or three findings that would change a decision, and say
|
|
51
|
-
what evidence would falsify each.
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: meeting-pack
|
|
3
|
-
description: Generate meeting artifact packs from transcripts or notes with summaries, decisions, action items, owner/deadline tables, follow-up email, project export, timeline, and manifest metadata.
|
|
4
|
-
kind: instruction
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Meeting Pack
|
|
8
|
-
|
|
9
|
-
Generate a complete meeting artifact package from transcripts, notes, call summaries, or rough bullets.
|
|
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
|
-
| `notes` | Meeting transcript, rough notes, or summary. Positional text also works. | required unless `--source` is used |
|
|
26
|
-
| `source` | Read notes or transcript from a file. | none |
|
|
27
|
-
| `meeting` | Meeting title. | Meeting |
|
|
28
|
-
| `participants` | Comma-separated participant names. | Team |
|
|
29
|
-
| `format` | `project`, `executive`, `sales`, or `standup`. | project |
|
|
30
|
-
|
|
31
|
-
## Deliverables
|
|
32
|
-
|
|
33
|
-
- `meeting-summary.md`
|
|
34
|
-
- `decisions.md`
|
|
35
|
-
- `action-items.csv`
|
|
36
|
-
- `follow-up-email.md`
|
|
37
|
-
- `project-export.json`
|
|
38
|
-
- `timeline.md`
|
|
39
|
-
- `manifest.json`
|
|
40
|
-
|
|
41
|
-
## Method
|
|
42
|
-
|
|
43
|
-
1. Read the transcript fully before summarizing; decisions are often reversed
|
|
44
|
-
later in the same meeting.
|
|
45
|
-
2. Separate decisions from discussion. A decision has an owner and a resolution;
|
|
46
|
-
everything else is context.
|
|
47
|
-
3. Extract action items with owner, deadline, and the acceptance condition. An
|
|
48
|
-
action item without an owner will not happen.
|
|
49
|
-
4. Flag anything explicitly deferred, and anything raised but never resolved —
|
|
50
|
-
the second category is what meetings routinely lose.
|
|
51
|
-
5. Build the timeline from what was said, not from what you expect the process to be.
|
|
52
|
-
6. Draft the follow-up email so a non-attendee can act on it without the transcript.
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "merge-pdfs",
|
|
3
|
-
"version": "0.1.0",
|
|
4
|
-
"description": "Merge Pdfs skill",
|
|
5
|
-
"type": "module",
|
|
6
|
-
"bin": {
|
|
7
|
-
"merge-pdfs": "./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
|
-
"pdf-lib": "^1.17.1",
|
|
16
|
-
"minimist": "^1.2.8",
|
|
17
|
-
"glob": "^11.1.0"
|
|
18
|
-
},
|
|
19
|
-
"devDependencies": {
|
|
20
|
-
"@types/bun": "latest",
|
|
21
|
-
"typescript": "^5.7.0"
|
|
22
|
-
},
|
|
23
|
-
"publishConfig": {
|
|
24
|
-
"access": "restricted",
|
|
25
|
-
"registry": "https://registry.npmjs.org/"
|
|
26
|
-
},
|
|
27
|
-
"files": [
|
|
28
|
-
"src",
|
|
29
|
-
"tsconfig.json"
|
|
30
|
-
]
|
|
31
|
-
}
|
|
@@ -1,427 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bun
|
|
2
|
-
|
|
3
|
-
import { PDFDocument, rgb, StandardFonts, degrees } from "pdf-lib";
|
|
4
|
-
import * as fs from "fs";
|
|
5
|
-
import * as path from "path";
|
|
6
|
-
import minimist from "minimist";
|
|
7
|
-
import { globSync } from "glob";
|
|
8
|
-
|
|
9
|
-
// Types
|
|
10
|
-
interface FileSpec {
|
|
11
|
-
path: string;
|
|
12
|
-
pages: string;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
interface MergeOptions {
|
|
16
|
-
output: string;
|
|
17
|
-
bookmarks: boolean;
|
|
18
|
-
sort: "none" | "name" | "date" | "size";
|
|
19
|
-
reverse: boolean;
|
|
20
|
-
blankBetween: boolean;
|
|
21
|
-
title: string | null;
|
|
22
|
-
author: string | null;
|
|
23
|
-
rotate: number;
|
|
24
|
-
compress: boolean;
|
|
25
|
-
pageNumbers: boolean;
|
|
26
|
-
pageNumberFormat: string;
|
|
27
|
-
pageNumberPosition: string;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
// Parse command line arguments
|
|
31
|
-
const args = minimist(process.argv.slice(2), {
|
|
32
|
-
string: [
|
|
33
|
-
"output",
|
|
34
|
-
"sort",
|
|
35
|
-
"title",
|
|
36
|
-
"author",
|
|
37
|
-
"page-number-format",
|
|
38
|
-
"page-number-position",
|
|
39
|
-
],
|
|
40
|
-
boolean: [
|
|
41
|
-
"bookmarks",
|
|
42
|
-
"reverse",
|
|
43
|
-
"blank-between",
|
|
44
|
-
"compress",
|
|
45
|
-
"page-numbers",
|
|
46
|
-
"help",
|
|
47
|
-
],
|
|
48
|
-
default: {
|
|
49
|
-
output: "merged.pdf",
|
|
50
|
-
sort: "none",
|
|
51
|
-
reverse: false,
|
|
52
|
-
bookmarks: false,
|
|
53
|
-
"blank-between": false,
|
|
54
|
-
compress: false,
|
|
55
|
-
"page-numbers": false,
|
|
56
|
-
"page-number-format": "Page {n}",
|
|
57
|
-
"page-number-position": "bottom-center",
|
|
58
|
-
rotate: 0,
|
|
59
|
-
},
|
|
60
|
-
alias: {
|
|
61
|
-
o: "output",
|
|
62
|
-
h: "help",
|
|
63
|
-
},
|
|
64
|
-
});
|
|
65
|
-
|
|
66
|
-
// Show help
|
|
67
|
-
if (args.help || args._.length === 0) {
|
|
68
|
-
console.log(`
|
|
69
|
-
Merge PDFs - Combine multiple PDF files into one
|
|
70
|
-
|
|
71
|
-
Usage:
|
|
72
|
-
skills run merge-pdfs -- <file1.pdf> [file2.pdf...] [options]
|
|
73
|
-
|
|
74
|
-
Options:
|
|
75
|
-
-o, --output <file> Output file path (default: merged.pdf)
|
|
76
|
-
--bookmarks Add bookmarks for each source file
|
|
77
|
-
--sort <type> Sort order: none, name, date, size (default: none)
|
|
78
|
-
--reverse Reverse the merge order
|
|
79
|
-
--blank-between Insert blank page between documents
|
|
80
|
-
--title <text> Set PDF title metadata
|
|
81
|
-
--author <text> Set PDF author metadata
|
|
82
|
-
--rotate <degrees> Rotate all pages: 0, 90, 180, 270
|
|
83
|
-
--compress Compress output PDF
|
|
84
|
-
--page-numbers Add page numbers
|
|
85
|
-
--page-number-format <fmt> Format: "Page {n}" or "Page {n} of {total}"
|
|
86
|
-
--page-number-position <pos> Position: top/bottom-left/center/right
|
|
87
|
-
-h, --help Show this help message
|
|
88
|
-
|
|
89
|
-
Page Selection:
|
|
90
|
-
file.pdf All pages
|
|
91
|
-
file.pdf:1-5 Pages 1 through 5
|
|
92
|
-
file.pdf:1,3,5 Specific pages
|
|
93
|
-
file.pdf:1-3,7,10-12 Mixed ranges
|
|
94
|
-
|
|
95
|
-
Examples:
|
|
96
|
-
skills run merge-pdfs -- doc1.pdf doc2.pdf -o combined.pdf
|
|
97
|
-
skills run merge-pdfs -- "doc.pdf:1-5" "other.pdf:2,4" -o output.pdf
|
|
98
|
-
skills run merge-pdfs -- ./docs/*.pdf --sort name --bookmarks -o book.pdf
|
|
99
|
-
`);
|
|
100
|
-
process.exit(0);
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
// Parse options
|
|
104
|
-
const options: MergeOptions = {
|
|
105
|
-
output: args.output,
|
|
106
|
-
bookmarks: args.bookmarks,
|
|
107
|
-
sort: args.sort as MergeOptions["sort"],
|
|
108
|
-
reverse: args.reverse,
|
|
109
|
-
blankBetween: args["blank-between"],
|
|
110
|
-
title: args.title || null,
|
|
111
|
-
author: args.author || null,
|
|
112
|
-
rotate: parseInt(args.rotate) || 0,
|
|
113
|
-
compress: args.compress,
|
|
114
|
-
pageNumbers: args["page-numbers"],
|
|
115
|
-
pageNumberFormat: args["page-number-format"],
|
|
116
|
-
pageNumberPosition: args["page-number-position"],
|
|
117
|
-
};
|
|
118
|
-
|
|
119
|
-
// Parse file spec (path:pages)
|
|
120
|
-
function parseFileSpec(spec: string): FileSpec {
|
|
121
|
-
const colonIndex = spec.lastIndexOf(":");
|
|
122
|
-
// Check if colon is part of page spec (not Windows drive letter)
|
|
123
|
-
if (colonIndex > 1 && !spec.substring(colonIndex + 1).includes("/")) {
|
|
124
|
-
const possiblePages = spec.substring(colonIndex + 1);
|
|
125
|
-
if (/^[\d,\-all]+$/i.test(possiblePages)) {
|
|
126
|
-
return {
|
|
127
|
-
path: spec.substring(0, colonIndex),
|
|
128
|
-
pages: possiblePages.toLowerCase(),
|
|
129
|
-
};
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
return { path: spec, pages: "all" };
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
// Parse page range into array of page indices (0-based)
|
|
136
|
-
function parsePageRange(pageStr: string, totalPages: number): number[] {
|
|
137
|
-
if (pageStr === "all") {
|
|
138
|
-
return Array.from({ length: totalPages }, (_, i) => i);
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
const pages: Set<number> = new Set();
|
|
142
|
-
const parts = pageStr.split(",").map((p) => p.trim());
|
|
143
|
-
|
|
144
|
-
for (const part of parts) {
|
|
145
|
-
if (part.includes("-")) {
|
|
146
|
-
const [startStr, endStr] = part.split("-");
|
|
147
|
-
const start = startStr ? parseInt(startStr) : 1;
|
|
148
|
-
const end = endStr ? parseInt(endStr) : totalPages;
|
|
149
|
-
for (let i = start - 1; i < Math.min(end, totalPages); i++) {
|
|
150
|
-
if (i >= 0) pages.add(i);
|
|
151
|
-
}
|
|
152
|
-
} else {
|
|
153
|
-
const pageNum = parseInt(part) - 1;
|
|
154
|
-
if (pageNum >= 0 && pageNum < totalPages) {
|
|
155
|
-
pages.add(pageNum);
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
return Array.from(pages).sort((a, b) => a - b);
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
// Expand glob patterns and get file list
|
|
164
|
-
function getFileList(specs: string[]): FileSpec[] {
|
|
165
|
-
const files: FileSpec[] = [];
|
|
166
|
-
|
|
167
|
-
for (const spec of specs) {
|
|
168
|
-
const { path: pattern, pages } = parseFileSpec(spec);
|
|
169
|
-
|
|
170
|
-
// Try glob expansion
|
|
171
|
-
const matches = globSync(pattern);
|
|
172
|
-
|
|
173
|
-
if (matches.length === 0) {
|
|
174
|
-
// No glob match, try as literal path
|
|
175
|
-
if (fs.existsSync(pattern)) {
|
|
176
|
-
files.push({ path: pattern, pages });
|
|
177
|
-
} else {
|
|
178
|
-
console.warn(`Warning: File not found: ${pattern}`);
|
|
179
|
-
}
|
|
180
|
-
} else {
|
|
181
|
-
for (const match of matches) {
|
|
182
|
-
if (match.toLowerCase().endsWith(".pdf")) {
|
|
183
|
-
files.push({ path: match, pages });
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
return files;
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
// Sort files based on option
|
|
193
|
-
function sortFiles(files: FileSpec[], sortBy: string, reverse: boolean): FileSpec[] {
|
|
194
|
-
const sorted = [...files];
|
|
195
|
-
|
|
196
|
-
switch (sortBy) {
|
|
197
|
-
case "name":
|
|
198
|
-
sorted.sort((a, b) =>
|
|
199
|
-
path.basename(a.path).localeCompare(path.basename(b.path))
|
|
200
|
-
);
|
|
201
|
-
break;
|
|
202
|
-
case "date":
|
|
203
|
-
sorted.sort((a, b) => {
|
|
204
|
-
const statA = fs.statSync(a.path);
|
|
205
|
-
const statB = fs.statSync(b.path);
|
|
206
|
-
return statA.mtime.getTime() - statB.mtime.getTime();
|
|
207
|
-
});
|
|
208
|
-
break;
|
|
209
|
-
case "size":
|
|
210
|
-
sorted.sort((a, b) => {
|
|
211
|
-
const statA = fs.statSync(a.path);
|
|
212
|
-
const statB = fs.statSync(b.path);
|
|
213
|
-
return statA.size - statB.size;
|
|
214
|
-
});
|
|
215
|
-
break;
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
if (reverse) {
|
|
219
|
-
sorted.reverse();
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
return sorted;
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
// Add page numbers to document
|
|
226
|
-
async function addPageNumbers(
|
|
227
|
-
pdfDoc: PDFDocument,
|
|
228
|
-
format: string,
|
|
229
|
-
position: string
|
|
230
|
-
): Promise<void> {
|
|
231
|
-
const pages = pdfDoc.getPages();
|
|
232
|
-
const totalPages = pages.length;
|
|
233
|
-
const font = await pdfDoc.embedFont(StandardFonts.Helvetica);
|
|
234
|
-
const fontSize = 10;
|
|
235
|
-
|
|
236
|
-
for (let i = 0; i < pages.length; i++) {
|
|
237
|
-
const page = pages[i];
|
|
238
|
-
const { width, height } = page.getSize();
|
|
239
|
-
|
|
240
|
-
const text = format
|
|
241
|
-
.replace("{n}", String(i + 1))
|
|
242
|
-
.replace("{total}", String(totalPages));
|
|
243
|
-
|
|
244
|
-
const textWidth = font.widthOfTextAtSize(text, fontSize);
|
|
245
|
-
|
|
246
|
-
let x: number;
|
|
247
|
-
let y: number;
|
|
248
|
-
|
|
249
|
-
// Determine position
|
|
250
|
-
const [vPos, hPos] = position.split("-");
|
|
251
|
-
|
|
252
|
-
// Vertical position
|
|
253
|
-
if (vPos === "top") {
|
|
254
|
-
y = height - 30;
|
|
255
|
-
} else {
|
|
256
|
-
y = 20;
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
// Horizontal position
|
|
260
|
-
switch (hPos) {
|
|
261
|
-
case "left":
|
|
262
|
-
x = 30;
|
|
263
|
-
break;
|
|
264
|
-
case "right":
|
|
265
|
-
x = width - textWidth - 30;
|
|
266
|
-
break;
|
|
267
|
-
default: // center
|
|
268
|
-
x = (width - textWidth) / 2;
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
page.drawText(text, {
|
|
272
|
-
x,
|
|
273
|
-
y,
|
|
274
|
-
size: fontSize,
|
|
275
|
-
font,
|
|
276
|
-
color: rgb(0.3, 0.3, 0.3),
|
|
277
|
-
});
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
// Create a blank page with same size as reference
|
|
282
|
-
function createBlankPage(pdfDoc: PDFDocument, width: number, height: number) {
|
|
283
|
-
return pdfDoc.addPage([width, height]);
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
// Main merge function
|
|
287
|
-
async function mergePdfs(fileSpecs: FileSpec[]): Promise<void> {
|
|
288
|
-
console.log(`\nMerging ${fileSpecs.length} PDF files...\n`);
|
|
289
|
-
|
|
290
|
-
// Create output document
|
|
291
|
-
const mergedPdf = await PDFDocument.create();
|
|
292
|
-
|
|
293
|
-
// Track source documents for bookmarks
|
|
294
|
-
const bookmarkInfo: { title: string; pageIndex: number }[] = [];
|
|
295
|
-
let totalSourcePages = 0;
|
|
296
|
-
const sourceStats: { name: string; pages: number }[] = [];
|
|
297
|
-
|
|
298
|
-
// Process each file
|
|
299
|
-
for (const spec of fileSpecs) {
|
|
300
|
-
console.log(`Processing: ${spec.path}`);
|
|
301
|
-
|
|
302
|
-
try {
|
|
303
|
-
const fileBytes = fs.readFileSync(spec.path);
|
|
304
|
-
const sourcePdf = await PDFDocument.load(fileBytes);
|
|
305
|
-
const sourcePageCount = sourcePdf.getPageCount();
|
|
306
|
-
|
|
307
|
-
// Get pages to include
|
|
308
|
-
const pageIndices = parsePageRange(spec.pages, sourcePageCount);
|
|
309
|
-
console.log(` - Including ${pageIndices.length} of ${sourcePageCount} pages`);
|
|
310
|
-
|
|
311
|
-
// Record bookmark position
|
|
312
|
-
if (options.bookmarks) {
|
|
313
|
-
bookmarkInfo.push({
|
|
314
|
-
title: path.basename(spec.path, ".pdf"),
|
|
315
|
-
pageIndex: mergedPdf.getPageCount(),
|
|
316
|
-
});
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
// Copy pages
|
|
320
|
-
const copiedPages = await mergedPdf.copyPages(sourcePdf, pageIndices);
|
|
321
|
-
|
|
322
|
-
for (const page of copiedPages) {
|
|
323
|
-
// Apply rotation if specified
|
|
324
|
-
if (options.rotate !== 0) {
|
|
325
|
-
page.setRotation(degrees(options.rotate));
|
|
326
|
-
}
|
|
327
|
-
mergedPdf.addPage(page);
|
|
328
|
-
}
|
|
329
|
-
|
|
330
|
-
// Add blank page between documents if requested
|
|
331
|
-
if (options.blankBetween && spec !== fileSpecs[fileSpecs.length - 1]) {
|
|
332
|
-
const lastPage = copiedPages[copiedPages.length - 1];
|
|
333
|
-
const { width, height } = lastPage.getSize();
|
|
334
|
-
createBlankPage(mergedPdf, width, height);
|
|
335
|
-
}
|
|
336
|
-
|
|
337
|
-
totalSourcePages += pageIndices.length;
|
|
338
|
-
sourceStats.push({
|
|
339
|
-
name: path.basename(spec.path),
|
|
340
|
-
pages: pageIndices.length,
|
|
341
|
-
});
|
|
342
|
-
} catch (error: any) {
|
|
343
|
-
console.error(` Error processing ${spec.path}: ${error.message}`);
|
|
344
|
-
}
|
|
345
|
-
}
|
|
346
|
-
|
|
347
|
-
// Set metadata
|
|
348
|
-
if (options.title) {
|
|
349
|
-
mergedPdf.setTitle(options.title);
|
|
350
|
-
}
|
|
351
|
-
if (options.author) {
|
|
352
|
-
mergedPdf.setAuthor(options.author);
|
|
353
|
-
}
|
|
354
|
-
mergedPdf.setCreator("merge-pdfs skill");
|
|
355
|
-
mergedPdf.setProducer("pdf-lib");
|
|
356
|
-
mergedPdf.setCreationDate(new Date());
|
|
357
|
-
mergedPdf.setModificationDate(new Date());
|
|
358
|
-
|
|
359
|
-
// Add page numbers if requested
|
|
360
|
-
if (options.pageNumbers) {
|
|
361
|
-
console.log("\nAdding page numbers...");
|
|
362
|
-
await addPageNumbers(
|
|
363
|
-
mergedPdf,
|
|
364
|
-
options.pageNumberFormat,
|
|
365
|
-
options.pageNumberPosition
|
|
366
|
-
);
|
|
367
|
-
}
|
|
368
|
-
|
|
369
|
-
// Note: pdf-lib doesn't support bookmarks/outlines directly
|
|
370
|
-
// For full bookmark support, we'd need a different library
|
|
371
|
-
if (options.bookmarks && bookmarkInfo.length > 0) {
|
|
372
|
-
console.log("\nNote: Bookmark metadata recorded (visual bookmarks require additional processing)");
|
|
373
|
-
}
|
|
374
|
-
|
|
375
|
-
// Save output
|
|
376
|
-
console.log("\nSaving merged PDF...");
|
|
377
|
-
const outputBytes = await mergedPdf.save();
|
|
378
|
-
|
|
379
|
-
// Ensure output directory exists
|
|
380
|
-
const outputDir = path.dirname(options.output);
|
|
381
|
-
if (outputDir && !fs.existsSync(outputDir)) {
|
|
382
|
-
fs.mkdirSync(outputDir, { recursive: true });
|
|
383
|
-
}
|
|
384
|
-
|
|
385
|
-
fs.writeFileSync(options.output, outputBytes);
|
|
386
|
-
|
|
387
|
-
// Print summary
|
|
388
|
-
console.log(`\n${"=".repeat(50)}`);
|
|
389
|
-
console.log(`Merged ${fileSpecs.length} files (${mergedPdf.getPageCount()} pages total) into: ${options.output}`);
|
|
390
|
-
console.log("=".repeat(50));
|
|
391
|
-
for (const stat of sourceStats) {
|
|
392
|
-
console.log(` - ${stat.name}: ${stat.pages} pages`);
|
|
393
|
-
}
|
|
394
|
-
console.log("");
|
|
395
|
-
|
|
396
|
-
const outputSize = fs.statSync(options.output).size;
|
|
397
|
-
console.log(`Output file size: ${(outputSize / 1024 / 1024).toFixed(2)} MB`);
|
|
398
|
-
console.log("\nDone!");
|
|
399
|
-
}
|
|
400
|
-
|
|
401
|
-
// Main execution
|
|
402
|
-
async function main() {
|
|
403
|
-
try {
|
|
404
|
-
// Get file list
|
|
405
|
-
let files = getFileList(args._ as string[]);
|
|
406
|
-
|
|
407
|
-
if (files.length === 0) {
|
|
408
|
-
console.error("Error: No valid PDF files found");
|
|
409
|
-
process.exit(1);
|
|
410
|
-
}
|
|
411
|
-
|
|
412
|
-
if (files.length === 1) {
|
|
413
|
-
console.warn("Warning: Only one file specified, nothing to merge");
|
|
414
|
-
}
|
|
415
|
-
|
|
416
|
-
// Sort files
|
|
417
|
-
files = sortFiles(files, options.sort, options.reverse);
|
|
418
|
-
|
|
419
|
-
// Perform merge
|
|
420
|
-
await mergePdfs(files);
|
|
421
|
-
} catch (error: any) {
|
|
422
|
-
console.error(`Error: ${error.message}`);
|
|
423
|
-
process.exit(1);
|
|
424
|
-
}
|
|
425
|
-
}
|
|
426
|
-
|
|
427
|
-
main();
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: migration-plan-pack
|
|
3
|
-
description: Generate migration planning packs for framework, library, database, infrastructure, or architecture upgrades with risk matrix, checklist, rollout plan, and test strategy.
|
|
4
|
-
kind: instruction
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Migration Plan Pack
|
|
8
|
-
|
|
9
|
-
Generate a migration package from current state, target state, system context, and operating constraints. Hosted runs can inspect richer project inputs, while local direct execution produces deterministic artifacts for validation.
|
|
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
|
-
| `system` | Product, repo, app, or service being migrated. | Migration Target |
|
|
26
|
-
| `from` | Current framework, library, database, infrastructure, or architecture state. | current state |
|
|
27
|
-
| `to` | Desired target state. | target state |
|
|
28
|
-
| `scope` | Comma-separated systems or workstreams in scope. | app, data, deploy, tests |
|
|
29
|
-
| `constraints` | Risk, downtime, compliance, billing, or operational constraints. | optional |
|
|
30
|
-
| `deadline` | Date, release train, or migration window. | optional |
|
|
31
|
-
| `strategy` | `phased`, `big-bang`, or `parallel-run`. | phased |
|
|
32
|
-
|
|
33
|
-
## Deliverables
|
|
34
|
-
|
|
35
|
-
- `migration-plan.md`
|
|
36
|
-
- `risk-matrix.csv`
|
|
37
|
-
- `ordered-checklist.md`
|
|
38
|
-
- `test-strategy.md`
|
|
39
|
-
- `dependency-map.json`
|
|
40
|
-
- `rollout-plan.md`
|
|
41
|
-
- `manifest.json`
|
|
42
|
-
|
|
43
|
-
## Method
|
|
44
|
-
|
|
45
|
-
1. Establish the from/to states precisely, including versions, and list what is
|
|
46
|
-
explicitly out of scope.
|
|
47
|
-
2. Map dependencies before sequencing. The order is forced by the dependency
|
|
48
|
-
graph, not by preference.
|
|
49
|
-
3. Identify the irreversible steps. These dominate the plan: everything else can
|
|
50
|
-
be retried.
|
|
51
|
-
4. Build the risk matrix with a concrete mitigation and a rollback for each row.
|
|
52
|
-
"Monitor closely" is not a mitigation.
|
|
53
|
-
5. Define the cutover checklist as ordered, individually verifiable steps with an
|
|
54
|
-
explicit go/no-go gate.
|
|
55
|
-
6. Specify the test strategy per phase, including how you prove parity between
|
|
56
|
-
old and new rather than merely that the new one starts.
|