@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,55 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: ad-creative-pack
|
|
3
|
-
description: Generate paid-ad copy, creative concepts, image prompts, audience angles, and test matrices.
|
|
4
|
-
kind: instruction
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Ad Creative Pack
|
|
8
|
-
|
|
9
|
-
Generate a paid-ad launch package for Meta, Google, and LinkedIn.
|
|
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
|
-
| `product` | Product, service, or campaign brief. Positional text also works. | required |
|
|
26
|
-
| `audience` | Target buyer or segment. | software teams |
|
|
27
|
-
| `offer` | Campaign promise or offer. | derived from product |
|
|
28
|
-
| `goal` | Conversion goal. | book demos |
|
|
29
|
-
| `platforms` | Comma-separated platforms. | Meta, Google, LinkedIn |
|
|
30
|
-
| `tone` | `direct`, `premium`, `friendly`, or `technical`. | direct |
|
|
31
|
-
|
|
32
|
-
## Deliverables
|
|
33
|
-
|
|
34
|
-
- `platform-copy.md`
|
|
35
|
-
- `ad-copy.json`
|
|
36
|
-
- `creative-concepts.md`
|
|
37
|
-
- `image-prompts.md`
|
|
38
|
-
- `audience-angles.csv`
|
|
39
|
-
- `test-matrix.csv`
|
|
40
|
-
- `launch-checklist.md`
|
|
41
|
-
- `manifest.json`
|
|
42
|
-
|
|
43
|
-
## Method
|
|
44
|
-
|
|
45
|
-
1. Restate the offer, audience and platform mix in one line, and name the single
|
|
46
|
-
conversion action every asset drives toward.
|
|
47
|
-
2. Draft 3-5 distinct creative concepts. Each needs a different *angle* (pain,
|
|
48
|
-
aspiration, proof, novelty, objection), not a different adjective.
|
|
49
|
-
3. For each platform, write copy to that platform's real limits — headline and
|
|
50
|
-
primary text lengths differ, so do not reuse one block everywhere.
|
|
51
|
-
4. Write image prompts as briefs a designer or an image model could act on:
|
|
52
|
-
subject, composition, mood, colour, text placement.
|
|
53
|
-
5. Build the test matrix so exactly one variable changes per row; a matrix that
|
|
54
|
-
varies two things at once cannot attribute a win.
|
|
55
|
-
6. Close with a launch checklist covering tracking, naming, and budget split.
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
# analyze-data
|
|
2
|
-
|
|
3
|
-
Data science insights for CSV and JSON.
|
|
4
|
-
|
|
5
|
-
## Development
|
|
6
|
-
|
|
7
|
-
- Runtime: Bun
|
|
8
|
-
- Use `bun install` to install dependencies
|
|
9
|
-
- Use `bun run dev` to run in development
|
|
10
|
-
- Use `bun run build` to build for production
|
|
11
|
-
|
|
12
|
-
## Structure
|
|
13
|
-
|
|
14
|
-
- `src/` - Source code
|
|
15
|
-
- `bin/cli.ts` - CLI entry point using Commander.js
|
|
16
|
-
- `SKILL.md` - Skill definition and prompts
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: analyze-data
|
|
3
|
-
version: 0.1.0
|
|
4
|
-
description: Instant data science insights for CSV and JSON files with statistical summaries, quality audits, and trend detection
|
|
5
|
-
author: Hasna
|
|
6
|
-
category: Data & Analytics
|
|
7
|
-
tags:
|
|
8
|
-
- data
|
|
9
|
-
- analytics
|
|
10
|
-
- statistics
|
|
11
|
-
- csv
|
|
12
|
-
- json
|
|
13
|
-
- insights
|
|
14
|
-
- quality-assurance
|
|
15
|
-
credits: 5
|
|
16
|
-
---
|
|
17
|
-
|
|
18
|
-
# Analyze Data
|
|
19
|
-
|
|
20
|
-
Instant data science insights for your CSV and JSON files. Automatically generates comprehensive reports including statistical summaries, data quality audits, correlation matrices, and trend detection without sending your data to external APIs.
|
|
21
|
-
|
|
22
|
-
> **This is a CLI skill.** It requires the `skills` CLI to execute. Install it with `npm install -g @hasna/skills`, then run the commands below.
|
|
23
|
-
|
|
24
|
-
## Features
|
|
25
|
-
|
|
26
|
-
- **Statistical Profiling**: Calculates mean, median, mode, standard deviation, quartiles, and custom percentiles for all numeric columns.
|
|
27
|
-
- **Data Quality Audit**: Detects missing values, duplicates, mixed data types, and outliers to assess dataset health.
|
|
28
|
-
- **Correlation Discovery**: Identifies relationships between variables using Pearson correlation coefficients.
|
|
29
|
-
- **Trend Detection**: Automatically spots time-series patterns, seasonality, and growth trends.
|
|
30
|
-
- **Visualization Ready**: Recommends the best chart types (histograms, line charts, scatter plots) based on data distribution.
|
|
31
|
-
- **Multi-Format Reports**: Exports findings as interactive HTML, structured JSON, or readable Markdown.
|
|
32
|
-
- **Scalable**: Efficiently processes large files using stream processing and sampling options.
|
|
33
|
-
|
|
34
|
-
## Usage
|
|
35
|
-
|
|
36
|
-
```bash
|
|
37
|
-
skills run analyze-data -- <file-path> [options]
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
## Options
|
|
41
|
-
|
|
42
|
-
| Option | Description | Default |
|
|
43
|
-
| --------------- | ------------------------------------------------------------ | -------------------- |
|
|
44
|
-
| `--format` | Output format: `markdown`, `json`, or `html` | `markdown` |
|
|
45
|
-
| `--output` | Save report to file path | (prints to console) |
|
|
46
|
-
| `--correlations`| Calculate correlation matrix for numeric columns | `false` |
|
|
47
|
-
| `--outliers` | Detect and report outliers using IQR method | `false` |
|
|
48
|
-
| `--trends` | Analyze trends if time-series data is detected | `false` |
|
|
49
|
-
| `--sample` | Analyze only the first N rows (for large files) | (all rows) |
|
|
50
|
-
| `--percentiles` | Custom percentiles to calculate (comma-separated) | `25,50,75,90,95` |
|
|
51
|
-
| `--verbose` | Show detailed processing logs | `false` |
|
|
52
|
-
|
|
53
|
-
## Examples
|
|
54
|
-
|
|
55
|
-
### Quick Health Check
|
|
56
|
-
```bash
|
|
57
|
-
# Analyze a CSV file and print report to console
|
|
58
|
-
skills run analyze-data -- sales-data.csv
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
### Deep Dive Analysis
|
|
62
|
-
```bash
|
|
63
|
-
# Full analysis with correlations, outliers, and HTML report
|
|
64
|
-
skills run analyze-data -- dataset.csv \
|
|
65
|
-
--correlations \
|
|
66
|
-
--outliers \
|
|
67
|
-
--format html \
|
|
68
|
-
--output report.html
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
### Large File Sampling
|
|
72
|
-
```bash
|
|
73
|
-
# Quickly analyze the first 10,000 rows of a large dataset
|
|
74
|
-
skills run analyze-data -- huge-log-file.json \
|
|
75
|
-
--sample 10000 \
|
|
76
|
-
--verbose
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
### JSON Export for Pipelines
|
|
80
|
-
```bash
|
|
81
|
-
# Generate JSON stats for downstream processing
|
|
82
|
-
skills run analyze-data -- metrics.json \
|
|
83
|
-
--format json \
|
|
84
|
-
--output analysis.json
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
## Report Sections
|
|
88
|
-
|
|
89
|
-
1. **Dataset Overview**: File size, row/column counts, memory usage.
|
|
90
|
-
2. **Column Analysis**: Data types, unique values, null counts, and sample data.
|
|
91
|
-
3. **Statistical Summary**: Detailed metrics for numeric columns (mean, std dev, etc.).
|
|
92
|
-
4. **Data Quality**: Quality score (0-100), missing data summary, and duplicate detection.
|
|
93
|
-
5. **Correlations**: (Optional) Matrix of relationships between variables.
|
|
94
|
-
6. **Trends**: (Optional) Time-series patterns and anomalies.
|
|
95
|
-
7. **Visualization Recommendations**: Suggested charts for exploring the data.
|
|
96
|
-
8. **Key Insights**: Auto-generated observations about the dataset.
|
|
97
|
-
|
|
98
|
-
## Supported Formats
|
|
99
|
-
|
|
100
|
-
- **CSV**: Standard comma-separated, TSV, and custom delimiters.
|
|
101
|
-
- **JSON**: Arrays of objects or objects containing data arrays.
|
|
102
|
-
|
|
103
|
-
## Performance
|
|
104
|
-
|
|
105
|
-
- **Small (<10MB)**: Instant analysis.
|
|
106
|
-
- **Medium (10-100MB)**: 2-10 seconds.
|
|
107
|
-
- **Large (>100MB)**: Use `--sample` for best performance.
|
|
108
|
-
|
|
109
|
-
## Requirements
|
|
110
|
-
|
|
111
|
-
- Bun runtime.
|
|
112
|
-
- No external API keys required (runs locally).
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "analyze-data",
|
|
3
|
-
"version": "0.1.0",
|
|
4
|
-
"description": "Data science insights for CSV and JSON",
|
|
5
|
-
"type": "module",
|
|
6
|
-
"bin": {
|
|
7
|
-
"analyze-data": "./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
|
-
"start": "bun run src/index.ts"
|
|
13
|
-
},
|
|
14
|
-
"dependencies": {},
|
|
15
|
-
"devDependencies": {
|
|
16
|
-
"@types/bun": "latest",
|
|
17
|
-
"typescript": "^5.7.0"
|
|
18
|
-
},
|
|
19
|
-
"publishConfig": {
|
|
20
|
-
"registry": "https://registry.npmjs.org",
|
|
21
|
-
"access": "restricted"
|
|
22
|
-
}
|
|
23
|
-
}
|
|
@@ -1,401 +0,0 @@
|
|
|
1
|
-
import { readFileSync, statSync } from 'fs';
|
|
2
|
-
import { basename, extname } from 'path';
|
|
3
|
-
|
|
4
|
-
import { parseCSV, parseJSON } from './parsers';
|
|
5
|
-
import { log } from './logger';
|
|
6
|
-
import {
|
|
7
|
-
calculateCorrelation,
|
|
8
|
-
calculatePercentiles,
|
|
9
|
-
calculateStats,
|
|
10
|
-
detectDataType,
|
|
11
|
-
detectOutliers,
|
|
12
|
-
formatBytes,
|
|
13
|
-
roundTo,
|
|
14
|
-
} from './stats';
|
|
15
|
-
import type { AnalysisOptions, AnalysisReport, ColumnStats } from './types';
|
|
16
|
-
|
|
17
|
-
function analyzeColumn(columnName: string, values: any[], options: AnalysisOptions): ColumnStats {
|
|
18
|
-
const dataType = detectDataType(values);
|
|
19
|
-
const nonNullValues = values.filter(v => v !== null && v !== undefined && v !== '');
|
|
20
|
-
const nullCount = values.length - nonNullValues.length;
|
|
21
|
-
|
|
22
|
-
const uniqueValues = new Set(nonNullValues);
|
|
23
|
-
const stats: ColumnStats = {
|
|
24
|
-
name: columnName,
|
|
25
|
-
dataType,
|
|
26
|
-
count: values.length,
|
|
27
|
-
nullCount,
|
|
28
|
-
nullPercentage: roundTo((nullCount / values.length) * 100, 2),
|
|
29
|
-
uniqueCount: uniqueValues.size,
|
|
30
|
-
uniquePercentage: roundTo((uniqueValues.size / nonNullValues.length) * 100, 2),
|
|
31
|
-
sampleValues: nonNullValues.slice(0, 5),
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
// Numeric analysis
|
|
35
|
-
if (dataType === 'numeric') {
|
|
36
|
-
const numericValues = nonNullValues.map(Number).filter(v => !isNaN(v));
|
|
37
|
-
Object.assign(stats, calculateStats(numericValues));
|
|
38
|
-
|
|
39
|
-
if (options.percentiles.length > 0) {
|
|
40
|
-
stats.percentiles = calculatePercentiles(numericValues, options.percentiles);
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
if (options.outliers && stats.q1 !== undefined && stats.q3 !== undefined) {
|
|
44
|
-
stats.outliers = detectOutliers(numericValues, stats.q1, stats.q3);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
// String analysis
|
|
49
|
-
if (dataType === 'string') {
|
|
50
|
-
const lengths = nonNullValues.map(v => String(v).length);
|
|
51
|
-
stats.avgLength = roundTo(lengths.reduce((a, b) => a + b, 0) / lengths.length, 2);
|
|
52
|
-
stats.minLength = Math.min(...lengths);
|
|
53
|
-
stats.maxLength = Math.max(...lengths);
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
// Distribution (for categorical data)
|
|
57
|
-
if (uniqueValues.size <= 50) {
|
|
58
|
-
const distribution: Record<string, number> = {};
|
|
59
|
-
nonNullValues.forEach(val => {
|
|
60
|
-
const key = String(val);
|
|
61
|
-
distribution[key] = (distribution[key] || 0) + 1;
|
|
62
|
-
});
|
|
63
|
-
stats.distribution = distribution;
|
|
64
|
-
|
|
65
|
-
const topValues = Object.entries(distribution)
|
|
66
|
-
.map(([value, count]) => ({
|
|
67
|
-
value,
|
|
68
|
-
count,
|
|
69
|
-
percentage: roundTo((count / nonNullValues.length) * 100, 2),
|
|
70
|
-
}))
|
|
71
|
-
.sort((a, b) => b.count - a.count)
|
|
72
|
-
.slice(0, 10);
|
|
73
|
-
|
|
74
|
-
stats.topValues = topValues;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
return stats;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
function analyzeCorrelations(data: any[], numericColumns: string[]): {
|
|
81
|
-
matrix: number[][];
|
|
82
|
-
pairs: Array<{ col1: string; col2: string; correlation: number }>;
|
|
83
|
-
} {
|
|
84
|
-
const n = numericColumns.length;
|
|
85
|
-
const matrix: number[][] = Array(n).fill(0).map(() => Array(n).fill(0));
|
|
86
|
-
const pairs: Array<{ col1: string; col2: string; correlation: number }> = [];
|
|
87
|
-
|
|
88
|
-
for (let i = 0; i < n; i++) {
|
|
89
|
-
for (let j = i; j < n; j++) {
|
|
90
|
-
if (i === j) {
|
|
91
|
-
matrix[i][j] = 1;
|
|
92
|
-
} else {
|
|
93
|
-
const col1Values = data.map(row => Number(row[numericColumns[i]])).filter(v => !isNaN(v));
|
|
94
|
-
const col2Values = data.map(row => Number(row[numericColumns[j]])).filter(v => !isNaN(v));
|
|
95
|
-
|
|
96
|
-
const correlation = calculateCorrelation(col1Values, col2Values);
|
|
97
|
-
matrix[i][j] = roundTo(correlation, 4);
|
|
98
|
-
matrix[j][i] = roundTo(correlation, 4);
|
|
99
|
-
|
|
100
|
-
if (Math.abs(correlation) > 0.5) {
|
|
101
|
-
pairs.push({
|
|
102
|
-
col1: numericColumns[i],
|
|
103
|
-
col2: numericColumns[j],
|
|
104
|
-
correlation: roundTo(correlation, 4),
|
|
105
|
-
});
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
pairs.sort((a, b) => Math.abs(b.correlation) - Math.abs(a.correlation));
|
|
112
|
-
|
|
113
|
-
return { matrix, pairs };
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
function detectTrends(data: any[], columnStats: ColumnStats[]): {
|
|
117
|
-
detected: boolean;
|
|
118
|
-
patterns: string[];
|
|
119
|
-
insights: string[];
|
|
120
|
-
} {
|
|
121
|
-
const patterns: string[] = [];
|
|
122
|
-
const insights: string[] = [];
|
|
123
|
-
|
|
124
|
-
// Check for time-series columns
|
|
125
|
-
const dateColumns = columnStats.filter(col => col.dataType === 'date');
|
|
126
|
-
const numericColumns = columnStats.filter(col => col.dataType === 'numeric');
|
|
127
|
-
|
|
128
|
-
if (dateColumns.length > 0 && numericColumns.length > 0) {
|
|
129
|
-
patterns.push('Time-series data detected');
|
|
130
|
-
insights.push('Consider visualizing trends over time');
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
// Check for monotonic trends
|
|
134
|
-
numericColumns.forEach(col => {
|
|
135
|
-
if (col.skewness && Math.abs(col.skewness) > 1) {
|
|
136
|
-
patterns.push(`${col.name} shows ${col.skewness > 0 ? 'positive' : 'negative'} skew`);
|
|
137
|
-
}
|
|
138
|
-
});
|
|
139
|
-
|
|
140
|
-
return {
|
|
141
|
-
detected: patterns.length > 0,
|
|
142
|
-
patterns,
|
|
143
|
-
insights,
|
|
144
|
-
};
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
function generateVisualizationRecommendations(columnStats: ColumnStats[]): Array<{
|
|
148
|
-
column: string;
|
|
149
|
-
chartType: string;
|
|
150
|
-
reason: string;
|
|
151
|
-
}> {
|
|
152
|
-
const recommendations: Array<{ column: string; chartType: string; reason: string }> = [];
|
|
153
|
-
|
|
154
|
-
columnStats.forEach(col => {
|
|
155
|
-
if (col.dataType === 'numeric') {
|
|
156
|
-
if (col.uniqueCount > 20) {
|
|
157
|
-
recommendations.push({
|
|
158
|
-
column: col.name,
|
|
159
|
-
chartType: 'Histogram',
|
|
160
|
-
reason: 'Shows distribution of continuous numeric values',
|
|
161
|
-
});
|
|
162
|
-
} else {
|
|
163
|
-
recommendations.push({
|
|
164
|
-
column: col.name,
|
|
165
|
-
chartType: 'Bar Chart',
|
|
166
|
-
reason: 'Shows distribution of discrete numeric values',
|
|
167
|
-
});
|
|
168
|
-
}
|
|
169
|
-
} else if (col.dataType === 'string' && col.uniqueCount <= 20) {
|
|
170
|
-
recommendations.push({
|
|
171
|
-
column: col.name,
|
|
172
|
-
chartType: 'Pie Chart / Bar Chart',
|
|
173
|
-
reason: 'Shows category distribution',
|
|
174
|
-
});
|
|
175
|
-
} else if (col.dataType === 'date') {
|
|
176
|
-
recommendations.push({
|
|
177
|
-
column: col.name,
|
|
178
|
-
chartType: 'Line Chart',
|
|
179
|
-
reason: 'Shows trends over time',
|
|
180
|
-
});
|
|
181
|
-
}
|
|
182
|
-
});
|
|
183
|
-
|
|
184
|
-
return recommendations;
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
function calculateDataQuality(columnStats: ColumnStats[], data: any[]): {
|
|
188
|
-
totalCells: number;
|
|
189
|
-
missingCells: number;
|
|
190
|
-
missingPercentage: number;
|
|
191
|
-
duplicateRows: number;
|
|
192
|
-
duplicatePercentage: number;
|
|
193
|
-
dataQualityScore: number;
|
|
194
|
-
issues: string[];
|
|
195
|
-
} {
|
|
196
|
-
const totalCells = data.length * columnStats.length;
|
|
197
|
-
const missingCells = columnStats.reduce((sum, col) => sum + col.nullCount, 0);
|
|
198
|
-
const missingPercentage = roundTo((missingCells / totalCells) * 100, 2);
|
|
199
|
-
|
|
200
|
-
// Detect duplicates
|
|
201
|
-
const rowStrings = data.map(row => JSON.stringify(row));
|
|
202
|
-
const uniqueRows = new Set(rowStrings);
|
|
203
|
-
const duplicateRows = data.length - uniqueRows.size;
|
|
204
|
-
const duplicatePercentage = roundTo((duplicateRows / data.length) * 100, 2);
|
|
205
|
-
|
|
206
|
-
// Quality issues
|
|
207
|
-
const issues: string[] = [];
|
|
208
|
-
|
|
209
|
-
if (missingPercentage > 10) {
|
|
210
|
-
issues.push(`High missing data rate: ${missingPercentage}%`);
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
if (duplicateRows > 0) {
|
|
214
|
-
issues.push(`${duplicateRows} duplicate rows found`);
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
columnStats.forEach(col => {
|
|
218
|
-
if (col.dataType === 'mixed') {
|
|
219
|
-
issues.push(`Column "${col.name}" has mixed data types`);
|
|
220
|
-
}
|
|
221
|
-
if (col.nullPercentage > 50) {
|
|
222
|
-
issues.push(`Column "${col.name}" has ${col.nullPercentage}% missing values`);
|
|
223
|
-
}
|
|
224
|
-
});
|
|
225
|
-
|
|
226
|
-
// Calculate quality score (0-100)
|
|
227
|
-
let score = 100;
|
|
228
|
-
score -= Math.min(missingPercentage * 2, 30);
|
|
229
|
-
score -= Math.min(duplicatePercentage * 1.5, 20);
|
|
230
|
-
score -= Math.min(issues.length * 5, 30);
|
|
231
|
-
|
|
232
|
-
return {
|
|
233
|
-
totalCells,
|
|
234
|
-
missingCells,
|
|
235
|
-
missingPercentage,
|
|
236
|
-
duplicateRows,
|
|
237
|
-
duplicatePercentage,
|
|
238
|
-
dataQualityScore: Math.max(0, Math.round(score)),
|
|
239
|
-
issues,
|
|
240
|
-
};
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
function generateInsights(report: AnalysisReport): string[] {
|
|
244
|
-
const insights: string[] = [];
|
|
245
|
-
|
|
246
|
-
// Dataset size insights
|
|
247
|
-
if (report.overview.rowCount < 100) {
|
|
248
|
-
insights.push('Small dataset - consider collecting more data for robust analysis');
|
|
249
|
-
} else if (report.overview.rowCount > 10000) {
|
|
250
|
-
insights.push('Large dataset - suitable for machine learning applications');
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
// Data quality insights
|
|
254
|
-
if (report.quality.dataQualityScore >= 90) {
|
|
255
|
-
insights.push('Excellent data quality - ready for analysis');
|
|
256
|
-
} else if (report.quality.dataQualityScore >= 70) {
|
|
257
|
-
insights.push('Good data quality - minor cleaning recommended');
|
|
258
|
-
} else {
|
|
259
|
-
insights.push('Data quality issues detected - cleaning required before analysis');
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
// Column insights
|
|
263
|
-
const numericCols = report.columns.filter(col => col.dataType === 'numeric');
|
|
264
|
-
const categoricalCols = report.columns.filter(col => col.dataType === 'string' && (col.uniqueCount || 0) <= 20);
|
|
265
|
-
|
|
266
|
-
if (numericCols.length > 3) {
|
|
267
|
-
insights.push(`${numericCols.length} numeric columns - suitable for correlation and regression analysis`);
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
if (categoricalCols.length > 0) {
|
|
271
|
-
insights.push(`${categoricalCols.length} categorical columns - consider segmentation analysis`);
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
// Correlation insights
|
|
275
|
-
if (report.correlationPairs && report.correlationPairs.length > 0) {
|
|
276
|
-
const strongPairs = report.correlationPairs.filter(p => Math.abs(p.correlation) > 0.7);
|
|
277
|
-
if (strongPairs.length > 0) {
|
|
278
|
-
insights.push(`${strongPairs.length} strong correlations found - potential feature engineering opportunities`);
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
// Outlier insights
|
|
283
|
-
const colsWithOutliers = report.columns.filter(col => col.outliers && col.outliers.length > 0);
|
|
284
|
-
if (colsWithOutliers.length > 0) {
|
|
285
|
-
insights.push(`Outliers detected in ${colsWithOutliers.length} columns - review for data errors or special cases`);
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
return insights;
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
// ============================================================================
|
|
292
|
-
|
|
293
|
-
export async function analyzeData(filePath: string, options: AnalysisOptions): Promise<AnalysisReport> {
|
|
294
|
-
const startTime = Date.now();
|
|
295
|
-
|
|
296
|
-
// Read file
|
|
297
|
-
if (options.verbose) {
|
|
298
|
-
log(`Reading file: ${filePath}`);
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
const fileStats = statSync(filePath);
|
|
302
|
-
const fileExt = extname(filePath).toLowerCase();
|
|
303
|
-
const content = readFileSync(filePath, 'utf-8');
|
|
304
|
-
|
|
305
|
-
// Parse data
|
|
306
|
-
let data: any[];
|
|
307
|
-
if (fileExt === '.csv') {
|
|
308
|
-
data = parseCSV(content);
|
|
309
|
-
} else if (fileExt === '.json') {
|
|
310
|
-
data = parseJSON(content);
|
|
311
|
-
} else {
|
|
312
|
-
throw new Error(`Unsupported file type: ${fileExt}`);
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
// Apply sampling
|
|
316
|
-
if (options.sample && data.length > options.sample) {
|
|
317
|
-
if (options.verbose) {
|
|
318
|
-
log(`Sampling first ${options.sample} rows out of ${data.length}`);
|
|
319
|
-
}
|
|
320
|
-
data = data.slice(0, options.sample);
|
|
321
|
-
}
|
|
322
|
-
|
|
323
|
-
if (data.length === 0) {
|
|
324
|
-
throw new Error('No data found in file');
|
|
325
|
-
}
|
|
326
|
-
|
|
327
|
-
// Get column names
|
|
328
|
-
const columnNames = Object.keys(data[0]);
|
|
329
|
-
|
|
330
|
-
if (options.verbose) {
|
|
331
|
-
log(`Analyzing ${data.length} rows and ${columnNames.length} columns...`);
|
|
332
|
-
}
|
|
333
|
-
|
|
334
|
-
// Analyze each column
|
|
335
|
-
const columnStats: ColumnStats[] = columnNames.map(colName => {
|
|
336
|
-
const values = data.map(row => row[colName]);
|
|
337
|
-
return analyzeColumn(colName, values, options);
|
|
338
|
-
});
|
|
339
|
-
|
|
340
|
-
// Correlation analysis
|
|
341
|
-
let correlations: number[][] | undefined;
|
|
342
|
-
let correlationPairs: Array<{ col1: string; col2: string; correlation: number }> | undefined;
|
|
343
|
-
|
|
344
|
-
if (options.correlations) {
|
|
345
|
-
const numericColumns = columnStats
|
|
346
|
-
.filter(col => col.dataType === 'numeric')
|
|
347
|
-
.map(col => col.name);
|
|
348
|
-
|
|
349
|
-
if (numericColumns.length >= 2) {
|
|
350
|
-
if (options.verbose) {
|
|
351
|
-
log(`Calculating correlations for ${numericColumns.length} numeric columns...`);
|
|
352
|
-
}
|
|
353
|
-
const corrResult = analyzeCorrelations(data, numericColumns);
|
|
354
|
-
correlations = corrResult.matrix;
|
|
355
|
-
correlationPairs = corrResult.pairs;
|
|
356
|
-
}
|
|
357
|
-
}
|
|
358
|
-
|
|
359
|
-
// Trend analysis
|
|
360
|
-
let trends: AnalysisReport['trends'];
|
|
361
|
-
if (options.trends) {
|
|
362
|
-
if (options.verbose) {
|
|
363
|
-
log('Analyzing trends...');
|
|
364
|
-
}
|
|
365
|
-
trends = detectTrends(data, columnStats);
|
|
366
|
-
}
|
|
367
|
-
|
|
368
|
-
// Data quality
|
|
369
|
-
const quality = calculateDataQuality(columnStats, data);
|
|
370
|
-
|
|
371
|
-
// Visualization recommendations
|
|
372
|
-
const visualizationRecommendations = generateVisualizationRecommendations(columnStats);
|
|
373
|
-
|
|
374
|
-
// Build report
|
|
375
|
-
const report: AnalysisReport = {
|
|
376
|
-
overview: {
|
|
377
|
-
fileName: basename(filePath),
|
|
378
|
-
fileSize: formatBytes(fileStats.size),
|
|
379
|
-
fileType: fileExt.slice(1).toUpperCase(),
|
|
380
|
-
rowCount: data.length,
|
|
381
|
-
columnCount: columnNames.length,
|
|
382
|
-
memoryUsage: formatBytes(JSON.stringify(data).length),
|
|
383
|
-
processingTime: Date.now() - startTime,
|
|
384
|
-
timestamp: new Date().toISOString(),
|
|
385
|
-
},
|
|
386
|
-
columns: columnStats,
|
|
387
|
-
correlations,
|
|
388
|
-
correlationPairs,
|
|
389
|
-
quality,
|
|
390
|
-
trends,
|
|
391
|
-
visualizationRecommendations,
|
|
392
|
-
insights: [],
|
|
393
|
-
};
|
|
394
|
-
|
|
395
|
-
// Generate insights
|
|
396
|
-
report.insights = generateInsights(report);
|
|
397
|
-
|
|
398
|
-
return report;
|
|
399
|
-
}
|
|
400
|
-
|
|
401
|
-
// ============================================================================
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import { resolve } from 'path';
|
|
2
|
-
import { parseArgs } from 'util';
|
|
3
|
-
|
|
4
|
-
import { log } from './logger';
|
|
5
|
-
import type { AnalysisOptions } from './types';
|
|
6
|
-
|
|
7
|
-
export function parseArguments(): { filePath: string; options: AnalysisOptions } {
|
|
8
|
-
const { values, positionals } = parseArgs({
|
|
9
|
-
args: process.argv.slice(2),
|
|
10
|
-
options: {
|
|
11
|
-
format: { type: 'string', default: 'markdown' },
|
|
12
|
-
output: { type: 'string' },
|
|
13
|
-
correlations: { type: 'boolean', default: false },
|
|
14
|
-
outliers: { type: 'boolean', default: false },
|
|
15
|
-
trends: { type: 'boolean', default: false },
|
|
16
|
-
sample: { type: 'string' },
|
|
17
|
-
percentiles: { type: 'string', default: '25,50,75,90,95' },
|
|
18
|
-
verbose: { type: 'boolean', default: false },
|
|
19
|
-
help: { type: 'boolean', short: 'h' },
|
|
20
|
-
},
|
|
21
|
-
allowPositionals: true,
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
if (values.help) {
|
|
25
|
-
console.log(`
|
|
26
|
-
Analyze Data - Comprehensive data analysis for CSV and JSON files
|
|
27
|
-
|
|
28
|
-
Usage:
|
|
29
|
-
skills run analyze-data -- <file-path> [options]
|
|
30
|
-
|
|
31
|
-
Options:
|
|
32
|
-
--format <fmt> Output format: markdown, json, html (default: markdown)
|
|
33
|
-
--output <path> Save report to file
|
|
34
|
-
--correlations Calculate correlations
|
|
35
|
-
--outliers Detect outliers
|
|
36
|
-
--trends Detect trends
|
|
37
|
-
--sample <n> Analyze only first n rows
|
|
38
|
-
--percentiles <list> Comma-separated percentiles (default: 25,50,75,90,95)
|
|
39
|
-
--verbose Show detailed progress
|
|
40
|
-
--help, -h Show this help
|
|
41
|
-
`);
|
|
42
|
-
process.exit(0);
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
if (positionals.length === 0) {
|
|
46
|
-
log('Error: File path is required', 'error');
|
|
47
|
-
console.log('Usage: skills run analyze-data -- <file-path> [options]');
|
|
48
|
-
process.exit(1);
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
const filePath = resolve(process.cwd(), positionals[0]);
|
|
52
|
-
|
|
53
|
-
return {
|
|
54
|
-
filePath,
|
|
55
|
-
options: {
|
|
56
|
-
format: values.format as 'markdown' | 'json' | 'html',
|
|
57
|
-
output: values.output as string,
|
|
58
|
-
correlations: values.correlations as boolean,
|
|
59
|
-
outliers: values.outliers as boolean,
|
|
60
|
-
trends: values.trends as boolean,
|
|
61
|
-
sample: values.sample ? parseInt(values.sample as string) : undefined,
|
|
62
|
-
percentiles: (values.percentiles as string).split(',').map(Number),
|
|
63
|
-
verbose: values.verbose as boolean,
|
|
64
|
-
}
|
|
65
|
-
};
|
|
66
|
-
}
|