@hasna/skills 0.1.60 → 0.1.62
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 +189 -60
- package/agent-skills/README.md +41 -0
- package/agent-skills/fleet-package-rollout/SKILL.md +169 -0
- package/agent-skills/inbox/SKILL.md +25 -0
- package/agent-skills/inbox/scripts/inbox +109 -0
- package/agent-skills/inbox/tests/test_registered_sender_id.sh +92 -0
- package/agent-skills/inbox-monitor/SKILL.md +41 -0
- package/agent-skills/inbox-monitor/scripts/inbox_monitor.sh +91 -0
- package/agent-skills/inbox-monitor/scripts/test_inbox_monitor.sh +71 -0
- package/agent-skills/merge-pr/SKILL.md +85 -0
- package/agent-skills/merge-pr/references/merge-safety.md +82 -0
- package/agent-skills/merge-pr/scripts/merge_pr_guard.py +694 -0
- package/agent-skills/merge-pr/scripts/test_merge_pr_guard.py +647 -0
- package/agent-skills/merge-pr/tests/fixtures/multi-commit-synthesized.json +28 -0
- package/agent-skills/merge-pr/tests/fixtures/trailer-free-provider.json +28 -0
- package/agent-skills/skill-goal-execute/SKILL.md +115 -0
- package/agent-skills/skill-login/SKILL.md +109 -0
- package/agent-skills/skill-project-create/SKILL.md +91 -0
- package/agent-skills/skill-publish/SKILL.md +254 -0
- package/agent-skills/skill-publish/scripts/capture_registry.js +47 -0
- package/agent-skills/skill-publish/scripts/publish_with_git_head.sh +143 -0
- package/agent-skills/skill-publish/scripts/test_publish_with_git_head.sh +231 -0
- package/bin/index.js +2760 -3690
- package/bin/mcp.js +1200 -2714
- package/bin/migrate.js +955 -33
- package/bin/server.js +2491 -2113
- package/bin/worker.js +2213 -275
- package/dist/cli/cli.test-utils.d.ts +13 -2
- package/dist/cli/commands/publish.d.ts +30 -0
- package/dist/cli/commands/registry.d.ts +8 -0
- package/dist/index.d.ts +8 -6
- package/dist/index.js +1811 -2797
- package/dist/lib/agent-sync.d.ts +123 -0
- package/dist/lib/api-url.d.ts +34 -0
- package/dist/lib/auth-store.d.ts +21 -5
- package/dist/lib/blog-article.d.ts +37 -0
- package/dist/lib/config.d.ts +56 -2
- package/dist/lib/content-scan.d.ts +62 -9
- package/dist/lib/discovery.d.ts +10 -10
- package/dist/lib/doc-derived-counts.d.ts +56 -0
- package/dist/lib/feedback.d.ts +7 -0
- package/dist/lib/file-bytes.d.ts +43 -0
- package/dist/lib/hosted-skill-set.d.ts +69 -0
- package/dist/lib/infra-identifiers.d.ts +144 -0
- package/dist/lib/installer.d.ts +20 -6
- package/dist/lib/native-storage.d.ts +14 -11
- package/dist/lib/packlist.d.ts +13 -0
- package/dist/lib/portable-skills-files.d.ts +25 -0
- package/dist/lib/portable-skills-types.d.ts +105 -0
- package/dist/lib/portable-skills.d.ts +52 -103
- package/dist/lib/pull.d.ts +41 -0
- package/dist/lib/registry-merge.d.ts +57 -0
- package/dist/lib/registry-types.d.ts +1 -14
- package/dist/lib/registry.d.ts +6 -3
- package/dist/lib/remote-client.d.ts +15 -1
- package/dist/lib/remote-registry.d.ts +1 -1
- package/dist/lib/remote-run-contract.d.ts +0 -7
- package/dist/lib/retired-settings.d.ts +100 -0
- package/dist/lib/run-state.d.ts +14 -0
- package/dist/lib/skill-aliases.d.ts +0 -12
- package/dist/lib/skill-bundle.d.ts +37 -0
- package/dist/lib/vendor-host-code-scan.d.ts +66 -0
- package/dist/lib/vendor-host-folding.d.ts +40 -0
- package/dist/lib/vendor-host-guard.d.ts +47 -0
- package/dist/lib/vendor-host-package.d.ts +42 -0
- package/dist/lib/vendor-host-policy.d.ts +96 -0
- package/dist/lib/vendor-host-url.d.ts +81 -0
- package/dist/mcp/mcp-test-client.d.ts +18 -0
- package/dist/storage.d.ts +1 -1
- package/dist/storage.js +104 -51
- package/docs/skill-standard.md +1 -1
- package/migrations/postgres/0002_org_scoped_skill_registry.sql +72 -0
- package/migrations/sqlite/0001_open_skills_self_hosted.sql +150 -0
- package/migrations/sqlite/0002_org_scoped_skill_registry.sql +47 -0
- package/package.json +4 -4
- package/skills/_common/http-client.ts +17 -2
- package/skills/_common/install.sh +2 -2
- package/skills/_common/installer.ts +4 -5
- package/skills/_common/skill-install.ts +3 -3
- package/skills/ad-creative-pack/SKILL.md +28 -18
- package/skills/ad-creative-pack/package.json +1 -2
- package/skills/analyze-data/SKILL.md +1 -1
- package/skills/analyze-data/src/formatters.ts +2 -2
- package/skills/api-docs-portal/SKILL.md +62 -24
- package/skills/api-docs-portal/package.json +28 -4
- package/skills/api-docs-portal/src/index.ts +919 -0
- package/skills/audio-extract/SKILL.md +1 -1
- package/skills/blog-article/SKILL.md +32 -22
- package/skills/blog-article/package.json +1 -2
- package/skills/brand-assets/SKILL.md +94 -33
- package/skills/brand-assets/package.json +28 -4
- package/skills/brand-assets/src/cli.ts +155 -0
- package/skills/brand-assets/src/constants.ts +8 -0
- package/skills/brand-assets/src/extract.ts +236 -0
- package/skills/brand-assets/src/index.ts +668 -0
- package/skills/brand-assets/src/types.ts +59 -0
- package/skills/brand-kit/SKILL.md +27 -18
- package/skills/brand-kit/package.json +1 -2
- package/skills/compress-video/SKILL.md +1 -1
- package/skills/contract-review-report/SKILL.md +27 -18
- package/skills/contract-review-report/package.json +1 -2
- package/skills/customer-feedback-report/SKILL.md +27 -19
- package/skills/customer-feedback-report/package.json +1 -2
- package/skills/email-sequence/SKILL.md +26 -17
- package/skills/email-sequence/package.json +1 -2
- package/skills/generate-sitemap/src/index.ts +1 -1
- package/skills/invoice-reconciliation/SKILL.md +75 -19
- package/skills/invoice-reconciliation/package.json +29 -4
- package/skills/invoice-reconciliation/src/index.ts +743 -0
- package/skills/{convert → invoice-reconciliation}/tsconfig.json +3 -1
- package/skills/landing-page-pack/SKILL.md +27 -19
- package/skills/landing-page-pack/package.json +1 -2
- package/skills/logo-design/SKILL.md +69 -26
- package/skills/logo-design/package.json +28 -4
- package/skills/logo-design/src/cli.ts +132 -0
- package/skills/logo-design/src/constants.ts +5 -0
- package/skills/logo-design/src/docs.ts +102 -0
- package/skills/logo-design/src/geometry.ts +324 -0
- package/skills/logo-design/src/index.ts +212 -0
- package/skills/logo-design/src/palette.ts +258 -0
- package/skills/logo-design/src/types.ts +50 -0
- package/skills/logo-design/tsconfig.json +11 -2
- package/skills/market-research-report/SKILL.md +28 -18
- package/skills/market-research-report/package.json +2 -3
- package/skills/meeting-pack/SKILL.md +26 -17
- package/skills/meeting-pack/package.json +1 -2
- package/skills/merge-pdfs/src/index.ts +1 -1
- package/skills/migration-plan-pack/SKILL.md +30 -19
- package/skills/migration-plan-pack/package.json +1 -2
- package/skills/one-page-website/SKILL.md +105 -23
- package/skills/one-page-website/package.json +27 -4
- package/skills/one-page-website/src/design.ts +336 -0
- package/skills/one-page-website/src/docs.ts +159 -0
- package/skills/one-page-website/src/index.ts +357 -0
- package/skills/one-page-website/src/page.ts +340 -0
- package/skills/one-page-website/src/styles.ts +508 -0
- package/skills/one-page-website/src/types.ts +78 -0
- package/skills/one-page-website/tsconfig.json +11 -2
- package/skills/pdf-generate/SKILL.md +1 -1
- package/skills/pdf-to-dataset/SKILL.md +64 -21
- package/skills/pdf-to-dataset/package.json +30 -4
- package/skills/pdf-to-dataset/src/index.ts +790 -0
- package/skills/{emoji → pdf-to-dataset}/tsconfig.json +3 -4
- package/skills/pdf-to-markdown/SKILL.md +55 -23
- package/skills/pdf-to-markdown/package.json +28 -4
- package/skills/pdf-to-markdown/src/index.ts +694 -0
- package/skills/pdf-to-markdown/tsconfig.json +11 -4
- package/skills/performance-audit-report/SKILL.md +24 -17
- package/skills/performance-audit-report/package.json +1 -2
- package/skills/pitch-deck/SKILL.md +27 -19
- package/skills/pitch-deck/package.json +1 -2
- package/skills/product-mockup/SKILL.md +85 -23
- package/skills/product-mockup/package.json +25 -4
- package/skills/product-mockup/src/cli.ts +150 -0
- package/skills/product-mockup/src/design.ts +151 -0
- package/skills/product-mockup/src/docs.ts +134 -0
- package/skills/product-mockup/src/index.ts +182 -0
- package/skills/product-mockup/src/render.ts +407 -0
- package/skills/product-mockup/src/types.ts +66 -0
- package/skills/product-mockup/tsconfig.json +11 -2
- package/skills/proposal-pack/SKILL.md +27 -19
- package/skills/proposal-pack/package.json +2 -3
- package/skills/repo-onboarding-report/SKILL.md +26 -16
- package/skills/repo-onboarding-report/package.json +1 -2
- package/skills/security-audit/src/index.ts +1 -1
- package/skills/security-audit-report/SKILL.md +28 -16
- package/skills/security-audit-report/package.json +2 -3
- package/skills/seo-content-pack/SKILL.md +27 -17
- package/skills/seo-content-pack/package.json +1 -2
- package/skills/slide-deck-generator/SKILL.md +70 -21
- package/skills/slide-deck-generator/package.json +31 -4
- package/skills/slide-deck-generator/src/cli.ts +133 -0
- package/skills/slide-deck-generator/src/index.ts +148 -0
- package/skills/slide-deck-generator/src/model.ts +307 -0
- package/skills/slide-deck-generator/src/pptx.ts +143 -0
- package/skills/slide-deck-generator/src/render.ts +248 -0
- package/skills/slide-deck-generator/src/types.ts +114 -0
- package/skills/slide-deck-generator/src/utils.ts +53 -0
- package/skills/slide-deck-generator/tsconfig.json +17 -0
- package/skills/social-content-calendar/SKILL.md +27 -18
- package/skills/social-content-calendar/package.json +1 -2
- package/skills/split-pdf/src/index.ts +1 -1
- package/skills/test-suite-generator/SKILL.md +26 -16
- package/skills/test-suite-generator/package.json +2 -3
- package/skills/todos-plan/SKILL.md +339 -170
- package/skills/video-highlight-pack/SKILL.md +27 -17
- package/skills/video-highlight-pack/package.json +1 -2
- package/dist/cli/onboarding.d.ts +0 -13
- package/dist/lib/hosted-availability.d.ts +0 -13
- package/dist/lib/pricing.d.ts +0 -89
- package/skills/academic-journal-matcher/CLAUDE.md +0 -19
- package/skills/academic-journal-matcher/package.json +0 -27
- package/skills/academic-journal-matcher/src/index.ts +0 -86
- package/skills/academic-journal-matcher/tsconfig.json +0 -10
- package/skills/action-item-router/CLAUDE.md +0 -19
- package/skills/action-item-router/package.json +0 -27
- package/skills/action-item-router/src/index.ts +0 -304
- package/skills/action-item-router/tsconfig.json +0 -10
- package/skills/ad-creative-generator/CLAUDE.md +0 -19
- package/skills/ad-creative-generator/package.json +0 -27
- package/skills/ad-creative-generator/src/index.ts +0 -419
- package/skills/ad-creative-generator/tsconfig.json +0 -10
- package/skills/advanced-math/CLAUDE.md +0 -19
- package/skills/advanced-math/package.json +0 -29
- package/skills/advanced-math/src/calculators.ts +0 -118
- package/skills/advanced-math/src/cli.ts +0 -130
- package/skills/advanced-math/src/conversion.ts +0 -90
- package/skills/advanced-math/src/finance.ts +0 -75
- package/skills/advanced-math/src/formatting.ts +0 -95
- package/skills/advanced-math/src/index.ts +0 -133
- package/skills/advanced-math/src/runtime.ts +0 -49
- package/skills/advanced-math/src/symbolic.ts +0 -110
- package/skills/advanced-math/src/types.ts +0 -36
- package/skills/advanced-math/tsconfig.json +0 -10
- package/skills/anomaly-investigator/CLAUDE.md +0 -19
- package/skills/anomaly-investigator/package.json +0 -27
- package/skills/anomaly-investigator/src/index.ts +0 -311
- package/skills/anomaly-investigator/tsconfig.json +0 -10
- package/skills/apidocs/.env.example +0 -8
- package/skills/apidocs/CLAUDE.md +0 -278
- package/skills/apidocs/LICENSE +0 -192
- package/skills/apidocs/README.md +0 -196
- package/skills/apidocs/api-docs-list.json +0 -186
- package/skills/apidocs/package.json +0 -53
- package/skills/apidocs/scripts/crawl-all.ts +0 -157
- package/skills/apidocs/scripts/publish.ts +0 -210
- package/skills/apidocs/src/commands/add.ts +0 -279
- package/skills/apidocs/src/commands/endpoints.ts +0 -157
- package/skills/apidocs/src/commands/list.ts +0 -51
- package/skills/apidocs/src/commands/query.ts +0 -63
- package/skills/apidocs/src/commands/remove.ts +0 -39
- package/skills/apidocs/src/commands/sync.ts +0 -227
- package/skills/apidocs/src/index.ts +0 -3
- package/skills/apidocs/src/lib/crawler.ts +0 -427
- package/skills/apidocs/src/lib/discovery.ts +0 -244
- package/skills/apidocs/src/lib/embeddings.ts +0 -136
- package/skills/apidocs/src/lib/endpoint-extractor.ts +0 -359
- package/skills/apidocs/src/lib/html-to-md.ts +0 -163
- package/skills/apidocs/src/lib/parser.ts +0 -288
- package/skills/apidocs/src/lib/search.ts +0 -189
- package/skills/apidocs/src/lib/storage.ts +0 -242
- package/skills/apidocs/src/lib/vectors-local.ts +0 -220
- package/skills/apidocs/src/lib/vectors-s3.ts +0 -255
- package/skills/apidocs/src/lib/vectors.ts +0 -97
- package/skills/apidocs/src/types/index.ts +0 -297
- package/skills/apidocs/src/utils/output.ts +0 -132
- package/skills/apidocs/src/utils/paths.ts +0 -126
- package/skills/apidocs/tsconfig.json +0 -24
- package/skills/audio/SKILL.md +0 -35
- package/skills/audio/package.json +0 -11
- package/skills/audio-cleanup-lab/CLAUDE.md +0 -3
- package/skills/audio-cleanup-lab/SKILL.md +0 -81
- package/skills/audio-cleanup-lab/package.json +0 -23
- package/skills/audio-cleanup-lab/src/index.ts +0 -274
- package/skills/audio-cleanup-lab/tsconfig.json +0 -14
- package/skills/audio-transcript-pack/SKILL.md +0 -43
- package/skills/audio-transcript-pack/package.json +0 -11
- package/skills/banner-ad-suite/CLAUDE.md +0 -19
- package/skills/banner-ad-suite/package.json +0 -27
- package/skills/banner-ad-suite/src/index.ts +0 -331
- package/skills/banner-ad-suite/tsconfig.json +0 -10
- package/skills/benchmark-finder/CLAUDE.md +0 -19
- package/skills/benchmark-finder/package.json +0 -27
- package/skills/benchmark-finder/src/index.ts +0 -294
- package/skills/benchmark-finder/tsconfig.json +0 -10
- package/skills/blog-topic-cluster/CLAUDE.md +0 -19
- package/skills/blog-topic-cluster/package.json +0 -27
- package/skills/blog-topic-cluster/src/index.ts +0 -274
- package/skills/blog-topic-cluster/tsconfig.json +0 -10
- package/skills/brand-photo-shoot/SKILL.md +0 -28
- package/skills/brand-photo-shoot/package.json +0 -11
- package/skills/brand-style-guide/CLAUDE.md +0 -20
- package/skills/brand-style-guide/SKILL.md +0 -13
- package/skills/brand-style-guide/package.json +0 -26
- package/skills/brand-style-guide/src/index.ts +0 -288
- package/skills/brand-style-guide/tsconfig.json +0 -22
- package/skills/brand-voice-audit/CLAUDE.md +0 -19
- package/skills/brand-voice-audit/package.json +0 -27
- package/skills/brand-voice-audit/src/index.ts +0 -302
- package/skills/brand-voice-audit/tsconfig.json +0 -10
- package/skills/browse/LICENSE +0 -192
- package/skills/browse/README.md +0 -25
- package/skills/browse/SKILL.md +0 -35
- package/skills/browse/package.json +0 -11
- package/skills/browse/tsconfig.json +0 -22
- package/skills/budget-variance-analyzer/CLAUDE.md +0 -16
- package/skills/budget-variance-analyzer/SKILL.md +0 -83
- package/skills/budget-variance-analyzer/package.json +0 -24
- package/skills/budget-variance-analyzer/src/index.ts +0 -298
- package/skills/budget-variance-analyzer/tsconfig.json +0 -21
- package/skills/calendar-events/CLAUDE.md +0 -19
- package/skills/calendar-events/package.json +0 -27
- package/skills/calendar-events/src/ai-parser.ts +0 -103
- package/skills/calendar-events/src/api.ts +0 -157
- package/skills/calendar-events/src/auth.ts +0 -22
- package/skills/calendar-events/src/config.ts +0 -6
- package/skills/calendar-events/src/format.ts +0 -96
- package/skills/calendar-events/src/help.ts +0 -54
- package/skills/calendar-events/src/index.ts +0 -415
- package/skills/calendar-events/src/logger.ts +0 -34
- package/skills/calendar-events/src/types.ts +0 -67
- package/skills/calendar-events/tsconfig.json +0 -10
- package/skills/campaign-metric-brief/CLAUDE.md +0 -19
- package/skills/campaign-metric-brief/package.json +0 -27
- package/skills/campaign-metric-brief/src/index.ts +0 -307
- package/skills/campaign-metric-brief/tsconfig.json +0 -10
- package/skills/campaign-moodboard/CLAUDE.md +0 -19
- package/skills/campaign-moodboard/package.json +0 -27
- package/skills/campaign-moodboard/src/index.ts +0 -288
- package/skills/campaign-moodboard/tsconfig.json +0 -10
- package/skills/caption-style-stylist/CLAUDE.md +0 -19
- package/skills/caption-style-stylist/package.json +0 -27
- package/skills/caption-style-stylist/src/index.ts +0 -275
- package/skills/caption-style-stylist/tsconfig.json +0 -10
- package/skills/chemistry-calculator/CLAUDE.md +0 -19
- package/skills/chemistry-calculator/package.json +0 -27
- package/skills/chemistry-calculator/src/index.ts +0 -110
- package/skills/chemistry-calculator/tsconfig.json +0 -10
- package/skills/churn-risk-notifier/CLAUDE.md +0 -19
- package/skills/churn-risk-notifier/package.json +0 -27
- package/skills/churn-risk-notifier/src/index.ts +0 -308
- package/skills/churn-risk-notifier/tsconfig.json +0 -10
- package/skills/citation-formatter/CLAUDE.md +0 -19
- package/skills/citation-formatter/package.json +0 -27
- package/skills/citation-formatter/src/index.ts +0 -83
- package/skills/citation-formatter/tsconfig.json +0 -10
- package/skills/classroom-newsletter-kit/CLAUDE.md +0 -19
- package/skills/classroom-newsletter-kit/package.json +0 -27
- package/skills/classroom-newsletter-kit/src/index.ts +0 -293
- package/skills/classroom-newsletter-kit/tsconfig.json +0 -10
- package/skills/color-palette-harmonizer/CLAUDE.md +0 -19
- package/skills/color-palette-harmonizer/package.json +0 -27
- package/skills/color-palette-harmonizer/src/index.ts +0 -278
- package/skills/color-palette-harmonizer/tsconfig.json +0 -10
- package/skills/colorextract/SKILL.md +0 -35
- package/skills/colorextract/bun.lock +0 -102
- package/skills/colorextract/package.json +0 -25
- package/skills/colorextract/src/index.ts +0 -405
- package/skills/competitor-ad-analyzer/CLAUDE.md +0 -19
- package/skills/competitor-ad-analyzer/package.json +0 -27
- package/skills/competitor-ad-analyzer/src/index.ts +0 -350
- package/skills/competitor-ad-analyzer/tsconfig.json +0 -10
- package/skills/compliance-copy-check/CLAUDE.md +0 -19
- package/skills/compliance-copy-check/package.json +0 -27
- package/skills/compliance-copy-check/src/index.ts +0 -289
- package/skills/compliance-copy-check/tsconfig.json +0 -10
- package/skills/compliance-report-pack/CLAUDE.md +0 -19
- package/skills/compliance-report-pack/package.json +0 -27
- package/skills/compliance-report-pack/src/index.ts +0 -301
- package/skills/compliance-report-pack/tsconfig.json +0 -10
- package/skills/consolelog/.env.example +0 -19
- package/skills/consolelog/CLAUDE.md +0 -157
- package/skills/consolelog/LICENSE +0 -192
- package/skills/consolelog/README.md +0 -239
- package/skills/consolelog/data/.gitkeep +0 -0
- package/skills/consolelog/exports/products-2025-12-14T13-50-53-041Z.csv +0 -16
- package/skills/consolelog/exports/products-2025-12-14T13-50-53-041Z.json +0 -227
- package/skills/consolelog/package.json +0 -40
- package/skills/consolelog/scripts/migrate.ts +0 -26
- package/skills/consolelog/scripts/seed.ts +0 -48
- package/skills/consolelog/src/db/index.ts +0 -44
- package/skills/consolelog/src/db/queries.ts +0 -348
- package/skills/consolelog/src/db/schema.ts +0 -93
- package/skills/consolelog/src/index.ts +0 -3
- package/skills/consolelog/src/lib/config.ts +0 -110
- package/skills/consolelog/src/lib/installer.ts +0 -294
- package/skills/consolelog/src/lib/monitor.ts +0 -194
- package/skills/consolelog/src/lib/types.ts +0 -189
- package/skills/consolelog/src/lib/watcher.ts +0 -207
- package/skills/consolelog/tests/api.test.ts +0 -154
- package/skills/consolelog/tests/config.test.ts +0 -192
- package/skills/consolelog/tests/db.test.ts +0 -447
- package/skills/consolelog/tests/installer.test.ts +0 -155
- package/skills/consolelog/tsconfig.json +0 -24
- package/skills/contract-plainlanguage/CLAUDE.md +0 -19
- package/skills/contract-plainlanguage/package.json +0 -27
- package/skills/contract-plainlanguage/src/index.ts +0 -294
- package/skills/contract-plainlanguage/tsconfig.json +0 -10
- package/skills/convert/.env.example +0 -7
- package/skills/convert/LICENSE +0 -192
- package/skills/convert/README.md +0 -250
- package/skills/convert/SKILL.md +0 -106
- package/skills/convert/package.json +0 -37
- package/skills/convert/src/converters/ai.ts +0 -375
- package/skills/convert/src/converters/data.ts +0 -339
- package/skills/convert/src/converters/document.ts +0 -189
- package/skills/convert/src/converters/image.ts +0 -227
- package/skills/convert/src/converters/index.ts +0 -9
- package/skills/convert/src/converters/pdf.ts +0 -255
- package/skills/convert/src/index-local.ts +0 -568
- package/skills/convert/src/index.ts +0 -4
- package/skills/convert/src/types.ts +0 -192
- package/skills/copytone-translator/CLAUDE.md +0 -19
- package/skills/copytone-translator/package.json +0 -27
- package/skills/copytone-translator/src/index.ts +0 -295
- package/skills/copytone-translator/tsconfig.json +0 -10
- package/skills/create-ebook/CLAUDE.md +0 -19
- package/skills/create-ebook/package.json +0 -27
- package/skills/create-ebook/src/index.ts +0 -637
- package/skills/create-ebook/tsconfig.json +0 -10
- package/skills/crm-note-enhancer/CLAUDE.md +0 -19
- package/skills/crm-note-enhancer/package.json +0 -27
- package/skills/crm-note-enhancer/src/index.ts +0 -317
- package/skills/crm-note-enhancer/tsconfig.json +0 -10
- package/skills/customer-journey-mapper/CLAUDE.md +0 -19
- package/skills/customer-journey-mapper/package.json +0 -27
- package/skills/customer-journey-mapper/src/index.ts +0 -312
- package/skills/customer-journey-mapper/tsconfig.json +0 -10
- package/skills/dashboard-narrator/CLAUDE.md +0 -19
- package/skills/dashboard-narrator/package.json +0 -27
- package/skills/dashboard-narrator/src/index.ts +0 -307
- package/skills/dashboard-narrator/tsconfig.json +0 -10
- package/skills/dataset-health-check/CLAUDE.md +0 -19
- package/skills/dataset-health-check/package.json +0 -27
- package/skills/dataset-health-check/src/index.ts +0 -323
- package/skills/dataset-health-check/tsconfig.json +0 -10
- package/skills/decision-journal/CLAUDE.md +0 -19
- package/skills/decision-journal/package.json +0 -27
- package/skills/decision-journal/src/index.ts +0 -313
- package/skills/decision-journal/tsconfig.json +0 -10
- package/skills/deepresearch/CLAUDE.md +0 -11
- package/skills/deepresearch/README.md +0 -26
- package/skills/deepresearch/SKILL.md +0 -41
- package/skills/deepresearch/package.json +0 -11
- package/skills/deepresearch/tsconfig.json +0 -29
- package/skills/delegation-brief-writer/CLAUDE.md +0 -19
- package/skills/delegation-brief-writer/package.json +0 -27
- package/skills/delegation-brief-writer/src/index.ts +0 -314
- package/skills/delegation-brief-writer/tsconfig.json +0 -10
- package/skills/deploy/LICENSE +0 -192
- package/skills/deploy/README.md +0 -382
- package/skills/deploy/SKILL.md +0 -138
- package/skills/deploy/package.json +0 -18
- package/skills/deploy/src/deployer.ts +0 -256
- package/skills/deploy/src/health.ts +0 -103
- package/skills/deploy/src/hosts.ts +0 -45
- package/skills/deploy/src/http-client.ts +0 -128
- package/skills/deploy/src/index-local.ts +0 -366
- package/skills/deploy/src/index.ts +0 -4
- package/skills/deploy/src/types.ts +0 -56
- package/skills/deploy/tsconfig.json +0 -18
- package/skills/destination-briefing/CLAUDE.md +0 -19
- package/skills/destination-briefing/package.json +0 -27
- package/skills/destination-briefing/src/index.ts +0 -291
- package/skills/destination-briefing/tsconfig.json +0 -10
- package/skills/doc-generate/CLAUDE.md +0 -19
- package/skills/doc-generate/SKILL.md +0 -295
- package/skills/doc-generate/package.json +0 -23
- package/skills/doc-generate/src/ai.ts +0 -50
- package/skills/doc-generate/src/cli.ts +0 -203
- package/skills/doc-generate/src/dependencies.ts +0 -44
- package/skills/doc-generate/src/document-builder.ts +0 -299
- package/skills/doc-generate/src/index.ts +0 -90
- package/skills/doc-generate/src/markdown-parser.ts +0 -125
- package/skills/doc-generate/src/types.ts +0 -68
- package/skills/doc-generate/tsconfig.json +0 -16
- package/skills/domainsearch/.env.example +0 -7
- package/skills/domainsearch/LICENSE +0 -192
- package/skills/domainsearch/SKILL.md +0 -41
- package/skills/domainsearch/package.json +0 -33
- package/skills/domainsearch/src/index.ts +0 -3
- package/skills/domainsearch/src/lib/api-client.ts +0 -181
- package/skills/domainsearch/src/lib/config.ts +0 -72
- package/skills/domainsearch/src/lib/installer.ts +0 -164
- package/skills/domainsearch/tsconfig.json +0 -22
- package/skills/educational-resource-finder/CLAUDE.md +0 -19
- package/skills/educational-resource-finder/package.json +0 -27
- package/skills/educational-resource-finder/src/index.ts +0 -289
- package/skills/educational-resource-finder/tsconfig.json +0 -10
- package/skills/email-campaign/CLAUDE.md +0 -19
- package/skills/email-campaign/package.json +0 -27
- package/skills/email-campaign/src/index.ts +0 -339
- package/skills/email-campaign/tsconfig.json +0 -10
- package/skills/emoji/.env.example +0 -7
- package/skills/emoji/QUICKSTART.md +0 -52
- package/skills/emoji/README.md +0 -175
- package/skills/emoji/SKILL.md +0 -63
- package/skills/emoji/package.json +0 -31
- package/skills/emoji/src/image-processor.ts +0 -143
- package/skills/emoji/src/index.ts +0 -282
- package/skills/emoji/src/prompt-generator.ts +0 -181
- package/skills/emoji/src/providers/gemini.ts +0 -58
- package/skills/emoji/src/providers/openai.ts +0 -55
- package/skills/emoji/src/types.ts +0 -72
- package/skills/exam-readiness-check/CLAUDE.md +0 -19
- package/skills/exam-readiness-check/package.json +0 -27
- package/skills/exam-readiness-check/src/index.ts +0 -289
- package/skills/exam-readiness-check/tsconfig.json +0 -10
- package/skills/excel/CLAUDE.md +0 -19
- package/skills/excel/SKILL.md +0 -38
- package/skills/excel/package.json +0 -30
- package/skills/excel/src/index.ts +0 -644
- package/skills/excel/tsconfig.json +0 -10
- package/skills/extract/.env.example +0 -3
- package/skills/extract/LICENSE +0 -192
- package/skills/extract/README.md +0 -61
- package/skills/extract/SKILL.md +0 -91
- package/skills/extract/package.json +0 -35
- package/skills/extract/src/extractors/image.ts +0 -42
- package/skills/extract/src/extractors/pdf.ts +0 -96
- package/skills/extract/src/index-local.ts +0 -258
- package/skills/extract/src/index.ts +0 -4
- package/skills/extract/src/providers/openai.ts +0 -222
- package/skills/extract/src/types.ts +0 -61
- package/skills/extract/tsconfig.json +0 -19
- package/skills/extract-invoice/CLAUDE.md +0 -19
- package/skills/extract-invoice/package.json +0 -27
- package/skills/extract-invoice/src/cli.ts +0 -97
- package/skills/extract-invoice/src/extractor.ts +0 -170
- package/skills/extract-invoice/src/file-utils.ts +0 -46
- package/skills/extract-invoice/src/formatters.ts +0 -144
- package/skills/extract-invoice/src/index.ts +0 -129
- package/skills/extract-invoice/src/runtime.ts +0 -46
- package/skills/extract-invoice/src/types.ts +0 -88
- package/skills/extract-invoice/tsconfig.json +0 -10
- package/skills/family-activity-curator/CLAUDE.md +0 -19
- package/skills/family-activity-curator/package.json +0 -27
- package/skills/family-activity-curator/src/index.ts +0 -293
- package/skills/family-activity-curator/tsconfig.json +0 -10
- package/skills/faq-packager/CLAUDE.md +0 -19
- package/skills/faq-packager/package.json +0 -27
- package/skills/faq-packager/src/index.ts +0 -292
- package/skills/faq-packager/tsconfig.json +0 -10
- package/skills/feedback-survey-designer/CLAUDE.md +0 -19
- package/skills/feedback-survey-designer/package.json +0 -27
- package/skills/feedback-survey-designer/src/index.ts +0 -299
- package/skills/feedback-survey-designer/tsconfig.json +0 -10
- package/skills/field-trip-planner/CLAUDE.md +0 -19
- package/skills/field-trip-planner/package.json +0 -27
- package/skills/field-trip-planner/src/index.ts +0 -289
- package/skills/field-trip-planner/tsconfig.json +0 -10
- package/skills/forecast-scenario-lab/CLAUDE.md +0 -19
- package/skills/forecast-scenario-lab/package.json +0 -27
- package/skills/forecast-scenario-lab/src/index.ts +0 -314
- package/skills/forecast-scenario-lab/tsconfig.json +0 -10
- package/skills/generate-book-cover/CLAUDE.md +0 -19
- package/skills/generate-book-cover/package.json +0 -11
- package/skills/generate-book-cover/tsconfig.json +0 -10
- package/skills/generate-diagram/CLAUDE.md +0 -19
- package/skills/generate-diagram/package.json +0 -27
- package/skills/generate-diagram/src/index.ts +0 -514
- package/skills/generate-diagram/tsconfig.json +0 -10
- package/skills/generate-documentation/CLAUDE.md +0 -19
- package/skills/generate-documentation/package.json +0 -27
- package/skills/generate-documentation/src/ai.ts +0 -131
- package/skills/generate-documentation/src/cli.ts +0 -71
- package/skills/generate-documentation/src/code-parser.ts +0 -300
- package/skills/generate-documentation/src/file-processing.ts +0 -182
- package/skills/generate-documentation/src/index.ts +0 -65
- package/skills/generate-documentation/src/runtime.ts +0 -35
- package/skills/generate-documentation/src/types.ts +0 -30
- package/skills/generate-documentation/tsconfig.json +0 -10
- package/skills/generate-mock-data/CLAUDE.md +0 -19
- package/skills/generate-mock-data/package.json +0 -29
- package/skills/generate-mock-data/src/ai.ts +0 -102
- package/skills/generate-mock-data/src/formatters.ts +0 -84
- package/skills/generate-mock-data/src/generator.ts +0 -377
- package/skills/generate-mock-data/src/index.ts +0 -201
- package/skills/generate-mock-data/src/logger.ts +0 -37
- package/skills/generate-mock-data/src/presets.ts +0 -110
- package/skills/generate-mock-data/src/types.ts +0 -21
- package/skills/generate-mock-data/tsconfig.json +0 -10
- package/skills/generate-pr-description/CLAUDE.md +0 -19
- package/skills/generate-pr-description/package.json +0 -27
- package/skills/generate-pr-description/src/ai.ts +0 -144
- package/skills/generate-pr-description/src/cli.ts +0 -80
- package/skills/generate-pr-description/src/clipboard.ts +0 -30
- package/skills/generate-pr-description/src/formatters.ts +0 -231
- package/skills/generate-pr-description/src/git.ts +0 -153
- package/skills/generate-pr-description/src/index.ts +0 -114
- package/skills/generate-pr-description/src/types.ts +0 -49
- package/skills/generate-pr-description/tsconfig.json +0 -10
- package/skills/generate-presentation/CLAUDE.md +0 -19
- package/skills/generate-presentation/package.json +0 -27
- package/skills/generate-presentation/src/ai-clients.ts +0 -61
- package/skills/generate-presentation/src/cli.ts +0 -126
- package/skills/generate-presentation/src/index.ts +0 -44
- package/skills/generate-presentation/src/logger.ts +0 -67
- package/skills/generate-presentation/src/presentation-generator.ts +0 -425
- package/skills/generate-presentation/src/runtime.ts +0 -6
- package/skills/generate-presentation/src/security.ts +0 -12
- package/skills/generate-presentation/src/types.ts +0 -28
- package/skills/generate-presentation/tsconfig.json +0 -10
- package/skills/generate-regex/CLAUDE.md +0 -19
- package/skills/generate-regex/package.json +0 -29
- package/skills/generate-regex/src/index.ts +0 -669
- package/skills/generate-regex/tsconfig.json +0 -10
- package/skills/generate-social-posts/CLAUDE.md +0 -19
- package/skills/generate-social-posts/package.json +0 -27
- package/skills/generate-social-posts/src/ai.ts +0 -88
- package/skills/generate-social-posts/src/cli.ts +0 -118
- package/skills/generate-social-posts/src/exporters.ts +0 -126
- package/skills/generate-social-posts/src/generator.ts +0 -130
- package/skills/generate-social-posts/src/index.ts +0 -78
- package/skills/generate-social-posts/src/platforms.ts +0 -39
- package/skills/generate-social-posts/src/runtime.ts +0 -34
- package/skills/generate-social-posts/src/source.ts +0 -116
- package/skills/generate-social-posts/src/types.ts +0 -58
- package/skills/generate-social-posts/tsconfig.json +0 -10
- package/skills/generate-sql/CLAUDE.md +0 -19
- package/skills/generate-sql/package.json +0 -27
- package/skills/generate-sql/src/index.ts +0 -636
- package/skills/generate-sql/tsconfig.json +0 -10
- package/skills/github-manager/CLAUDE.md +0 -19
- package/skills/github-manager/package.json +0 -29
- package/skills/github-manager/src/index.ts +0 -101
- package/skills/github-manager/tsconfig.json +0 -10
- package/skills/gmail/CLAUDE.md +0 -19
- package/skills/gmail/package.json +0 -27
- package/skills/gmail/src/index.ts +0 -410
- package/skills/gmail/tsconfig.json +0 -10
- package/skills/goal-quarterly-roadmap/CLAUDE.md +0 -19
- package/skills/goal-quarterly-roadmap/package.json +0 -27
- package/skills/goal-quarterly-roadmap/src/index.ts +0 -305
- package/skills/goal-quarterly-roadmap/tsconfig.json +0 -10
- package/skills/grant-application-drafter/CLAUDE.md +0 -19
- package/skills/grant-application-drafter/package.json +0 -27
- package/skills/grant-application-drafter/src/index.ts +0 -309
- package/skills/grant-application-drafter/tsconfig.json +0 -10
- package/skills/grocery-basket-optimizer/CLAUDE.md +0 -19
- package/skills/grocery-basket-optimizer/package.json +0 -27
- package/skills/grocery-basket-optimizer/src/index.ts +0 -304
- package/skills/grocery-basket-optimizer/tsconfig.json +0 -10
- package/skills/guest-communication-suite/CLAUDE.md +0 -19
- package/skills/guest-communication-suite/package.json +0 -27
- package/skills/guest-communication-suite/src/index.ts +0 -312
- package/skills/guest-communication-suite/tsconfig.json +0 -10
- package/skills/habit-reflection-digest/CLAUDE.md +0 -19
- package/skills/habit-reflection-digest/package.json +0 -27
- package/skills/habit-reflection-digest/src/index.ts +0 -308
- package/skills/habit-reflection-digest/tsconfig.json +0 -10
- package/skills/highlight-reel-generator/CLAUDE.md +0 -19
- package/skills/highlight-reel-generator/package.json +0 -27
- package/skills/highlight-reel-generator/src/index.ts +0 -286
- package/skills/highlight-reel-generator/tsconfig.json +0 -10
- package/skills/homework-feedback-coach/CLAUDE.md +0 -19
- package/skills/homework-feedback-coach/package.json +0 -27
- package/skills/homework-feedback-coach/src/index.ts +0 -316
- package/skills/homework-feedback-coach/tsconfig.json +0 -10
- package/skills/household-maintenance-mgr/CLAUDE.md +0 -19
- package/skills/household-maintenance-mgr/package.json +0 -27
- package/skills/household-maintenance-mgr/src/index.ts +0 -293
- package/skills/household-maintenance-mgr/tsconfig.json +0 -10
- package/skills/icon-pack/README.md +0 -28
- package/skills/icon-pack/SKILL.md +0 -23
- package/skills/icon-pack/package.json +0 -11
- package/skills/icon-pack/tsconfig.json +0 -20
- package/skills/image/LICENSE +0 -192
- package/skills/image/README.md +0 -25
- package/skills/image/SKILL.md +0 -49
- package/skills/image/examples/aurora-examples.sh +0 -33
- package/skills/image/examples/google-examples.sh +0 -37
- package/skills/image/examples/openai-examples.sh +0 -35
- package/skills/image/package.json +0 -11
- package/skills/image/tsconfig.json +0 -19
- package/skills/implementation-agent/CLAUDE.md +0 -19
- package/skills/implementation-agent/package.json +0 -29
- package/skills/implementation-agent/src/ai-generation.ts +0 -225
- package/skills/implementation-agent/src/index.ts +0 -608
- package/skills/implementation-agent/src/minimist.d.ts +0 -15
- package/skills/implementation-agent/src/templates.ts +0 -686
- package/skills/implementation-agent/src/types.ts +0 -53
- package/skills/implementation-agent/tsconfig.json +0 -10
- package/skills/inbox-priority-planner/CLAUDE.md +0 -19
- package/skills/inbox-priority-planner/package.json +0 -27
- package/skills/inbox-priority-planner/src/index.ts +0 -309
- package/skills/inbox-priority-planner/tsconfig.json +0 -10
- package/skills/invoice-dispute-helper/CLAUDE.md +0 -19
- package/skills/invoice-dispute-helper/package.json +0 -27
- package/skills/invoice-dispute-helper/src/index.ts +0 -304
- package/skills/invoice-dispute-helper/tsconfig.json +0 -10
- package/skills/itinerary-architect/CLAUDE.md +0 -19
- package/skills/itinerary-architect/package.json +0 -27
- package/skills/itinerary-architect/src/index.ts +0 -313
- package/skills/itinerary-architect/tsconfig.json +0 -10
- package/skills/kpi-digest-generator/CLAUDE.md +0 -19
- package/skills/kpi-digest-generator/package.json +0 -27
- package/skills/kpi-digest-generator/src/index.ts +0 -318
- package/skills/kpi-digest-generator/tsconfig.json +0 -10
- package/skills/lab-notebook-formatter/CLAUDE.md +0 -19
- package/skills/lab-notebook-formatter/package.json +0 -27
- package/skills/lab-notebook-formatter/src/index.ts +0 -88
- package/skills/lab-notebook-formatter/tsconfig.json +0 -10
- package/skills/landing-page-copy/CLAUDE.md +0 -19
- package/skills/landing-page-copy/package.json +0 -27
- package/skills/landing-page-copy/src/index.ts +0 -400
- package/skills/landing-page-copy/tsconfig.json +0 -10
- package/skills/learning-style-profiler/CLAUDE.md +0 -19
- package/skills/learning-style-profiler/package.json +0 -27
- package/skills/learning-style-profiler/src/index.ts +0 -291
- package/skills/learning-style-profiler/tsconfig.json +0 -10
- package/skills/lesson-plan-customizer/CLAUDE.md +0 -19
- package/skills/lesson-plan-customizer/package.json +0 -27
- package/skills/lesson-plan-customizer/src/index.ts +0 -303
- package/skills/lesson-plan-customizer/tsconfig.json +0 -10
- package/skills/livestream-runofshow/CLAUDE.md +0 -19
- package/skills/livestream-runofshow/package.json +0 -27
- package/skills/livestream-runofshow/src/index.ts +0 -299
- package/skills/livestream-runofshow/tsconfig.json +0 -10
- package/skills/longform-structurer/CLAUDE.md +0 -19
- package/skills/longform-structurer/package.json +0 -27
- package/skills/longform-structurer/src/index.ts +0 -293
- package/skills/longform-structurer/tsconfig.json +0 -10
- package/skills/managehook/.env.example +0 -16
- package/skills/managehook/CLAUDE.md +0 -48
- package/skills/managehook/README.md +0 -210
- package/skills/managehook/package.json +0 -24
- package/skills/managehook/scripts/migrate.ts +0 -57
- package/skills/managehook/scripts/seed.ts +0 -58
- package/skills/managehook/src/db/index.ts +0 -37
- package/skills/managehook/src/index.ts +0 -3
- package/skills/managehook/src/lib/api-client.ts +0 -108
- package/skills/managehook/src/lib/config.ts +0 -34
- package/skills/managehook/src/lib/installer.ts +0 -140
- package/skills/managehook/src/lib/service-dir.ts +0 -119
- package/skills/managehook/tsconfig.json +0 -29
- package/skills/manageskill/.env.example +0 -16
- package/skills/manageskill/CLAUDE.md +0 -48
- package/skills/manageskill/README.md +0 -210
- package/skills/manageskill/package.json +0 -24
- package/skills/manageskill/scripts/migrate.ts +0 -57
- package/skills/manageskill/scripts/seed.ts +0 -58
- package/skills/manageskill/src/db/index.ts +0 -37
- package/skills/manageskill/src/index.ts +0 -3
- package/skills/manageskill/src/lib/api-client.ts +0 -108
- package/skills/manageskill/src/lib/config.ts +0 -34
- package/skills/manageskill/src/lib/installer.ts +0 -140
- package/skills/manageskill/src/lib/service-dir.ts +0 -119
- package/skills/manageskill/tsconfig.json +0 -29
- package/skills/mcp-builder/CLAUDE.md +0 -19
- package/skills/mcp-builder/package.json +0 -30
- package/skills/mcp-builder/src/ai-descriptions.ts +0 -37
- package/skills/mcp-builder/src/generators.ts +0 -513
- package/skills/mcp-builder/src/index.ts +0 -62
- package/skills/mcp-builder/src/minimist.d.ts +0 -15
- package/skills/mcp-builder/src/naming.ts +0 -12
- package/skills/mcp-builder/src/options.ts +0 -170
- package/skills/mcp-builder/src/templates.ts +0 -149
- package/skills/mcp-builder/src/types.ts +0 -42
- package/skills/mcp-builder/tsconfig.json +0 -10
- package/skills/meal-plan-designer/CLAUDE.md +0 -19
- package/skills/meal-plan-designer/package.json +0 -27
- package/skills/meal-plan-designer/src/index.ts +0 -301
- package/skills/meal-plan-designer/tsconfig.json +0 -10
- package/skills/meeting-insight-summarizer/CLAUDE.md +0 -19
- package/skills/meeting-insight-summarizer/package.json +0 -27
- package/skills/meeting-insight-summarizer/src/index.ts +0 -316
- package/skills/meeting-insight-summarizer/tsconfig.json +0 -10
- package/skills/microcopy-generator/CLAUDE.md +0 -19
- package/skills/microcopy-generator/package.json +0 -27
- package/skills/microcopy-generator/src/index.ts +0 -303
- package/skills/microcopy-generator/tsconfig.json +0 -10
- package/skills/mindfulness-prompt-cache/CLAUDE.md +0 -19
- package/skills/mindfulness-prompt-cache/package.json +0 -27
- package/skills/mindfulness-prompt-cache/src/index.ts +0 -290
- package/skills/mindfulness-prompt-cache/tsconfig.json +0 -10
- package/skills/music/SKILL.md +0 -33
- package/skills/music/package.json +0 -11
- package/skills/music-album/SKILL.md +0 -37
- package/skills/music-album/package.json +0 -11
- package/skills/notion-manager/CLAUDE.md +0 -19
- package/skills/notion-manager/package.json +0 -29
- package/skills/notion-manager/src/index.ts +0 -105
- package/skills/notion-manager/tsconfig.json +0 -10
- package/skills/npmpublish/CLAUDE.md +0 -30
- package/skills/npmpublish/README.md +0 -83
- package/skills/npmpublish/SKILL.md +0 -70
- package/skills/npmpublish/package.json +0 -41
- package/skills/npmpublish/src/index.ts +0 -192
- package/skills/npmpublish/tsconfig.json +0 -18
- package/skills/onboarding-sequence-builder/CLAUDE.md +0 -19
- package/skills/onboarding-sequence-builder/package.json +0 -27
- package/skills/onboarding-sequence-builder/src/index.ts +0 -321
- package/skills/onboarding-sequence-builder/tsconfig.json +0 -10
- package/skills/onsite-ops-checklist/CLAUDE.md +0 -19
- package/skills/onsite-ops-checklist/package.json +0 -27
- package/skills/onsite-ops-checklist/src/index.ts +0 -307
- package/skills/onsite-ops-checklist/tsconfig.json +0 -10
- package/skills/outreach-cadence-designer/CLAUDE.md +0 -19
- package/skills/outreach-cadence-designer/package.json +0 -27
- package/skills/outreach-cadence-designer/src/index.ts +0 -330
- package/skills/outreach-cadence-designer/tsconfig.json +0 -10
- package/skills/packaging-concept-studio/CLAUDE.md +0 -19
- package/skills/packaging-concept-studio/package.json +0 -27
- package/skills/packaging-concept-studio/src/index.ts +0 -296
- package/skills/packaging-concept-studio/tsconfig.json +0 -10
- package/skills/packing-plan-pro/CLAUDE.md +0 -19
- package/skills/packing-plan-pro/package.json +0 -27
- package/skills/packing-plan-pro/src/index.ts +0 -306
- package/skills/packing-plan-pro/tsconfig.json +0 -10
- package/skills/parent-teacher-brief/CLAUDE.md +0 -19
- package/skills/parent-teacher-brief/package.json +0 -27
- package/skills/parent-teacher-brief/src/index.ts +0 -290
- package/skills/parent-teacher-brief/tsconfig.json +0 -10
- package/skills/partner-kit-assembler/CLAUDE.md +0 -19
- package/skills/partner-kit-assembler/package.json +0 -27
- package/skills/partner-kit-assembler/src/index.ts +0 -313
- package/skills/partner-kit-assembler/tsconfig.json +0 -10
- package/skills/payroll-change-prepper/CLAUDE.md +0 -19
- package/skills/payroll-change-prepper/package.json +0 -27
- package/skills/payroll-change-prepper/src/index.ts +0 -304
- package/skills/payroll-change-prepper/tsconfig.json +0 -10
- package/skills/pdf-read/SKILL.md +0 -56
- package/skills/pdf-read/package.json +0 -11
- package/skills/pdf-read/tsconfig.json +0 -8
- package/skills/persona-based-adwriter/CLAUDE.md +0 -19
- package/skills/persona-based-adwriter/package.json +0 -27
- package/skills/persona-based-adwriter/src/index.ts +0 -285
- package/skills/persona-based-adwriter/tsconfig.json +0 -10
- package/skills/persona-generator/CLAUDE.md +0 -19
- package/skills/persona-generator/package.json +0 -27
- package/skills/persona-generator/src/index.ts +0 -443
- package/skills/persona-generator/tsconfig.json +0 -10
- package/skills/personal-daily-ops/CLAUDE.md +0 -19
- package/skills/personal-daily-ops/package.json +0 -27
- package/skills/personal-daily-ops/src/index.ts +0 -324
- package/skills/personal-daily-ops/tsconfig.json +0 -10
- package/skills/pet-care-scheduler/CLAUDE.md +0 -19
- package/skills/pet-care-scheduler/package.json +0 -27
- package/skills/pet-care-scheduler/src/index.ts +0 -298
- package/skills/pet-care-scheduler/tsconfig.json +0 -10
- package/skills/photo-album/SKILL.md +0 -29
- package/skills/photo-album/package.json +0 -11
- package/skills/photo-album/tsconfig.json +0 -4
- package/skills/playlist-maker/SKILL.md +0 -33
- package/skills/playlist-maker/package.json +0 -11
- package/skills/playlist-maker/tsconfig.json +0 -4
- package/skills/podcast-show-notes/CLAUDE.md +0 -19
- package/skills/podcast-show-notes/package.json +0 -27
- package/skills/podcast-show-notes/src/index.ts +0 -302
- package/skills/podcast-show-notes/tsconfig.json +0 -10
- package/skills/presentation-theme-maker/CLAUDE.md +0 -19
- package/skills/presentation-theme-maker/package.json +0 -27
- package/skills/presentation-theme-maker/src/index.ts +0 -292
- package/skills/presentation-theme-maker/tsconfig.json +0 -10
- package/skills/press-release-drafter/CLAUDE.md +0 -19
- package/skills/press-release-drafter/package.json +0 -27
- package/skills/press-release-drafter/src/index.ts +0 -291
- package/skills/press-release-drafter/tsconfig.json +0 -10
- package/skills/print-collateral-designer/CLAUDE.md +0 -19
- package/skills/print-collateral-designer/package.json +0 -27
- package/skills/print-collateral-designer/src/index.ts +0 -298
- package/skills/print-collateral-designer/tsconfig.json +0 -10
- package/skills/procurement-scorecard/CLAUDE.md +0 -19
- package/skills/procurement-scorecard/package.json +0 -27
- package/skills/procurement-scorecard/src/index.ts +0 -338
- package/skills/procurement-scorecard/tsconfig.json +0 -10
- package/skills/product-demo-script/CLAUDE.md +0 -19
- package/skills/product-demo-script/package.json +0 -27
- package/skills/product-demo-script/src/index.ts +0 -326
- package/skills/product-demo-script/tsconfig.json +0 -10
- package/skills/project-dashboard-reports/SKILL.md +0 -78
- package/skills/project-dashboard-reports/package.json +0 -25
- package/skills/project-dashboard-reports/src/index.ts +0 -67
- package/skills/project-retro-companion/CLAUDE.md +0 -19
- package/skills/project-retro-companion/package.json +0 -27
- package/skills/project-retro-companion/src/index.ts +0 -298
- package/skills/project-retro-companion/tsconfig.json +0 -10
- package/skills/proposal-redline-advisor/CLAUDE.md +0 -19
- package/skills/proposal-redline-advisor/package.json +0 -27
- package/skills/proposal-redline-advisor/src/index.ts +0 -320
- package/skills/proposal-redline-advisor/tsconfig.json +0 -10
- package/skills/read-image/SKILL.md +0 -47
- package/skills/read-image/package.json +0 -33
- package/skills/read-image/src/index.ts +0 -264
- package/skills/read-pdf/SKILL.md +0 -53
- package/skills/read-pdf/package.json +0 -11
- package/skills/remove-background/CLAUDE.md +0 -19
- package/skills/remove-background/package.json +0 -11
- package/skills/remove-background/tsconfig.json +0 -10
- package/skills/risk-disclosure-kit/CLAUDE.md +0 -19
- package/skills/risk-disclosure-kit/package.json +0 -27
- package/skills/risk-disclosure-kit/src/index.ts +0 -307
- package/skills/risk-disclosure-kit/tsconfig.json +0 -10
- package/skills/roi-comparison-tool/CLAUDE.md +0 -19
- package/skills/roi-comparison-tool/package.json +0 -27
- package/skills/roi-comparison-tool/src/index.ts +0 -322
- package/skills/roi-comparison-tool/tsconfig.json +0 -10
- package/skills/sales-call-recapper/CLAUDE.md +0 -19
- package/skills/sales-call-recapper/package.json +0 -27
- package/skills/sales-call-recapper/src/index.ts +0 -300
- package/skills/sales-call-recapper/tsconfig.json +0 -10
- package/skills/salescopy/.env.example +0 -2
- package/skills/salescopy/CLAUDE.md +0 -23
- package/skills/salescopy/LICENSE +0 -192
- package/skills/salescopy/README.md +0 -72
- package/skills/salescopy/package.json +0 -27
- package/skills/salescopy/src/commands/config.ts +0 -115
- package/skills/salescopy/src/commands/generate.ts +0 -179
- package/skills/salescopy/src/commands/sessions.ts +0 -169
- package/skills/salescopy/src/commands/templates.ts +0 -99
- package/skills/salescopy/src/index.ts +0 -3
- package/skills/salescopy/src/lib/generator.ts +0 -197
- package/skills/salescopy/src/lib/storage.ts +0 -191
- package/skills/salescopy/src/types/index.ts +0 -74
- package/skills/salescopy/src/utils/logger.ts +0 -33
- package/skills/salescopy/src/utils/paths.ts +0 -25
- package/skills/salescopy/tsconfig.json +0 -23
- package/skills/scaffold-project/CLAUDE.md +0 -19
- package/skills/scaffold-project/package.json +0 -29
- package/skills/scaffold-project/src/ai-detect.ts +0 -136
- package/skills/scaffold-project/src/file-generators.ts +0 -292
- package/skills/scaffold-project/src/index.ts +0 -240
- package/skills/scaffold-project/src/project-config.ts +0 -338
- package/skills/scaffold-project/src/templates.ts +0 -173
- package/skills/scaffold-project/src/types.ts +0 -58
- package/skills/scaffold-project/tsconfig.json +0 -10
- package/skills/scholarship-tracker/CLAUDE.md +0 -19
- package/skills/scholarship-tracker/package.json +0 -27
- package/skills/scholarship-tracker/src/index.ts +0 -298
- package/skills/scholarship-tracker/tsconfig.json +0 -10
- package/skills/sdk-generator/SKILL.md +0 -45
- package/skills/sdk-generator/package.json +0 -11
- package/skills/sdk-generator/tsconfig.json +0 -8
- package/skills/seating-chart-maker/CLAUDE.md +0 -19
- package/skills/seating-chart-maker/package.json +0 -27
- package/skills/seating-chart-maker/src/index.ts +0 -312
- package/skills/seating-chart-maker/tsconfig.json +0 -10
- package/skills/seo-brief-builder/CLAUDE.md +0 -19
- package/skills/seo-brief-builder/package.json +0 -27
- package/skills/seo-brief-builder/src/index.ts +0 -288
- package/skills/seo-brief-builder/tsconfig.json +0 -10
- package/skills/short-video-pack/SKILL.md +0 -30
- package/skills/short-video-pack/package.json +0 -11
- package/skills/slack-assistant/CLAUDE.md +0 -19
- package/skills/slack-assistant/package.json +0 -29
- package/skills/slack-assistant/src/index.ts +0 -79
- package/skills/slack-assistant/tsconfig.json +0 -10
- package/skills/sleep-routine-analyzer/CLAUDE.md +0 -19
- package/skills/sleep-routine-analyzer/package.json +0 -27
- package/skills/sleep-routine-analyzer/src/index.ts +0 -293
- package/skills/sleep-routine-analyzer/tsconfig.json +0 -10
- package/skills/sms/README.md +0 -33
- package/skills/sms/package.json +0 -35
- package/skills/sms/src/index.ts +0 -335
- package/skills/sms/tsconfig.json +0 -21
- package/skills/social-media-kit/CLAUDE.md +0 -19
- package/skills/social-media-kit/package.json +0 -27
- package/skills/social-media-kit/src/index.ts +0 -281
- package/skills/social-media-kit/tsconfig.json +0 -10
- package/skills/sponsorship-proposal-lab/CLAUDE.md +0 -19
- package/skills/sponsorship-proposal-lab/package.json +0 -27
- package/skills/sponsorship-proposal-lab/src/index.ts +0 -300
- package/skills/sponsorship-proposal-lab/tsconfig.json +0 -10
- package/skills/spreadsheet-cleanroom/CLAUDE.md +0 -19
- package/skills/spreadsheet-cleanroom/package.json +0 -27
- package/skills/spreadsheet-cleanroom/src/index.ts +0 -331
- package/skills/spreadsheet-cleanroom/tsconfig.json +0 -10
- package/skills/stress-relief-playbook/CLAUDE.md +0 -19
- package/skills/stress-relief-playbook/package.json +0 -27
- package/skills/stress-relief-playbook/src/index.ts +0 -298
- package/skills/stress-relief-playbook/tsconfig.json +0 -10
- package/skills/study-guide-builder/CLAUDE.md +0 -19
- package/skills/study-guide-builder/package.json +0 -27
- package/skills/study-guide-builder/src/index.ts +0 -298
- package/skills/study-guide-builder/tsconfig.json +0 -10
- package/skills/subscription-spend-watcher/CLAUDE.md +0 -19
- package/skills/subscription-spend-watcher/package.json +0 -27
- package/skills/subscription-spend-watcher/src/index.ts +0 -312
- package/skills/subscription-spend-watcher/tsconfig.json +0 -10
- package/skills/subtitle/.env.example +0 -2
- package/skills/subtitle/CLAUDE.md +0 -37
- package/skills/subtitle/LICENSE +0 -192
- package/skills/subtitle/README.md +0 -63
- package/skills/subtitle/package.json +0 -43
- package/skills/subtitle/src/commands/config.ts +0 -53
- package/skills/subtitle/src/commands/generate.ts +0 -61
- package/skills/subtitle/src/index.ts +0 -3
- package/skills/subtitle/src/lib/generator.ts +0 -216
- package/skills/subtitle/src/lib/storage.ts +0 -62
- package/skills/subtitle/src/types/index.ts +0 -68
- package/skills/subtitle/src/utils/logger.ts +0 -34
- package/skills/subtitle/src/utils/paths.ts +0 -51
- package/skills/subtitle/tsconfig.json +0 -21
- package/skills/survey-insight-extractor/CLAUDE.md +0 -19
- package/skills/survey-insight-extractor/package.json +0 -27
- package/skills/survey-insight-extractor/src/index.ts +0 -317
- package/skills/survey-insight-extractor/tsconfig.json +0 -10
- package/skills/terraform-generator/CLAUDE.md +0 -19
- package/skills/terraform-generator/package.json +0 -29
- package/skills/terraform-generator/src/index.ts +0 -99
- package/skills/terraform-generator/tsconfig.json +0 -10
- package/skills/testimonial-graphics/CLAUDE.md +0 -19
- package/skills/testimonial-graphics/package.json +0 -27
- package/skills/testimonial-graphics/src/index.ts +0 -303
- package/skills/testimonial-graphics/tsconfig.json +0 -10
- package/skills/timesheet/.env.example +0 -25
- package/skills/timesheet/README.md +0 -235
- package/skills/timesheet/package.json +0 -47
- package/skills/timesheet/scripts/publish.ts +0 -210
- package/skills/timesheet/src/commands/employee.ts +0 -96
- package/skills/timesheet/src/commands/export.ts +0 -29
- package/skills/timesheet/src/commands/generate.ts +0 -102
- package/skills/timesheet/src/commands/holiday.ts +0 -74
- package/skills/timesheet/src/commands/profile.ts +0 -133
- package/skills/timesheet/src/commands/setup.ts +0 -21
- package/skills/timesheet/src/commands/vacation.ts +0 -93
- package/skills/timesheet/src/index.ts +0 -3
- package/skills/timesheet/src/lib/employees.ts +0 -56
- package/skills/timesheet/src/lib/export.ts +0 -123
- package/skills/timesheet/src/lib/holidays.ts +0 -79
- package/skills/timesheet/src/lib/paths.ts +0 -59
- package/skills/timesheet/src/lib/profiles.ts +0 -168
- package/skills/timesheet/src/lib/storage.ts +0 -83
- package/skills/timesheet/src/lib/timesheet.ts +0 -130
- package/skills/timesheet/src/lib/vacations.ts +0 -70
- package/skills/timesheet/src/types/index.ts +0 -96
- package/skills/timesheet/tsconfig.json +0 -29
- package/skills/transcript/LICENSE +0 -192
- package/skills/transcript/README.md +0 -17
- package/skills/transcript/SKILL.md +0 -80
- package/skills/transcript/package.json +0 -11
- package/skills/transcript/tsconfig.json +0 -18
- package/skills/travel-budget-balancer/CLAUDE.md +0 -19
- package/skills/travel-budget-balancer/package.json +0 -27
- package/skills/travel-budget-balancer/src/index.ts +0 -297
- package/skills/travel-budget-balancer/tsconfig.json +0 -10
- package/skills/video/SKILL.md +0 -37
- package/skills/video/package.json +0 -11
- package/skills/video-cut-suggester/CLAUDE.md +0 -19
- package/skills/video-cut-suggester/package.json +0 -27
- package/skills/video-cut-suggester/src/index.ts +0 -304
- package/skills/video-cut-suggester/tsconfig.json +0 -10
- package/skills/video-thumbnail/CLAUDE.md +0 -19
- package/skills/video-thumbnail/package.json +0 -27
- package/skills/video-thumbnail/src/index.ts +0 -356
- package/skills/video-thumbnail/tsconfig.json +0 -10
- package/skills/voiceover-jingle-pack/SKILL.md +0 -28
- package/skills/voiceover-jingle-pack/package.json +0 -11
- package/skills/webcrawling/CLAUDE.md +0 -11
- package/skills/webcrawling/LICENSE +0 -192
- package/skills/webcrawling/README.md +0 -24
- package/skills/webcrawling/package.json +0 -11
- package/skills/webcrawling/tsconfig.json +0 -22
- package/skills/webinar-script-coach/CLAUDE.md +0 -19
- package/skills/webinar-script-coach/package.json +0 -27
- package/skills/webinar-script-coach/src/index.ts +0 -296
- package/skills/webinar-script-coach/tsconfig.json +0 -10
- package/skills/wellness-progress-reporter/CLAUDE.md +0 -19
- package/skills/wellness-progress-reporter/package.json +0 -27
- package/skills/wellness-progress-reporter/src/index.ts +0 -298
- package/skills/wellness-progress-reporter/tsconfig.json +0 -10
- package/skills/workout-cycle-planner/CLAUDE.md +0 -19
- package/skills/workout-cycle-planner/package.json +0 -27
- package/skills/workout-cycle-planner/src/index.ts +0 -299
- package/skills/workout-cycle-planner/tsconfig.json +0 -10
- package/skills/write/.env.example +0 -9
- package/skills/write/LICENSE +0 -192
- package/skills/write/README.md +0 -17
- package/skills/write/SKILL.md +0 -90
- package/skills/write/package.json +0 -32
- package/skills/write/src/agents/image-generator.ts +0 -186
- package/skills/write/src/agents/researcher.ts +0 -61
- package/skills/write/src/agents/writer.ts +0 -99
- package/skills/write/src/index-local.ts +0 -248
- package/skills/write/src/index.ts +0 -4
- package/skills/write/src/orchestrator.ts +0 -171
- package/skills/write/src/types.ts +0 -65
- package/skills/write/tsconfig.json +0 -18
- /package/migrations/{0001_open_skills_self_hosted.sql → postgres/0001_open_skills_self_hosted.sql} +0 -0
- /package/skills/{read-image → api-docs-portal}/tsconfig.json +0 -0
- /package/skills/{read-pdf → brand-assets}/tsconfig.json +0 -0
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Merging the several registries a `skills` install can see into one list.
|
|
3
|
+
*
|
|
4
|
+
* Before this, `--remote` REPLACED the local registry: `skills list --remote` showed the
|
|
5
|
+
* instance's skills and nothing else, so the bundled corpus and anything the operator had
|
|
6
|
+
* written locally vanished from the listing the moment they pointed the CLI at their own
|
|
7
|
+
* server. Since the whole point of publishing is that a machine sees bundled, local, and
|
|
8
|
+
* published skills together, the lists are merged and collisions are resolved by an
|
|
9
|
+
* explicit rule rather than by which list happened to be concatenated last.
|
|
10
|
+
*
|
|
11
|
+
* PRECEDENCE, most local wins:
|
|
12
|
+
*
|
|
13
|
+
* custom > extension > private > private-hosted > remote > upstream > official
|
|
14
|
+
*
|
|
15
|
+
* The rule is "whichever copy this machine would actually use, wins the listing". A skill
|
|
16
|
+
* present in ~/.hasna/skills/installed is the one `skills run` executes, so a listing that
|
|
17
|
+
* described the server's copy instead would be describing something that is not going to
|
|
18
|
+
* run. `remote` beats `official` for the mirror-image reason: an organization that
|
|
19
|
+
* published a skill under a bundled name did so to override the bundled one on their
|
|
20
|
+
* instance, and silently preferring the bundled copy would make publishing an override
|
|
21
|
+
* impossible.
|
|
22
|
+
*
|
|
23
|
+
* Ties inside one source are resolved last-wins, so a caller can order its own inputs.
|
|
24
|
+
*/
|
|
25
|
+
import type { SkillMeta, SkillSource } from "./registry-types.js";
|
|
26
|
+
/** Higher wins. Every SkillSource has an entry; adding a source without one is a type error. */
|
|
27
|
+
export declare const SKILL_SOURCE_PRECEDENCE: Record<SkillSource, number>;
|
|
28
|
+
/**
|
|
29
|
+
* An entry with no `source` at all is treated as `official`.
|
|
30
|
+
*
|
|
31
|
+
* Deliberately the *lowest* rank rather than the highest. Untagged entries come from
|
|
32
|
+
* older payloads and hand-built fixtures, and an unknown provenance losing a collision
|
|
33
|
+
* fails towards the bundled corpus - the copy that is known to exist - instead of letting
|
|
34
|
+
* an unlabelled remote entry silently displace a local skill.
|
|
35
|
+
*/
|
|
36
|
+
export declare function skillSourceRank(skill: Pick<SkillMeta, "source">): number;
|
|
37
|
+
export interface MergedSkillCollision {
|
|
38
|
+
name: string;
|
|
39
|
+
/** The source that won. */
|
|
40
|
+
winner: SkillSource;
|
|
41
|
+
/** Every source that lost, in the order they were supplied. */
|
|
42
|
+
shadowed: SkillSource[];
|
|
43
|
+
}
|
|
44
|
+
export interface MergeSkillRegistriesResult {
|
|
45
|
+
skills: SkillMeta[];
|
|
46
|
+
collisions: MergedSkillCollision[];
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Merge registries by name, keeping the highest-precedence entry for each.
|
|
50
|
+
*
|
|
51
|
+
* Groups are supplied in whatever order the caller likes: the result does not depend on
|
|
52
|
+
* it except for ties within a single source, which resolve last-wins. Output is sorted by
|
|
53
|
+
* name so two callers merging the same inputs print the same list.
|
|
54
|
+
*/
|
|
55
|
+
export declare function mergeSkillRegistries(...groups: Array<SkillMeta[] | undefined | null>): MergeSkillRegistriesResult;
|
|
56
|
+
/** The merged list on its own, for callers that do not care which entries collided. */
|
|
57
|
+
export declare function mergeSkillRegistryLists(...groups: Array<SkillMeta[] | undefined | null>): SkillMeta[];
|
|
@@ -18,22 +18,9 @@ export interface SkillMeta {
|
|
|
18
18
|
* agents. Missing kind defaults to "executable" during migration.
|
|
19
19
|
*/
|
|
20
20
|
kind?: SkillKind;
|
|
21
|
-
pricing?: SkillPricingMetadata;
|
|
22
21
|
availability?: SkillAvailabilityMetadata;
|
|
23
22
|
source?: SkillSource;
|
|
24
23
|
}
|
|
25
|
-
export interface SkillPricingMetadata {
|
|
26
|
-
tier?: "free" | "premium" | string;
|
|
27
|
-
billingUnit?: string;
|
|
28
|
-
costCents?: number;
|
|
29
|
-
formattedCost: string;
|
|
30
|
-
formattedUnitCost?: string;
|
|
31
|
-
unitCount?: number;
|
|
32
|
-
estimated?: boolean;
|
|
33
|
-
quoteDependsOnInput?: boolean;
|
|
34
|
-
quoteRequired?: boolean;
|
|
35
|
-
description?: string;
|
|
36
|
-
}
|
|
37
24
|
export interface SkillAvailabilityMetadata {
|
|
38
25
|
status: "available" | "unavailable";
|
|
39
26
|
code?: string;
|
|
@@ -42,5 +29,5 @@ export interface SkillAvailabilityMetadata {
|
|
|
42
29
|
}
|
|
43
30
|
export declare const CATEGORIES: readonly ["Development Tools", "Business & Marketing", "Productivity & Organization", "Project Management", "Content Generation", "Finance & Compliance", "Data & Analysis", "Media Processing", "Design & Branding", "Web & Browser", "Research & Writing", "Science & Academic", "Education & Learning", "Communication", "Health & Wellness", "Travel & Lifestyle", "Event Management"];
|
|
44
31
|
export type Category = (typeof CATEGORIES)[number];
|
|
45
|
-
export declare const BASIC_SKILL_NAMES: readonly ["
|
|
32
|
+
export declare const BASIC_SKILL_NAMES: readonly ["blog-article", "ad-creative-pack", "email-sequence", "seo-content-pack", "social-content-calendar", "pitch-deck", "proposal-pack", "market-research-report"];
|
|
46
33
|
export type SkillRegistryProfile = "basic" | "all";
|
package/dist/lib/registry.d.ts
CHANGED
|
@@ -6,11 +6,14 @@ import { BASIC_SKILL_NAMES, CATEGORIES, type Category, type SkillMeta, type Skil
|
|
|
6
6
|
export { BASIC_SKILL_NAMES, CATEGORIES, SKILLS };
|
|
7
7
|
export type { Category, SkillMeta, SkillRegistryProfile };
|
|
8
8
|
export declare function isBasicSkillName(name: string): boolean;
|
|
9
|
+
export declare function findExtensionSkillPath(name: string): string | null;
|
|
9
10
|
/**
|
|
10
|
-
* Load the full registry: official skills merged with
|
|
11
|
-
*
|
|
11
|
+
* Load the full registry: official skills merged with a configured private
|
|
12
|
+
* extension checkout and global custom skills from ~/.hasna/skills/installed/<name>/
|
|
13
|
+
* (plus the legacy ~/.hasna/skills/custom/<name>/ migration safety net).
|
|
12
14
|
*
|
|
13
|
-
* Custom skills
|
|
15
|
+
* Custom skills take precedence over extensions, which take precedence over
|
|
16
|
+
* official skills. Extension skills are read in place and never copied into installed/.
|
|
14
17
|
* Results are cached for 5 seconds.
|
|
15
18
|
*/
|
|
16
19
|
export declare function loadRegistry(cwd?: string): SkillMeta[];
|
|
@@ -7,12 +7,26 @@ export declare class RemoteSkillsClient {
|
|
|
7
7
|
listSkills(): Promise<any[]>;
|
|
8
8
|
getSkillMd(slug: string): Promise<string | null>;
|
|
9
9
|
getSkill(slug: string): Promise<any | null>;
|
|
10
|
-
quoteSkill(slug: string, input?: Record<string, unknown>, args?: string[]): Promise<any>;
|
|
11
10
|
submitRun(slug: string, input?: Record<string, unknown>, args?: string[]): Promise<RemoteSkillRunContract>;
|
|
12
11
|
getRun(runId: string): Promise<RemoteSkillRunContract | null>;
|
|
13
12
|
getRunLogs(runId: string): Promise<any[]>;
|
|
14
13
|
listRuns(limit?: number): Promise<any[]>;
|
|
15
14
|
getRunArtifacts(runId: string): Promise<any[]>;
|
|
16
15
|
downloadRunArtifact(runId: string, artifactId: string): Promise<Response>;
|
|
16
|
+
/**
|
|
17
|
+
* Publish a skill to the configured instance.
|
|
18
|
+
*
|
|
19
|
+
* Sent as multipart rather than as JSON with a base64 field. A base64 body would inflate
|
|
20
|
+
* the bundle by a third and would have to pass through the server's JSON reader, whose
|
|
21
|
+
* 1 MB cap exists to keep JSON bodies sane; multipart keeps the tarball on its own path
|
|
22
|
+
* with its own, larger limit.
|
|
23
|
+
*
|
|
24
|
+
* Note the deliberate absence of `request()`: that helper pins
|
|
25
|
+
* `Content-Type: application/json`, and a multipart body whose Content-Type does not
|
|
26
|
+
* carry the generated boundary is unparseable at the other end.
|
|
27
|
+
*/
|
|
28
|
+
publishSkill(manifest: Record<string, unknown>, bundle?: Uint8Array): Promise<Response>;
|
|
29
|
+
deleteSkill(slug: string): Promise<Response>;
|
|
30
|
+
downloadSkillBundle(slug: string): Promise<Response>;
|
|
17
31
|
}
|
|
18
32
|
export declare function createRemoteSkillsClient(): RemoteSkillsClient | null;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Remote registry client.
|
|
3
3
|
*
|
|
4
4
|
* Local registry behavior remains the default. These helpers are opt-in and
|
|
5
|
-
* read from SKILLS_API_URL or config.apiUrl so
|
|
5
|
+
* read from SKILLS_API_URL or config.apiUrl so services can expose
|
|
6
6
|
* a compatible registry API without hard-coding deployment details upstream.
|
|
7
7
|
*/
|
|
8
8
|
import { type SkillsConfig } from "./config.js";
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type { PublicSkillPricing } from "./pricing";
|
|
2
1
|
export declare const REMOTE_SKILL_RUN_CONTRACT_VERSION: 1;
|
|
3
2
|
export interface RemoteSkillRunContract {
|
|
4
3
|
contractVersion: typeof REMOTE_SKILL_RUN_CONTRACT_VERSION;
|
|
@@ -8,9 +7,6 @@ export interface RemoteSkillRunContract {
|
|
|
8
7
|
status?: string;
|
|
9
8
|
exitCode?: number;
|
|
10
9
|
correlationId?: string;
|
|
11
|
-
costCents?: number;
|
|
12
|
-
cost?: string;
|
|
13
|
-
pricing?: PublicSkillPricing;
|
|
14
10
|
createdAt?: string;
|
|
15
11
|
startedAt?: string;
|
|
16
12
|
completedAt?: string;
|
|
@@ -19,11 +15,8 @@ export interface RemoteSkillRunContract {
|
|
|
19
15
|
outputPreview?: unknown;
|
|
20
16
|
errorCode?: string;
|
|
21
17
|
errorMessage?: string;
|
|
22
|
-
creditsUsed?: number;
|
|
23
18
|
error?: string;
|
|
24
19
|
code?: string;
|
|
25
20
|
details?: unknown;
|
|
26
|
-
balance?: string;
|
|
27
|
-
balanceCents?: number;
|
|
28
21
|
}
|
|
29
22
|
export declare function normalizeRemoteSkillRunContract(payload: unknown, fallbackSkill?: string): RemoteSkillRunContract;
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Settings that used to select a deployment mode, and the refusal they now produce.
|
|
3
|
+
*
|
|
4
|
+
* Skills once declared a three-way deployment axis as a label: running on this
|
|
5
|
+
* machine, running against a server somebody operates, running against a
|
|
6
|
+
* vendor-operated one. That axis is gone. Two facts replaced it, and both are read
|
|
7
|
+
* from the configuration itself rather than from a declaration about it:
|
|
8
|
+
*
|
|
9
|
+
* - a server keeps its data in SQLite or in PostgreSQL, decided by the database
|
|
10
|
+
* string it is given (see server/database-url.ts);
|
|
11
|
+
* - a client either has an API origin configured or it does not (see
|
|
12
|
+
* lib/api-url.ts).
|
|
13
|
+
*
|
|
14
|
+
* Deleting the label was not sufficient on its own, and this module is the half
|
|
15
|
+
* that was left. A retired setting which is merely *unread* is the worse of the
|
|
16
|
+
* two failures: an operator who exports a storage-mode variable gets a process on
|
|
17
|
+
* the default SQLite database with no indication that the thing they configured
|
|
18
|
+
* was discarded, and silence there is indistinguishable from success. That is how
|
|
19
|
+
* a deployment ends up writing to a file nobody is backing up. So a retired
|
|
20
|
+
* setting is refused, and the refusal names what replaced it.
|
|
21
|
+
*
|
|
22
|
+
* MATCHED BY SHAPE, NOT BY A LIST OF NAMES. The retired axis was spelled several
|
|
23
|
+
* ways at once across the estate - two prefixes, and both `storage` and
|
|
24
|
+
* `deployment` as the middle word - so enumerating the spellings we happen to
|
|
25
|
+
* remember would let the next one through silently, which is the failure being
|
|
26
|
+
* fixed. A suffix match catches every prefix variant, including ones this repo
|
|
27
|
+
* never used itself.
|
|
28
|
+
*
|
|
29
|
+
* Two discriminations keep that shape from doing damage:
|
|
30
|
+
*
|
|
31
|
+
* - The suffixes are narrow. `*_MODE` alone would swallow live, unrelated
|
|
32
|
+
* settings - SKILLS_TEST_MODE gates self-update in the suite, and SQLite's
|
|
33
|
+
* journal mode is a mode - so only the three that named the removed
|
|
34
|
+
* deployment axis appear below. Anything else called mode is a different axis
|
|
35
|
+
* and none of this module's business.
|
|
36
|
+
* - The match is scoped to this application's variables. Sibling Hasna apps are
|
|
37
|
+
* mid-removal on the same axis and their variables are present in the same
|
|
38
|
+
* shell; refusing to start because a *different* app still exports one would
|
|
39
|
+
* turn this fix into an outage. The caller supplies the token that identifies
|
|
40
|
+
* its own namespace.
|
|
41
|
+
*/
|
|
42
|
+
/**
|
|
43
|
+
* Configuration-file keys that named the removed deployment axis, and the key
|
|
44
|
+
* that replaces each one.
|
|
45
|
+
*
|
|
46
|
+
* A key is retired whatever its value: the fault is asking for a deployment label
|
|
47
|
+
* at all, not asking for a particular one. Listing values instead would accept
|
|
48
|
+
* `mode: "onprem"` while rejecting `mode: "cloud"`, which teaches the reader that
|
|
49
|
+
* the concept survived and only some spellings of it are wrong.
|
|
50
|
+
*/
|
|
51
|
+
export declare const RETIRED_CONFIG_KEYS: Readonly<Record<string, string>>;
|
|
52
|
+
/** Thrown when configuration names a setting the deployment-mode removal deleted. */
|
|
53
|
+
export declare class RetiredSettingError extends Error {
|
|
54
|
+
readonly code = "RETIRED_SETTING";
|
|
55
|
+
/** The retired setting, spelled as the operator wrote it. */
|
|
56
|
+
readonly setting: string;
|
|
57
|
+
constructor(setting: string, message: string);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Whether an environment variable names the removed deployment axis for `app`.
|
|
61
|
+
*
|
|
62
|
+
* @param app token identifying the calling application's variable namespace, so
|
|
63
|
+
* a sibling app's not-yet-removed variable is left alone.
|
|
64
|
+
*/
|
|
65
|
+
export declare function isRetiredModeEnvVar(name: string, app: string): boolean;
|
|
66
|
+
/**
|
|
67
|
+
* Every retired deployment-axis variable for `app` that is actually set.
|
|
68
|
+
*
|
|
69
|
+
* An empty string counts as unset. `export FOO="$BAR"` with BAR unset is what
|
|
70
|
+
* collapses to that, and refusing it would fail a deployment over a value nobody
|
|
71
|
+
* chose.
|
|
72
|
+
*/
|
|
73
|
+
export declare function findRetiredModeEnvVars(env: Record<string, string | undefined>, app: string): {
|
|
74
|
+
name: string;
|
|
75
|
+
value: string;
|
|
76
|
+
}[];
|
|
77
|
+
/**
|
|
78
|
+
* Refuse if the environment names the removed deployment axis.
|
|
79
|
+
*
|
|
80
|
+
* `replacement` is supplied by the caller rather than hardcoded here so the name
|
|
81
|
+
* stays owned by the module that reads it, and so this module needs no imports
|
|
82
|
+
* and can be called from anywhere without an import cycle.
|
|
83
|
+
*
|
|
84
|
+
* @throws RetiredSettingError naming the retired variables, their replacement,
|
|
85
|
+
* and the fix.
|
|
86
|
+
*/
|
|
87
|
+
export declare function assertNoRetiredModeEnvVars(env: Record<string, string | undefined>, options: {
|
|
88
|
+
app: string;
|
|
89
|
+
replacement: string;
|
|
90
|
+
}): void;
|
|
91
|
+
/**
|
|
92
|
+
* Refuse if a configuration object carries a retired deployment-axis key.
|
|
93
|
+
*
|
|
94
|
+
* @param source where the object came from - a file path, or the command that
|
|
95
|
+
* supplied it - so the message points at the thing the operator has to change
|
|
96
|
+
* rather than at "your configuration".
|
|
97
|
+
*
|
|
98
|
+
* @throws RetiredSettingError naming the retired key, its replacement, and the fix.
|
|
99
|
+
*/
|
|
100
|
+
export declare function assertNoRetiredConfigKeys(config: Record<string, unknown>, source: string): void;
|
package/dist/lib/run-state.d.ts
CHANGED
|
@@ -57,4 +57,18 @@ export declare function writeRunLogs(context: SkillRunContext, stdout?: string,
|
|
|
57
57
|
export declare function appendRunEvent(context: SkillRunContext, event: string, data?: Record<string, unknown>): void;
|
|
58
58
|
export declare function listSkillRuns(targetDir?: string, limit?: number): SkillRunRecord[];
|
|
59
59
|
export declare function findSkillRun(runId: string, targetDir?: string): SkillRunRecord | null;
|
|
60
|
+
/**
|
|
61
|
+
* Environment handed to a skill child process so it writes into the project's
|
|
62
|
+
* `.skills` tree instead of its own installation directory.
|
|
63
|
+
*
|
|
64
|
+
* Skills are spawned with `cwd` set to the installed skill package, so every
|
|
65
|
+
* cwd-relative fallback (`process.env.SKILLS_EXPORTS_DIR || "."`,
|
|
66
|
+
* `process.env.SKILLS_OUTPUT_DIR || join(process.cwd(), ".skills")`) resolves
|
|
67
|
+
* inside node_modules unless these are set. The catalog reads three names:
|
|
68
|
+
* SKILLS_OUTPUT_DIR (the `.skills` root, from which skills derive
|
|
69
|
+
* `exports/<skill>` and `logs/<skill>`), plus SKILLS_EXPORTS_DIR and
|
|
70
|
+
* SKILLS_LOGS_DIR (already-resolved directories). SKILLS_EXPORT_DIR is kept
|
|
71
|
+
* for back-compat with anything reading the singular CLI-side name.
|
|
72
|
+
*/
|
|
73
|
+
export declare function skillRunEnv(context: SkillRunContext): Record<string, string>;
|
|
60
74
|
export declare function getRunExportDir(runId: string, skill: string, targetDir?: string): string;
|
|
@@ -1,17 +1,5 @@
|
|
|
1
1
|
export declare const SKILL_ALIASES: {
|
|
2
|
-
readonly transcribe: "transcript";
|
|
3
|
-
readonly "speech-to-text": "transcript";
|
|
4
|
-
readonly "generate-pdf": "pdf-generate";
|
|
5
|
-
readonly "create-pdf": "pdf-generate";
|
|
6
|
-
readonly "generate-doc": "doc-generate";
|
|
7
|
-
readonly "generate-document": "doc-generate";
|
|
8
|
-
readonly "read-document": "doc-read";
|
|
9
|
-
readonly "document-read": "doc-read";
|
|
10
|
-
readonly "pdf-reader": "read-pdf";
|
|
11
|
-
readonly "generate-image": "image";
|
|
12
|
-
readonly "image-generator": "image";
|
|
13
2
|
readonly "create-blog-article": "blog-article";
|
|
14
|
-
readonly "skill-diff": "diff-viewer";
|
|
15
3
|
};
|
|
16
4
|
export type SkillAlias = keyof typeof SKILL_ALIASES;
|
|
17
5
|
export declare function normalizeSkillSlug(name: string): string;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bytes backed by an ArrayBuffer this process owns.
|
|
3
|
+
*
|
|
4
|
+
* Spelled out rather than left as a bare `Uint8Array` because Node's readFileSync and
|
|
5
|
+
* Bun's gzipSync return views over pooled or shared buffers, and passing one of those to
|
|
6
|
+
* `new Response(...)` or letting it outlive the call is how a view ends up describing
|
|
7
|
+
* bytes that belong to something else.
|
|
8
|
+
*/
|
|
9
|
+
export type OwnedBytes = Uint8Array<ArrayBuffer>;
|
|
10
|
+
/** Copy any byte view into a buffer of its own. */
|
|
11
|
+
export declare function ownBytes(view: Uint8Array | ArrayBuffer): OwnedBytes;
|
|
12
|
+
export interface SkillBundleEntry {
|
|
13
|
+
path: string;
|
|
14
|
+
bytes: OwnedBytes;
|
|
15
|
+
mode: number;
|
|
16
|
+
}
|
|
17
|
+
export interface PackedSkillBundle {
|
|
18
|
+
/** The gzipped tar. This is what is uploaded and what the digest is taken over. */
|
|
19
|
+
bytes: OwnedBytes;
|
|
20
|
+
/** Lowercase hex sha-256 of `bytes`. The skill's content address. */
|
|
21
|
+
sha256: string;
|
|
22
|
+
fileCount: number;
|
|
23
|
+
/** Total uncompressed size of the packed files, for a size limit that means something. */
|
|
24
|
+
unpackedByteSize: number;
|
|
25
|
+
/** Relative paths included, sorted. Surfaced so `push --dry-run` can show them. */
|
|
26
|
+
paths: string[];
|
|
27
|
+
}
|
|
28
|
+
export interface PackSkillBundleOptions {
|
|
29
|
+
/** Reject before compressing when the sources exceed this. 0 disables the check. */
|
|
30
|
+
maxUnpackedBytes?: number;
|
|
31
|
+
}
|
|
32
|
+
export declare function sha256Hex(bytes: Uint8Array): string;
|
|
33
|
+
/** Collect the files a bundle would contain, in archive order. */
|
|
34
|
+
export declare function collectSkillBundleEntries(dir: string): SkillBundleEntry[];
|
|
35
|
+
export declare function packSkillBundle(dir: string, options?: PackSkillBundleOptions): PackedSkillBundle;
|
|
36
|
+
/** Inverse of packSkillBundle. Used by the round-trip tests and by any future `pull`. */
|
|
37
|
+
export declare function unpackSkillBundle(bundle: Uint8Array): SkillBundleEntry[];
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { type ScanSource } from "./vendor-host-url.js";
|
|
2
|
+
export declare const CODE_FILE_PATTERN: RegExp;
|
|
3
|
+
export declare function isCodeFile(file: string): boolean;
|
|
4
|
+
/**
|
|
5
|
+
* Where a URL literal sits. Used only for REPORTING — the pass/fail decision is
|
|
6
|
+
* position-independent on purpose, so a syntactic form nobody enumerated here
|
|
7
|
+
* still cannot hide a URL.
|
|
8
|
+
*/
|
|
9
|
+
export type UrlLiteralPosition = "parameter default" | "object property" | "class field" | "variable initializer" | "fallback operand" | "ternary branch" | "call argument" | "return value" | "literal";
|
|
10
|
+
/**
|
|
11
|
+
* A vendor domain written into a string literal, whether or not it forms a URL.
|
|
12
|
+
*
|
|
13
|
+
* The URL-shaped checks are value-dependent: they have to reconstruct what the
|
|
14
|
+
* program will produce, and every reconstruction is a finite set of cases that
|
|
15
|
+
* an attacker can step outside of (`.concat`, `.slice`, `.replace`, a `const`
|
|
16
|
+
* referenced by name, a JSON blob parsed at runtime). This check is
|
|
17
|
+
* value-INDEPENDENT: the vendor's own domain has to appear somewhere in the
|
|
18
|
+
* bytes for the program to reach the vendor, so looking for the domain as a
|
|
19
|
+
* token catches every assembly trick at once.
|
|
20
|
+
*
|
|
21
|
+
* It is a denylist, so it says nothing about a vendor domain nobody has listed —
|
|
22
|
+
* that case is what the URL allowlist is for. The two are deliberately different
|
|
23
|
+
* shapes because they fail in different directions.
|
|
24
|
+
*/
|
|
25
|
+
export type CodeFindingKind =
|
|
26
|
+
/** Host resolves to a domain we operate. */
|
|
27
|
+
"vendor-host"
|
|
28
|
+
/** Host resolves to a domain that is not on APPROVED_CODE_HOSTS. */
|
|
29
|
+
| "unapproved-host"
|
|
30
|
+
/** The TLD is supplied by code, so no host can be certified. */
|
|
31
|
+
| "undeterminable-host"
|
|
32
|
+
/** The file could not be parsed, so its contents were never inspected. */
|
|
33
|
+
| "unparsable"
|
|
34
|
+
/** The bytes could not be decoded as text, so they were never inspected. */
|
|
35
|
+
| "undecodable"
|
|
36
|
+
/** A vendor domain appears in a string literal, in any form. */
|
|
37
|
+
| "vendor-domain-token";
|
|
38
|
+
export interface CodeUrlFinding {
|
|
39
|
+
file: string;
|
|
40
|
+
line: number;
|
|
41
|
+
kind: CodeFindingKind;
|
|
42
|
+
/** True only for `kind === "vendor-host"`. */
|
|
43
|
+
vendor: boolean;
|
|
44
|
+
url?: string;
|
|
45
|
+
host?: string;
|
|
46
|
+
domain?: string;
|
|
47
|
+
position?: UrlLiteralPosition;
|
|
48
|
+
detail?: string;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Every absolute URL a source file can statically produce, found by folding
|
|
52
|
+
* string expressions and walking the AST — never by matching a syntactic shape.
|
|
53
|
+
*
|
|
54
|
+
* Failure to read the file is itself reported. A scanner that returns "clean"
|
|
55
|
+
* for a file it could not parse is worse than no scanner, because it converts an
|
|
56
|
+
* unknown into a certification. One stray byte used to do exactly that.
|
|
57
|
+
*/
|
|
58
|
+
export declare function findCodeUrlLiterals(file: string, content: string): CodeUrlFinding[];
|
|
59
|
+
/**
|
|
60
|
+
* STRONG check over packed executable code.
|
|
61
|
+
*
|
|
62
|
+
* Every finding is a refusal to certify, not only a bad host: an unreadable or
|
|
63
|
+
* unparsable code file is reported, because silence about a file nobody read is
|
|
64
|
+
* indistinguishable from silence about a clean file.
|
|
65
|
+
*/
|
|
66
|
+
export declare function findDisallowedCodeUrls(sources: Iterable<ScanSource>): CodeUrlFinding[];
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import ts from "typescript";
|
|
2
|
+
import { type Sentinels } from "./vendor-host-url.js";
|
|
3
|
+
type FoldSegment = {
|
|
4
|
+
text: string;
|
|
5
|
+
} | {
|
|
6
|
+
hole: ts.Node;
|
|
7
|
+
};
|
|
8
|
+
export interface Folded {
|
|
9
|
+
segments: FoldSegment[];
|
|
10
|
+
/** Sub-expressions that were not constant, so the walker can still scan them. */
|
|
11
|
+
holes: ts.Node[];
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Module-local constant bindings, so `const H = "vendor.invalid"` used by name is
|
|
15
|
+
* resolved rather than treated as an opaque runtime value.
|
|
16
|
+
*
|
|
17
|
+
* Without this, moving the host one `const` away from the URL was enough to turn
|
|
18
|
+
* a hard-coded endpoint into an "undeterminable host", which the annotation
|
|
19
|
+
* carve-outs then waved through. Scope is deliberately shallow — a single
|
|
20
|
+
* assignment to a `const` with a constant initialiser — because anything cleverer
|
|
21
|
+
* would need a type checker, and the guard should be honest about being a
|
|
22
|
+
* syntactic tool.
|
|
23
|
+
*/
|
|
24
|
+
type ConstantBindings = Map<string, string | Map<string, string>>;
|
|
25
|
+
export declare function collectConstantBindings(source: ts.SourceFile): ConstantBindings;
|
|
26
|
+
export declare function fold(node: ts.Node, out: Folded, bindings: ConstantBindings): void;
|
|
27
|
+
/** Is this node the outermost part of a string-building expression? */
|
|
28
|
+
export declare function isFoldRoot(node: ts.Node): boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Render a folded expression two ways, because both are values the program can
|
|
31
|
+
* produce and each hides a different attack:
|
|
32
|
+
*
|
|
33
|
+
* - holes as sentinels: keeps `https://s3.${region}.amazonaws.com` readable as
|
|
34
|
+
* the amazonaws.com host it is, and makes `"https://" + host` visible as a
|
|
35
|
+
* scheme with an undeterminable authority;
|
|
36
|
+
* - holes as empty strings: catches a host split by an interpolation that
|
|
37
|
+
* contributes nothing, e.g. `` `https://ski${""}lls.md` ``.
|
|
38
|
+
*/
|
|
39
|
+
export declare function renderFolded(folded: Folded, sentinels: Sentinels): string[];
|
|
40
|
+
export {};
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* vendor-host-guard.ts — machinery for the R1 boundary checks.
|
|
3
|
+
*
|
|
4
|
+
* R1: unconfigured OSS never produces a URL on a vendor-controlled host.
|
|
5
|
+
*
|
|
6
|
+
* WHAT THIS FILE CHECKS, PRECISELY — read this before trusting its silence.
|
|
7
|
+
*
|
|
8
|
+
* There are two checks with deliberately different strengths, and the
|
|
9
|
+
* difference is the whole design:
|
|
10
|
+
*
|
|
11
|
+
* 1. `findDisallowedCodeUrls` — the STRONG check, over executable code.
|
|
12
|
+
* Every absolute http(s) URL that appears in a *string literal* in a
|
|
13
|
+
* packed `.ts`/`.js`-family file must be on `APPROVED_CODE_HOSTS`.
|
|
14
|
+
* It is an allowlist and it is position-independent: URLs are found by
|
|
15
|
+
* walking the TypeScript AST for string literals, so it does not matter
|
|
16
|
+
* whether the literal sits in a variable initializer, an object property,
|
|
17
|
+
* a function or constructor parameter default, a class field, a ternary
|
|
18
|
+
* branch, a `||`/`??` fallback, or a bare call argument. A host nobody has
|
|
19
|
+
* approved fails — including a vendor domain nobody has thought of yet.
|
|
20
|
+
*
|
|
21
|
+
* An earlier version of this guard matched two hand-written syntactic
|
|
22
|
+
* shapes with regexes. It missed constructor parameter defaults and object
|
|
23
|
+
* properties, which is exactly how the rule gets broken in practice. The
|
|
24
|
+
* AST walk exists because a regex cannot honestly express "a URL literal
|
|
25
|
+
* is reachable as a default, in any position".
|
|
26
|
+
*
|
|
27
|
+
* 2. `findVendorHostReferences` — the WEAK check, over everything else
|
|
28
|
+
* (Markdown, JSON, plain text). It is a denylist keyed on
|
|
29
|
+
* `VENDOR_CONTROLLED_DOMAINS`, so it catches a *known* vendor domain in
|
|
30
|
+
* prose and does NOT catch an unknown one. That limit is real and stated
|
|
31
|
+
* here rather than glossed. It is acceptable only because prose cannot
|
|
32
|
+
* make a request; code can, and code is covered by check 1.
|
|
33
|
+
*
|
|
34
|
+
* Both run over the PACKED FILE LIST rather than `src/`: the `files` negation
|
|
35
|
+
* globs in package.json mean the repository and the published package are
|
|
36
|
+
* different sets of bytes, and only the published set is what a user installs.
|
|
37
|
+
*
|
|
38
|
+
* `typescript` is a devDependency. That is fine: this module is imported only
|
|
39
|
+
* by the test suite and by `scripts/release-guard.ts`, both of which run with
|
|
40
|
+
* devDependencies installed (`prepack` already shells out to `tsc`). Nothing in
|
|
41
|
+
* the published runtime graph imports it.
|
|
42
|
+
*/
|
|
43
|
+
export * from "./vendor-host-policy.js";
|
|
44
|
+
export * from "./vendor-host-url.js";
|
|
45
|
+
export * from "./vendor-host-folding.js";
|
|
46
|
+
export * from "./vendor-host-code-scan.js";
|
|
47
|
+
export * from "./vendor-host-package.js";
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { CodeUrlFinding } from "./vendor-host-code-scan.js";
|
|
2
|
+
import type { ScanSource, VendorHostFinding } from "./vendor-host-url.js";
|
|
3
|
+
export interface PackedFs {
|
|
4
|
+
existsSync: (path: string) => boolean;
|
|
5
|
+
statSync: (path: string) => {
|
|
6
|
+
isFile: () => boolean;
|
|
7
|
+
};
|
|
8
|
+
readFileSync: (path: string) => Buffer;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Read every file in the published package as a scan source.
|
|
12
|
+
*
|
|
13
|
+
* Driven by the packer's own file list rather than by walking `src/`: the `files`
|
|
14
|
+
* negation globs mean the repository and the published tarball are different
|
|
15
|
+
* sets of bytes, and the tarball is what a user installs.
|
|
16
|
+
*
|
|
17
|
+
* Bytes that will not decode are recorded as `undecodable` rather than skipped.
|
|
18
|
+
* Skipping is how a single NUL byte makes a whole file invisible to a scanner.
|
|
19
|
+
*/
|
|
20
|
+
export declare function readPackedSources(packedFiles: readonly string[], root: string, fs: PackedFs, joinPath: (...parts: string[]) => string): ScanSource[];
|
|
21
|
+
export interface EntryPointCoverage {
|
|
22
|
+
path: string;
|
|
23
|
+
packed: boolean;
|
|
24
|
+
read: boolean;
|
|
25
|
+
certified: boolean;
|
|
26
|
+
}
|
|
27
|
+
/** Every path a consumer can `require`/`import`/execute, from package.json. */
|
|
28
|
+
export declare function declaredEntryPoints(manifest: unknown): string[];
|
|
29
|
+
/**
|
|
30
|
+
* Anti-vacuity, per entry point.
|
|
31
|
+
*
|
|
32
|
+
* A global "we scanned more than N files" is satisfiable by files that have
|
|
33
|
+
* nothing to do with the code under test: on an unbuilt tree the skill corpus
|
|
34
|
+
* alone cleared the old threshold while `bin/`, `dist/` and everything they are
|
|
35
|
+
* built from went unscanned. Coverage has to be asserted against the specific
|
|
36
|
+
* artifacts a consumer runs.
|
|
37
|
+
*/
|
|
38
|
+
export declare function checkEntryPointCoverage(manifest: unknown, packedFiles: readonly string[], scanned: ReadonlyMap<string, {
|
|
39
|
+
certified: boolean;
|
|
40
|
+
}>): EntryPointCoverage[];
|
|
41
|
+
export declare function uncoveredEntryPoints(coverage: readonly EntryPointCoverage[]): EntryPointCoverage[];
|
|
42
|
+
export declare function formatFindings(findings: ReadonlyArray<VendorHostFinding | CodeUrlFinding>): string;
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Registrable domains the vendor controls. A URL on one of these fails both
|
|
3
|
+
* checks. Adding a new vendor domain to the codebase without adding it here
|
|
4
|
+
* does NOT make it invisible: check 1 is an allowlist, so an unlisted domain
|
|
5
|
+
* fails as "unapproved" even if nobody has classified it as ours.
|
|
6
|
+
*/
|
|
7
|
+
export declare const VENDOR_CONTROLLED_DOMAINS: readonly string[];
|
|
8
|
+
/**
|
|
9
|
+
* POLICY — third-party endpoint defaults vs vendor endpoint defaults.
|
|
10
|
+
*
|
|
11
|
+
* R1 bans defaulting to hosts *we operate*. It does not ban a bring-your-own-key
|
|
12
|
+
* skill from naming the public API of the provider whose key the user supplies:
|
|
13
|
+
* `api.openai.com` in a skill pointed at the user's own OpenAI account is the
|
|
14
|
+
* provider's published address, not a service we run, and there is no other
|
|
15
|
+
* value it could sensibly take. That is legitimate under R2's "third-party
|
|
16
|
+
* provider the user configures directly (BYO key — documented, never proxied)".
|
|
17
|
+
*
|
|
18
|
+
* So the distinction is explicit rather than accidental:
|
|
19
|
+
*
|
|
20
|
+
* - a default endpoint on a host WE operate → forbidden, always;
|
|
21
|
+
* - a default endpoint on an approved third-party host → allowed;
|
|
22
|
+
* - a default endpoint on any other host → forbidden until
|
|
23
|
+
* reviewed and listed here with a reason.
|
|
24
|
+
*
|
|
25
|
+
* Every entry is a registrable domain plus its justification. This list doubles
|
|
26
|
+
* as the inventory of every host the published code is able to name.
|
|
27
|
+
*/
|
|
28
|
+
export declare const APPROVED_CODE_HOSTS: readonly {
|
|
29
|
+
domain: string;
|
|
30
|
+
reason: string;
|
|
31
|
+
}[];
|
|
32
|
+
/**
|
|
33
|
+
* Exact URLs that may appear despite being on a vendor domain. Matched on the
|
|
34
|
+
* full URL, never on the domain, so a real endpoint on the same domain still
|
|
35
|
+
* fails. Keep minimal and justified.
|
|
36
|
+
*/
|
|
37
|
+
export declare const VENDOR_HOST_URL_EXCEPTIONS: readonly {
|
|
38
|
+
url: string;
|
|
39
|
+
reason: string;
|
|
40
|
+
}[];
|
|
41
|
+
/** Reduce a hostname to its registrable domain (approximate eTLD+1). */
|
|
42
|
+
export declare function registrableDomain(host: string): string;
|
|
43
|
+
export declare function isLoopbackHost(host: string): boolean;
|
|
44
|
+
export declare function isVendorControlledHost(host: string): boolean;
|
|
45
|
+
export declare function isApprovedCodeHost(host: string): boolean;
|
|
46
|
+
/**
|
|
47
|
+
* Packed files allowed to contain a host whose TLD is supplied by `{…}` template
|
|
48
|
+
* syntax (`https://s3.{partitionResult#dnsSuffix}`). These are bundles of the
|
|
49
|
+
* AWS SDK, whose endpoint-rule engine substitutes the DNS suffix per partition.
|
|
50
|
+
*
|
|
51
|
+
* File-scoped on purpose: the carve-out used to be package-wide, which meant any
|
|
52
|
+
* file could park a partial authority next to a runtime value and be exempted.
|
|
53
|
+
* A host completed from a *code* expression is never exempt, in any file.
|
|
54
|
+
*/
|
|
55
|
+
export declare const TEMPLATE_HOST_FILES: readonly {
|
|
56
|
+
file: string;
|
|
57
|
+
reason: string;
|
|
58
|
+
}[];
|
|
59
|
+
export declare function allowsTemplateHost(file: string): boolean;
|
|
60
|
+
/**
|
|
61
|
+
* Sites that build a host out of a computed value.
|
|
62
|
+
*
|
|
63
|
+
* Building a host from configuration is exactly what R1 asks for, so these are
|
|
64
|
+
* not defects — but they are also the shape an endpoint default hides in, so
|
|
65
|
+
* each one is acknowledged here rather than exempted by a blanket rule. Matched
|
|
66
|
+
* on file AND exact URL fragment, never on file alone, and never on line number
|
|
67
|
+
* so that rebuilding a bundle does not churn the list. A new dynamic-host site
|
|
68
|
+
* fails until someone reads it and adds it.
|
|
69
|
+
*/
|
|
70
|
+
export declare const DYNAMIC_HOST_SITES: readonly {
|
|
71
|
+
file: string;
|
|
72
|
+
path: string;
|
|
73
|
+
expr: string;
|
|
74
|
+
reason: string;
|
|
75
|
+
}[];
|
|
76
|
+
/**
|
|
77
|
+
* Path component of a URL, used as the annotation key. Deliberately not the full
|
|
78
|
+
* URL: a dynamic-host URL renders as a bare scheme, and storing that literal
|
|
79
|
+
* would both read as noise and trip the repo's own insecure-HTTP scanner.
|
|
80
|
+
*/
|
|
81
|
+
export declare function urlPath(url: string): string;
|
|
82
|
+
/**
|
|
83
|
+
* Is this specific site annotated?
|
|
84
|
+
*
|
|
85
|
+
* Matched on file AND url path AND a substring of the host-producing EXPRESSION.
|
|
86
|
+
* The expression is what makes the annotation site-scoped: keying on
|
|
87
|
+
* (file, path) alone degenerated to keying on the file, because every
|
|
88
|
+
* computed host with no path renders to the same bare scheme — so one annotated
|
|
89
|
+
* site silently pre-approved every future one in the same file.
|
|
90
|
+
*/
|
|
91
|
+
export declare function isAnnotatedDynamicHost(file: string, url: string, expressionText: string): boolean;
|
|
92
|
+
/**
|
|
93
|
+
* The policy module must name the vendor domains it declares. Exclude only this
|
|
94
|
+
* file from the value-independent token check; URL-shaped checks still apply.
|
|
95
|
+
*/
|
|
96
|
+
export declare const VENDOR_DOMAIN_DECLARATION_FILE = "src/lib/vendor-host-policy.ts";
|