@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
package/skills/monitor/SKILL.md
DELETED
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: monitor
|
|
3
|
-
description: Interact with the open-monitor MCP — check machine health, list processes, kill memory hogs, run doctor, manage cron jobs, trigger cache cleanup
|
|
4
|
-
user_invocable: true
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# monitor
|
|
8
|
-
|
|
9
|
-
Use the `monitor_*` MCP tools from `@hasna/monitor` to help the user manage their machines.
|
|
10
|
-
|
|
11
|
-
## Prerequisites check
|
|
12
|
-
|
|
13
|
-
If any `monitor_*` tool call fails with "tool not found" or "MCP not connected", tell the user:
|
|
14
|
-
|
|
15
|
-
```text
|
|
16
|
-
The open-monitor MCP is not installed. Add it with:
|
|
17
|
-
claude mcp add monitor -- monitor-mcp
|
|
18
|
-
Then restart Claude Code and try again.
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
## Use cases
|
|
22
|
-
|
|
23
|
-
### Check machine health
|
|
24
|
-
**Trigger**: "how is the machine doing?", "machine health", "system status", "is everything ok?"
|
|
25
|
-
|
|
26
|
-
1. Call `monitor_health` (no args, or `machine_id: "local"`)
|
|
27
|
-
2. Call `monitor_snapshot` to get current CPU/memory/disk
|
|
28
|
-
3. Summarize: overall status, any alerts, top resource users
|
|
29
|
-
|
|
30
|
-
### List memory hogs
|
|
31
|
-
**Trigger**: "what's eating memory?", "high memory processes", "memory usage", "what's using RAM?"
|
|
32
|
-
|
|
33
|
-
1. Call `monitor_processes`
|
|
34
|
-
2. Show a table: PID, name, memory (MB), CPU%
|
|
35
|
-
3. Offer to kill any if the user wants
|
|
36
|
-
|
|
37
|
-
### Kill a process
|
|
38
|
-
**Trigger**: "kill pid 1234", "kill process X", "stop process Y"
|
|
39
|
-
|
|
40
|
-
1. Confirm the process name/PID with the user if ambiguous
|
|
41
|
-
2. Call `monitor_kill` with `pid: <pid>` and `signal: "SIGTERM"`
|
|
42
|
-
3. Report the result; if it failed, offer `SIGKILL`
|
|
43
|
-
|
|
44
|
-
### Run doctor
|
|
45
|
-
**Trigger**: "run doctor", "doctor check", "health check", "diagnose"
|
|
46
|
-
|
|
47
|
-
1. Call `monitor_doctor` (optionally with `machine_id`)
|
|
48
|
-
2. Show the full report: status per check, recommended actions
|
|
49
|
-
3. If any checks failed, summarize what to fix
|
|
50
|
-
|
|
51
|
-
### Trigger cache cleanup
|
|
52
|
-
**Trigger**: "clean caches", "clear dev caches", "free up disk", "cleanup npm/bun/pip cache"
|
|
53
|
-
|
|
54
|
-
1. Find the `cache-cleaner` cron job: call `monitor_cron_jobs` with `action: "list"`
|
|
55
|
-
2. Run it with `monitor_cron_jobs`
|
|
56
|
-
3. Report what changed
|
|
57
|
-
|
|
58
|
-
### List cron jobs
|
|
59
|
-
**Trigger**: "show monitor jobs", "what cron jobs are set up?", "monitor schedule"
|
|
60
|
-
|
|
61
|
-
1. Call `monitor_cron_jobs` with `action: "list"`
|
|
62
|
-
2. Show a table: name, schedule, action type, enabled, last run
|
|
63
|
-
3. Offer to enable/disable or run any job
|
|
64
|
-
|
|
65
|
-
## Output style
|
|
66
|
-
|
|
67
|
-
- Use tables for process lists and cron job lists
|
|
68
|
-
- Lead with the summary and keep details below it
|
|
69
|
-
- Always show the machine ID being queried (default: local)
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "monitor",
|
|
3
|
-
"version": "0.1.0",
|
|
4
|
-
"description": "Instruction-set skill for operating the open-monitor MCP",
|
|
5
|
-
"type": "module",
|
|
6
|
-
"main": "src/index.ts",
|
|
7
|
-
"bin": {
|
|
8
|
-
"monitor": "src/index.ts"
|
|
9
|
-
},
|
|
10
|
-
"files": [
|
|
11
|
-
"src",
|
|
12
|
-
"SKILL.md",
|
|
13
|
-
"tsconfig.json"
|
|
14
|
-
],
|
|
15
|
-
"publishConfig": {
|
|
16
|
-
"access": "restricted"
|
|
17
|
-
},
|
|
18
|
-
"keywords": [
|
|
19
|
-
"monitor",
|
|
20
|
-
"mcp",
|
|
21
|
-
"machine",
|
|
22
|
-
"ops",
|
|
23
|
-
"skill"
|
|
24
|
-
],
|
|
25
|
-
"scripts": {
|
|
26
|
-
"start": "bun run src/index.ts",
|
|
27
|
-
"typecheck": "tsc --noEmit"
|
|
28
|
-
},
|
|
29
|
-
"devDependencies": {
|
|
30
|
-
"@types/bun": "latest",
|
|
31
|
-
"typescript": "^5.7.0"
|
|
32
|
-
}
|
|
33
|
-
}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bun
|
|
2
|
-
|
|
3
|
-
const VERSION = "0.1.0";
|
|
4
|
-
|
|
5
|
-
function printHelp(): void {
|
|
6
|
-
console.log(`monitor - Instruction-set skill
|
|
7
|
-
|
|
8
|
-
DESCRIPTION:
|
|
9
|
-
Guides an agent through common open-monitor MCP workflows:
|
|
10
|
-
- machine health and doctor checks
|
|
11
|
-
- process inspection and safe termination
|
|
12
|
-
- cron job inspection and execution
|
|
13
|
-
- cache cleanup and operational summaries
|
|
14
|
-
|
|
15
|
-
USAGE:
|
|
16
|
-
skills docs monitor
|
|
17
|
-
skills install monitor --for claude
|
|
18
|
-
`);
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
const args = process.argv.slice(2);
|
|
22
|
-
|
|
23
|
-
if (args.includes("--version") || args.includes("-v")) {
|
|
24
|
-
console.log(VERSION);
|
|
25
|
-
process.exit(0);
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
if (args.includes("--help") || args.includes("-h") || args.length === 0) {
|
|
29
|
-
printHelp();
|
|
30
|
-
process.exit(0);
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
console.log("This is an instruction-set skill. Install it for an agent with:");
|
|
34
|
-
console.log(" skills install monitor --for claude");
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"extends": "../tsconfig.base.json",
|
|
3
|
-
"compilerOptions": {
|
|
4
|
-
"module": "ESNext",
|
|
5
|
-
"outDir": "./dist",
|
|
6
|
-
"rootDir": "./src",
|
|
7
|
-
"resolveJsonModule": true,
|
|
8
|
-
"noEmit": true
|
|
9
|
-
},
|
|
10
|
-
"include": [
|
|
11
|
-
"src/**/*"
|
|
12
|
-
],
|
|
13
|
-
"exclude": [
|
|
14
|
-
"node_modules",
|
|
15
|
-
"dist"
|
|
16
|
-
]
|
|
17
|
-
}
|
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: one-page-website
|
|
3
|
-
description: Generate a deployable static one-page website — semantic responsive HTML with inlined tokenized CSS, progressive-enhancement JavaScript, dark mode, a section map, copy, and deploy notes. No build step and no external requests.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# One Page Website
|
|
7
|
-
|
|
8
|
-
Generate a complete static one-page site: hero, features, proof, pricing, FAQ,
|
|
9
|
-
and CTA. The output is plain HTML, CSS, and JavaScript that you can open with
|
|
10
|
-
`file://` or drop on any static host. There is no bundler, no framework, no
|
|
11
|
-
webfont fetch, and no third-party request of any kind — which also means no
|
|
12
|
-
API keys and no network access at generation time.
|
|
13
|
-
|
|
14
|
-
## Requirements
|
|
15
|
-
|
|
16
|
-
- Bun (the skill runs as `bun run src/index.ts`).
|
|
17
|
-
- No API keys, no network access, no environment variables.
|
|
18
|
-
- One runtime dependency: `marked`, used only to parse `--copy` markdown. Run
|
|
19
|
-
`bun install` in this skill directory. If it is missing you get
|
|
20
|
-
`Missing dependency 'marked'. Run bun install in this skill directory.`
|
|
21
|
-
|
|
22
|
-
## Usage
|
|
23
|
-
|
|
24
|
-
```bash
|
|
25
|
-
# the whole page from a name and a headline
|
|
26
|
-
skills run one-page-website -- --name "MeterKit" --tagline "Usage billing that finance actually trusts"
|
|
27
|
-
|
|
28
|
-
# short page, bold look
|
|
29
|
-
skills run one-page-website -- "Relay" --sections hero,features,cta --style bold
|
|
30
|
-
|
|
31
|
-
# inject your own copy and lock the brand color
|
|
32
|
-
skills run one-page-website -- --name "MeterKit" --copy ./copy.md --accent "#0F7B7B" -o ./out
|
|
33
|
-
|
|
34
|
-
# name your own feature cards
|
|
35
|
-
skills run one-page-website -- --name "Ledgerly" --features "Double-entry core,Close in a day,Auditor-ready exports"
|
|
36
|
-
|
|
37
|
-
# machine-readable summary
|
|
38
|
-
skills run one-page-website -- --name "Relay" --json
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
Then serve it:
|
|
42
|
-
|
|
43
|
-
```bash
|
|
44
|
-
cd out/site && python3 -m http.server 8000
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
Run the skill directly from its directory with `bun run src/index.ts --help`.
|
|
48
|
-
|
|
49
|
-
## Options
|
|
50
|
-
|
|
51
|
-
| Option | Description | Default |
|
|
52
|
-
|--------|-------------|---------|
|
|
53
|
-
| `--name <text>` | Brand or product name. A positional string also works. | required |
|
|
54
|
-
| `--tagline <text>` | Hero headline. | generated from the name |
|
|
55
|
-
| `--sections <list>` | Comma list drawn from `hero,features,proof,pricing,faq,cta`. Unknown names fail with the valid list. `hero` is always included. | all six |
|
|
56
|
-
| `--style <text>` | Style direction, matched against the presets below. | `clean` |
|
|
57
|
-
| `--copy <file>` | Markdown file whose headings override the generated copy. See below. | none |
|
|
58
|
-
| `--goal <text>` | Primary CTA label, also used for the closing heading. | `Book a demo` |
|
|
59
|
-
| `--audience <text>` | Who the page is for. Appears in the lead and the testimonial. | `software teams` |
|
|
60
|
-
| `--features <list>` | Comma list of feature card titles. | generated |
|
|
61
|
-
| `--accent <hex>` | Force the accent color. | from the style preset |
|
|
62
|
-
| `--output <dir>`, `-o` | Output directory. | `./one-page-website` |
|
|
63
|
-
| `--json` | Print the run summary as JSON on stdout. | off |
|
|
64
|
-
| `--help` | Show help and exit 0. | |
|
|
65
|
-
| `--version` | Print the version. | |
|
|
66
|
-
|
|
67
|
-
### Style presets
|
|
68
|
-
|
|
69
|
-
| Preset | Triggers on | Look |
|
|
70
|
-
|--------|-------------|------|
|
|
71
|
-
| `clean` (default) | clean, polished, quiet, refined, saas, minimal, crisp | System sans, blue accent, 10px radii |
|
|
72
|
-
| `editorial` | editorial, magazine, serif, print, sharp | Serif display face, near-square corners, red accent |
|
|
73
|
-
| `bold` | bold, loud, playful, vivid, energetic, startup | Heavy 800-weight headings, large radii, magenta accent |
|
|
74
|
-
| `warm` | warm, human, friendly, approachable, amber | Amber accent, soft radii |
|
|
75
|
-
| `technical` | technical, developer, mono, terminal, engineering, infra | Monospace display face, tight radii, teal accent |
|
|
76
|
-
|
|
77
|
-
Presets set CSS custom properties only. Everything downstream — dark mode, both
|
|
78
|
-
button variants, the CTA band — derives from those tokens.
|
|
79
|
-
|
|
80
|
-
## Using `--copy`
|
|
81
|
-
|
|
82
|
-
Point `--copy` at a markdown file. The mapping is:
|
|
83
|
-
|
|
84
|
-
- An `# H1` becomes the hero headline.
|
|
85
|
-
- Any prose before the first `## H2` becomes the hero lead.
|
|
86
|
-
- An `## H2` whose slug matches a section id (`features`, `proof`, `pricing`,
|
|
87
|
-
`faq`, `cta`, `hero`) has its body rendered into that section as rich text,
|
|
88
|
-
above the generated content.
|
|
89
|
-
- Any other `## H2` becomes a new section with its own id, nav entry, and
|
|
90
|
-
anchor, inserted just before the CTA.
|
|
91
|
-
|
|
92
|
-
Markdown lists, tables, code blocks, and blockquotes are all styled by the
|
|
93
|
-
`.rich-text` rules. Run once without `--copy`, edit the emitted `copy.md`, then
|
|
94
|
-
re-run with `--copy copy.md`.
|
|
95
|
-
|
|
96
|
-
## Outputs
|
|
97
|
-
|
|
98
|
-
| File | Contents |
|
|
99
|
-
|------|----------|
|
|
100
|
-
| `site/index.html` | The page. Stylesheet inlined in `<style>` so a cold visit is one request. |
|
|
101
|
-
| `site/styles.css` | The identical stylesheet as a standalone file, if you prefer to link it. |
|
|
102
|
-
| `site/script.js` | Mobile nav, single-open FAQ, smooth scroll with focus management, scrollspy, header shadow. |
|
|
103
|
-
| `site/README.md` | How to serve it, how to split the CSS, what each token does. |
|
|
104
|
-
| `section-map.json` | Every section id, nav label, anchor, and whether a copy override was applied. |
|
|
105
|
-
| `copy.md` | The generated copy in markdown, ready to edit and feed back through `--copy`. |
|
|
106
|
-
| `deploy-notes.md` | Netlify / Cloudflare / GitHub Pages / S3 commands, cache headers, a CSP, and a pre-ship checklist. |
|
|
107
|
-
| `manifest.json` | Every file written, with byte sizes and the run inputs. |
|
|
108
|
-
|
|
109
|
-
## What "progressive enhancement" means here
|
|
110
|
-
|
|
111
|
-
- The FAQ is native `<details>`/`<summary>`. It opens and closes with JavaScript
|
|
112
|
-
disabled; the script only adds single-open behaviour.
|
|
113
|
-
- The mobile menu button ships `hidden` and is revealed by the script. With
|
|
114
|
-
JavaScript off, the nav list stays visible instead of being trapped behind a
|
|
115
|
-
dead button.
|
|
116
|
-
- Anchor clicks move focus to the target element so keyboard and screen reader
|
|
117
|
-
users land where sighted users do.
|
|
118
|
-
- `scroll-behavior: smooth` is inside a `prefers-reduced-motion: no-preference`
|
|
119
|
-
guard, and the script checks the same media query.
|
|
120
|
-
- Dark mode is a `@media (prefers-color-scheme: dark)` block that overrides only
|
|
121
|
-
color tokens.
|
|
122
|
-
|
|
123
|
-
## Accessibility
|
|
124
|
-
|
|
125
|
-
Skip link to `#main`, landmark elements (`header`, `nav[aria-label]`, `main`,
|
|
126
|
-
`footer`), exactly one `<h1>`, `aria-labelledby` on every section,
|
|
127
|
-
`aria-expanded` on the nav toggle, `aria-current` maintained by the scrollspy,
|
|
128
|
-
and a visible `:focus-visible` ring on every interactive element.
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "one-page-website",
|
|
3
|
-
"version": "0.1.0",
|
|
4
|
-
"private": true,
|
|
5
|
-
"description": "Generate a deployable static one-page website with semantic HTML, tokenized CSS, progressive-enhancement JS, and deploy notes",
|
|
6
|
-
"type": "module",
|
|
7
|
-
"main": "src/index.ts",
|
|
8
|
-
"bin": {
|
|
9
|
-
"one-page-website": "src/index.ts"
|
|
10
|
-
},
|
|
11
|
-
"files": [
|
|
12
|
-
"src",
|
|
13
|
-
"SKILL.md",
|
|
14
|
-
"tsconfig.json"
|
|
15
|
-
],
|
|
16
|
-
"keywords": [
|
|
17
|
-
"website",
|
|
18
|
-
"landing-page",
|
|
19
|
-
"static-site",
|
|
20
|
-
"html",
|
|
21
|
-
"skill"
|
|
22
|
-
],
|
|
23
|
-
"scripts": {
|
|
24
|
-
"start": "bun run src/index.ts",
|
|
25
|
-
"typecheck": "tsc --noEmit"
|
|
26
|
-
},
|
|
27
|
-
"dependencies": {
|
|
28
|
-
"marked": "^12.0.2"
|
|
29
|
-
},
|
|
30
|
-
"devDependencies": {
|
|
31
|
-
"@types/bun": "latest",
|
|
32
|
-
"typescript": "^5.7.0"
|
|
33
|
-
}
|
|
34
|
-
}
|
|
@@ -1,336 +0,0 @@
|
|
|
1
|
-
import type { CliOptions, Content, Tokens } from "./types.js";
|
|
2
|
-
|
|
3
|
-
export function fnv1a(input: string): number {
|
|
4
|
-
let hash = 0x811c9dc5;
|
|
5
|
-
for (let i = 0; i < input.length; i += 1) {
|
|
6
|
-
hash ^= input.charCodeAt(i);
|
|
7
|
-
hash = Math.imul(hash, 0x01000193) >>> 0;
|
|
8
|
-
}
|
|
9
|
-
return hash >>> 0;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
function mulberry32(seed: number): () => number {
|
|
13
|
-
let a = seed >>> 0;
|
|
14
|
-
return () => {
|
|
15
|
-
a = (a + 0x6d2b79f5) >>> 0;
|
|
16
|
-
let t = a;
|
|
17
|
-
t = Math.imul(t ^ (t >>> 15), t | 1);
|
|
18
|
-
t ^= t + Math.imul(t ^ (t >>> 7), t | 61);
|
|
19
|
-
return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
|
|
20
|
-
};
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
/* ------------------------------------------------------------------ */
|
|
24
|
-
/* helpers */
|
|
25
|
-
/* ------------------------------------------------------------------ */
|
|
26
|
-
|
|
27
|
-
export function escapeHtml(value: string): string {
|
|
28
|
-
return value.replace(/[&<>"']/g, (char) => {
|
|
29
|
-
switch (char) {
|
|
30
|
-
case "&":
|
|
31
|
-
return "&";
|
|
32
|
-
case "<":
|
|
33
|
-
return "<";
|
|
34
|
-
case ">":
|
|
35
|
-
return ">";
|
|
36
|
-
case '"':
|
|
37
|
-
return """;
|
|
38
|
-
default:
|
|
39
|
-
return "'";
|
|
40
|
-
}
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
export function slugify(value: string): string {
|
|
45
|
-
return (
|
|
46
|
-
value
|
|
47
|
-
.toLowerCase()
|
|
48
|
-
.normalize("NFKD")
|
|
49
|
-
.replace(/[^a-z0-9]+/g, "-")
|
|
50
|
-
.replace(/^-+|-+$/g, "") || "section"
|
|
51
|
-
);
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
export function titleCase(value: string): string {
|
|
55
|
-
return value
|
|
56
|
-
.split(/[-\s]+/)
|
|
57
|
-
.filter(Boolean)
|
|
58
|
-
.map((word) => word[0].toUpperCase() + word.slice(1))
|
|
59
|
-
.join(" ");
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
function clamp(value: number, min: number, max: number): number {
|
|
63
|
-
return Math.min(max, Math.max(min, value));
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
export function hslToHex(h: number, s: number, l: number): string {
|
|
67
|
-
const hue = ((h % 360) + 360) % 360;
|
|
68
|
-
const sat = clamp(s, 0, 1);
|
|
69
|
-
const lit = clamp(l, 0, 1);
|
|
70
|
-
const c = (1 - Math.abs(2 * lit - 1)) * sat;
|
|
71
|
-
const x = c * (1 - Math.abs(((hue / 60) % 2) - 1));
|
|
72
|
-
const m = lit - c / 2;
|
|
73
|
-
let rgb: [number, number, number];
|
|
74
|
-
if (hue < 60) rgb = [c, x, 0];
|
|
75
|
-
else if (hue < 120) rgb = [x, c, 0];
|
|
76
|
-
else if (hue < 180) rgb = [0, c, x];
|
|
77
|
-
else if (hue < 240) rgb = [0, x, c];
|
|
78
|
-
else if (hue < 300) rgb = [x, 0, c];
|
|
79
|
-
else rgb = [c, 0, x];
|
|
80
|
-
const toHex = (v: number) =>
|
|
81
|
-
Math.round((v + m) * 255)
|
|
82
|
-
.toString(16)
|
|
83
|
-
.padStart(2, "0")
|
|
84
|
-
.toUpperCase();
|
|
85
|
-
return `#${toHex(rgb[0])}${toHex(rgb[1])}${toHex(rgb[2])}`;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
export function normalizeHex(token: string): string | null {
|
|
89
|
-
const match = /^#?([0-9a-f]{3}|[0-9a-f]{6})$/i.exec(token.trim());
|
|
90
|
-
if (!match) return null;
|
|
91
|
-
const body = match[1];
|
|
92
|
-
const full =
|
|
93
|
-
body.length === 3
|
|
94
|
-
? body
|
|
95
|
-
.split("")
|
|
96
|
-
.map((c) => c + c)
|
|
97
|
-
.join("")
|
|
98
|
-
: body;
|
|
99
|
-
return `#${full.toUpperCase()}`;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
function hexToRgb(hex: string): [number, number, number] {
|
|
103
|
-
const value = hex.replace("#", "");
|
|
104
|
-
return [
|
|
105
|
-
Number.parseInt(value.slice(0, 2), 16),
|
|
106
|
-
Number.parseInt(value.slice(2, 4), 16),
|
|
107
|
-
Number.parseInt(value.slice(4, 6), 16),
|
|
108
|
-
];
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
function relativeLuminance(hex: string): number {
|
|
112
|
-
const [r, g, b] = hexToRgb(hex).map((channel) => {
|
|
113
|
-
const c = channel / 255;
|
|
114
|
-
return c <= 0.03928 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4;
|
|
115
|
-
});
|
|
116
|
-
return 0.2126 * r + 0.7152 * g + 0.0722 * b;
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
function readableOn(hex: string): string {
|
|
120
|
-
return relativeLuminance(hex) > 0.5 ? "#10131A" : "#FFFFFF";
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
/* ------------------------------------------------------------------ */
|
|
124
|
-
/* style presets */
|
|
125
|
-
/* ------------------------------------------------------------------ */
|
|
126
|
-
|
|
127
|
-
interface StylePreset {
|
|
128
|
-
name: string;
|
|
129
|
-
hue: number;
|
|
130
|
-
keywords: string[];
|
|
131
|
-
fontDisplay: string;
|
|
132
|
-
fontSans: string;
|
|
133
|
-
radius: string;
|
|
134
|
-
radiusLg: string;
|
|
135
|
-
headingWeight: number;
|
|
136
|
-
headingTracking: string;
|
|
137
|
-
measure: string;
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
const SYSTEM_SANS =
|
|
141
|
-
"system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif";
|
|
142
|
-
const SYSTEM_SERIF = "Georgia, Cambria, 'Times New Roman', 'Noto Serif', serif";
|
|
143
|
-
const SYSTEM_MONO =
|
|
144
|
-
"ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas, 'Liberation Mono', monospace";
|
|
145
|
-
|
|
146
|
-
const STYLE_PRESETS: StylePreset[] = [
|
|
147
|
-
{
|
|
148
|
-
name: "editorial",
|
|
149
|
-
hue: 8,
|
|
150
|
-
keywords: ["editorial", "magazine", "serif", "print", "sharp"],
|
|
151
|
-
fontDisplay: SYSTEM_SERIF,
|
|
152
|
-
fontSans: SYSTEM_SANS,
|
|
153
|
-
radius: "4px",
|
|
154
|
-
radiusLg: "8px",
|
|
155
|
-
headingWeight: 700,
|
|
156
|
-
headingTracking: "-0.01em",
|
|
157
|
-
measure: "68ch",
|
|
158
|
-
},
|
|
159
|
-
{
|
|
160
|
-
name: "bold",
|
|
161
|
-
hue: 288,
|
|
162
|
-
keywords: ["bold", "loud", "playful", "vivid", "energetic", "startup"],
|
|
163
|
-
fontDisplay: SYSTEM_SANS,
|
|
164
|
-
fontSans: SYSTEM_SANS,
|
|
165
|
-
radius: "14px",
|
|
166
|
-
radiusLg: "26px",
|
|
167
|
-
headingWeight: 800,
|
|
168
|
-
headingTracking: "-0.035em",
|
|
169
|
-
measure: "60ch",
|
|
170
|
-
},
|
|
171
|
-
{
|
|
172
|
-
name: "warm",
|
|
173
|
-
hue: 24,
|
|
174
|
-
keywords: ["warm", "human", "friendly", "approachable", "amber"],
|
|
175
|
-
fontDisplay: SYSTEM_SANS,
|
|
176
|
-
fontSans: SYSTEM_SANS,
|
|
177
|
-
radius: "12px",
|
|
178
|
-
radiusLg: "20px",
|
|
179
|
-
headingWeight: 700,
|
|
180
|
-
headingTracking: "-0.02em",
|
|
181
|
-
measure: "64ch",
|
|
182
|
-
},
|
|
183
|
-
{
|
|
184
|
-
name: "technical",
|
|
185
|
-
hue: 172,
|
|
186
|
-
keywords: ["technical", "developer", "mono", "terminal", "engineering", "infra"],
|
|
187
|
-
fontDisplay: SYSTEM_MONO,
|
|
188
|
-
fontSans: SYSTEM_SANS,
|
|
189
|
-
radius: "6px",
|
|
190
|
-
radiusLg: "10px",
|
|
191
|
-
headingWeight: 700,
|
|
192
|
-
headingTracking: "-0.02em",
|
|
193
|
-
measure: "66ch",
|
|
194
|
-
},
|
|
195
|
-
{
|
|
196
|
-
name: "clean",
|
|
197
|
-
hue: 222,
|
|
198
|
-
keywords: ["clean", "polished", "quiet", "refined", "saas", "minimal", "crisp"],
|
|
199
|
-
fontDisplay: SYSTEM_SANS,
|
|
200
|
-
fontSans: SYSTEM_SANS,
|
|
201
|
-
radius: "10px",
|
|
202
|
-
radiusLg: "18px",
|
|
203
|
-
headingWeight: 700,
|
|
204
|
-
headingTracking: "-0.025em",
|
|
205
|
-
measure: "64ch",
|
|
206
|
-
},
|
|
207
|
-
];
|
|
208
|
-
|
|
209
|
-
export function selectPreset(style: string): StylePreset {
|
|
210
|
-
const lower = style.toLowerCase();
|
|
211
|
-
for (const preset of STYLE_PRESETS) {
|
|
212
|
-
if (preset.keywords.some((keyword) => lower.includes(keyword))) return preset;
|
|
213
|
-
}
|
|
214
|
-
return STYLE_PRESETS[STYLE_PRESETS.length - 1];
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
export function buildTokens(preset: StylePreset, accentOverride?: string): Tokens {
|
|
218
|
-
const accent = accentOverride ?? hslToHex(preset.hue, 0.68, 0.44);
|
|
219
|
-
return {
|
|
220
|
-
preset: preset.name,
|
|
221
|
-
hue: preset.hue,
|
|
222
|
-
accent,
|
|
223
|
-
accentContrast: readableOn(accent),
|
|
224
|
-
fontDisplay: preset.fontDisplay,
|
|
225
|
-
fontSans: preset.fontSans,
|
|
226
|
-
fontMono: SYSTEM_MONO,
|
|
227
|
-
radius: preset.radius,
|
|
228
|
-
radiusLg: preset.radiusLg,
|
|
229
|
-
headingWeight: preset.headingWeight,
|
|
230
|
-
headingTracking: preset.headingTracking,
|
|
231
|
-
measure: preset.measure,
|
|
232
|
-
};
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
const FEATURE_BANK: Array<{ title: string; body: string }> = [
|
|
236
|
-
{ title: "Set up in minutes", body: "Connect your stack, pick the defaults that fit, and go live the same afternoon. No migration project, no professional services line item." },
|
|
237
|
-
{ title: "Answers, not dashboards", body: "Every view leads with the number that changes a decision, then lets you drill into the rows behind it when you need the detail." },
|
|
238
|
-
{ title: "Built for the whole team", body: "Roles, shared views, and comment threads mean the people who own the outcome do not have to file a ticket to see the data." },
|
|
239
|
-
{ title: "Auditable by default", body: "Every change is recorded with who, what, and when. Export the log whenever finance, security, or a customer asks for it." },
|
|
240
|
-
{ title: "Fits your workflow", body: "A documented API, webhooks, and a CLI so the thing you already built keeps working instead of being replaced." },
|
|
241
|
-
{ title: "Predictable pricing", body: "Usage is metered transparently and shown before it bills. No surprise overage invoice at the end of the quarter." },
|
|
242
|
-
];
|
|
243
|
-
|
|
244
|
-
const FAQ_BANK: Array<{ q: string; a: string }> = [
|
|
245
|
-
{ q: "How long does setup take?", a: "Most teams are live the same day. The guided setup walks through connecting a data source, inviting your team, and turning on the first workflow." },
|
|
246
|
-
{ q: "Can we try it before committing?", a: "Yes. Every plan starts with a full-feature trial, no card required. Nothing is deleted if you decide not to continue — you can export everything." },
|
|
247
|
-
{ q: "How does pricing work?", a: "You pay for the plan tier plus metered usage above the included allowance. Usage is shown live in the app so there is never a surprise invoice." },
|
|
248
|
-
{ q: "Where is our data stored?", a: "Data is encrypted in transit and at rest. You choose the storage region during setup, and you can request a full export or deletion at any time." },
|
|
249
|
-
{ q: "Do you integrate with what we already use?", a: "There is a documented REST API, outbound webhooks, and a CLI. If a first-party integration is missing, the API covers the same surface." },
|
|
250
|
-
{ q: "What does support look like?", a: "Email support on every plan, shared Slack or Teams channel on the higher tiers, and a public status page with incident history." },
|
|
251
|
-
];
|
|
252
|
-
|
|
253
|
-
/* ------------------------------------------------------------------ */
|
|
254
|
-
/* copy generation */
|
|
255
|
-
/* ------------------------------------------------------------------ */
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
export function buildContent(options: CliOptions, seed: number): Content {
|
|
259
|
-
const rng = mulberry32(seed);
|
|
260
|
-
const name = options.name!.trim();
|
|
261
|
-
const audience = options.audience.trim();
|
|
262
|
-
const goal = options.goal.trim();
|
|
263
|
-
const tagline = (options.tagline ?? `${name} makes the hard part of your workflow routine`).trim();
|
|
264
|
-
|
|
265
|
-
const featureTitles = options.features
|
|
266
|
-
? options.features
|
|
267
|
-
.split(",")
|
|
268
|
-
.map((entry) => entry.trim())
|
|
269
|
-
.filter(Boolean)
|
|
270
|
-
: [];
|
|
271
|
-
|
|
272
|
-
const features =
|
|
273
|
-
featureTitles.length > 0
|
|
274
|
-
? featureTitles.slice(0, 6).map((title, index) => ({
|
|
275
|
-
title,
|
|
276
|
-
body: FEATURE_BANK[index % FEATURE_BANK.length].body,
|
|
277
|
-
}))
|
|
278
|
-
: FEATURE_BANK.slice(0, 6);
|
|
279
|
-
|
|
280
|
-
const stats = [
|
|
281
|
-
{ value: `${40 + Math.floor(rng() * 50)}%`, label: "less manual work in the first month" },
|
|
282
|
-
{ value: `${2 + Math.floor(rng() * 8)}x`, label: "faster from question to answer" },
|
|
283
|
-
{ value: `${90 + Math.floor(rng() * 9)}.${Math.floor(rng() * 9)}%`, label: "uptime over the last twelve months" },
|
|
284
|
-
];
|
|
285
|
-
|
|
286
|
-
return {
|
|
287
|
-
name,
|
|
288
|
-
tagline,
|
|
289
|
-
lead: `${name} is built for ${audience}. Replace the spreadsheet-and-screenshot routine with one place that stays current, explains itself, and holds up when someone asks how the number was produced.`,
|
|
290
|
-
eyebrow: "New",
|
|
291
|
-
goal,
|
|
292
|
-
audience,
|
|
293
|
-
features,
|
|
294
|
-
stats,
|
|
295
|
-
quote: {
|
|
296
|
-
text: `We replaced three internal tools and a standing meeting with ${name}. The part I did not expect was how quickly the rest of the team stopped asking me for numbers.`,
|
|
297
|
-
author: "A. Okafor",
|
|
298
|
-
role: `Operations lead, ${audience}`,
|
|
299
|
-
},
|
|
300
|
-
tiers: [
|
|
301
|
-
{
|
|
302
|
-
name: "Starter",
|
|
303
|
-
price: "$0",
|
|
304
|
-
cadence: "forever",
|
|
305
|
-
blurb: "For one person proving it works.",
|
|
306
|
-
items: ["1 workspace", "Up to 3 sources", "7-day history", "Community support"],
|
|
307
|
-
featured: false,
|
|
308
|
-
},
|
|
309
|
-
{
|
|
310
|
-
name: "Team",
|
|
311
|
-
price: `$${20 + Math.floor(rng() * 40)}`,
|
|
312
|
-
cadence: "per seat / month",
|
|
313
|
-
blurb: `For ${audience} running this every week.`,
|
|
314
|
-
items: ["Unlimited sources", "Roles and shared views", "12-month history", "API, webhooks, and CLI", "Email support"],
|
|
315
|
-
featured: true,
|
|
316
|
-
},
|
|
317
|
-
{
|
|
318
|
-
name: "Scale",
|
|
319
|
-
price: "Custom",
|
|
320
|
-
cadence: "annual",
|
|
321
|
-
blurb: "For the version with an audit requirement.",
|
|
322
|
-
items: ["SSO and SCIM", "Region selection", "Audit log export", "99.9% uptime SLA", "Shared Slack channel"],
|
|
323
|
-
featured: false,
|
|
324
|
-
},
|
|
325
|
-
],
|
|
326
|
-
faqs: FAQ_BANK.slice(0, 5),
|
|
327
|
-
ctaHeading: `Ready to ${goal.toLowerCase()}?`,
|
|
328
|
-
ctaBody: `Start with the free tier, or talk to us about the version with the audit trail. Either way you will know within an afternoon whether ${name} fits.`,
|
|
329
|
-
year: new Date().getFullYear(),
|
|
330
|
-
};
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
/* ------------------------------------------------------------------ */
|
|
334
|
-
/* markdown copy overrides */
|
|
335
|
-
/* ------------------------------------------------------------------ */
|
|
336
|
-
|